Skip to content

Commit 468a2a8

Browse files
committed
test: bulk_update_from_dicts method with merge_fields param
1 parent a823e52 commit 468a2a8

File tree

2 files changed

+30
-29
lines changed

2 files changed

+30
-29
lines changed

README.md

+10-10
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,9 @@ Generate sql and execute
119119
```python
120120
await AccountMgr.upsert_on_duplicate(
121121
[
122-
{'id': 7, 'gender': 1, 'name': '斉藤 修平', 'locale': 'ja_JP', 'extend': {}},
123-
{'id': 8, 'gender': 1, 'name': 'Ojas Salvi', 'locale': 'en_IN', 'extend': {}},
124-
{'id': 9, 'gender': 1, 'name': '羊淑兰', 'locale': 'zh_CN', 'extend': {}}
122+
{"id": 7, "gender": 1, "name": "斉藤 修平", "locale": "ja_JP", "extend": {}},
123+
{"id": 8, "gender": 1, "name": "Ojas Salvi", "locale": "en_IN", "extend": {}},
124+
{"id": 9, "gender": 1, "name": "羊淑兰", "locale": "zh_CN", "extend": {}}
125125
],
126126
insert_fields=["id", "gender", "name", "locale", "extend"],
127127
upsert_fields=["name", "locale"],
@@ -166,12 +166,12 @@ Generate sql and execute
166166
```python
167167
await AccountMgr.bulk_update_from_dicts(
168168
[
169-
{'id': 7, 'active': False, 'gender': GenderEnum.male},
170-
{'id': 15, 'active': True, 'gender': GenderEnum.unknown}
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}}
171171
],
172172
join_fields=["id"],
173173
update_fields=["active", "gender"],
174-
using_values=True,
174+
merge_fields=["extend"],
175175
)
176176
```
177177
Generate sql and execute
@@ -180,9 +180,9 @@ Generate sql and execute
180180
JOIN (
181181
SELECT * FROM (
182182
VALUES
183-
ROW(7, False, 1),
184-
ROW(15, True, 0)
185-
) AS fly_table (id, active, gender)
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)
186186
) tmp ON account.id=tmp.id
187-
SET account.active=tmp.active, account.gender=tmp.gender
187+
SET account.active=tmp.active, account.gender=tmp.gender, account.extend=JSON_MERGE_PATCH(COALESCE(account.extend, '{}'), tmp.extend)
188188
```

tests/test_sqlizer.py

