Skip to content

Commit 2fdac39

Browse files
committed
feat(network): add support for new status endpoint
- automatically update the latest sent db_version value after sending payloads depending on the status returned by the cloudsync http service - the cloudsync_network_send_changes functions now returns the status data in the json format - the cloudsync_network_has_unsent_changes now call the status endpoints before comparing with the latest local db_version - only consider the db_version value in the WHERE clause of cloudsync_payload_get, don't filter at seq level
1 parent 1a42745 commit 2fdac39

File tree

10 files changed

+717
-102
lines changed

10 files changed

+717
-102
lines changed

src/cloudsync.c

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2872,21 +2872,18 @@ int cloudsync_payload_apply (cloudsync_context *data, const char *payload, int b
28722872

28732873
// MARK: - Payload load/store -
28742874

2875-
int cloudsync_payload_get (cloudsync_context *data, char **blob, int *blob_size, int *db_version, int *seq, int64_t *new_db_version, int64_t *new_seq) {
2875+
int cloudsync_payload_get (cloudsync_context *data, char **blob, int *blob_size, int *db_version, int64_t *new_db_version) {
28762876
// retrieve current db_version and seq
28772877
*db_version = dbutils_settings_get_int_value(data, CLOUDSYNC_KEY_SEND_DBVERSION);
28782878
if (*db_version < 0) return DBRES_ERROR;
2879-
2880-
*seq = dbutils_settings_get_int_value(data, CLOUDSYNC_KEY_SEND_SEQ);
2881-
if (*seq < 0) return DBRES_ERROR;
28822879

28832880
// retrieve BLOB
28842881
char sql[1024];
28852882
snprintf(sql, sizeof(sql), "WITH max_db_version AS (SELECT MAX(db_version) AS max_db_version FROM cloudsync_changes WHERE site_id=cloudsync_siteid()) "
2886-
"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, 0)) 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);
2883+
"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 FROM cloudsync_changes, max_db_version WHERE site_id=cloudsync_siteid() AND db_version>%d) WHERE payload IS NOT NULL", *db_version);
28872884

28882885
int64_t len = 0;
2889-
int rc = database_select_blob_2int(data, sql, blob, &len, new_db_version, new_seq);
2886+
int rc = database_select_blob_int(data, sql, blob, &len, new_db_version);
28902887
*blob_size = (int)len;
28912888
if (rc != DBRES_OK) return rc;
28922889

@@ -2904,12 +2901,11 @@ int cloudsync_payload_save (cloudsync_context *data, const char *payload_path, i
29042901

29052902
// retrieve payload
29062903
char *blob = NULL;
2907-
int blob_size = 0, db_version = 0, seq = 0;
2908-
int64_t new_db_version = 0, new_seq = 0;
2909-
int rc = cloudsync_payload_get(data, &blob, &blob_size, &db_version, &seq, &new_db_version, &new_seq);
2904+
int blob_size = 0, db_version = 0;
2905+
int64_t new_db_version = 0;
2906+
int rc = cloudsync_payload_get(data, &blob, &blob_size, &db_version, &new_db_version);
29102907
if (rc != DBRES_OK) {
29112908
if (db_version < 0) return cloudsync_set_error(data, "Unable to retrieve db_version", rc);
2912-
else if (seq < 0) return cloudsync_set_error(data, "Unable to retrieve seq", rc);
29132909
return cloudsync_set_error(data, "Unable to retrieve changes in cloudsync_payload_save", rc);
29142910
}
29152911

@@ -2926,18 +2922,6 @@ int cloudsync_payload_save (cloudsync_context *data, const char *payload_path, i
29262922
return cloudsync_set_error(data, "Unable to write payload to file path", DBRES_IOERR);
29272923
}
29282924

2929-
// TODO: dbutils_settings_set_key_value remove context and return error here (in case of error)
2930-
// update db_version and seq
2931-
char buf[256];
2932-
if (new_db_version != db_version) {
2933-
snprintf(buf, sizeof(buf), "%" PRId64, new_db_version);
2934-
dbutils_settings_set_key_value(data, CLOUDSYNC_KEY_SEND_DBVERSION, buf);
2935-
}
2936-
if (new_seq != seq) {
2937-
snprintf(buf, sizeof(buf), "%" PRId64, new_seq);
2938-
dbutils_settings_set_key_value(data, CLOUDSYNC_KEY_SEND_SEQ, buf);
2939-
}
2940-
29412925
// returns blob size
29422926
if (size) *size = blob_size;
29432927
return DBRES_OK;

src/cloudsync.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ int cloudsync_payload_encode_step (cloudsync_payload_context *payload, clouds
8383
int cloudsync_payload_encode_final (cloudsync_payload_context *payload, cloudsync_context *data);
8484
char *cloudsync_payload_blob (cloudsync_payload_context *payload, int64_t *blob_size, int64_t *nrows);
8585
size_t cloudsync_payload_context_size (size_t *header_size);
86-
int cloudsync_payload_get (cloudsync_context *data, char **blob, int *blob_size, int *db_version, int *seq, int64_t *new_db_version, int64_t *new_seq);
86+
int cloudsync_payload_get (cloudsync_context *data, char **blob, int *blob_size, int *db_version, int64_t *new_db_version);
8787
int cloudsync_payload_save (cloudsync_context *data, const char *payload_path, int *blob_size); // available only on Desktop OS (no WASM, no mobile)
8888

8989
// CloudSync table context

src/database.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ int database_exec_callback (cloudsync_context *data, const char *sql, database_
6464
int database_select_int (cloudsync_context *data, const char *sql, int64_t *value);
6565
int database_select_text (cloudsync_context *data, const char *sql, char **value);
6666
int database_select_blob (cloudsync_context *data, const char *sql, char **value, int64_t *value_len);
67-
int database_select_blob_2int (cloudsync_context *data, const char *sql, char **value, int64_t *value_len, int64_t *value2, int64_t *value3);
67+
int database_select_blob_int (cloudsync_context *data, const char *sql, char **value, int64_t *value_len, int64_t *value2);
6868
int database_write (cloudsync_context *data, const char *sql, const char **values, DBTYPE types[], int lens[], int count);
6969
bool database_table_exists (cloudsync_context *data, const char *table_name, const char *schema);
7070
bool database_internal_table_exists (cloudsync_context *data, const char *name);

0 commit comments

Comments
 (0)