Skip to content

Commit 1bd3262

Browse files
authored
Merge pull request #1629 from tursodatabase/lucio/update-c-bindings
c: add replicated data for sync
2 parents 26c49a8 + fb85262 commit 1bd3262

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

bindings/c/include/libsql.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ typedef struct libsql_stmt libsql_stmt;
2727

2828
typedef const libsql_database *libsql_database_t;
2929

30+
typedef struct {
31+
int frame_no;
32+
int frames_synced;
33+
} replicated;
34+
3035
typedef struct {
3136
const char *db_path;
3237
const char *primary_url;
@@ -58,6 +63,8 @@ extern "C" {
5863

5964
int libsql_sync(libsql_database_t db, const char **out_err_msg);
6065

66+
int libsql_sync2(libsql_database_t db, replicated *out_replicated, const char **out_err_msg);
67+
6168
int libsql_open_sync(const char *db_path,
6269
const char *primary_url,
6370
const char *auth_token,

bindings/c/src/lib.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use tokio::runtime::Runtime;
1111
use types::{
1212
blob, libsql_connection, libsql_connection_t, libsql_database, libsql_database_t, libsql_row,
1313
libsql_row_t, libsql_rows, libsql_rows_future_t, libsql_rows_t, libsql_stmt, libsql_stmt_t,
14-
stmt,
14+
replicated, stmt,
1515
};
1616

1717
lazy_static! {
@@ -46,6 +46,29 @@ pub unsafe extern "C" fn libsql_sync(
4646
}
4747
}
4848

49+
#[no_mangle]
50+
pub unsafe extern "C" fn libsql_sync2(
51+
db: libsql_database_t,
52+
out_replicated: *mut replicated,
53+
out_err_msg: *mut *const std::ffi::c_char,
54+
) -> std::ffi::c_int {
55+
let db = db.get_ref();
56+
match RT.block_on(db.sync()) {
57+
Ok(replicated) => {
58+
if !out_replicated.is_null() {
59+
(*out_replicated).frame_no = replicated.frame_no().unwrap_or(0) as i32;
60+
(*out_replicated).frames_synced = replicated.frames_synced() as i32;
61+
}
62+
63+
0
64+
}
65+
Err(e) => {
66+
set_err_msg(format!("Error syncing database: {e}"), out_err_msg);
67+
1
68+
}
69+
}
70+
}
71+
4972
#[no_mangle]
5073
pub unsafe extern "C" fn libsql_open_sync(
5174
db_path: *const std::ffi::c_char,

bindings/c/src/types.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ impl From<&mut libsql_connection> for libsql_connection_t {
115115
}
116116
}
117117

118+
#[repr(C)]
119+
pub struct replicated {
120+
pub frame_no: std::ffi::c_int,
121+
pub frames_synced: std::ffi::c_int,
122+
}
123+
118124
pub struct stmt {
119125
pub stmt: libsql::Statement,
120126
pub params: Vec<libsql::Value>,

0 commit comments

Comments
 (0)