Projet

Général

Profil

0002-sql-create-trigger-on-wcs_meta-only-when-needed-6346.patch

Pierre Ducroquet, 20 mai 2022 11:34

Télécharger (2,66 ko)

Voir les différences:

Subject: [PATCH 2/2] sql: create trigger on wcs_meta only when needed (#63466)

 wcs/sql.py | 40 +++++++++++++++++++++++++++++++++-------
 1 file changed, 33 insertions(+), 7 deletions(-)
wcs/sql.py
1497 1497
                                    created_at timestamptz DEFAULT NOW(),
1498 1498
                                    updated_at timestamptz DEFAULT NOW())'''
1499 1499
        )
1500
        cur.execute(
1501
            '''
1502
CREATE OR REPLACE FUNCTION meta_table_dates_fn()
1503
RETURNS trigger
1504
LANGUAGE plpgsql
1505
AS $$
1506
BEGIN
1507
  NEW.updated_at = NOW();
1508
  RETURN NEW;
1509
END;
1510
$$;'''
1511
        )
1512
        cur.execute(
1513
            '''CREATE TRIGGER meta_table_dates_trg BEFORE UPDATE ON wcs_meta
1514
            FOR EACH ROW
1515
            WHEN (OLD.value IS DISTINCT FROM NEW.value)
1516
            EXECUTE PROCEDURE meta_table_dates_fn();'''
1517
        )
1500 1518
    else:
1501 1519
        cur.execute(
1502 1520
            '''SELECT column_name FROM information_schema.columns
......
1510 1528
        if 'updated_at' not in existing_fields:
1511 1529
            cur.execute('''ALTER TABLE wcs_meta ADD COLUMN updated_at timestamptz DEFAULT NOW()''')
1512 1530

  
1513
    cur.execute(
1514
        '''
1531
        cur.execute('''SELECT 1 FROM pg_proc WHERE proname = 'meta_table_dates_fn';''')
1532
        existing_function = {x[0] for x in cur.fetchall()}
1533
        if not 1 in existing_function:
1534
            cur.execute(
1535
                '''
1515 1536
CREATE OR REPLACE FUNCTION meta_table_dates_fn()
1516 1537
RETURNS trigger
1517 1538
LANGUAGE plpgsql
......
1521 1542
  RETURN NEW;
1522 1543
END;
1523 1544
$$;'''
1524
    )
1525
    cur.execute('DROP TRIGGER IF EXISTS meta_table_dates_trg ON wcs_meta;')
1526
    cur.execute(
1527
        '''CREATE TRIGGER meta_table_dates_trg BEFORE UPDATE ON wcs_meta
1545
            )
1546

  
1547
        cur.execute(
1548
            '''SELECT 1 FROM pg_trigger WHERE tgname = 'meta_table_dates_trg' AND tgrelid = 'wcs_meta'::regclass;'''
1549
        )
1550
        existing_trigger = {x[0] for x in cur.fetchall()}
1551
        if not 1 in existing_trigger:
1552
            cur.execute(
1553
                '''CREATE TRIGGER meta_table_dates_trg BEFORE UPDATE ON wcs_meta
1528 1554
            FOR EACH ROW
1529 1555
            WHEN (OLD.value IS DISTINCT FROM NEW.value)
1530 1556
            EXECUTE PROCEDURE meta_table_dates_fn();'''
1531
    )
1557
            )
1532 1558

  
1533 1559
    if not table_exists:
1534 1560
        if insert_current_sql_level:
1535
-