Skip to content

Commit f5e1ccd

Browse files
committed
fix(network): fix the network layer after database-api refactoring
1 parent cb9c591 commit f5e1ccd

File tree

3 files changed

+22
-17
lines changed

3 files changed

+22
-17
lines changed

src/cloudsync.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2380,7 +2380,7 @@ int cloudsync_payload_get (cloudsync_context *data, char **blob, int *blob_size,
23802380
// retrieve BLOB
23812381
char sql[1024];
23822382
snprintf(sql, sizeof(sql), "WITH max_db_version AS (SELECT MAX(db_version) AS max_db_version FROM cloudsync_changes) "
2383-
"SELECT cloudsync_payload_encode(tbl, pk, col_name, col_value, col_version, db_version, site_id, cl, seq), max_db_version AS max_db_version, MAX(IIF(db_version = max_db_version, seq, NULL)) FROM cloudsync_changes, max_db_version WHERE site_id=cloudsync_siteid() AND (db_version>%d OR (db_version=%d AND seq>%d))", *db_version, *db_version, *seq);
2383+
"SELECT * FROM (SELECT cloudsync_payload_encode(tbl, pk, col_name, col_value, col_version, db_version, site_id, cl, seq) AS payload, max_db_version AS max_db_version, MAX(IIF(db_version = max_db_version, seq, NULL)) FROM cloudsync_changes, max_db_version WHERE site_id=cloudsync_siteid() AND (db_version>%d OR (db_version=%d AND seq>%d))) WHERE payload IS NOT NULL", *db_version, *db_version, *seq);
23842384

23852385
db_int64 len = 0;
23862386
int rc = database_select_blob_2int(db, sql, blob, &len, new_db_version, new_seq);

src/cloudsync_sqlite.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -801,7 +801,7 @@ void dbsync_payload_decode (sqlite3_context *context, int argc, sqlite3_value **
801801

802802
// TODO: check me
803803
// returns number of applied rows
804-
// sqlite3_result_int(context, nrows);
804+
sqlite3_result_int(context, nrows);
805805
}
806806

807807
#ifdef CLOUDSYNC_DESKTOP_OS

src/network.c

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ int network_set_sqlite_result (sqlite3_context *context, NETWORK_RESULT *result)
326326
return rc;
327327
}
328328

