@@ -65,3 +65,66 @@ def get_site_id(db):
6565
6666 db2_foo = db2 .execute ("SELECT * FROM foo" ).fetchall ()
6767 assert (db2_foo == db1_foo )
68+
69+
70+ def test_empty_update_doesnt_change_db_version ():
71+ def create_db ():
72+ db = connect (":memory:" )
73+ db .execute ("CREATE TABLE foo (id INTEGER PRIMARY KEY NOT NULL, a, b)" )
74+ db .execute ("SELECT crsql_as_crr('foo');" )
75+ db .commit ()
76+ return db
77+
78+ def get_site_id (db ):
79+ return db .execute ("SELECT crsql_site_id()" ).fetchone ()[0 ]
80+
81+ db1 = create_db ()
82+ db2 = create_db ()
83+
84+ db1_site_id = get_site_id (db1 )
85+ db2_site_id = get_site_id (db2 )
86+
87+ db1 .execute ("INSERT INTO foo (id, a, b) VALUES (1, 2, 3)" )
88+ db1 .commit ()
89+
90+ db1 .execute ("INSERT INTO foo (id, a, b) VALUES (2, 5, 6)" )
91+ db1 .commit ()
92+
93+ sync_left_to_right (db1 , db2 , 0 )
94+
95+ db1_changes = db1 .execute ("SELECT * FROM crsql_changes" ).fetchall ()
96+
97+ assert (db1_changes == [('foo' , b'\x01 \t \x01 ' , 'a' , 2 , 1 , 1 , db1_site_id , 1 , 0 ),
98+ ('foo' , b'\x01 \t \x01 ' , 'b' , 3 , 1 , 1 , db1_site_id , 1 , 1 ),
99+ ('foo' , b'\x01 \t \x02 ' , 'a' , 5 , 1 , 2 , db1_site_id , 1 , 0 ),
100+ ('foo' , b'\x01 \t \x02 ' , 'b' , 6 , 1 , 2 , db1_site_id , 1 , 1 )])
101+
102+ db2_changes = db2 .execute ("SELECT * FROM crsql_changes" ).fetchall ()
103+ assert (db2_changes == db1_changes )
104+
105+ db1_db_version = db1 .execute ("SELECT crsql_db_version()" ).fetchone ()[0 ]
106+ assert (db1_db_version == 2 )
107+
108+ # update row
109+ db1 .execute ("INSERT INTO foo (id, a, b) VALUES (2, 5, 6) ON CONFLICT (id) DO UPDATE SET a = 5, b = 6" )
110+ db1 .commit ()
111+
112+ # update row
113+ db1 .execute ("INSERT INTO foo (id, a, b) VALUES (1, 2, 3) ON CONFLICT (id) DO UPDATE SET a = 2, b = 3" )
114+ db1 .commit ()
115+
116+ db1_db_version = db1 .execute ("SELECT crsql_db_version()" ).fetchone ()[0 ]
117+ assert (db1_db_version == 2 )
118+
119+ db1_changes = db1 .execute ("SELECT * FROM crsql_changes" ).fetchall ()
120+ assert (db1_changes == [('foo' , b'\x01 \t \x01 ' , 'a' , 2 , 1 , 1 , db1_site_id , 1 , 0 ),
121+ ('foo' , b'\x01 \t \x01 ' , 'b' , 3 , 1 , 1 , db1_site_id , 1 , 1 ),
122+ ('foo' , b'\x01 \t \x02 ' , 'a' , 5 , 1 , 2 , db1_site_id , 1 , 0 ),
123+ ('foo' , b'\x01 \t \x02 ' , 'b' , 6 , 1 , 2 , db1_site_id , 1 , 1 )])
124+
125+ # do an actual update
126+ db1 .execute ("UPDATE foo SET a = 10 WHERE id = 1" )
127+ db1 .commit ()
128+
129+ db1_db_version = db1 .execute ("SELECT crsql_db_version()" ).fetchone ()[0 ]
130+ assert (db1_db_version == 3 )
0 commit comments