@rocicorp/zero-sqlite3 1.0.8 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/binding.gyp +1 -1
- package/deps/defines.gypi +1 -0
- package/deps/download.sh +6 -5
- package/deps/sqlite3/shell.c +1171 -512
- package/deps/sqlite3/sqlite3.c +6515 -4034
- package/deps/sqlite3/sqlite3.h +272 -73
- package/deps/sqlite3/sqlite3ext.h +4 -0
- package/deps/sqlite3.gyp +1 -1
- package/deps/test_extension.c +1 -1
- package/lib/database.js +13 -1
- package/lib/index.d.ts +30 -0
- package/lib/methods/transaction.js +3 -0
- package/package.json +9 -8
- package/src/addon.cpp +47 -0
- package/src/better_sqlite3.cpp +55 -2115
- package/src/objects/backup.cpp +120 -0
- package/src/objects/backup.hpp +36 -0
- package/src/objects/database.cpp +392 -0
- package/src/objects/database.hpp +102 -0
- package/src/objects/statement-iterator.cpp +113 -0
- package/src/objects/statement-iterator.hpp +50 -0
- package/src/objects/statement.cpp +446 -0
- package/src/objects/statement.hpp +59 -0
- package/src/util/bind-map.cpp +73 -0
- package/src/util/binder.cpp +193 -0
- package/src/util/constants.cpp +172 -0
- package/src/util/custom-aggregate.cpp +121 -0
- package/src/util/custom-function.cpp +59 -0
- package/src/util/custom-table.cpp +409 -0
- package/src/util/data-converter.cpp +17 -0
- package/src/util/data.cpp +194 -0
- package/src/util/helpers.cpp +109 -0
- package/src/util/macros.cpp +63 -0
- package/src/util/query-macros.cpp +71 -0
- package/src/util/row-builder.cpp +49 -0
- package/src/better_sqlite3.hpp +0 -1034
package/lib/index.d.ts
CHANGED
|
@@ -5,6 +5,17 @@ type VariableArgFunction = (...params: any[]) => unknown;
|
|
|
5
5
|
type ArgumentTypes<F extends VariableArgFunction> = F extends (...args: infer A) => unknown ? A : never;
|
|
6
6
|
type ElementOf<T> = T extends Array<infer E> ? E : T;
|
|
7
7
|
|
|
8
|
+
declare const enum ScanStatOpcode {
|
|
9
|
+
SQLITE_SCANSTAT_NLOOP = 0,
|
|
10
|
+
SQLITE_SCANSTAT_NVISIT = 1,
|
|
11
|
+
SQLITE_SCANSTAT_EST = 2,
|
|
12
|
+
SQLITE_SCANSTAT_NAME = 3,
|
|
13
|
+
SQLITE_SCANSTAT_EXPLAIN = 4,
|
|
14
|
+
SQLITE_SCANSTAT_SELECTID = 5,
|
|
15
|
+
SQLITE_SCANSTAT_PARENTID = 6,
|
|
16
|
+
SQLITE_SCANSTAT_NCYCLE = 7,
|
|
17
|
+
}
|
|
18
|
+
|
|
8
19
|
declare namespace BetterSqlite3 {
|
|
9
20
|
interface Statement<BindParameters extends unknown[], Result = unknown> {
|
|
10
21
|
database: Database;
|
|
@@ -23,6 +34,15 @@ declare namespace BetterSqlite3 {
|
|
|
23
34
|
bind(...params: BindParameters): this;
|
|
24
35
|
columns(): ColumnDefinition[];
|
|
25
36
|
safeIntegers(toggleState?: boolean): this;
|
|
37
|
+
scanStatusV2(idx: number, opcode: ScanStatOpcode.SQLITE_SCANSTAT_NAME, resetFlag: number): string | undefined;
|
|
38
|
+
scanStatusV2(idx: number, opcode: ScanStatOpcode.SQLITE_SCANSTAT_EXPLAIN, resetFlag: number): string | undefined;
|
|
39
|
+
scanStatusV2(idx: number, opcode: ScanStatOpcode.SQLITE_SCANSTAT_NLOOP, resetFlag: number): number | undefined;
|
|
40
|
+
scanStatusV2(idx: number, opcode: ScanStatOpcode.SQLITE_SCANSTAT_NVISIT, resetFlag: number): number | undefined;
|
|
41
|
+
scanStatusV2(idx: number, opcode: ScanStatOpcode.SQLITE_SCANSTAT_EST, resetFlag: number): number | undefined;
|
|
42
|
+
scanStatusV2(idx: number, opcode: ScanStatOpcode.SQLITE_SCANSTAT_SELECTID, resetFlag: number): number | undefined;
|
|
43
|
+
scanStatusV2(idx: number, opcode: ScanStatOpcode.SQLITE_SCANSTAT_PARENTID, resetFlag: number): number | undefined;
|
|
44
|
+
scanStatusV2(idx: number, opcode: ScanStatOpcode.SQLITE_SCANSTAT_NCYCLE, resetFlag: number): number | undefined;
|
|
45
|
+
scanStatusV2(idx: number, opcode: ScanStatOpcode, resetFlag: number): number | string | undefined;
|
|
26
46
|
}
|
|
27
47
|
|
|
28
48
|
interface ColumnDefinition {
|
|
@@ -89,6 +109,16 @@ declare namespace BetterSqlite3 {
|
|
|
89
109
|
prototype: Database;
|
|
90
110
|
|
|
91
111
|
SqliteError: typeof SqliteError;
|
|
112
|
+
|
|
113
|
+
// scanstatus constants
|
|
114
|
+
SQLITE_SCANSTAT_NLOOP: ScanStatOpcode.SQLITE_SCANSTAT_NLOOP;
|
|
115
|
+
SQLITE_SCANSTAT_NVISIT: ScanStatOpcode.SQLITE_SCANSTAT_NVISIT;
|
|
116
|
+
SQLITE_SCANSTAT_EST: ScanStatOpcode.SQLITE_SCANSTAT_EST;
|
|
117
|
+
SQLITE_SCANSTAT_NAME: ScanStatOpcode.SQLITE_SCANSTAT_NAME;
|
|
118
|
+
SQLITE_SCANSTAT_EXPLAIN: ScanStatOpcode.SQLITE_SCANSTAT_EXPLAIN;
|
|
119
|
+
SQLITE_SCANSTAT_SELECTID: ScanStatOpcode.SQLITE_SCANSTAT_SELECTID;
|
|
120
|
+
SQLITE_SCANSTAT_PARENTID: ScanStatOpcode.SQLITE_SCANSTAT_PARENTID;
|
|
121
|
+
SQLITE_SCANSTAT_NCYCLE: ScanStatOpcode.SQLITE_SCANSTAT_NCYCLE;
|
|
92
122
|
}
|
|
93
123
|
}
|
|
94
124
|
|
|
@@ -63,6 +63,9 @@ const wrapTransaction = (apply, fn, db, { begin, commit, rollback, savepoint, re
|
|
|
63
63
|
before.run();
|
|
64
64
|
try {
|
|
65
65
|
const result = apply.call(fn, this, arguments);
|
|
66
|
+
if (result && typeof result.then === 'function') {
|
|
67
|
+
throw new TypeError('Transaction function cannot return a promise');
|
|
68
|
+
}
|
|
66
69
|
after.run();
|
|
67
70
|
return result;
|
|
68
71
|
} catch (ex) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rocicorp/zero-sqlite3",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"description": "better-sqlite3 on bedrock",
|
|
5
5
|
"homepage": "https://github.com/rocicorp/zero-sqlite3",
|
|
6
6
|
"author": "Rocicorp",
|
|
@@ -14,11 +14,15 @@
|
|
|
14
14
|
},
|
|
15
15
|
"files": [
|
|
16
16
|
"binding.gyp",
|
|
17
|
-
"src
|
|
17
|
+
"src/**/*.[ch]pp",
|
|
18
18
|
"lib/**",
|
|
19
19
|
"deps/**",
|
|
20
20
|
"shell.sh"
|
|
21
21
|
],
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": "20.x || 22.x || 23.x || 24.x",
|
|
24
|
+
"bun": ">=1.1.0"
|
|
25
|
+
},
|
|
22
26
|
"types": "lib/index.d.ts",
|
|
23
27
|
"dependencies": {
|
|
24
28
|
"bindings": "^1.5.0",
|
|
@@ -26,7 +30,7 @@
|
|
|
26
30
|
},
|
|
27
31
|
"overrides": {
|
|
28
32
|
"prebuild": {
|
|
29
|
-
"node-abi": "4.
|
|
33
|
+
"node-abi": "4.13.1"
|
|
30
34
|
}
|
|
31
35
|
},
|
|
32
36
|
"devDependencies": {
|
|
@@ -35,7 +39,7 @@
|
|
|
35
39
|
"fs-extra": "^11.1.1",
|
|
36
40
|
"mocha": "^10.2.0",
|
|
37
41
|
"nodemark": "^0.3.0",
|
|
38
|
-
"prebuild": "^13.0.
|
|
42
|
+
"prebuild": "^13.0.1",
|
|
39
43
|
"sqlite": "^5.0.1",
|
|
40
44
|
"sqlite3": "^5.1.6"
|
|
41
45
|
},
|
|
@@ -43,12 +47,9 @@
|
|
|
43
47
|
"install": "prebuild-install || node-gyp rebuild --release",
|
|
44
48
|
"build-release": "node-gyp rebuild --release",
|
|
45
49
|
"build-debug": "node-gyp rebuild --debug",
|
|
46
|
-
"rebuild-release": "npm run lzz && npm run build-release",
|
|
47
|
-
"rebuild-debug": "npm run lzz && npm run build-debug",
|
|
48
50
|
"test": "mocha --exit --slow=75 --timeout=5000",
|
|
49
51
|
"benchmark": "node benchmark",
|
|
50
|
-
"download": "bash ./deps/download.sh"
|
|
51
|
-
"lzz": "lzz -hx hpp -sx cpp -k BETTER_SQLITE3 -d -hl -sl -e ./src/better_sqlite3.lzz"
|
|
52
|
+
"download": "bash ./deps/download.sh"
|
|
52
53
|
},
|
|
53
54
|
"license": "MIT",
|
|
54
55
|
"keywords": [
|
package/src/addon.cpp
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
struct Addon {
|
|
2
|
+
explicit Addon(v8::Isolate* isolate) :
|
|
3
|
+
privileged_info(NULL),
|
|
4
|
+
next_id(0),
|
|
5
|
+
cs(isolate) {}
|
|
6
|
+
|
|
7
|
+
static void Cleanup(void* ptr) {
|
|
8
|
+
Addon* addon = static_cast<Addon*>(ptr);
|
|
9
|
+
for (Database* db : addon->dbs) db->CloseHandles();
|
|
10
|
+
addon->dbs.clear();
|
|
11
|
+
delete addon;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
inline sqlite3_uint64 NextId() {
|
|
15
|
+
return next_id++;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
static void ConfigureURI() {
|
|
19
|
+
static std::once_flag init_flag;
|
|
20
|
+
std::call_once(init_flag, [](){
|
|
21
|
+
const char* env = getenv("SQLITE_USE_URI");
|
|
22
|
+
if (env != NULL) {
|
|
23
|
+
if (strcmp(env, "1") == 0) {
|
|
24
|
+
int status = sqlite3_config(SQLITE_CONFIG_URI, 1);
|
|
25
|
+
assert(status == SQLITE_OK); ((void)status);
|
|
26
|
+
} else if (strcmp(env, "0") == 0) {
|
|
27
|
+
int status = sqlite3_config(SQLITE_CONFIG_URI, 0);
|
|
28
|
+
assert(status == SQLITE_OK); ((void)status);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
static NODE_METHOD(JS_setErrorConstructor) {
|
|
35
|
+
REQUIRE_ARGUMENT_FUNCTION(first, v8::Local<v8::Function> SqliteError);
|
|
36
|
+
OnlyAddon->SqliteError.Reset(OnlyIsolate, SqliteError);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
v8::Global<v8::Function> Statement;
|
|
40
|
+
v8::Global<v8::Function> StatementIterator;
|
|
41
|
+
v8::Global<v8::Function> Backup;
|
|
42
|
+
v8::Global<v8::Function> SqliteError;
|
|
43
|
+
NODE_ARGUMENTS_POINTER privileged_info;
|
|
44
|
+
sqlite3_uint64 next_id;
|
|
45
|
+
CS cs;
|
|
46
|
+
std::set<Database*, Database::CompareDatabase> dbs;
|
|
47
|
+
};
|