Projet

Général

Profil

0001-sql-use-insert-on-conflict-to-store-transient-data-6.patch

Pierre Ducroquet, 04 juillet 2022 10:55

Télécharger (1,37 ko)

Voir les différences:

Subject: [PATCH] sql: use insert on conflict to store transient data (#66816)

 wcs/sql.py | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)
wcs/sql.py
3362 3362

  
3363 3363
        conn, cur = get_connection_and_cursor()
3364 3364
        column_names = sql_dict.keys()
3365
        sql_statement = '''UPDATE %s SET %s WHERE id = %%(id)s RETURNING id''' % (
3365
        sql_statement = '''INSERT INTO %s (%s) VALUES (%s)
3366
            ON CONFLICT(id) DO UPDATE SET %s''' % (
3366 3367
            self._table_name,
3368
            ', '.join(column_names),
3369
            ', '.join(['%%(%s)s' % x for x in column_names]),
3367 3370
            ', '.join(['%s = %%(%s)s' % (x, x) for x in column_names]),
3368 3371
        )
3369 3372
        cur.execute(sql_statement, sql_dict)
3370
        if cur.fetchone() is None:
3371
            sql_statement = '''INSERT INTO %s (%s) VALUES (%s)''' % (
3372
                self._table_name,
3373
                ', '.join(column_names),
3374
                ', '.join(['%%(%s)s' % x for x in column_names]),
3375
            )
3376
            cur.execute(sql_statement, sql_dict)
3377 3373

  
3378 3374
        conn.commit()
3379 3375
        cur.close()
3380
-