cr-sqlite icon indicating copy to clipboard operation
cr-sqlite copied to clipboard

Duplicate `seq` for the same `db_version`

Open jeromegn opened this issue 9 months ago • 1 comments

There's at least one scenario where duplicate seq values may exist for the same db_version.

Reproduction:

sqlite> create table foo (a INTEGER PRIMARY KEY NOT NULL, b INT);
sqlite> select crsql_as_crr('foo');
sqlite> .mode column
sqlite> insert into foo values (1, 1);
sqlite> insert into foo values (2, 2);
sqlite> insert into foo values (3, 3);
sqlite> select crsql_db_version();
crsql_db_version()
------------------
3
sqlite> begin;
sqlite> insert into crsql_changes values ("foo", X'010904', "b", 4, 1, 1, X'9B1D5BD20C7A47C28FC482B33DCFC412', 1, 0);
sqlite> insert into crsql_changes values ("foo", X'010905', "b", 5, 1, 2, X'9B1D5BD20C7A47C28FC482B33DCFC412', 1, 0);
sqlite> select crsql_next_db_version();
crsql_next_db_version()
-----------------------
4
sqlite> commit;
sqlite> select "table", hex(pk), cid, val, col_version, db_version, hex(coalesce(site_id, crsql_site_id())), cl, seq from crsql_changes;
table  hex(pk)  cid  val  col_version  db_version  hex(coalesce(site_id, crsql_site_id()))  cl  seq
-----  -------  ---  ---  -----------  ----------  ---------------------------------------  --  ---
foo    010901   b    1    1            1           1864106555524AA0B5FA926536A7C047         1   0
foo    010902   b    2    1            2           1864106555524AA0B5FA926536A7C047         1   0
foo    010903   b    3    1            3           1864106555524AA0B5FA926536A7C047         1   0
foo    010904   b    4    1            4           9B1D5BD20C7A47C28FC482B33DCFC412         1   0
foo    010905   b    5    1            4           9B1D5BD20C7A47C28FC482B33DCFC412         1   0

jeromegn avatar Oct 05 '23 12:10 jeromegn