+20-19
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,9 @@ def test_upsert_on_duplicate(self):
212212
old_sql = SQLizer.upsert_on_duplicate(
213213
self.table,
214214
[
215-
{'id': 7, 'gender': 1, 'name': '斉藤 修平', 'locale': 'ja_JP', 'extend': {}},
216-
{'id': 8, 'gender': 1, 'name': 'Ojas Salvi', 'locale': 'en_IN', 'extend': {}},
217-
{'id': 9, 'gender': 1, 'name': '羊淑兰', 'locale': 'zh_CN', 'extend': {}}
215+
{"id": 7, "gender": 1, "name": "斉藤 修平", "locale": "ja_JP", "extend": {}},
216+
{"id": 8, "gender": 1, "name": "Ojas Salvi", "locale": "en_IN", "extend": {}},
217+
{"id": 9, "gender": 1, "name": "羊淑兰", "locale": "zh_CN", "extend": {}}
218218
],
219219
insert_fields=["id", "gender", "name", "locale", "extend"],
220220
upsert_fields=["name", "locale"],
@@ -233,9 +233,9 @@ def test_upsert_on_duplicate(self):
233233
new_sql = SQLizer.upsert_on_duplicate(
234234
self.table,
235235
[
236-
{'id': 7, 'gender': 1, 'name': '斉藤 修平', 'locale': 'ja_JP', 'extend': {}},
237-
{'id': 8, 'gender': 1, 'name': 'Ojas Salvi', 'locale': 'en_IN', 'extend': {}},
238-
{'id': 9, 'gender': 1, 'name': '羊淑兰', 'locale': 'zh_CN', 'extend': {}}
236+
{"id": 7, "gender": 1, "name": "斉藤 修平", "locale": "ja_JP", "extend": {}},
237+
{"id": 8, "gender": 1, "name": "Ojas Salvi", "locale": "en_IN", "extend": {}},
238+
{"id": 9, "gender": 1, "name": "羊淑兰", "locale": "zh_CN", "extend": {}}
239239
],
240240
insert_fields=["id", "gender", "name", "locale", "extend"],
241241
upsert_fields=["name", "locale"],
@@ -254,9 +254,9 @@ def test_upsert_on_duplicate(self):
254254
only_insert_sql = SQLizer.upsert_on_duplicate(
255255
self.table,
256256
[
257-
{'id': 7, 'gender': 1, 'name': '斉藤 修平', 'locale': 'ja_JP', 'extend': {}},
258-
{'id': 8, 'gender': 1, 'name': 'Ojas Salvi', 'locale': 'en_IN', 'extend': {}},
259-
{'id': 9, 'gender': 1, 'name': '羊淑兰', 'locale': 'zh_CN', 'extend': {}}
257+
{"id": 7, "gender": 1, "name": "斉藤 修平", "locale": "ja_JP", "extend": {}},
258+
{"id": 8, "gender": 1, "name": "Ojas Salvi", "locale": "en_IN", "extend": {}},
259+
{"id": 9, "gender": 1, "name": "羊淑兰", "locale": "zh_CN", "extend": {}}
260260
],
261261
insert_fields=["id", "gender", "name", "locale", "extend"],
262262
)
@@ -328,8 +328,8 @@ def test_build_fly_table(self):
328328

329329
old_sql = SQLizer.build_fly_table(
330330
[
331-
{'id': 7, 'active': False, 'gender': GenderEnum.male},
332-
{'id': 15, 'active': True, 'gender': GenderEnum.unknown}
331+
{"id": 7, "active": False, "gender": GenderEnum.male},
332+
{"id": 15, "active": True, "gender": GenderEnum.unknown}
333333
],
334334
fields=["id", "active", "gender"],
335335
using_values=False,
@@ -343,8 +343,8 @@ def test_build_fly_table(self):
343343

344344
new_sql = SQLizer.build_fly_table(
345345
[
346-
{'id': 7, 'active': False, 'gender': GenderEnum.male},
347-
{'id': 15, 'active': True, 'gender': GenderEnum.unknown}
346+
{"id": 7, "active": False, "gender": GenderEnum.male},
347+
{"id": 15, "active": True, "gender": GenderEnum.unknown}
348348
],
349349
fields=["id", "active", "gender"],
350350
using_values=True,
@@ -368,22 +368,23 @@ def test_bulk_update_from_dicts(self):
368368
sql = SQLizer.bulk_update_from_dicts(
369369
self.table,
370370
[
371-
{'id': 7, 'active': False, 'gender': GenderEnum.male},
372-
{'id': 15, 'active': True, 'gender': GenderEnum.unknown}
371+
{"id": 7, "active": False, "gender": GenderEnum.male, "extend": {"test": 1, "debug": 0}},
372+
{"id": 15, "active": True, "gender": GenderEnum.unknown, "extend": {"test": 1, "debug": 0}}
373373
],
374374
join_fields=["id"],
375375
update_fields=["active", "gender"],
376+
merge_fields=["extend"],
376377
)
377378
assert sql == """
378379
UPDATE account
379380
JOIN (
380381
SELECT * FROM (
381382
VALUES
382-
ROW(7, False, 1),
383-
ROW(15, True, 0)
384-
) AS fly_table (id, active, gender)
383+
ROW(7, False, 1, '{"test": 1, "debug": 0}'),
384+
ROW(15, True, 0, '{"test": 1, "debug": 0}')
385+
) AS fly_table (id, active, gender, extend)
385386
) tmp ON account.id=tmp.id
386-
SET account.active=tmp.active, account.gender=tmp.gender
387+
SET account.active=tmp.active, account.gender=tmp.gender, account.extend=JSON_MERGE_PATCH(COALESCE(account.extend, '{}'), tmp.extend)
387388
"""
388389

389390
# def test_(self):

0 commit comments

Comments
 (0)