Skip to content

Commit b274011

Browse files
committed
fix: multiple join in SQLizer.bulk_update_from_dicts
1 parent 75508c4 commit b274011

File tree

5 files changed

+17
-17
lines changed

5 files changed

+17
-17
lines changed

README.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,10 @@ Generate sql and execute
166166
```python
167167
await AccountMgr.bulk_update_from_dicts(
168168
[
169-
{"id": 7, "active": False, "gender": GenderEnum.male, "extend": {"test": 1, "debug": 0}},
170-
{"id": 15, "active": True, "gender": GenderEnum.unknown, "extend": {"test": 1, "debug": 0}}
169+
{"id": 7, "active": False, "deleted": False, "gender": GenderEnum.male, "extend": {"test": 1, "debug": 0}},
170+
{"id": 15, "active": True, "deleted": False, "gender": GenderEnum.unknown, "extend": {"test": 1, "debug": 0}}
171171
],
172-
join_fields=["id"],
172+
join_fields=["id", "deleted"],
173173
update_fields=["active", "gender"],
174174
merge_fields=["extend"],
175175
)
@@ -180,9 +180,9 @@ Generate sql and execute
180180
JOIN (
181181
SELECT * FROM (
182182
VALUES
183-
ROW(7, False, 1, '{"test": 1, "debug": 0}'),
184-
ROW(15, True, 0, '{"test": 1, "debug": 0}')
185-
) AS fly_table (id, active, gender, extend)
186-
) tmp ON `account`.id=tmp.id
183+
ROW(7, False, False, 1, '{"test": 1, "debug": 0}'),
184+
ROW(15, False, True, 0, '{"test": 1, "debug": 0}')
185+
) AS fly_table (id, deleted, active, gender, extend)
186+
) tmp ON `account`.id=tmp.id AND `account`.deleted=tmp.deleted
187187
SET `account`.active=tmp.active, `account`.gender=tmp.gender, `account`.extend=JSON_MERGE_PATCH(COALESCE(`account`.extend, '{}'), tmp.extend)
188188
```

fastapi_esql/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
wrap_backticks,
2424
)
2525

26-
__version__ = "0.0.12"
26+
__version__ = "0.0.13"
2727

2828
__all__ = [
2929
"QsParsingError",

fastapi_esql/utils/sqlizer.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ def bulk_update_from_dicts(
336336
sql = f"""
337337
UPDATE {wrap_backticks(table)}
338338
JOIN ({SQLizer.build_fly_table(dicts, join_fields + update_fields + merge_fields, using_values, log_sql=False)}
339-
) tmp ON {", ".join(joins)}
339+
) tmp ON {" AND ".join(joins)}
340340
SET {", ".join(updates)}
341341
"""
342342
logger.debug(sql)

pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "fastapi-efficient-sql"
3-
version = "0.0.12"
3+
version = "0.0.13"
44
description = "Generate bulk DML SQL and execute them based on Tortoise ORM and mysql8.0+, and integrated with FastAPI."
55
authors = ["BryanLee <[email protected]>"]
66
keywords = ["sql", "fastapi", "tortoise-orm", "mysql8", "bulk-operation"]

tests/test_sqlizer.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -369,10 +369,10 @@ def test_bulk_update_from_dicts(self):
369369
sql = SQLizer.bulk_update_from_dicts(
370370
self.table,
371371
[
372-
{"id": 7, "active": False, "gender": GenderEnum.male, "extend": {"test": 1, "debug": 0}},
373-
{"id": 15, "active": True, "gender": GenderEnum.unknown, "extend": {"test": 1, "debug": 0}}
372+
{"id": 7, "active": False, "deleted": False, "gender": GenderEnum.male, "extend": {"test": 1, "debug": 0}},
373+
{"id": 15, "active": True, "deleted": False, "gender": GenderEnum.unknown, "extend": {"test": 1, "debug": 0}}
374374
],
375-
join_fields=["id"],
375+
join_fields=["id", "deleted"],
376376
update_fields=["active", "gender"],
377377
merge_fields=["extend"],
378378
)
@@ -381,10 +381,10 @@ def test_bulk_update_from_dicts(self):
381381
JOIN (
382382
SELECT * FROM (
383383
VALUES
384-
ROW(7, False, 1, '{"test": 1, "debug": 0}'),
385-
ROW(15, True, 0, '{"test": 1, "debug": 0}')
386-
) AS fly_table (id, active, gender, extend)
387-
) tmp ON `account`.id=tmp.id
384+
ROW(7, False, False, 1, '{"test": 1, "debug": 0}'),
385+
ROW(15, False, True, 0, '{"test": 1, "debug": 0}')
386+
) AS fly_table (id, deleted, active, gender, extend)
387+
) tmp ON `account`.id=tmp.id AND `account`.deleted=tmp.deleted
388388
SET `account`.active=tmp.active, `account`.gender=tmp.gender, `account`.extend=JSON_MERGE_PATCH(COALESCE(`account`.extend, '{}'), tmp.extend)
389389
"""
390390

0 commit comments

Comments
 (0)