Skip to content

Commit 2a6b1fa

Browse files
committed
store the payload_apply_callback as additional information of the database connection
1 parent bdf4fb7 commit 2a6b1fa

File tree

3 files changed

+25
-18
lines changed

3 files changed

+25
-18
lines changed

src/cloudsync.c

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,14 @@ SQLITE_EXTENSION_INIT1
6464
#define APIEXPORT
6565
#endif
6666

67-
#define CLOUDSYNC_DEFAULT_ALGO "cls"
68-
#define CLOUDSYNC_INIT_NTABLES 128
69-
#define CLOUDSYNC_VALUE_NOTSET -1
70-
#define CLOUDSYNC_MIN_DB_VERSION 0
71-
#define CLOUDSYNC_PAYLOAD_MINBUF_SIZE 512*1024
72-
#define CLOUDSYNC_PAYLOAD_VERSION 1
73-
#define CLOUDSYNC_PAYLOAD_SIGNATURE 'CLSY'
67+
#define CLOUDSYNC_DEFAULT_ALGO "cls"
68+
#define CLOUDSYNC_INIT_NTABLES 128
69+
#define CLOUDSYNC_VALUE_NOTSET -1
70+
#define CLOUDSYNC_MIN_DB_VERSION 0
71+
#define CLOUDSYNC_PAYLOAD_MINBUF_SIZE 512*1024
72+
#define CLOUDSYNC_PAYLOAD_VERSION 1
73+
#define CLOUDSYNC_PAYLOAD_SIGNATURE 'CLSY'
74+
#define CLOUDSYNC_PAYLOAD_APPLY_CALLBACK_KEY "cloudsync_payload_apply_callback"
7475

7576
#ifndef MAX
7677
#define MAX(a, b) (((a)>(b))?(a):(b))
@@ -218,8 +219,6 @@ int db_version_rebuild_stmt (sqlite3 *db, cloudsync_context *data);
218219
int cloudsync_load_siteid (sqlite3 *db, cloudsync_context *data);
219220
int local_mark_insert_or_update_meta (sqlite3 *db, cloudsync_table_context *table, const char *pk, size_t pklen, const char *col_name, sqlite3_int64 db_version, int seq);
220221

221-
static cloudsync_payload_apply_callback_t payload_apply_callback;
222-
223222
// MARK: - STMT Utils -
224223

225224
CLOUDSYNC_STMT_VALUE stmt_execute (sqlite3_stmt *stmt, cloudsync_context *data) {
@@ -1928,6 +1927,14 @@ void cloudsync_network_encode_final (sqlite3_context *context) {
19281927
if (!use_uncompressed_buffer) cloudsync_memory_free(buffer);
19291928
}
19301929

1930+
cloudsync_payload_apply_callback_t cloudsync_get_payload_apply_callback(sqlite3 *db) {
1931+
return sqlite3_get_clientdata(db, CLOUDSYNC_PAYLOAD_APPLY_CALLBACK_KEY);
1932+
}
1933+
1934+
void cloudsync_set_payload_apply_callback(sqlite3 *db, cloudsync_payload_apply_callback_t callback) {
1935+
sqlite3_set_clientdata(db, CLOUDSYNC_PAYLOAD_APPLY_CALLBACK_KEY, (void*)callback, NULL);
1936+
}
1937+
19311938
int cloudsync_pk_decode_bind_callback (void *xdata, int index, int type, int64_t ival, double dval, char *pval) {
19321939
cloudsync_pk_decode_bind_context *decode_context = (cloudsync_pk_decode_bind_context*)xdata;
19331940
int rc = pk_decode_bind_callback(decode_context->vm, index, type, ival, dval, pval);
@@ -2046,6 +2053,7 @@ int cloudsync_payload_apply (sqlite3_context *context, const char *payload, int
20462053
int seq = dbutils_settings_get_int_value(db, CLOUDSYNC_KEY_CHECK_SEQ);
20472054
cloudsync_pk_decode_bind_context decoded_context = {.vm = vm};
20482055
void *payload_apply_xdata = NULL;
2056+
cloudsync_payload_apply_callback_t payload_apply_callback = cloudsync_get_payload_apply_callback(db);
20492057

20502058
for (uint32_t i=0; i<nrows; ++i) {
20512059
size_t seek = 0;
@@ -2105,10 +2113,6 @@ int cloudsync_payload_apply (sqlite3_context *context, const char *payload, int
21052113
return nrows;
21062114
}
21072115

2108-
void cloudsync_payload_apply_callback(cloudsync_payload_apply_callback_t callback) {
2109-
payload_apply_callback = callback;
2110-
}
2111-
21122116
sqlite3_stmt *cloudsync_col_value_stmt (sqlite3 *db, cloudsync_context *data, const char *tbl_name, bool *persistent) {
21132117
sqlite3_stmt *vm;
21142118

src/cloudsync.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ void cloudsync_sync_table_key (cloudsync_context *data, const char *table, const
5555
void *cloudsync_get_auxdata (sqlite3_context *context);
5656
void cloudsync_set_auxdata (sqlite3_context *context, void *xdata);
5757
int cloudsync_payload_apply (sqlite3_context *context, const char *payload, int blen);
58-
void cloudsync_payload_apply_callback(cloudsync_payload_apply_callback_t callback);
58+
void cloudsync_set_payload_apply_callback(sqlite3 *db, cloudsync_payload_apply_callback_t callback);
5959
sqlite3_stmt *cloudsync_col_value_stmt (sqlite3 *db, cloudsync_context *data, const char *tbl_name, bool *persistent);
6060

6161
#endif

test/unit.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1669,6 +1669,7 @@ bool do_test_dbutils (void) {
16691669

16701670
// manually load extension
16711671
sqlite3_cloudsync_init(db, NULL, NULL);
1672+
cloudsync_set_payload_apply_callback(db, unittest_payload_apply_rls_callback);
16721673

16731674
const char *sql = "CREATE TABLE IF NOT EXISTS foo (name TEXT PRIMARY KEY NOT NULL, age INTEGER, note TEXT, stamp TEXT DEFAULT CURRENT_TIME);"
16741675
"CREATE TABLE IF NOT EXISTS bar (name TEXT PRIMARY KEY NOT NULL, age INTEGER, note TEXT, stamp TEXT DEFAULT CURRENT_TIME);"
@@ -2149,7 +2150,8 @@ sqlite3 *do_create_database (void) {
21492150

21502151
// manually load extension
21512152
sqlite3_cloudsync_init(db, NULL, NULL);
2152-
2153+
cloudsync_set_payload_apply_callback(db, unittest_payload_apply_rls_callback);
2154+
21532155
return db;
21542156
}
21552157

@@ -2178,7 +2180,8 @@ sqlite3 *do_create_database_file (int i, time_t timestamp, int ntest) {
21782180

21792181
// manually load extension
21802182
sqlite3_cloudsync_init(db, NULL, NULL);
2181-
2183+
cloudsync_set_payload_apply_callback(db, unittest_payload_apply_rls_callback);
2184+
21822185
return db;
21832186
}
21842187

@@ -3269,8 +3272,8 @@ int main(int argc, const char * argv[]) {
32693272

32703273
// manually load extension
32713274
sqlite3_cloudsync_init(db, NULL, NULL);
3272-
cloudsync_payload_apply_callback(unittest_payload_apply_rls_callback);
3273-
3275+
cloudsync_set_payload_apply_callback(db, unittest_payload_apply_rls_callback);
3276+
32743277
printf("Testing CloudSync version %s\n", CLOUDSYNC_VERSION);
32753278
printf("===============================\n");
32763279

0 commit comments

Comments
 (0)