Skip to content

Commit 2200655

Browse files
committed
Fixed cloudsync_network_logout
1 parent 220b959 commit 2200655

File tree

6 files changed

+35
-19
lines changed

6 files changed

+35
-19
lines changed

src/cloudsync.c

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2613,18 +2613,7 @@ int cloudsync_cleanup (cloudsync_context *data, const char *table_name) {
26132613
}
26142614

26152615
int cloudsync_cleanup_all (cloudsync_context *data) {
2616-
// cleanup all tables in the data context
2617-
while (data->tables_count > 0) {
2618-
cloudsync_table_context *t = data->tables[data->tables_count - 1];
2619-
table_remove(data, t);
2620-
table_free(t);
2621-
}
2622-
2623-
// cleanup database
2624-
cloudsync_reset_siteid(data);
2625-
dbutils_settings_cleanup(data);
2626-
2627-
return DBRES_OK;
2616+
return database_cleanup(data);
26282617
}
26292618

26302619
int cloudsync_terminate (cloudsync_context *data) {

src/cloudsync.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
extern "C" {
1818
#endif
1919

20-
#define CLOUDSYNC_VERSION "0.9.81"
20+
#define CLOUDSYNC_VERSION "0.9.82"
2121
#define CLOUDSYNC_MAX_TABLENAME_LEN 512
2222

2323
#define CLOUDSYNC_VALUE_NOTSET -1

src/database.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ int database_create_metatable (cloudsync_context *data, const char *table_name)
7373
int database_create_triggers (cloudsync_context *data, const char *table_name, table_algo algo);
7474
int database_delete_triggers (cloudsync_context *data, const char *table_name);
7575
int database_pk_names (cloudsync_context *data, const char *table_name, char ***names, int *count);
76+
int database_cleanup (cloudsync_context *data);
7677

7778
int database_count_pk (cloudsync_context *data, const char *table_name, bool not_null);
7879
int database_count_nonpk (cloudsync_context *data, const char *table_name);

src/network.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -934,24 +934,21 @@ void cloudsync_network_logout (sqlite3_context *context, int argc, sqlite3_value
934934
int nrows, ncols;
935935
rc = sqlite3_get_table(db, sql, &result, &nrows, &ncols, NULL);
936936
if (rc != SQLITE_OK) {
937-
errmsg = cloudsync_memory_mprintf("Unable to get current cloudsync configuration. %s", sqlite3_errmsg(db));
937+
errmsg = cloudsync_memory_mprintf("Unable to get current cloudsync configuration %s", sqlite3_errmsg(db));
938938
goto finalize;
939939
}
940940

941941
// run everything in a savepoint
942942
rc = database_begin_savepoint(data, "cloudsync_logout_savepoint;");
943943
if (rc != SQLITE_OK) {
944-
errmsg = cloudsync_memory_mprintf("Unable to create cloudsync_logout savepoint. %s", sqlite3_errmsg(db));
944+
errmsg = cloudsync_memory_mprintf("Unable to create cloudsync_logout savepoint %s", cloudsync_errmsg(data));
945945
goto finalize;
946946
}
947947
savepoint_created = true;
948948

949-
// TODO: is it right to use the tables in cloudsync_context?
950-
// What happen if another connection later augmented another table not originally loaded in this cloudsync_context?
951-
// disable cloudsync for all the previously enabled tables: cloudsync_cleanup('*')
952949
rc = cloudsync_cleanup_all(data);
953950
if (rc != SQLITE_OK) {
954-
errmsg = cloudsync_memory_mprintf("Unable to cleanup current cloudsync configuration. %s", sqlite3_errmsg(db));
951+
errmsg = cloudsync_memory_mprintf("Unable to cleanup current database %s", cloudsync_errmsg(data));
955952
goto finalize;
956953
}
957954

src/postgresql/database_postgresql.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -808,6 +808,11 @@ int database_select_blob_2int (cloudsync_context *data, const char *sql, char **
808808
return database_select3_values(data, sql, value, len, value2, value3);
809809
}
810810

811+
int database_cleanup (cloudsync_context *data) {
812+
// NOOP
813+
return DBRES_OK;
814+
}
815+
811816
// MARK: - STATUS -
812817
int database_errcode (cloudsync_context *data) {
813818
return cloudsync_errcode(data);

src/sqlite/database_sqlite.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,30 @@ int database_count_notnull_without_default (cloudsync_context *data, const char
451451
return (int)count;
452452
}
453453

454+
int database_cleanup (cloudsync_context *data) {
455+
char *sql = "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'cloudsync_%' AND name NOT LIKE '%_cloudsync';";
456+
sqlite3 *db = (sqlite3 *)cloudsync_db(data);
457+
458+
char **result = NULL;
459+
char *errmsg = NULL;
460+
int nrows, ncols;
461+
int rc = sqlite3_get_table(db, sql, &result, &nrows, &ncols, &errmsg);
462+
if (rc != SQLITE_OK) {
463+
cloudsync_set_error(data, (errmsg) ? errmsg : "Error retrieving augmented tables", rc);
464+
goto exit_cleanup;
465+
}
466+
467+
for (int i = ncols; i < nrows+ncols; i+=ncols) {
468+
int rc2 = cloudsync_cleanup(data, result[i]);
469+
if (rc2 != SQLITE_OK) {rc = rc2; goto exit_cleanup;}
470+
}
471+
472+
exit_cleanup:
473+
if (result) sqlite3_free_table(result);
474+
if (errmsg) sqlite3_free(errmsg);
475+
return rc;
476+
}
477+
454478
// MARK: - TRIGGERS and META -
455479

456480
int database_create_metatable (cloudsync_context *data, const char *table_name) {

0 commit comments

Comments
 (0)