@@ -155,32 +155,40 @@ def test_delete():
155155 close (db )
156156
157157
158+ # returns two dbs. The lower site id being the first one returned.
159+ def create_and_swap ():
160+ db1 = connect (":memory:" )
161+ db2 = connect (":memory:" )
162+ if get_site_id (db1 ) > get_site_id (db2 ):
163+ temp = db1
164+ db1 = db2
165+ db2 = temp
166+
167+ return (db1 , db2 )
168+
158169# TODO: create db _then swap_ then create rows then check original invariants
159170# Col? not exists case so entry created and default filled in
171+
172+
160173def test_merging_on_defaults ():
161- def create_db1 ():
162- db1 = connect (":memory:" )
174+ def setup_db1_schema (db1 ):
163175 db1 .execute ("CREATE TABLE foo (a PRIMARY KEY NOT NULL, b DEFAULT 0);" )
164176 db1 .execute ("INSERT INTO foo (a) VALUES (1);" )
165177 db1 .execute ("SELECT crsql_as_crr('foo');" )
166178 db1 .commit ()
167179 return db1
168180
169- def create_db2 ():
170- db2 = connect (":memory:" )
181+ def setup_db2_schema (db2 ):
171182 db2 .execute ("CREATE TABLE foo (a PRIMARY KEY NOT NULL, b DEFAULT 0);" )
172183 db2 .execute ("INSERT INTO foo VALUES (1, 2);" )
173184 db2 .execute ("SELECT crsql_as_crr('foo');" )
174185 db2 .commit ()
175186 return db2
176187
177188 # test merging from thing with records (db2) to thing without records for default cols (db1)
178- db1 = create_db1 ()
179- db2 = create_db2 ()
180- if get_site_id (db1 ) > get_site_id (db2 ):
181- temp = db1
182- db1 = db2
183- db2 = temp
189+ (db1 , db2 ) = create_and_swap ()
190+ setup_db1_schema (db1 )
191+ setup_db2_schema (db2 )
184192
185193 sync_left_to_right (db2 , db1 , 0 )
186194 # db1 has changes from db2
@@ -193,12 +201,9 @@ def create_db2():
193201 close (db1 )
194202 close (db2 )
195203
196- db1 = create_db1 ()
197- db2 = create_db2 ()
198- if get_site_id (db1 ) > get_site_id (db2 ):
199- temp = db1
200- db1 = db2
201- db2 = temp
204+ (db1 , db2 ) = create_and_swap ()
205+ setup_db1_schema (db1 )
206+ setup_db2_schema (db2 )
202207
203208 sync_left_to_right (db1 , db2 , 0 )
204209
@@ -225,13 +230,12 @@ def create_db2():
225230# this value will be less than the default
226231def test_merging_larger_backfilled_default ():
227232 def create_dbs ():
228- db1 = connect ( ":memory:" )
233+ ( db2 , db1 ) = create_and_swap ( )
229234 db1 .execute ("CREATE TABLE foo (a PRIMARY KEY NOT NULL, b DEFAULT 4);" )
230235 db1 .execute ("INSERT INTO foo (a) VALUES (1);" )
231236 db1 .execute ("SELECT crsql_as_crr('foo');" )
232237 db1 .commit ()
233238
234- db2 = connect (":memory:" )
235239 db2 .execute ("CREATE TABLE foo (a PRIMARY KEY NOT NULL, b DEFAULT 4);" )
236240 db2 .execute ("SELECT crsql_as_crr('foo');" )
237241 db2 .commit ()
@@ -294,8 +298,7 @@ def test_db_version_moves_as_expected_post_alter():
294298# DB2 has a row with all columns having clock records since value was set explicityl
295299# The default value with no records should always be overridden in all cases
296300def test_merging_on_defaults2 ():
297- def create_db1 ():
298- db1 = connect (":memory:" )
301+ def setup_db1_schema (db1 ):
299302 db1 .execute ("CREATE TABLE foo (a PRIMARY KEY NOT NULL, b DEFAULT 4);" )
300303 db1 .execute ("SELECT crsql_as_crr('foo');" )
301304 db1 .commit ()
@@ -311,8 +314,7 @@ def create_db1():
311314 db1 .commit ()
312315 return db1
313316
314- def create_db2 ():
315- db2 = connect (":memory:" )
317+ def setup_db2_schema (db2 ):
316318 db2 .execute ("CREATE TABLE foo (a PRIMARY KEY NOT NULL, b DEFAULT 4);" )
317319 db2 .execute ("SELECT crsql_as_crr('foo');" )
318320 db2 .commit ()
@@ -326,43 +328,77 @@ def create_db2():
326328 db2 .commit ()
327329 return db2
328330
329- # test merging from thing with records ( db2) to thing without records for default cols (db1 )
330- db1 = create_db1 ( )
331- db2 = create_db2 ( )
331+ ( db1 , db2 ) = create_and_swap ( )
332+ setup_db1_schema ( db1 )
333+ setup_db2_schema ( db2 )
332334
333335 sync_left_to_right (db2 , db1 , 0 )
334336
335337 changes = db1 .execute ("SELECT * FROM crsql_changes" ).fetchall ()
336338 site_id1 = get_site_id (db1 )
337339 site_id2 = get_site_id (db2 )
338- assert (changes == [('foo' , b'\x01 \t \x01 ' , 'b' , 4 , 1 , 1 , site_id1 , 1 , 0 ),
339- ('foo' , b'\x01 \t \x01 ' , 'c' , 3 , 1 , 2 , site_id2 , 1 , 1 )])
340+
341+ assert (changes == [('foo' ,
342+ b'\x01 \t \x01 ' ,
343+ 'b' ,
344+ 2 ,
345+ 1 ,
346+ 2 ,
347+ site_id2 ,
348+ 1 ,
349+ 0 ),
350+ ('foo' ,
351+ b'\x01 \t \x01 ' ,
352+ 'c' ,
353+ 3 ,
354+ 1 ,
355+ 2 ,
356+ site_id2 ,
357+ 1 ,
358+ 1 )])
340359
341360 close (db1 )
342361 close (db2 )
343362
344- db1 = create_db1 ()
345- db2 = create_db2 ()
363+ (db1 , db2 ) = create_and_swap ()
364+ setup_db1_schema (db1 )
365+ setup_db2_schema (db2 )
346366 site_id1 = get_site_id (db1 )
347367 site_id2 = get_site_id (db2 )
348368
349369 sync_left_to_right (db1 , db2 , 0 )
350370
351371 changes = db2 .execute ("SELECT * FROM crsql_changes" ).fetchall ()
352- assert (changes == [ # db2 c 3 wins given columns with no value after an alter
353- # do no merging
354- ('foo' , b'\x01 \t \x01 ' , 'c' , 3 , 1 , 1 , site_id2 , 1 , 1 ),
355- # Move db version since b lost on db2.
356- # b had the value 2 on db2.
357- ('foo' , b'\x01 \t \x01 ' , 'b' , 4 , 1 , 2 , site_id1 , 1 , 0 )])
372+ assert (changes == [('foo' ,
373+ b'\x01 \t \x01 ' ,
374+ 'b' ,
375+ 2 ,
376+ 1 ,
377+ 1 ,
378+ site_id2 ,
379+ 1 ,
380+ 0 ),
381+ ('foo' ,
382+ b'\x01 \t \x01 ' ,
383+ 'c' ,
384+ 3 ,
385+ 1 ,
386+ 1 ,
387+ site_id2 ,
388+ 1 ,
389+ 1 )])
358390
359391
360392def create_basic_db ():
361393 db = connect (":memory:" )
394+ setup_basic_db (db )
395+ return db
396+
397+
398+ def setup_basic_db (db ):
362399 db .execute ("CREATE TABLE foo (a PRIMARY KEY NOT NULL, b);" )
363400 db .execute ("SELECT crsql_as_crr('foo');" )
364401 db .commit ()
365- return db
366402
367403
368404def test_merge_same ():
@@ -392,10 +428,11 @@ def make_dbs():
392428 assert (changes == [('foo' , b'\x01 \t \x01 ' , 'b' , 2 , 1 , 1 , site_id , 1 , 0 )])
393429
394430
395- def test_merge_matching_clocks_lesser_value ():
431+ def test_merge_matching_clocks_lesser_siteid ():
396432 def make_dbs ():
397- db1 = create_basic_db ()
398- db2 = create_basic_db ()
433+ (db1 , db2 ) = create_and_swap ()
434+ setup_basic_db (db1 )
435+ setup_basic_db (db2 )
399436
400437 db1 .execute ("INSERT INTO foo (a,b) VALUES (1,1);" )
401438 db1 .commit ()
0 commit comments