mirror of
https://github.com/tursodatabase/libsql.git
synced 2024-11-21 16:55:21 +00:00
51 lines
1.2 KiB
C
51 lines
1.2 KiB
C
#ifdef LIBSQL_ENABLE_BOTTOMLESS_WAL
|
|
|
|
#include "sqlite3ext.h"
|
|
SQLITE_EXTENSION_INIT1
|
|
LIBSQL_EXTENSION_INIT1
|
|
|
|
#include <stdio.h>
|
|
|
|
extern void bottomless_tracing_init();
|
|
extern void bottomless_init();
|
|
extern struct libsql_wal_methods* bottomless_methods(struct libsql_wal_methods*);
|
|
|
|
int sqlite3_bottomless_init(
|
|
sqlite3 *db,
|
|
char **pzErrMsg,
|
|
const sqlite3_api_routines *pApi,
|
|
const libsql_api_routines *pLibsqlApi
|
|
) {
|
|
// yes, racy
|
|
static int initialized = 0;
|
|
if (initialized == 0) {
|
|
initialized = 1;
|
|
} else {
|
|
return 0;
|
|
}
|
|
|
|
SQLITE_EXTENSION_INIT2(pApi);
|
|
LIBSQL_EXTENSION_INIT2(pLibsqlApi);
|
|
|
|
bottomless_tracing_init();
|
|
bottomless_init();
|
|
struct libsql_wal_methods *orig = libsql_wal_methods_find(0);
|
|
if (!orig) {
|
|
return SQLITE_ERROR;
|
|
}
|
|
struct libsql_wal_methods *methods = bottomless_methods(orig);
|
|
|
|
if (methods) {
|
|
int rc = libsql_wal_methods_register(methods);
|
|
return rc == SQLITE_OK ? SQLITE_OK_LOAD_PERMANENTLY : rc;
|
|
}
|
|
// It's not fatal to fail to instantiate methods - it will be logged.
|
|
return SQLITE_OK_LOAD_PERMANENTLY;
|
|
}
|
|
|
|
int libsqlBottomlessInit(sqlite3 *db) {
|
|
return sqlite3_bottomless_init(db, NULL, NULL, NULL);
|
|
}
|
|
|
|
#endif
|