-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathcloudsync.h
More file actions
108 lines (83 loc) · 4.54 KB
/
cloudsync.h
File metadata and controls
108 lines (83 loc) · 4.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
//
// cloudsync.h
// cloudsync
//
// Created by Marco Bambini on 16/05/24.
//
#ifndef __CLOUDSYNC__
#define __CLOUDSYNC__
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include "database.h"
#ifdef __cplusplus
extern "C" {
#endif
#define CLOUDSYNC_VERSION "0.9.0"
#define CLOUDSYNC_MAX_TABLENAME_LEN 512
// algos
table_algo cloudsync_algo_from_name (const char *algo_name);
const char *cloudsync_algo_name (table_algo algo);
// Opaque structures
typedef struct cloudsync_context cloudsync_context;
typedef struct cloudsync_payload_context cloudsync_payload_context;
typedef struct cloudsync_table_context cloudsync_table_context;
cloudsync_context *cloudsync_context_create (void *db);
const char *cloudsync_context_init (cloudsync_context *data, void *db);
void cloudsync_context_free (void *ctx);
int cloudsync_cleanup (cloudsync_context *data, const char *table_name);
int cloudsync_cleanup_all (cloudsync_context *data);
int cloudsync_init_table (cloudsync_context *data, const char *table_name, const char *algo_name, bool skip_int_pk_check);
int cloudsync_terminate (cloudsync_context *data);
int cloudsync_insync (cloudsync_context *data);
int cloudsync_bumpseq (cloudsync_context *data);
void *cloudsync_siteid (cloudsync_context *data);
void cloudsync_reset_siteid (cloudsync_context *data);
int64_t cloudsync_dbversion_next (cloudsync_context *data, int64_t merging_version);
int64_t cloudsync_dbversion (cloudsync_context *data);
void cloudsync_update_schema_hash (cloudsync_context *data);
int cloudsync_dbversion_check_uptodate (cloudsync_context *data);
int cloudsync_begin_alter (cloudsync_context *data, const char *table_name);
int cloudsync_commit_alter (cloudsync_context *data, const char *table_name);
void *cloudsync_db (cloudsync_context *data);
const char *cloudsync_errmsg (cloudsync_context *data);
void *cloudsync_auxdata (cloudsync_context *data);
void cloudsync_set_auxdata (cloudsync_context *data, void *xdata);
int cloudsync_commit_hook (void *ctx);
void cloudsync_rollback_hook (void *ctx);
// PAYLOAD
// available only on Desktop OS (no WASM, no mobile)
//#ifdef CLOUDSYNC_DESKTOP_OS
int cloudsync_payload_save (cloudsync_context *data, const char *payload_path, int *blob_size);
//#endif
int cloudsync_payload_apply (cloudsync_context *data, const char *payload, int blen, int *nrows);
// Payload context (used to encode changes)
int cloudsync_payload_encode_step (cloudsync_payload_context *payload, cloudsync_context *data, int argc, dbvalue_t **argv);
int cloudsync_payload_encode_final (cloudsync_payload_context *payload, cloudsync_context *data);
char *cloudsync_payload_blob (cloudsync_payload_context *payload, int64_t *blob_size, int64_t *nrows);
size_t cloudsync_payload_context_size (size_t *header_size);
// CLOUDSYNCTABLE CONTEXT
cloudsync_table_context *table_lookup (cloudsync_context *data, const char *table_name);
void *table_column_lookup (cloudsync_table_context *table, const char *col_name, bool is_merge, int *index);
bool table_enabled (cloudsync_table_context *table);
void table_set_enabled (cloudsync_table_context *table, bool value);
bool table_add_to_context (db_t *db, cloudsync_context *data, table_algo algo, const char *table_name);
bool table_pk_exists (cloudsync_table_context *table, const char *value, size_t len);
int table_count_cols (cloudsync_table_context *table);
int table_count_pks (cloudsync_table_context *table);
const char *table_colname (cloudsync_table_context *table, int index);
char **table_pknames (cloudsync_table_context *table);
void table_set_pknames (cloudsync_table_context *table, char **pknames);
bool table_algo_isgos (cloudsync_table_context *table);
int table_remove (cloudsync_context *data, cloudsync_table_context *table);
void table_free (cloudsync_table_context *table);
int local_mark_insert_sentinel_meta (cloudsync_table_context *table, const char *pk, size_t pklen, int64_t db_version, int seq);
int local_update_sentinel (cloudsync_table_context *table, const char *pk, size_t pklen, int64_t db_version, int seq);
int local_mark_insert_or_update_meta (cloudsync_table_context *table, const char *pk, size_t pklen, const char *col_name, int64_t db_version, int seq);
int local_mark_delete_meta (cloudsync_table_context *table, const char *pk, size_t pklen, int64_t db_version, int seq);
int local_drop_meta (cloudsync_table_context *table, const char *pk, size_t pklen);
int local_update_move_meta (cloudsync_table_context *table, const char *pk, size_t pklen, const char *pk2, size_t pklen2, int64_t db_version);
#ifdef __cplusplus
}
#endif
#endif