Skip to content

Commit a0721ae

Browse files
committed
fix: force triggers update when reopening a db previously initialized with an old sqlite-sync version
the cloudsync_update function has changed between version 0.8.25 and 0.8.26
1 parent 0382e16 commit a0721ae

File tree

4 files changed

+21
-7
lines changed

4 files changed

+21
-7
lines changed

src/cloudsync.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3373,6 +3373,9 @@ int cloudsync_register (sqlite3 *db, char **pzErrMsg) {
33733373
// load config, if exists
33743374
if (cloudsync_config_exists(db)) {
33753375
cloudsync_context_init(db, ctx, NULL);
3376+
3377+
// make sure to update internal version to current version
3378+
dbutils_settings_set_key_value(db, NULL, CLOUDSYNC_KEY_LIBVERSION, CLOUDSYNC_VERSION);
33763379
}
33773380

33783381
return SQLITE_OK;

src/cloudsync.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
extern "C" {
2121
#endif
2222

23-
#define CLOUDSYNC_VERSION "0.8.27"
23+
#define CLOUDSYNC_VERSION "0.8.28"
2424

2525
int sqlite3_cloudsync_init (sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi);
2626

src/dbutils.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ typedef struct {
3737
cloudsync_context *data;
3838
} dbutils_settings_table_context;
3939

40+
int dbutils_settings_check_version (sqlite3 *db, const char *version);
41+
4042
// MARK: - General -
4143

4244
DATABASE_RESULT dbutils_exec (sqlite3_context *context, sqlite3 *db, const char *sql, const char **values, int types[], int lens[], int count, DATABASE_RESULT results[], int expected_types[], int result_count) {
@@ -498,6 +500,10 @@ int dbutils_delete_triggers (sqlite3 *db, const char *table) {
498500
int dbutils_check_triggers (sqlite3 *db, const char *table, table_algo algo) {
499501
DEBUG_DBFUNCTION("dbutils_check_triggers %s", table);
500502

503+
if (dbutils_settings_check_version(db, "0.8.25") <= 0) {
504+
dbutils_delete_triggers(db, table);
505+
}
506+
501507
char *trigger_name = NULL;
502508
int rc = SQLITE_NOMEM;
503509

@@ -795,15 +801,15 @@ int dbutils_settings_get_int_value (sqlite3 *db, const char *key) {
795801
return (int)strtol(buffer, NULL, 0);
796802
}
797803

798-
int dbutils_settings_check_version (sqlite3 *db) {
804+
int dbutils_settings_check_version (sqlite3 *db, const char *version) {
799805
DEBUG_SETTINGS("dbutils_settings_check_version");
800806
char buffer[256];
801807
if (dbutils_settings_get_value(db, CLOUDSYNC_KEY_LIBVERSION, buffer, sizeof(buffer)) == NULL) return -666;
802808

803809
int major1, minor1, patch1;
804810
int major2, minor2, patch2;
805811
int count1 = sscanf(buffer, "%d.%d.%d", &major1, &minor1, &patch1);
806-
int count2 = sscanf(CLOUDSYNC_VERSION, "%d.%d.%d", &major2, &minor2, &patch2);
812+
int count2 = sscanf((version == NULL ? CLOUDSYNC_VERSION : version), "%d.%d.%d", &major2, &minor2, &patch2);
807813

808814
if (count1 != 3 || count2 != 3) return -666;
809815

@@ -965,7 +971,9 @@ int dbutils_settings_table_load_callback (void *xdata, int ncols, char **values,
965971
const char *value = values[i+3];
966972
if (strcmp(key, "algo")!=0) continue;
967973

968-
table_add_to_context(db, data, crdt_algo_from_name(value), table_name);
974+
if (dbutils_check_triggers(db, table_name, crdt_algo_from_name(value)) != SQLITE_OK) return SQLITE_MISUSE;
975+
if (table_add_to_context(db, data, crdt_algo_from_name(value), table_name) == false) return SQLITE_MISUSE;
976+
969977
DEBUG_SETTINGS("load tbl_name: %s value: %s", key, value);
970978
}
971979

test/unit.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ int stmt_execute (sqlite3_stmt *stmt, void *data);
3636

3737
sqlite3_int64 dbutils_select (sqlite3 *db, const char *sql, const char **values, int types[], int lens[], int count, int expected_type);
3838
int dbutils_settings_table_load_callback (void *xdata, int ncols, char **values, char **names);
39-
int dbutils_settings_check_version (sqlite3 *db);
39+
int dbutils_settings_check_version (sqlite3 *db, const char *version);
4040
bool dbutils_migrate (sqlite3 *db);
4141
const char *opname_from_value (int value);
4242
int colname_is_legal (const char *name);
@@ -1887,13 +1887,16 @@ bool do_test_dbutils (void) {
18871887
if (p != NULL) goto finalize;
18881888

18891889
dbutils_settings_set_key_value(db, NULL, CLOUDSYNC_KEY_LIBVERSION, "0.0.0");
1890-
int cmp = dbutils_settings_check_version(db);
1890+
int cmp = dbutils_settings_check_version(db, NULL);
18911891
if (cmp == 0) goto finalize;
18921892

18931893
dbutils_settings_set_key_value(db, NULL, CLOUDSYNC_KEY_LIBVERSION, CLOUDSYNC_VERSION);
1894-
cmp = dbutils_settings_check_version(db);
1894+
cmp = dbutils_settings_check_version(db, NULL);
18951895
if (cmp != 0) goto finalize;
18961896

1897+
cmp = dbutils_settings_check_version(db, "0.8.25");
1898+
if (cmp <= 0) goto finalize;
1899+
18971900
//dbutils_settings_table_load_callback(NULL, 0, NULL, NULL);
18981901
dbutils_migrate(NULL);
18991902

0 commit comments

Comments
 (0)