329-
int network_download_changes (sqlite3_context *context, const char *download_url) {
329+
int network_download_changes (sqlite3_context *context, const char *download_url, int *pnrows) {
330330
DEBUG_FUNCTION("network_download_changes");
331331

332332
cloudsync_context *xdata = (cloudsync_context *)sqlite3_user_data(context);
@@ -340,10 +340,11 @@ int network_download_changes (sqlite3_context *context, const char *download_url
340340

341341
int rc = SQLITE_OK;
342342
if (result.code == CLOUDSYNC_NETWORK_BUFFER) {
343-
rc = cloudsync_payload_apply(xdata, result.buffer, (int)result.blen, NULL);
343+
rc = cloudsync_payload_apply(xdata, result.buffer, (int)result.blen, pnrows);
344344
network_result_cleanup(&result);
345345
} else {
346346
rc = network_set_sqlite_result(context, &result);
347+
if (pnrows) *pnrows = 0;
347348
}
348349

349350
return rc;
@@ -706,8 +707,7 @@ int cloudsync_network_send_changes_internal (sqlite3_context *context, int argc,
706707
// retrieve global context
707708
cloudsync_context *data = (cloudsync_context *)sqlite3_user_data(context);
708709

709-
cloudsync_context *xdata = (cloudsync_context *)sqlite3_user_data(context);
710-
network_data *netdata = (network_data *)cloudsync_auxdata(xdata);
710+
network_data *netdata = (network_data *)cloudsync_auxdata(data);
711711
if (!netdata) {sqlite3_result_error(context, "Unable to retrieve CloudSync context.", -1); return SQLITE_ERROR;}
712712

713713
// retrieve payload
@@ -760,11 +760,11 @@ int cloudsync_network_send_changes_internal (sqlite3_context *context, int argc,
760760
sqlite3 *db = sqlite3_context_db_handle(context);
761761
if (new_db_version != db_version) {
762762
snprintf(buf, sizeof(buf), "%lld", new_db_version);
763-
dbutils_settings_set_key_value(db, context, CLOUDSYNC_KEY_SEND_DBVERSION, buf);
763+
dbutils_settings_set_key_value(db, data, CLOUDSYNC_KEY_SEND_DBVERSION, buf);
764764
}
765765
if (new_seq != seq) {
766766
snprintf(buf, sizeof(buf), "%lld", new_seq);
767-
dbutils_settings_set_key_value(db, context, CLOUDSYNC_KEY_SEND_SEQ, buf);
767+
dbutils_settings_set_key_value(db, data, CLOUDSYNC_KEY_SEND_SEQ, buf);
768768
}
769769

770770
network_result_cleanup(&res);
@@ -777,7 +777,7 @@ void cloudsync_network_send_changes (sqlite3_context *context, int argc, sqlite3
777777
cloudsync_network_send_changes_internal(context, argc, argv);
778778
}
779779

780-
int cloudsync_network_check_internal(sqlite3_context *context) {
780+
int cloudsync_network_check_internal(sqlite3_context *context, int *pnrows) {
781781
cloudsync_context *xdata = (cloudsync_context *)sqlite3_user_data(context);
782782
network_data *data = (network_data *)cloudsync_auxdata(xdata);
783783
if (!data) {sqlite3_result_error(context, "Unable to retrieve CloudSync context.", -1); return -1;}
@@ -798,7 +798,7 @@ int cloudsync_network_check_internal(sqlite3_context *context) {
798798
NETWORK_RESULT result = network_receive_buffer(data, endpoint, data->authentication, true, true, NULL, CLOUDSYNC_HEADER_SQLITECLOUD);
799799
int rc = SQLITE_OK;
800800
if (result.code == CLOUDSYNC_NETWORK_BUFFER) {
801-
rc = network_download_changes(context, result.buffer);
801+
rc = network_download_changes(context, result.buffer, pnrows);
802802
} else {
803803
rc = network_set_sqlite_result(context, &result);
804804
}
@@ -814,8 +814,8 @@ void cloudsync_network_sync (sqlite3_context *context, int wait_ms, int max_retr
814814
int nrows = 0;
815815
while (ntries < max_retries) {
816816
if (ntries > 0) sqlite3_sleep(wait_ms);
817-
nrows = cloudsync_network_check_internal(context);
818-
if (nrows > 0) break;
817+
rc = cloudsync_network_check_internal(context, &nrows);
818+
if (rc == DBRES_OK && nrows > 0) break;
819819
ntries++;
820820
}
821821

@@ -843,18 +843,23 @@ void cloudsync_network_sync2 (sqlite3_context *context, int argc, sqlite3_value
843843
void cloudsync_network_check_changes (sqlite3_context *context, int argc, sqlite3_value **argv) {
844844
DEBUG_FUNCTION("cloudsync_network_check_changes");
845845

846-
cloudsync_network_check_internal(context);
846+
int nrows = 0;
847+
cloudsync_network_check_internal(context, &nrows);
848+
849+
// returns number of applied rows
850+
sqlite3_result_int(context, nrows);
847851
}
848852

849853
void cloudsync_network_reset_sync_version (sqlite3_context *context, int argc, sqlite3_value **argv) {
850854
DEBUG_FUNCTION("cloudsync_network_reset_sync_version");
851855

852856
sqlite3 *db = sqlite3_context_db_handle(context);
857+
cloudsync_context *data = (cloudsync_context *)sqlite3_user_data(context);
853858
char *buf = "0";
854-
dbutils_settings_set_key_value(db, context, CLOUDSYNC_KEY_CHECK_DBVERSION, buf);
855-
dbutils_settings_set_key_value(db, context, CLOUDSYNC_KEY_CHECK_SEQ, buf);
856-
dbutils_settings_set_key_value(db, context, CLOUDSYNC_KEY_SEND_DBVERSION, buf);
857-
dbutils_settings_set_key_value(db, context, CLOUDSYNC_KEY_SEND_SEQ, buf);
859+
dbutils_settings_set_key_value(db, data, CLOUDSYNC_KEY_CHECK_DBVERSION, buf);
860+
dbutils_settings_set_key_value(db, data, CLOUDSYNC_KEY_CHECK_SEQ, buf);
861+
dbutils_settings_set_key_value(db, data, CLOUDSYNC_KEY_SEND_DBVERSION, buf);
862+
dbutils_settings_set_key_value(db, data, CLOUDSYNC_KEY_SEND_SEQ, buf);
858863
}
859864

860865
/**

0 commit comments

Comments
 (0)