better-sqlite3-multiple-ciphers 7.4.7-beta.0 → 7.5.1-beta.0

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.
Files changed (81) hide show
  1. package/README.md +8 -6
  2. package/deps/download.sh +111 -108
  3. package/deps/setup.ps1 +10 -12
  4. package/deps/sqlite3/sqlite3.c +272560 -0
  5. package/deps/sqlite3/sqlite3.h +12770 -0
  6. package/deps/sqlite3/sqlite3ext.h +675 -0
  7. package/deps/sqlite3.gyp +17 -7
  8. package/deps/symlink.js +7 -4
  9. package/lib/database.js +17 -6
  10. package/lib/sqlite-error.js +1 -2
  11. package/package.json +11 -5
  12. package/src/better_sqlite3.cpp +46 -35
  13. package/src/better_sqlite3.hpp +40 -38
  14. package/.gitattributes +0 -1
  15. package/.github/workflows/prebuild.yml +0 -49
  16. package/.github/workflows/test.yml +0 -59
  17. package/benchmark/benchmark.js +0 -31
  18. package/benchmark/drivers.js +0 -21
  19. package/benchmark/index.js +0 -83
  20. package/benchmark/seed.js +0 -47
  21. package/benchmark/trials.js +0 -65
  22. package/benchmark/types/insert.js +0 -16
  23. package/benchmark/types/select-all.js +0 -14
  24. package/benchmark/types/select-iterate.js +0 -23
  25. package/benchmark/types/select.js +0 -14
  26. package/benchmark/types/transaction.js +0 -40
  27. package/deps/extract.js +0 -16
  28. package/deps/sqlite3.tar.gz +0 -0
  29. package/docs/api.md +0 -645
  30. package/docs/benchmark.md +0 -38
  31. package/docs/compilation.md +0 -76
  32. package/docs/integer.md +0 -79
  33. package/docs/performance.md +0 -39
  34. package/docs/threads.md +0 -97
  35. package/docs/tips.md +0 -35
  36. package/docs/troubleshooting.md +0 -23
  37. package/docs/unsafe.md +0 -16
  38. package/src/better_sqlite3.lzz +0 -88
  39. package/src/objects/backup.lzz +0 -138
  40. package/src/objects/database.lzz +0 -468
  41. package/src/objects/statement-iterator.lzz +0 -138
  42. package/src/objects/statement.lzz +0 -323
  43. package/src/util/bind-map.lzz +0 -73
  44. package/src/util/binder.lzz +0 -190
  45. package/src/util/constants.lzz +0 -151
  46. package/src/util/custom-aggregate.lzz +0 -121
  47. package/src/util/custom-function.lzz +0 -59
  48. package/src/util/custom-table.lzz +0 -397
  49. package/src/util/data-converter.lzz +0 -17
  50. package/src/util/data.lzz +0 -145
  51. package/src/util/macros.lzz +0 -159
  52. package/src/util/query-macros.lzz +0 -71
  53. package/test/00.setup.js +0 -25
  54. package/test/01.sqlite-error.js +0 -27
  55. package/test/10.database.open.js +0 -159
  56. package/test/11.database.close.js +0 -68
  57. package/test/12.database.pragma.js +0 -65
  58. package/test/13.database.prepare.js +0 -60
  59. package/test/14.database.exec.js +0 -46
  60. package/test/20.statement.run.js +0 -170
  61. package/test/21.statement.get.js +0 -109
  62. package/test/22.statement.all.js +0 -129
  63. package/test/23.statement.iterate.js +0 -223
  64. package/test/24.statement.bind.js +0 -107
  65. package/test/25.statement.columns.js +0 -46
  66. package/test/30.database.transaction.js +0 -157
  67. package/test/31.database.checkpoint.js +0 -62
  68. package/test/32.database.function.js +0 -211
  69. package/test/33.database.aggregate.js +0 -603
  70. package/test/34.database.table.js +0 -671
  71. package/test/35.database.load-extension.js +0 -75
  72. package/test/36.database.backup.js +0 -240
  73. package/test/37.database.serialize.js +0 -81
  74. package/test/40.bigints.js +0 -145
  75. package/test/41.at-exit.js +0 -52
  76. package/test/42.integrity.js +0 -531
  77. package/test/43.verbose.js +0 -100
  78. package/test/44.worker-threads.js +0 -66
  79. package/test/45.unsafe-mode.js +0 -52
  80. package/test/46.encryption.js +0 -69
  81. package/test/50.misc.js +0 -44
@@ -1,151 +0,0 @@
1
- class CS {
2
- public:
3
-
4
- v8::Local<v8::String> Code(v8::Isolate* isolate, int code) {
5
- auto element = codes.find(code);
6
- if (element != codes.end()) return element->second.Get(isolate);
7
- return StringFromUtf8(isolate, (std::string("UNKNOWN_SQLITE_ERROR_") + std::to_string(code)).c_str(), -1);
8
- }
9
-
10
- explicit CS(v8::Isolate* isolate) {
11
- SetString(isolate, database, "database");
12
- SetString(isolate, reader, "reader");
13
- SetString(isolate, source, "source");
14
- SetString(isolate, memory, "memory");
15
- SetString(isolate, readonly, "readonly");
16
- SetString(isolate, name, "name");
17
- SetString(isolate, next, "next");
18
- SetString(isolate, length, "length");
19
- SetString(isolate, done, "done");
20
- SetString(isolate, value, "value");
21
- SetString(isolate, changes, "changes");
22
- SetString(isolate, lastInsertRowid, "lastInsertRowid");
23
- SetString(isolate, statement, "statement");
24
- SetString(isolate, column, "column");
25
- SetString(isolate, table, "table");
26
- SetString(isolate, type, "type");
27
- SetString(isolate, totalPages, "totalPages");
28
- SetString(isolate, remainingPages, "remainingPages");
29
-
30
- SetCode(isolate, SQLITE_OK, "SQLITE_OK");
31
- SetCode(isolate, SQLITE_ERROR, "SQLITE_ERROR");
32
- SetCode(isolate, SQLITE_INTERNAL, "SQLITE_INTERNAL");
33
- SetCode(isolate, SQLITE_PERM, "SQLITE_PERM");
34
- SetCode(isolate, SQLITE_ABORT, "SQLITE_ABORT");
35
- SetCode(isolate, SQLITE_BUSY, "SQLITE_BUSY");
36
- SetCode(isolate, SQLITE_LOCKED, "SQLITE_LOCKED");
37
- SetCode(isolate, SQLITE_NOMEM, "SQLITE_NOMEM");
38
- SetCode(isolate, SQLITE_READONLY, "SQLITE_READONLY");
39
- SetCode(isolate, SQLITE_INTERRUPT, "SQLITE_INTERRUPT");
40
- SetCode(isolate, SQLITE_IOERR, "SQLITE_IOERR");
41
- SetCode(isolate, SQLITE_CORRUPT, "SQLITE_CORRUPT");
42
- SetCode(isolate, SQLITE_NOTFOUND, "SQLITE_NOTFOUND");
43
- SetCode(isolate, SQLITE_FULL, "SQLITE_FULL");
44
- SetCode(isolate, SQLITE_CANTOPEN, "SQLITE_CANTOPEN");
45
- SetCode(isolate, SQLITE_PROTOCOL, "SQLITE_PROTOCOL");
46
- SetCode(isolate, SQLITE_EMPTY, "SQLITE_EMPTY");
47
- SetCode(isolate, SQLITE_SCHEMA, "SQLITE_SCHEMA");
48
- SetCode(isolate, SQLITE_TOOBIG, "SQLITE_TOOBIG");
49
- SetCode(isolate, SQLITE_CONSTRAINT, "SQLITE_CONSTRAINT");
50
- SetCode(isolate, SQLITE_MISMATCH, "SQLITE_MISMATCH");
51
- SetCode(isolate, SQLITE_MISUSE, "SQLITE_MISUSE");
52
- SetCode(isolate, SQLITE_NOLFS, "SQLITE_NOLFS");
53
- SetCode(isolate, SQLITE_AUTH, "SQLITE_AUTH");
54
- SetCode(isolate, SQLITE_FORMAT, "SQLITE_FORMAT");
55
- SetCode(isolate, SQLITE_RANGE, "SQLITE_RANGE");
56
- SetCode(isolate, SQLITE_NOTADB, "SQLITE_NOTADB");
57
- SetCode(isolate, SQLITE_NOTICE, "SQLITE_NOTICE");
58
- SetCode(isolate, SQLITE_WARNING, "SQLITE_WARNING");
59
- SetCode(isolate, SQLITE_ROW, "SQLITE_ROW");
60
- SetCode(isolate, SQLITE_DONE, "SQLITE_DONE");
61
- SetCode(isolate, SQLITE_IOERR_READ, "SQLITE_IOERR_READ");
62
- SetCode(isolate, SQLITE_IOERR_SHORT_READ, "SQLITE_IOERR_SHORT_READ");
63
- SetCode(isolate, SQLITE_IOERR_WRITE, "SQLITE_IOERR_WRITE");
64
- SetCode(isolate, SQLITE_IOERR_FSYNC, "SQLITE_IOERR_FSYNC");
65
- SetCode(isolate, SQLITE_IOERR_DIR_FSYNC, "SQLITE_IOERR_DIR_FSYNC");
66
- SetCode(isolate, SQLITE_IOERR_TRUNCATE, "SQLITE_IOERR_TRUNCATE");
67
- SetCode(isolate, SQLITE_IOERR_FSTAT, "SQLITE_IOERR_FSTAT");
68
- SetCode(isolate, SQLITE_IOERR_UNLOCK, "SQLITE_IOERR_UNLOCK");
69
- SetCode(isolate, SQLITE_IOERR_RDLOCK, "SQLITE_IOERR_RDLOCK");
70
- SetCode(isolate, SQLITE_IOERR_DELETE, "SQLITE_IOERR_DELETE");
71
- SetCode(isolate, SQLITE_IOERR_BLOCKED, "SQLITE_IOERR_BLOCKED");
72
- SetCode(isolate, SQLITE_IOERR_NOMEM, "SQLITE_IOERR_NOMEM");
73
- SetCode(isolate, SQLITE_IOERR_ACCESS, "SQLITE_IOERR_ACCESS");
74
- SetCode(isolate, SQLITE_IOERR_CHECKRESERVEDLOCK, "SQLITE_IOERR_CHECKRESERVEDLOCK");
75
- SetCode(isolate, SQLITE_IOERR_LOCK, "SQLITE_IOERR_LOCK");
76
- SetCode(isolate, SQLITE_IOERR_CLOSE, "SQLITE_IOERR_CLOSE");
77
- SetCode(isolate, SQLITE_IOERR_DIR_CLOSE, "SQLITE_IOERR_DIR_CLOSE");
78
- SetCode(isolate, SQLITE_IOERR_SHMOPEN, "SQLITE_IOERR_SHMOPEN");
79
- SetCode(isolate, SQLITE_IOERR_SHMSIZE, "SQLITE_IOERR_SHMSIZE");
80
- SetCode(isolate, SQLITE_IOERR_SHMLOCK, "SQLITE_IOERR_SHMLOCK");
81
- SetCode(isolate, SQLITE_IOERR_SHMMAP, "SQLITE_IOERR_SHMMAP");
82
- SetCode(isolate, SQLITE_IOERR_SEEK, "SQLITE_IOERR_SEEK");
83
- SetCode(isolate, SQLITE_IOERR_DELETE_NOENT, "SQLITE_IOERR_DELETE_NOENT");
84
- SetCode(isolate, SQLITE_IOERR_MMAP, "SQLITE_IOERR_MMAP");
85
- SetCode(isolate, SQLITE_IOERR_GETTEMPPATH, "SQLITE_IOERR_GETTEMPPATH");
86
- SetCode(isolate, SQLITE_IOERR_CONVPATH, "SQLITE_IOERR_CONVPATH");
87
- SetCode(isolate, SQLITE_IOERR_VNODE, "SQLITE_IOERR_VNODE");
88
- SetCode(isolate, SQLITE_IOERR_AUTH, "SQLITE_IOERR_AUTH");
89
- SetCode(isolate, SQLITE_LOCKED_SHAREDCACHE, "SQLITE_LOCKED_SHAREDCACHE");
90
- SetCode(isolate, SQLITE_BUSY_RECOVERY, "SQLITE_BUSY_RECOVERY");
91
- SetCode(isolate, SQLITE_BUSY_SNAPSHOT, "SQLITE_BUSY_SNAPSHOT");
92
- SetCode(isolate, SQLITE_CANTOPEN_NOTEMPDIR, "SQLITE_CANTOPEN_NOTEMPDIR");
93
- SetCode(isolate, SQLITE_CANTOPEN_ISDIR, "SQLITE_CANTOPEN_ISDIR");
94
- SetCode(isolate, SQLITE_CANTOPEN_FULLPATH, "SQLITE_CANTOPEN_FULLPATH");
95
- SetCode(isolate, SQLITE_CANTOPEN_CONVPATH, "SQLITE_CANTOPEN_CONVPATH");
96
- SetCode(isolate, SQLITE_CORRUPT_VTAB, "SQLITE_CORRUPT_VTAB");
97
- SetCode(isolate, SQLITE_READONLY_RECOVERY, "SQLITE_READONLY_RECOVERY");
98
- SetCode(isolate, SQLITE_READONLY_CANTLOCK, "SQLITE_READONLY_CANTLOCK");
99
- SetCode(isolate, SQLITE_READONLY_ROLLBACK, "SQLITE_READONLY_ROLLBACK");
100
- SetCode(isolate, SQLITE_READONLY_DBMOVED, "SQLITE_READONLY_DBMOVED");
101
- SetCode(isolate, SQLITE_ABORT_ROLLBACK, "SQLITE_ABORT_ROLLBACK");
102
- SetCode(isolate, SQLITE_CONSTRAINT_CHECK, "SQLITE_CONSTRAINT_CHECK");
103
- SetCode(isolate, SQLITE_CONSTRAINT_COMMITHOOK, "SQLITE_CONSTRAINT_COMMITHOOK");
104
- SetCode(isolate, SQLITE_CONSTRAINT_FOREIGNKEY, "SQLITE_CONSTRAINT_FOREIGNKEY");
105
- SetCode(isolate, SQLITE_CONSTRAINT_FUNCTION, "SQLITE_CONSTRAINT_FUNCTION");
106
- SetCode(isolate, SQLITE_CONSTRAINT_NOTNULL, "SQLITE_CONSTRAINT_NOTNULL");
107
- SetCode(isolate, SQLITE_CONSTRAINT_PRIMARYKEY, "SQLITE_CONSTRAINT_PRIMARYKEY");
108
- SetCode(isolate, SQLITE_CONSTRAINT_TRIGGER, "SQLITE_CONSTRAINT_TRIGGER");
109
- SetCode(isolate, SQLITE_CONSTRAINT_UNIQUE, "SQLITE_CONSTRAINT_UNIQUE");
110
- SetCode(isolate, SQLITE_CONSTRAINT_VTAB, "SQLITE_CONSTRAINT_VTAB");
111
- SetCode(isolate, SQLITE_CONSTRAINT_ROWID, "SQLITE_CONSTRAINT_ROWID");
112
- SetCode(isolate, SQLITE_NOTICE_RECOVER_WAL, "SQLITE_NOTICE_RECOVER_WAL");
113
- SetCode(isolate, SQLITE_NOTICE_RECOVER_ROLLBACK, "SQLITE_NOTICE_RECOVER_ROLLBACK");
114
- SetCode(isolate, SQLITE_WARNING_AUTOINDEX, "SQLITE_WARNING_AUTOINDEX");
115
- SetCode(isolate, SQLITE_AUTH_USER, "SQLITE_AUTH_USER");
116
- SetCode(isolate, SQLITE_OK_LOAD_PERMANENTLY, "SQLITE_OK_LOAD_PERMANENTLY");
117
- }
118
-
119
- CopyablePersistent<v8::String> database;
120
- CopyablePersistent<v8::String> reader;
121
- CopyablePersistent<v8::String> source;
122
- CopyablePersistent<v8::String> memory;
123
- CopyablePersistent<v8::String> readonly;
124
- CopyablePersistent<v8::String> name;
125
- CopyablePersistent<v8::String> next;
126
- CopyablePersistent<v8::String> length;
127
- CopyablePersistent<v8::String> done;
128
- CopyablePersistent<v8::String> value;
129
- CopyablePersistent<v8::String> changes;
130
- CopyablePersistent<v8::String> lastInsertRowid;
131
- CopyablePersistent<v8::String> statement;
132
- CopyablePersistent<v8::String> column;
133
- CopyablePersistent<v8::String> table;
134
- CopyablePersistent<v8::String> type;
135
- CopyablePersistent<v8::String> totalPages;
136
- CopyablePersistent<v8::String> remainingPages;
137
-
138
- private:
139
-
140
- static void SetString(v8::Isolate* isolate, CopyablePersistent<v8::String>& constant, const char* str) {
141
- constant.Reset(isolate, InternalizedFromLatin1(isolate, str));
142
- }
143
-
144
- void SetCode(v8::Isolate* isolate, int code, const char* str) {
145
- codes.emplace(std::piecewise_construct,
146
- std::forward_as_tuple(code),
147
- std::forward_as_tuple(isolate, InternalizedFromLatin1(isolate, str)));
148
- }
149
-
150
- std::unordered_map<int, CopyablePersistent<v8::String> > codes;
151
- };
@@ -1,121 +0,0 @@
1
- class CustomAggregate : public CustomFunction {
2
- public:
3
-
4
- explicit CustomAggregate(
5
- v8::Isolate* isolate,
6
- Database* db,
7
- const char* name,
8
- v8::Local<v8::Value> start,
9
- v8::Local<v8::Function> step,
10
- v8::Local<v8::Value> inverse,
11
- v8::Local<v8::Value> result,
12
- bool safe_ints
13
- ) :
14
- CustomFunction(isolate, db, name, step, safe_ints),
15
- invoke_result(result->IsFunction()),
16
- invoke_start(start->IsFunction()),
17
- inverse(isolate, inverse->IsFunction() ? inverse.As<v8::Function>() : v8::Local<v8::Function>()),
18
- result(isolate, result->IsFunction() ? result.As<v8::Function>() : v8::Local<v8::Function>()),
19
- start(isolate, start) {}
20
-
21
- static void xStep(sqlite3_context* invocation, int argc, sqlite3_value** argv) {
22
- xStepBase(invocation, argc, argv, &CustomAggregate::fn);
23
- }
24
-
25
- static void xInverse(sqlite3_context* invocation, int argc, sqlite3_value** argv) {
26
- xStepBase(invocation, argc, argv, &CustomAggregate::inverse);
27
- }
28
-
29
- static void xValue(sqlite3_context* invocation) {
30
- xValueBase(invocation, false);
31
- }
32
-
33
- static void xFinal(sqlite3_context* invocation) {
34
- xValueBase(invocation, true);
35
- }
36
-
37
- private:
38
-
39
- static inline void xStepBase(sqlite3_context* invocation, int argc, sqlite3_value** argv, const CopyablePersistent<v8::Function> CustomAggregate::*ptrtm) {
40
- AGGREGATE_START();
41
-
42
- v8::Local<v8::Value> args_fast[5];
43
- v8::Local<v8::Value>* args = argc <= 4 ? args_fast : ALLOC_ARRAY<v8::Local<v8::Value>>(argc + 1);
44
- args[0] = acc->value.Get(isolate);
45
- if (argc != 0) Data::GetArgumentsJS(isolate, args + 1, argv, argc, self->safe_ints);
46
-
47
- v8::MaybeLocal<v8::Value> maybeReturnValue = (self->*ptrtm).Get(isolate)->Call(OnlyContext, v8::Undefined(isolate), argc + 1, args);
48
- if (args != args_fast) delete[] args;
49
-
50
- if (maybeReturnValue.IsEmpty()) {
51
- self->PropagateJSError(invocation);
52
- } else {
53
- v8::Local<v8::Value> returnValue = maybeReturnValue.ToLocalChecked();
54
- if (!returnValue->IsUndefined()) acc->value.Reset(isolate, returnValue);
55
- }
56
- }
57
-
58
- static inline void xValueBase(sqlite3_context* invocation, bool is_final) {
59
- AGGREGATE_START();
60
-
61
- if (!is_final) {
62
- acc->is_window = true;
63
- } else if (acc->is_window) {
64
- DestroyAccumulator(invocation);
65
- return;
66
- }
67
-
68
- v8::Local<v8::Value> result = acc->value.Get(isolate);
69
- if (self->invoke_result) {
70
- v8::MaybeLocal<v8::Value> maybeResult = self->result.Get(isolate)->Call(OnlyContext, v8::Undefined(isolate), 1, &result);
71
- if (maybeResult.IsEmpty()) {
72
- self->PropagateJSError(invocation);
73
- return;
74
- }
75
- result = maybeResult.ToLocalChecked();
76
- }
77
-
78
- Data::ResultValueFromJS(isolate, invocation, result, self);
79
- if (is_final) DestroyAccumulator(invocation);
80
- }
81
-
82
- struct Accumulator { public:
83
- CopyablePersistent<v8::Value> value;
84
- bool initialized;
85
- bool is_window;
86
- }
87
-
88
- Accumulator* GetAccumulator(sqlite3_context* invocation) {
89
- Accumulator* acc = static_cast<Accumulator*>(sqlite3_aggregate_context(invocation, sizeof(Accumulator)));
90
- if (!acc->initialized) {
91
- assert(acc->value.IsEmpty());
92
- acc->initialized = true;
93
- if (invoke_start) {
94
- v8::MaybeLocal<v8::Value> maybeSeed = start.Get(isolate).As<v8::Function>()->Call(OnlyContext, v8::Undefined(isolate), 0, NULL);
95
- if (maybeSeed.IsEmpty()) PropagateJSError(invocation);
96
- else acc->value.Reset(isolate, maybeSeed.ToLocalChecked());
97
- } else {
98
- assert(!start.IsEmpty());
99
- acc->value.Reset(isolate, start);
100
- }
101
- }
102
- return acc;
103
- }
104
-
105
- static void DestroyAccumulator(sqlite3_context* invocation) {
106
- Accumulator* acc = static_cast<Accumulator*>(sqlite3_aggregate_context(invocation, sizeof(Accumulator)));
107
- assert(acc->initialized);
108
- acc->value.Reset();
109
- }
110
-
111
- void PropagateJSError(sqlite3_context* invocation) {
112
- DestroyAccumulator(invocation);
113
- CustomFunction::PropagateJSError(invocation);
114
- }
115
-
116
- const bool invoke_result;
117
- const bool invoke_start;
118
- const CopyablePersistent<v8::Function> inverse;
119
- const CopyablePersistent<v8::Function> result;
120
- const CopyablePersistent<v8::Value> start;
121
- };
@@ -1,59 +0,0 @@
1
- class CustomFunction : protected DataConverter {
2
- public:
3
-
4
- explicit CustomFunction(
5
- v8::Isolate* isolate,
6
- Database* db,
7
- const char* name,
8
- v8::Local<v8::Function> fn,
9
- bool safe_ints
10
- ) :
11
- name(name),
12
- db(db),
13
- isolate(isolate),
14
- fn(isolate, fn),
15
- safe_ints(safe_ints) {}
16
-
17
- virtual ~CustomFunction() {}
18
-
19
- static void xDestroy(void* self) {
20
- delete static_cast<CustomFunction*>(self);
21
- }
22
-
23
- static void xFunc(sqlite3_context* invocation, int argc, sqlite3_value** argv) {
24
- FUNCTION_START();
25
-
26
- v8::Local<v8::Value> args_fast[4];
27
- v8::Local<v8::Value>* args = NULL;
28
- if (argc != 0) {
29
- args = argc <= 4 ? args_fast : ALLOC_ARRAY<v8::Local<v8::Value>>(argc);
30
- Data::GetArgumentsJS(isolate, args, argv, argc, self->safe_ints);
31
- }
32
-
33
- v8::MaybeLocal<v8::Value> maybeReturnValue = self->fn.Get(isolate)->Call(OnlyContext, v8::Undefined(isolate), argc, args);
34
- if (args != args_fast) delete[] args;
35
-
36
- if (maybeReturnValue.IsEmpty()) self->PropagateJSError(invocation);
37
- else Data::ResultValueFromJS(isolate, invocation, maybeReturnValue.ToLocalChecked(), self);
38
- }
39
-
40
- protected:
41
-
42
- void PropagateJSError(sqlite3_context* invocation) {
43
- assert(db->GetState()->was_js_error == false);
44
- db->GetState()->was_js_error = true;
45
- sqlite3_result_error(invocation, "", 0);
46
- }
47
-
48
- std::string GetDataErrorPrefix() {
49
- return std::string("User-defined function ") + name + "() returned";
50
- }
51
-
52
- private:
53
- const std::string name;
54
- Database* const db;
55
- protected:
56
- v8::Isolate* const isolate;
57
- const CopyablePersistent<v8::Function> fn;
58
- const bool safe_ints;
59
- };