@@ -212,61 +212,62 @@ def test_upsert_on_duplicate(self):
212
212
old_sql = SQLizer .upsert_on_duplicate (
213
213
self .table ,
214
214
[
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" : 10 , "gender" : 2 , "name" : "佐々木 美加子 " , "locale" : "ja_JP" , "extend" : {"rdm" : 6 }},
216
+ {"id" : 11 , "gender" : 0 , "name" : "Seher Bumb " , "locale" : "en_IN" , "extend" : {"rdm" : 4 }},
217
+ {"id" : 12 , "gender" : 0 , "name" : "谢冬梅 " , "locale" : "zh_CN" , "extend" : {"rdm" : 6 }},
218
218
],
219
219
insert_fields = ["id" , "gender" , "name" , "locale" , "extend" ],
220
- upsert_fields = ["name" , "locale" ],
220
+ upsert_fields = ["gender" , "name" ],
221
+ merge_fields = ["extend" ],
221
222
using_values = True ,
222
223
)
223
224
assert old_sql == """
224
225
INSERT INTO account
225
226
(id, gender, name, locale, extend)
226
227
VALUES
227
- (7, 1 , '斉藤 修平 ', 'ja_JP', '{}'),
228
- (8, 1 , 'Ojas Salvi ', 'en_IN', '{}'),
229
- (9, 1 , '羊淑兰 ', 'zh_CN', '{}')
230
- ON DUPLICATE KEY UPDATE name=VALUES(name), locale= VALUES(locale )
228
+ (10, 2 , '佐々木 美加子 ', 'ja_JP', '{"rdm": 6 }'),
229
+ (11, 0 , 'Seher Bumb ', 'en_IN', '{"rdm": 4 }'),
230
+ (12, 0 , '谢冬梅 ', 'zh_CN', '{"rdm": 6 }')
231
+ ON DUPLICATE KEY UPDATE gender=VALUES(gender), name=VALUES(name), extend=JSON_MERGE_PATCH(COALESCE(account.extend, '{}'), VALUES(extend) )
231
232
"""
232
233
233
234
new_sql = SQLizer .upsert_on_duplicate (
234
235
self .table ,
235
236
[
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" : {}}
237
+ {"id" : 10 , "gender" : 1 , "name" : "田中 知実 " , "locale" : "ja_JP" , "extend" : {"rdm" : 1 }},
238
+ {"id" : 11 , "gender" : 2 , "name" : "Tara Chadha " , "locale" : "en_IN" , "extend" : {"rdm" : 10 }},
239
+ {"id" : 12 , "gender" : 2 , "name" : "吴磊 " , "locale" : "zh_CN" , "extend" : {"rdm" : 9 }},
239
240
],
240
241
insert_fields = ["id" , "gender" , "name" , "locale" , "extend" ],
241
- upsert_fields = ["name " , "locale " ],
242
- using_values = False ,
242
+ upsert_fields = ["gender " , "name " ],
243
+ merge_fields = [ "extend" ] ,
243
244
)
244
245
assert new_sql == """
245
246
INSERT INTO account
246
247
(id, gender, name, locale, extend)
247
248
VALUES
248
- (7 , 1, '斉藤 修平 ', 'ja_JP', '{}'),
249
- (8, 1 , 'Ojas Salvi ', 'en_IN', '{}'),
250
- (9, 1 , '羊淑兰 ', 'zh_CN', '{}')
251
- AS `new_account` ON DUPLICATE KEY UPDATE name=`new_account`.name, locale= `new_account`.locale
249
+ (10 , 1, '田中 知実 ', 'ja_JP', '{"rdm": 1 }'),
250
+ (11, 2 , 'Tara Chadha ', 'en_IN', '{"rdm": 10 }'),
251
+ (12, 2 , '吴磊 ', 'zh_CN', '{"rdm": 9 }')
252
+ AS `new_account` ON DUPLICATE KEY UPDATE gender=`new_account`.gender, name=`new_account`.name, extend=JSON_MERGE_PATCH(COALESCE(account.extend, '{}'), `new_account`.extend)
252
253
"""
253
254
254
255
only_insert_sql = SQLizer .upsert_on_duplicate (
255
256
self .table ,
256
257
[
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" : {}}
258
+ {"id" : 10 , "gender" : 2 , "name" : "池田 幹 " , "locale" : "ja_JP" , "extend" : {"rdm" : 9 }},
259
+ {"id" : 11 , "gender" : 0 , "name" : "Sana Mani " , "locale" : "en_IN" , "extend" : {"rdm" : 0 }},
260
+ {"id" : 12 , "gender" : 0 , "name" : "刘柳 " , "locale" : "zh_CN" , "extend" : {"rdm" : 9 }},
260
261
],
261
262
insert_fields = ["id" , "gender" , "name" , "locale" , "extend" ],
262
263
)
263
264
assert only_insert_sql == """
264
265
INSERT INTO account
265
266
(id, gender, name, locale, extend)
266
267
VALUES
267
- (7, 1 , '斉藤 修平 ', 'ja_JP', '{}'),
268
- (8, 1 , 'Ojas Salvi ', 'en_IN', '{}'),
269
- (9, 1 , '羊淑兰 ', 'zh_CN', '{}')
268
+ (10, 2 , '池田 幹 ', 'ja_JP', '{"rdm": 9 }'),
269
+ (11, 0 , 'Sana Mani ', 'en_IN', '{"rdm": 0 }'),
270
+ (12, 0 , '刘柳 ', 'zh_CN', '{"rdm": 9 }')
270
271
"""
271
272
272
273
def test_insert_into_select (self ):
0 commit comments