@@ -212,61 +212,62 @@ 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" : 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 }},
218218 ],
219219 insert_fields = ["id" , "gender" , "name" , "locale" , "extend" ],
220- upsert_fields = ["name" , "locale" ],
220+ upsert_fields = ["gender" , "name" ],
221+ merge_fields = ["extend" ],
221222 using_values = True ,
222223 )
223224 assert old_sql == """
224225 INSERT INTO account
225226 (id, gender, name, locale, extend)
226227 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) )
231232"""
232233
233234 new_sql = SQLizer .upsert_on_duplicate (
234235 self .table ,
235236 [
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 }},
239240 ],
240241 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" ] ,
243244 )
244245 assert new_sql == """
245246 INSERT INTO account
246247 (id, gender, name, locale, extend)
247248 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)
252253"""
253254
254255 only_insert_sql = SQLizer .upsert_on_duplicate (
255256 self .table ,
256257 [
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 }},
260261 ],
261262 insert_fields = ["id" , "gender" , "name" , "locale" , "extend" ],
262263 )
263264 assert only_insert_sql == """
264265 INSERT INTO account
265266 (id, gender, name, locale, extend)
266267 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 }')
270271"""
271272
272273 def test_insert_into_select (self ):
0 commit comments