Auto-update: Tue Aug 6 22:52:40 PDT 2024
This commit is contained in:
parent
a40411ed81
commit
8c06f521af
1 changed files with 8 additions and 5 deletions
|
@ -852,19 +852,22 @@ class APIConfig(BaseModel):
|
||||||
# Get table columns
|
# Get table columns
|
||||||
columns = await self.get_table_columns(conn, table_name)
|
columns = await self.get_table_columns(conn, table_name)
|
||||||
|
|
||||||
|
# Remove 'id', 'version', and 'server_id' from the columns list
|
||||||
|
insert_cols = [col for col in columns if col not in ['id', 'version', 'server_id']]
|
||||||
|
|
||||||
# Prepare the INSERT ... ON CONFLICT ... query
|
# Prepare the INSERT ... ON CONFLICT ... query
|
||||||
placeholders = [f'${i+1}' for i in range(len(args))]
|
placeholders = [f'${i+1}' for i in range(len(args))]
|
||||||
insert_cols = ', '.join(columns[1:]) # Exclude 'id' column
|
insert_cols_str = ', '.join(insert_cols)
|
||||||
insert_vals = ', '.join(placeholders)
|
insert_vals = ', '.join(placeholders[:len(insert_cols)])
|
||||||
update_cols = ', '.join([f"{col} = EXCLUDED.{col}" for col in columns[1:] if col not in ['id', 'version', 'server_id']])
|
update_cols = ', '.join([f"{col} = EXCLUDED.{col}" for col in insert_cols])
|
||||||
|
|
||||||
query = f"""
|
query = f"""
|
||||||
WITH new_version AS (
|
WITH new_version AS (
|
||||||
SELECT COALESCE(MAX(version), 0) + 1 as next_version
|
SELECT COALESCE(MAX(version), 0) + 1 as next_version
|
||||||
FROM {table_name}
|
FROM {table_name}
|
||||||
WHERE id = (SELECT id FROM {table_name} WHERE {columns[1]} = $1 FOR UPDATE)
|
WHERE id = (SELECT id FROM {table_name} WHERE {insert_cols[0]} = $1 FOR UPDATE)
|
||||||
)
|
)
|
||||||
INSERT INTO {table_name} ({insert_cols}, version, server_id)
|
INSERT INTO {table_name} ({insert_cols_str}, version, server_id)
|
||||||
VALUES ({insert_vals}, (SELECT next_version FROM new_version), ${len(args)+1})
|
VALUES ({insert_vals}, (SELECT next_version FROM new_version), ${len(args)+1})
|
||||||
ON CONFLICT (id) DO UPDATE SET
|
ON CONFLICT (id) DO UPDATE SET
|
||||||
{update_cols},
|
{update_cols},
|
||||||
|
|
Loading…
Reference in a new issue