@@ -383,6 +383,7 @@ def make_dbs():
383383def test_merge_same_w_tie_breaker ():
384384 db1 = create_basic_db ()
385385 db2 = create_basic_db ()
386+ db3 = create_basic_db ()
386387
387388 db1 .execute ("INSERT INTO foo (a,b) VALUES (1,2);" )
388389 db1 .execute ("SELECT crsql_config_set('merge-equal-values', 1);" )
@@ -392,13 +393,47 @@ def test_merge_same_w_tie_breaker():
392393 db2 .execute ("SELECT crsql_config_set('merge-equal-values', 1);" )
393394 db2 .commit ()
394395
396+ db3 .execute ("INSERT INTO foo (a,b) VALUES (1,2);" )
397+ db3 .execute ("SELECT crsql_config_set('merge-equal-values', 1);" )
398+ db3 .commit ()
399+
395400 sync_left_to_right (db1 , db2 , 0 )
396- changes12 = db2 .execute ("SELECT \" table\" , pk, cid, val, col_version, site_id FROM crsql_changes" ).fetchall ()
401+ changes2 = db2 .execute ("SELECT \" table\" , pk, cid, val, col_version, site_id, db_version FROM crsql_changes" ).fetchall ()
397402
398403 sync_left_to_right (db2 , db1 , 0 )
399- changes21 = db1 .execute ("SELECT \" table\" , pk, cid, val, col_version, site_id FROM crsql_changes" ).fetchall ()
404+ changes1 = db1 .execute ("SELECT \" table\" , pk, cid, val, col_version, site_id, db_version FROM crsql_changes" ).fetchall ()
405+
406+ sync_left_to_right (db2 , db3 , 0 )
407+ changes3 = db3 .execute ("SELECT \" table\" , pk, cid, val, col_version, site_id, db_version FROM crsql_changes" ).fetchall ()
408+
409+ # check that everything by db_version is the same
410+ assert (changes2 [:- 6 ] == changes1 [:- 6 ] == changes3 [:- 6 ])
400411
401- assert (changes12 == changes21 )
412+ # Test that we're stable / do not loop when we tie break equal values
413+
414+ sync_left_to_right (db2 , db1 , 0 )
415+ changes1_2 = db1 .execute ("SELECT \" table\" , pk, cid, val, col_version, site_id, db_version FROM crsql_changes" ).fetchall ()
416+ sync_left_to_right (db3 , db2 , 0 )
417+ changes2_2 = db2 .execute ("SELECT \" table\" , pk, cid, val, col_version, site_id, db_version FROM crsql_changes" ).fetchall ()
418+ sync_left_to_right (db1 , db3 , 0 )
419+ changes3_2 = db3 .execute ("SELECT \" table\" , pk, cid, val, col_version, site_id, db_version FROM crsql_changes" ).fetchall ()
420+
421+ # everything should stay the same, including db_version
422+ assert (changes1 == changes1_2 )
423+ assert (changes2 == changes2_2 )
424+ assert (changes3 == changes3_2 )
425+
426+ sync_left_to_right (db3 , db1 , 0 )
427+ changes1_2 = db1 .execute ("SELECT \" table\" , pk, cid, val, col_version, site_id, db_version FROM crsql_changes" ).fetchall ()
428+ sync_left_to_right (db1 , db2 , 0 )
429+ changes2_2 = db2 .execute ("SELECT \" table\" , pk, cid, val, col_version, site_id, db_version FROM crsql_changes" ).fetchall ()
430+ sync_left_to_right (db2 , db3 , 0 )
431+ changes3_2 = db3 .execute ("SELECT \" table\" , pk, cid, val, col_version, site_id, db_version FROM crsql_changes" ).fetchall ()
432+
433+ # everything should stay the same, including db_version
434+ assert (changes1 == changes1_2 )
435+ assert (changes2 == changes2_2 )
436+ assert (changes3 == changes3_2 )
402437
403438
404439def test_merge_matching_clocks_lesser_value ():
0 commit comments