From c9f8c851e01a094f51f8d534895b8b4b6eb92e28 Mon Sep 17 00:00:00 2001 From: Matt <1009003+tantaman@users.noreply.github.com> Date: Wed, 28 Jun 2023 15:55:58 -0400 Subject: [PATCH] keep the default ordering if the user does not specify an ordering --- core/src/changes-vtab-read.test.c | 10 +++++----- core/src/changes-vtab.c | 4 ++++ core/src/rows-impacted.test.c | 2 ++ py/correctness/test.sh | 2 +- py/correctness/tests/test_sync_prop.py | 4 ++-- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/core/src/changes-vtab-read.test.c b/core/src/changes-vtab-read.test.c index 81104ccbd..348417fda 100644 --- a/core/src/changes-vtab-read.test.c +++ b/core/src/changes-vtab-read.test.c @@ -61,7 +61,6 @@ static void testChangesUnionQuery() { assert(rc == SQLITE_OK); char *query = crsql_changesUnionQuery(tblInfos, 2, ""); - printf("Query: X%sX", query); assert( strcmp( query, @@ -76,10 +75,12 @@ static void testChangesUnionQuery() { "__crsql_col_version as col_vrsn, __crsql_db_version as " "db_vrsn, __crsql_site_id as site_id, _rowid_, " "__crsql_seq as seq FROM " - "\"bar__crsql_clock\") ORDER BY db_vrsn, seq ASC") == 0); + "\"bar__crsql_clock\") ") == 0); sqlite3_free(query); - query = crsql_changesUnionQuery(tblInfos, 2, "site_id IS ? AND db_vrsn > ?"); + query = crsql_changesUnionQuery(tblInfos, 2, + "WHERE site_id IS ? AND db_vrsn > ?"); + printf("Query: X%sX", query); assert( strcmp( query, @@ -94,8 +95,7 @@ static void testChangesUnionQuery() { "__crsql_col_version as col_vrsn, __crsql_db_version as " "db_vrsn, __crsql_site_id as site_id, _rowid_, " "__crsql_seq as seq FROM " - "\"bar__crsql_clock\") WHERE site_id IS ? AND db_vrsn > ? ORDER " - "BY db_vrsn, seq ASC") == 0); + "\"bar__crsql_clock\") WHERE site_id IS ? AND db_vrsn > ?") == 0); sqlite3_free(query); printf("\t\e[0;32mSuccess\e[0m\n"); diff --git a/core/src/changes-vtab.c b/core/src/changes-vtab.c index 8614042cb..b09073416 100644 --- a/core/src/changes-vtab.c +++ b/core/src/changes-vtab.c @@ -539,6 +539,10 @@ static int changesBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo) { int desc = 0; if (pIdxInfo->nOrderBy > 0) { sqlite3_str_appendall(pStr, " ORDER BY "); + } else { + // The user didn't provide an ordering? Tack on a default one that will + // retrieve changes in-order + sqlite3_str_appendall(pStr, " ORDER BY db_vrsn, seq ASC"); } firstConstraint = 1; for (int i = 0; i < pIdxInfo->nOrderBy; i++) { diff --git a/core/src/rows-impacted.test.c b/core/src/rows-impacted.test.c index e054eb206..670047cad 100644 --- a/core/src/rows-impacted.test.c +++ b/core/src/rows-impacted.test.c @@ -356,6 +356,8 @@ void rowsImpactedTestSuite() { testManyTxns(); testUpdateThatDoesNotChangeAnything(); testDeleteThatDoesNotChangeAnything(); + testCreateThatDoesNotChangeAnything(); testValueWin(); testClockWin(); + testDelete(); } \ No newline at end of file diff --git a/py/correctness/test.sh b/py/correctness/test.sh index cea81e9f5..5fff9ad3f 100755 --- a/py/correctness/test.sh +++ b/py/correctness/test.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash source env/bin/activate -python -m pytest tests -s -k test_crsql_changes_filters +python -m pytest tests -s # -k test_sync_prop.py diff --git a/py/correctness/tests/test_sync_prop.py b/py/correctness/tests/test_sync_prop.py index b9c492a49..c2757f567 100644 --- a/py/correctness/tests/test_sync_prop.py +++ b/py/correctness/tests/test_sync_prop.py @@ -214,10 +214,10 @@ def sync_from_random_peers(num_peers_to_sync, db, dbs, since_is_rowid): def sync_left_to_right(l, r, since, since_is_rowid): if since_is_rowid: changes = l.execute( - "SELECT *, rowid FROM crsql_changes WHERE rowid > ?", (since,)) + "SELECT *, rowid FROM crsql_changes WHERE rowid > ? ORDER BY db_version, seq ASC", (since,)) else: changes = l.execute( - "SELECT * FROM crsql_changes WHERE db_version > ?", (since,)) + "SELECT * FROM crsql_changes WHERE db_version > ? ORDER BY db_version, seq ASC", (since,)) ret = 0 for change in changes: