@rocicorp/zero-sqlite3 1.0.7 → 1.0.9

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/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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rocicorp/zero-sqlite3",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "better-sqlite3 on bedrock",
5
5
  "homepage": "https://github.com/rocicorp/zero-sqlite3",
6
6
  "author": "Rocicorp",
@@ -24,6 +24,11 @@
24
24
  "bindings": "^1.5.0",
25
25
  "prebuild-install": "^7.1.1"
26
26
  },
27
+ "overrides": {
28
+ "prebuild": {
29
+ "node-abi": "4.11.0"
30
+ }
31
+ },
27
32
  "devDependencies": {
28
33
  "chai": "^4.3.8",
29
34
  "cli-color": "^2.0.3",
@@ -73,6 +73,17 @@ NODE_MODULE_INIT(/* exports, context */) {
73
73
  exports->Set(context, InternalizedFromLatin1(isolate, "Backup"), Backup::Init(isolate, data)).FromJust();
74
74
  exports->Set(context, InternalizedFromLatin1(isolate, "setErrorConstructor"), v8::FunctionTemplate::New(isolate, Addon::JS_setErrorConstructor, data)->GetFunction(context).ToLocalChecked()).FromJust();
75
75
 
76
+ // Export SQLITE_SCANSTAT_* constants
77
+ exports->Set(context, InternalizedFromLatin1(isolate, "SQLITE_SCANSTAT_NLOOP"), v8::Int32::New(isolate, SQLITE_SCANSTAT_NLOOP)).FromJust();
78
+ exports->Set(context, InternalizedFromLatin1(isolate, "SQLITE_SCANSTAT_NVISIT"), v8::Int32::New(isolate, SQLITE_SCANSTAT_NVISIT)).FromJust();
79
+ exports->Set(context, InternalizedFromLatin1(isolate, "SQLITE_SCANSTAT_EST"), v8::Int32::New(isolate, SQLITE_SCANSTAT_EST)).FromJust();
80
+ exports->Set(context, InternalizedFromLatin1(isolate, "SQLITE_SCANSTAT_NAME"), v8::Int32::New(isolate, SQLITE_SCANSTAT_NAME)).FromJust();
81
+ exports->Set(context, InternalizedFromLatin1(isolate, "SQLITE_SCANSTAT_EXPLAIN"), v8::Int32::New(isolate, SQLITE_SCANSTAT_EXPLAIN)).FromJust();
82
+ exports->Set(context, InternalizedFromLatin1(isolate, "SQLITE_SCANSTAT_SELECTID"), v8::Int32::New(isolate, SQLITE_SCANSTAT_SELECTID)).FromJust();
83
+ exports->Set(context, InternalizedFromLatin1(isolate, "SQLITE_SCANSTAT_PARENTID"), v8::Int32::New(isolate, SQLITE_SCANSTAT_PARENTID)).FromJust();
84
+ exports->Set(context, InternalizedFromLatin1(isolate, "SQLITE_SCANSTAT_NCYCLE"), v8::Int32::New(isolate, SQLITE_SCANSTAT_NCYCLE)).FromJust();
85
+ exports->Set(context, InternalizedFromLatin1(isolate, "SQLITE_SCANSTAT_COMPLEX"), v8::Int32::New(isolate, SQLITE_SCANSTAT_COMPLEX)).FromJust();
86
+
76
87
  // Store addon instance data.
77
88
  addon->Statement.Reset(isolate, exports->Get(context, InternalizedFromLatin1(isolate, "Statement")).ToLocalChecked().As<v8::Function>());
78
89
  addon->StatementIterator.Reset(isolate, exports->Get(context, InternalizedFromLatin1(isolate, "StatementIterator")).ToLocalChecked().As<v8::Function>());
@@ -773,6 +784,7 @@ v8::Local <v8 :: Function> Statement::Init (v8::Isolate * isolate, v8::Local <v8
773
784
  SetPrototypeMethod(isolate, data, t, "raw", JS_raw);
774
785
  SetPrototypeMethod(isolate, data, t, "safeIntegers", JS_safeIntegers);
775
786
  SetPrototypeMethod(isolate, data, t, "columns", JS_columns);
787
+ SetPrototypeMethod(isolate, data, t, "scanStatusV2", JS_scanStatusV2);
776
788
  SetPrototypeGetter(isolate, data, t, "busy", JS_busy);
777
789
  return t->GetFunction( isolate -> GetCurrentContext ( ) ).ToLocalChecked();
778
790
  }
@@ -1083,9 +1095,59 @@ void Statement::JS_columns (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1083
1095
 
1084
1096
  info.GetReturnValue().Set(columns);
1085
1097
  }
1086
- #line 321 "./src/objects/statement.lzz"
1098
+ #line 322 "./src/objects/statement.lzz"
1099
+ void Statement::JS_scanStatusV2 (v8::FunctionCallbackInfo <v8 :: Value> const & info)
1100
+ #line 322 "./src/objects/statement.lzz"
1101
+ {
1102
+ Statement* stmt = node :: ObjectWrap :: Unwrap <Statement>(info.This());
1103
+ if (!stmt->db->GetState()->open) return ThrowTypeError("The database connection is not open");
1104
+ if (!stmt->alive) return ThrowTypeError("The statement has been finalized and can no longer be used");
1105
+
1106
+ int idx; if (info.Length() < (0 + 1) || !info[0]->IsInt32()) return ThrowTypeError("Expected " "first" " argument to be " "a 32-bit signed integer"); idx = (info[0].As<v8::Int32>()->Value());;
1107
+ int iScanStatusOp; if (info.Length() < (1 + 1) || !info[1]->IsInt32()) return ThrowTypeError("Expected " "second" " argument to be " "a 32-bit signed integer"); iScanStatusOp = (info[1].As<v8::Int32>()->Value());;
1108
+ int flags; if (info.Length() < (2 + 1) || !info[2]->IsInt32()) return ThrowTypeError("Expected " "third" " argument to be " "a 32-bit signed integer"); flags = (info[2].As<v8::Int32>()->Value());;
1109
+
1110
+ v8::Isolate* isolate = info.GetIsolate();;
1111
+
1112
+ // Based on iScanStatusOp, we know what type of output to expect
1113
+ int rc;
1114
+ if (iScanStatusOp == 0 || iScanStatusOp == 1 || iScanStatusOp == 5 || iScanStatusOp == 6 || iScanStatusOp == 7) {
1115
+ // NLOOP, NVISIT, SELECTID, PARENTID, NCYCLE - return sqlite3_int64
1116
+ sqlite3_int64 iOut;
1117
+ rc = sqlite3_stmt_scanstatus_v2(stmt->handle, idx, iScanStatusOp, flags, (void*)&iOut);
1118
+ if (rc == 0) {
1119
+ info.GetReturnValue().Set(stmt->safe_ints
1120
+ ? v8::BigInt::New(isolate, iOut).As<v8::Value>()
1121
+ : v8::Number::New(isolate, (double)iOut).As<v8::Value>());
1122
+ return;
1123
+ }
1124
+ } else if (iScanStatusOp == 2) {
1125
+ // EST - return double
1126
+ double dOut;
1127
+ rc = sqlite3_stmt_scanstatus_v2(stmt->handle, idx, iScanStatusOp, flags, (void*)&dOut);
1128
+ if (rc == 0) {
1129
+ info.GetReturnValue().Set(v8::Number::New(isolate, dOut));
1130
+ return;
1131
+ }
1132
+ } else if (iScanStatusOp == 3 || iScanStatusOp == 4) {
1133
+ // NAME, EXPLAIN - return const char*
1134
+ const char* zOut;
1135
+ rc = sqlite3_stmt_scanstatus_v2(stmt->handle, idx, iScanStatusOp, flags, (void*)&zOut);
1136
+ if (rc == 0 && zOut != NULL) {
1137
+ info.GetReturnValue().Set(StringFromUtf8(isolate, zOut, -1));
1138
+ return;
1139
+ } else if (rc == 0) {
1140
+ info.GetReturnValue().Set(v8::Null(isolate));
1141
+ return;
1142
+ }
1143
+ }
1144
+
1145
+ // Error or invalid operation - return undefined
1146
+ info.GetReturnValue().Set(v8::Undefined(isolate));
1147
+ }
1148
+ #line 370 "./src/objects/statement.lzz"
1087
1149
  void Statement::JS_busy (v8::Local <v8 :: Name> _, v8::PropertyCallbackInfo <v8 :: Value> const & info)
1088
- #line 321 "./src/objects/statement.lzz"
1150
+ #line 370 "./src/objects/statement.lzz"
1089
1151
  {
1090
1152
  Statement* stmt = node :: ObjectWrap :: Unwrap <Statement>(info.This());
1091
1153
  info.GetReturnValue().Set(stmt->alive && stmt->locked);
@@ -362,7 +362,9 @@ private:
362
362
  static void JS_safeIntegers (v8::FunctionCallbackInfo <v8 :: Value> const & info);
363
363
  #line 278 "./src/objects/statement.lzz"
364
364
  static void JS_columns (v8::FunctionCallbackInfo <v8 :: Value> const & info);
365
- #line 321 "./src/objects/statement.lzz"
365
+ #line 322 "./src/objects/statement.lzz"
366
+ static void JS_scanStatusV2 (v8::FunctionCallbackInfo <v8 :: Value> const & info);
367
+ #line 370 "./src/objects/statement.lzz"
366
368
  static void JS_busy (v8::Local <v8 :: Name> _, v8::PropertyCallbackInfo <v8 :: Value> const & info);
367
369
  #line 326 "./src/objects/statement.lzz"
368
370
  Database * const db;