You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
sql=cloudsync_memory_mprintf("SELECT cloudsync_insert('%q', %s) FROM (SELECT %s FROM \"%w\" EXCEPT SELECT %s FROM \"%w_cloudsync\");", table_name, pkvalues_identifiers, pkvalues_identifiers, table_name, pkdecodeval, table_name);
1721
1723
intrc=sqlite3_exec(db, sql, NULL, NULL, NULL);
1722
1724
cloudsync_memory_free(sql);
1723
1725
if (rc!=SQLITE_OK) goto finalize;
1724
-
1726
+
1725
1727
// fill missing colums
1726
1728
// for each non-pk column:
1727
1729
1728
-
sql=cloudsync_memory_mprintf("SELECT cloudsync_pk_encode(%s) FROM \"%w\" LEFT JOIN \"%w_cloudsync\" ON %s AND \"%w_cloudsync\".col_name = ? WHERE \"%w_cloudsync\".db_version IS NULL", pkvalues_identifiers, table_name, table_name, pkonclauseval, table_name, table_name);
1729
-
rc=sqlite3_prepare(db, sql, -1, &vm, NULL);
1730
+
// VERSION 2 (October 15, 2025)
1731
+
// previous query WAS
1732
+
// sql = cloudsync_memory_mprintf("SELECT cloudsync_pk_encode(%s) FROM \"%w\" LEFT JOIN \"%w_cloudsync\" ON %s AND \"%w_cloudsync\".col_name = ? WHERE \"%w_cloudsync\".db_version IS NULL", pkvalues_identifiers, table_name, table_name, pkonclauseval, table_name, table_name);
1733
+
// but it takes hours with large tables (100,000 rows, 25 columns, of which 18 was primary keys)
1734
+
//
1735
+
// The new query does 1 encode per source row and one indexed NOT-EXISTS probe.
1736
+
// The old plan does many decodes per candidate and can’t use an index to rule out matches quickly—so it burns CPU and I/O.
1737
+
1738
+
sql=cloudsync_memory_mprintf("WITH _cstemp1 AS (SELECT cloudsync_pk_encode(%s) AS pk FROM \"%w\") SELECT _cstemp1.pk FROM _cstemp1 WHERE NOT EXISTS (SELECT 1 FROM \"%w_cloudsync\" _cstemp2 WHERE _cstemp2.pk = _cstemp1.pk AND _cstemp2.col_name = ?);", pkvalues_identifiers, table_name, table_name);
0 commit comments