Skip to content

Commit 69a948d

Browse files
committed
Rename upsert_sql exclude -> insert_only
1 parent 36503ca commit 69a948d

2 files changed

Lines changed: 19 additions & 19 deletions

File tree

sql_athame/dataclasses.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -847,14 +847,14 @@ async def insert(
847847
def upsert_sql(
848848
cls,
849849
insert_sql: Fragment,
850-
exclude: FieldNamesSet = (),
850+
insert_only: FieldNamesSet = (),
851851
force_update: FieldNamesSet = (),
852852
) -> Fragment:
853853
"""Generate UPSERT (INSERT ... ON CONFLICT DO UPDATE) SQL.
854854
855855
Args:
856856
insert_sql: Base INSERT statement Fragment
857-
exclude: Field names to exclude from the UPDATE clause
857+
insert_only: Field names to exclude from the UPDATE clause
858858
force_update: Field names to force include in UPDATE clause, overriding insert_only settings
859859
860860
Returns:
@@ -869,22 +869,22 @@ def upsert_sql(
869869
Fields marked with ColumnInfo(insert_only=True) are automatically
870870
excluded from the UPDATE clause, unless overridden by force_update.
871871
"""
872-
# Combine exclude parameter with auto-detected insert_only fields, but remove force_update fields
872+
# Combine insert_only parameter with auto-detected insert_only fields, but remove force_update fields
873873
auto_insert_only = cls.insert_only_field_names() - set(force_update)
874-
manual_exclude = set(exclude) - set(
874+
manual_insert_only = set(insert_only) - set(
875875
force_update
876-
) # Remove force_update from manual excludes too
877-
all_exclude = manual_exclude | auto_insert_only
876+
) # Remove force_update from manual insert_only too
877+
all_insert_only = manual_insert_only | auto_insert_only
878878
cached = cls._cached(
879-
("upsert_sql", tuple(sorted(all_exclude))),
879+
("upsert_sql", tuple(sorted(all_insert_only))),
880880
lambda: sql(
881881
" ON CONFLICT ({pks}) DO UPDATE SET {assignments}",
882882
insert_sql=insert_sql,
883883
pks=sql.list(cls.primary_key_names_sql()),
884884
assignments=sql.list(
885885
sql("{field}=EXCLUDED.{field}", field=x)
886886
for x in cls.field_names_sql(
887-
exclude=(*cls.primary_key_names, *all_exclude)
887+
exclude=(*cls.primary_key_names, *all_insert_only)
888888
)
889889
),
890890
).flatten(),
@@ -928,7 +928,7 @@ async def upsert(
928928
"{} RETURNING xmax",
929929
self.upsert_sql(
930930
self.insert_sql(exclude=exclude),
931-
exclude=update_exclude,
931+
insert_only=update_exclude,
932932
force_update=force_update,
933933
),
934934
)
@@ -1173,7 +1173,7 @@ async def upsert_multiple_executemany(
11731173
args = [r.field_values() for r in rows]
11741174
query = cls.upsert_sql(
11751175
cls.insert_multiple_executemany_chunk_sql(1),
1176-
exclude=insert_only,
1176+
insert_only=insert_only,
11771177
force_update=force_update,
11781178
).query()[0]
11791179
if args:
@@ -1201,7 +1201,7 @@ async def upsert_multiple_unnest(
12011201
return await connection_or_pool.execute(
12021202
*cls.upsert_sql(
12031203
cls.insert_multiple_sql(rows),
1204-
exclude=insert_only,
1204+
insert_only=insert_only,
12051205
force_update=force_update,
12061206
)
12071207
)
@@ -1233,7 +1233,7 @@ async def upsert_multiple_array_safe(
12331233
last = await connection_or_pool.execute(
12341234
*cls.upsert_sql(
12351235
cls.insert_multiple_array_safe_sql(chunk),
1236-
exclude=insert_only,
1236+
insert_only=insert_only,
12371237
force_update=force_update,
12381238
)
12391239
)

tests/test_dataclasses.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ class Test(ModelBase, table_name="table", primary_key="id"):
177177
t = Test(1, 42, "str", "2023-01-01")
178178

179179
# Test with insert_only parameter - created_at should be excluded from UPDATE
180-
assert list(t.upsert_sql(t.insert_sql(), exclude={"created_at"})) == [
180+
assert list(t.upsert_sql(t.insert_sql(), insert_only={"created_at"})) == [
181181
'INSERT INTO "table" ("id", "foo", "bar", "created_at") VALUES ($1, $2, $3, $4) '
182182
'ON CONFLICT ("id") DO UPDATE SET "foo"=EXCLUDED."foo", "bar"=EXCLUDED."bar"',
183183
1,
@@ -187,7 +187,7 @@ class Test(ModelBase, table_name="table", primary_key="id"):
187187
]
188188

189189
# Test with both exclude and insert_only-style exclude
190-
assert list(t.upsert_sql(t.insert_sql(), exclude={"bar", "created_at"})) == [
190+
assert list(t.upsert_sql(t.insert_sql(), insert_only={"bar", "created_at"})) == [
191191
'INSERT INTO "table" ("id", "foo", "bar", "created_at") VALUES ($1, $2, $3, $4) '
192192
'ON CONFLICT ("id") DO UPDATE SET "foo"=EXCLUDED."foo"',
193193
1,
@@ -294,7 +294,7 @@ class Test(ModelBase, table_name="table", primary_key="id"):
294294
# We simulate what happens inside the upsert method
295295
all_insert_only = test_instance.insert_only_field_names()
296296
insert_sql = test_instance.insert_sql()
297-
upsert_sql = Test.upsert_sql(insert_sql, exclude=all_insert_only)
297+
upsert_sql = Test.upsert_sql(insert_sql, insert_only=all_insert_only)
298298

299299
upsert_query = upsert_sql.query()[0]
300300

@@ -325,7 +325,7 @@ class Test(ModelBase, table_name="table", primary_key="id"):
325325
manual_exclude = {"version"}
326326

327327
insert_sql = test_instance.insert_sql()
328-
upsert_sql = Test.upsert_sql(insert_sql, exclude=manual_exclude)
328+
upsert_sql = Test.upsert_sql(insert_sql, insert_only=manual_exclude)
329329
upsert_query = upsert_sql.query()[0]
330330

331331
# Both created_at (auto) and version (manual) should be excluded from UPDATE
@@ -387,7 +387,7 @@ class Test(ModelBase, table_name="table", primary_key="id"):
387387
assert '"created_at"=EXCLUDED."created_at"' not in upsert_query
388388

389389
# Test that manual exclude still works in combination
390-
upsert_sql_with_exclude = Test.upsert_sql(insert_sql, exclude={"updated_at"})
390+
upsert_sql_with_exclude = Test.upsert_sql(insert_sql, insert_only={"updated_at"})
391391
upsert_query_with_exclude = upsert_sql_with_exclude.query()[0]
392392

393393
# Now both created_at (auto) and updated_at (manual) should be excluded from UPDATE
@@ -425,7 +425,7 @@ class Test(ModelBase, table_name="table", primary_key="id"):
425425

426426
# Test force_update with manual insert_only
427427
manual_upsert = Test.upsert_sql(
428-
insert_sql, exclude={"updated_at"}, force_update={"created_at"}
428+
insert_sql, insert_only={"updated_at"}, force_update={"created_at"}
429429
)
430430
manual_query = manual_upsert.query()[0]
431431
assert '"name"=EXCLUDED."name"' in manual_query
@@ -434,7 +434,7 @@ class Test(ModelBase, table_name="table", primary_key="id"):
434434

435435
# Test partial force_update - only override specific fields
436436
partial_upsert = Test.upsert_sql(
437-
insert_sql, exclude={"name"}, force_update={"created_at"}
437+
insert_sql, insert_only={"name"}, force_update={"created_at"}
438438
)
439439
partial_query = partial_upsert.query()[0]
440440
assert '"name"=EXCLUDED."name"' not in partial_query # Excluded manually

0 commit comments

Comments
 (0)