diff --git a/lib/darwin_amd64/libsql_experimental.a b/lib/darwin_amd64/libsql_experimental.a index e7d2679..07cc899 100644 Binary files a/lib/darwin_amd64/libsql_experimental.a and b/lib/darwin_amd64/libsql_experimental.a differ diff --git a/lib/include/libsql.h b/lib/include/libsql.h index bad7a7c..952aec6 100644 --- a/lib/include/libsql.h +++ b/lib/include/libsql.h @@ -3,6 +3,16 @@ #include +#define LIBSQL_INT 1 + +#define LIBSQL_FLOAT 2 + +#define LIBSQL_TEXT 3 + +#define LIBSQL_BLOB 4 + +#define LIBSQL_NULL 5 + typedef struct libsql_connection libsql_connection; typedef struct libsql_database libsql_database; @@ -17,6 +27,16 @@ typedef struct libsql_stmt libsql_stmt; typedef const libsql_database *libsql_database_t; +typedef struct { + const char *db_path; + const char *primary_url; + const char *auth_token; + char read_your_writes; + const char *encryption_key; + int sync_interval; + char with_webpki; +} libsql_config; + typedef const libsql_connection *libsql_connection_t; typedef const libsql_stmt *libsql_stmt_t; @@ -46,12 +66,27 @@ int libsql_open_sync(const char *db_path, libsql_database_t *out_db, const char **out_err_msg); +int libsql_open_sync_with_webpki(const char *db_path, + const char *primary_url, + const char *auth_token, + char read_your_writes, + const char *encryption_key, + libsql_database_t *out_db, + const char **out_err_msg); + +int libsql_open_sync_with_config(libsql_config config, libsql_database_t *out_db, const char **out_err_msg); + int libsql_open_ext(const char *url, libsql_database_t *out_db, const char **out_err_msg); int libsql_open_file(const char *url, libsql_database_t *out_db, const char **out_err_msg); int libsql_open_remote(const char *url, const char *auth_token, libsql_database_t *out_db, const char **out_err_msg); +int libsql_open_remote_with_webpki(const char *url, + const char *auth_token, + libsql_database_t *out_db, + const char **out_err_msg); + void libsql_close(libsql_database_t db); int libsql_connect(libsql_database_t db, libsql_connection_t *out_conn, const char **out_err_msg); @@ -76,6 +111,8 @@ int libsql_query_stmt(libsql_stmt_t stmt, libsql_rows_t *out_rows, const char ** int libsql_execute_stmt(libsql_stmt_t stmt, const char **out_err_msg); +int libsql_reset_stmt(libsql_stmt_t stmt, const char **out_err_msg); + void libsql_free_stmt(libsql_stmt_t stmt); int libsql_query(libsql_connection_t conn, const char *sql, libsql_rows_t *out_rows, const char **out_err_msg); diff --git a/libsql.go b/libsql.go index ce37502..364add4 100644 --- a/libsql.go +++ b/libsql.go @@ -24,6 +24,7 @@ import ( sqldriver "database/sql/driver" "errors" "fmt" + "github.com/antlr4-go/antlr/v4" "io" "net/url" "regexp" @@ -31,7 +32,6 @@ import ( "time" "unsafe" - "github.com/antlr4-go/antlr/v4" "github.com/libsql/sqlite-antlr4-parser/sqliteparser" "github.com/libsql/sqlite-antlr4-parser/sqliteparserutils" ) @@ -320,9 +320,22 @@ func libsqlOpenWithSync(dbPath, primaryUrl, authToken string, readYourWrites boo defer C.free(unsafe.Pointer(encrytionKeyNativeString)) } + var syncIntervalNative C.int = 0 + var withWebpkiNative C.char = 0 + + config := C.libsql_config{ + db_path: dbPathNativeString, + primary_url: primaryUrlNativeString, + auth_token: authTokenNativeString, + read_your_writes: readYourWritesNative, + encryption_key: encrytionKeyNativeString, + sync_interval: syncIntervalNative, + with_webpki: withWebpkiNative, + } + var db C.libsql_database_t var errMsg *C.char - statusCode := C.libsql_open_sync(dbPathNativeString, primaryUrlNativeString, authTokenNativeString, readYourWritesNative, encrytionKeyNativeString, &db, &errMsg) + statusCode := C.libsql_open_sync_with_config(config, &db, &errMsg) if statusCode != 0 { return nil, libsqlError(fmt.Sprintf("failed to open database %s %s", dbPath, primaryUrl), statusCode, errMsg) }