@@ -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);
218219int cloudsync_load_siteid (sqlite3 * db , cloudsync_context * data );
219220int 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
225224CLOUDSYNC_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+
19311938int 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-
21122116sqlite3_stmt * cloudsync_col_value_stmt (sqlite3 * db , cloudsync_context * data , const char * tbl_name , bool * persistent ) {
21132117 sqlite3_stmt * vm ;
21142118
0 commit comments