Skip to content

Commit

Permalink
Issue WiseLibs#1021: Expose sqlite3 metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
code-ape committed Dec 31, 2023
1 parent 2babc21 commit 65d8966
Show file tree
Hide file tree
Showing 6 changed files with 189 additions and 1 deletion.
5 changes: 5 additions & 0 deletions lib/database.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ function Database(filenameGiven, options) {

Object.defineProperties(this, {
[util.cppdb]: { value: new addon.Database(filename, filenameGiven, anonymous, readonly, fileMustExist, timeout, verbose || null, buffer || null) },
metadata: {
value: addon.metadata,
writable: false,
enumerable: true,
},
...wrappers.getters,
});
}
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"sqlite3": "^5.1.6"
},
"scripts": {
"install": "prebuild-install || node-gyp rebuild --release",
"install": "prebuild-install || npm run build-release",
"build-release": "node-gyp rebuild --release",
"build-debug": "node-gyp rebuild --debug",
"rebuild-release": "npm run lzz && npm run build-release",
Expand Down
56 changes: 56 additions & 0 deletions src/better_sqlite3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,62 @@ NODE_MODULE_INIT(/* exports, context */) {
exports->Set(context, InternalizedFromLatin1(isolate, "Backup"), Backup::Init(isolate, data)).FromJust();
exports->Set(context, InternalizedFromLatin1(isolate, "setErrorConstructor"), v8::FunctionTemplate::New(isolate, Addon::JS_setErrorConstructor, data)->GetFunction(context).ToLocalChecked()).FromJust();

// Export sqlite3 metadata
v8::Local<v8::Object> metadata = v8::Object::New(isolate);
exports->Set(context, InternalizedFromLatin1(isolate, "metadata"), metadata).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_READONLY"), v8::Integer::New(isolate, SQLITE_OPEN_READONLY)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_READWRITE"), v8::Integer::New(isolate, SQLITE_OPEN_READWRITE)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_CREATE"), v8::Integer::New(isolate, SQLITE_OPEN_CREATE)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_FULLMUTEX"), v8::Integer::New(isolate, SQLITE_OPEN_FULLMUTEX)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_URI"), v8::Integer::New(isolate, SQLITE_OPEN_URI)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_SHAREDCACHE"), v8::Integer::New(isolate, SQLITE_OPEN_SHAREDCACHE)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_PRIVATECACHE"), v8::Integer::New(isolate, SQLITE_OPEN_PRIVATECACHE)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_VERSION"), v8::String::NewFromUtf8(isolate, SQLITE_VERSION).ToLocalChecked()).FromJust();
#ifdef SQLITE_SOURCE_ID
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_SOURCE_ID"), v8::String::NewFromUtf8(isolate, SQLITE_SOURCE_ID).ToLocalChecked()).FromJust();
#endif
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_VERSION_NUMBER"), v8::Integer::New(isolate, SQLITE_VERSION_NUMBER)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_READWRITE"), v8::Integer::New(isolate, SQLITE_OPEN_READWRITE)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OK"), v8::Integer::New(isolate, SQLITE_OK)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_ERROR"), v8::Integer::New(isolate, SQLITE_ERROR)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_INTERNAL"), v8::Integer::New(isolate, SQLITE_INTERNAL)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_PERM"), v8::Integer::New(isolate, SQLITE_PERM)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_ABORT"), v8::Integer::New(isolate, SQLITE_ABORT)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_BUSY"), v8::Integer::New(isolate, SQLITE_BUSY)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LOCKED"), v8::Integer::New(isolate, SQLITE_LOCKED)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_NOMEM"), v8::Integer::New(isolate, SQLITE_NOMEM)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_READONLY"), v8::Integer::New(isolate, SQLITE_READONLY)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_INTERRUPT"), v8::Integer::New(isolate, SQLITE_INTERRUPT)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_IOERR"), v8::Integer::New(isolate, SQLITE_IOERR)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_CORRUPT"), v8::Integer::New(isolate, SQLITE_CORRUPT)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_NOTFOUND"), v8::Integer::New(isolate, SQLITE_NOTFOUND)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_FULL"), v8::Integer::New(isolate, SQLITE_FULL)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_CANTOPEN"), v8::Integer::New(isolate, SQLITE_CANTOPEN)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_PROTOCOL"), v8::Integer::New(isolate, SQLITE_PROTOCOL)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_EMPTY"), v8::Integer::New(isolate, SQLITE_EMPTY)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_SCHEMA"), v8::Integer::New(isolate, SQLITE_SCHEMA)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_TOOBIG"), v8::Integer::New(isolate, SQLITE_TOOBIG)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_CONSTRAINT"), v8::Integer::New(isolate, SQLITE_CONSTRAINT)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_MISMATCH"), v8::Integer::New(isolate, SQLITE_MISMATCH)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_MISUSE"), v8::Integer::New(isolate, SQLITE_MISUSE)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_NOLFS"), v8::Integer::New(isolate, SQLITE_NOLFS)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_AUTH"), v8::Integer::New(isolate, SQLITE_AUTH)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_FORMAT"), v8::Integer::New(isolate, SQLITE_FORMAT)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_RANGE"), v8::Integer::New(isolate, SQLITE_RANGE)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_NOTADB"), v8::Integer::New(isolate, SQLITE_NOTADB)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_LENGTH"), v8::Integer::New(isolate, SQLITE_LIMIT_LENGTH)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_SQL_LENGTH"), v8::Integer::New(isolate, SQLITE_LIMIT_SQL_LENGTH)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_COLUMN"), v8::Integer::New(isolate, SQLITE_LIMIT_COLUMN)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_EXPR_DEPTH"), v8::Integer::New(isolate, SQLITE_LIMIT_EXPR_DEPTH)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_COMPOUND_SELECT"), v8::Integer::New(isolate, SQLITE_LIMIT_COMPOUND_SELECT)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_VDBE_OP"), v8::Integer::New(isolate, SQLITE_LIMIT_VDBE_OP)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_FUNCTION_ARG"), v8::Integer::New(isolate, SQLITE_LIMIT_FUNCTION_ARG)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_ATTACHED"), v8::Integer::New(isolate, SQLITE_LIMIT_ATTACHED)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_LIKE_PATTERN_LENGTH"), v8::Integer::New(isolate, SQLITE_LIMIT_LIKE_PATTERN_LENGTH)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_VARIABLE_NUMBER"), v8::Integer::New(isolate, SQLITE_LIMIT_VARIABLE_NUMBER)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_TRIGGER_DEPTH"), v8::Integer::New(isolate, SQLITE_LIMIT_TRIGGER_DEPTH)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_WORKER_THREADS"), v8::Integer::New(isolate, SQLITE_LIMIT_WORKER_THREADS)).FromJust();

// Store addon instance data.
addon->Statement.Reset(isolate, exports->Get(context, InternalizedFromLatin1(isolate, "Statement")).ToLocalChecked().As<v8::Function>());
addon->StatementIterator.Reset(isolate, exports->Get(context, InternalizedFromLatin1(isolate, "StatementIterator")).ToLocalChecked().As<v8::Function>());
Expand Down
56 changes: 56 additions & 0 deletions src/better_sqlite3.lzz
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,62 @@ NODE_MODULE_INIT(/* exports, context */) {
exports->Set(context, InternalizedFromLatin1(isolate, "Backup"), Backup::Init(isolate, data)).FromJust();
exports->Set(context, InternalizedFromLatin1(isolate, "setErrorConstructor"), v8::FunctionTemplate::New(isolate, Addon::JS_setErrorConstructor, data)->GetFunction(context).ToLocalChecked()).FromJust();

// Export sqlite3 metadata
v8::Local<v8::Object> metadata = v8::Object::New(isolate);
exports->Set(context, InternalizedFromLatin1(isolate, "metadata"), metadata).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_READONLY"), v8::Integer::New(isolate, SQLITE_OPEN_READONLY)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_READWRITE"), v8::Integer::New(isolate, SQLITE_OPEN_READWRITE)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_CREATE"), v8::Integer::New(isolate, SQLITE_OPEN_CREATE)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_FULLMUTEX"), v8::Integer::New(isolate, SQLITE_OPEN_FULLMUTEX)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_URI"), v8::Integer::New(isolate, SQLITE_OPEN_URI)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_SHAREDCACHE"), v8::Integer::New(isolate, SQLITE_OPEN_SHAREDCACHE)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_PRIVATECACHE"), v8::Integer::New(isolate, SQLITE_OPEN_PRIVATECACHE)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_VERSION"), v8::String::NewFromUtf8(isolate, SQLITE_VERSION).ToLocalChecked()).FromJust();
#ifdef SQLITE_SOURCE_ID
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_SOURCE_ID"), v8::String::NewFromUtf8(isolate, SQLITE_SOURCE_ID).ToLocalChecked()).FromJust();
#endif
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_VERSION_NUMBER"), v8::Integer::New(isolate, SQLITE_VERSION_NUMBER)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OPEN_READWRITE"), v8::Integer::New(isolate, SQLITE_OPEN_READWRITE)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_OK"), v8::Integer::New(isolate, SQLITE_OK)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_ERROR"), v8::Integer::New(isolate, SQLITE_ERROR)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_INTERNAL"), v8::Integer::New(isolate, SQLITE_INTERNAL)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_PERM"), v8::Integer::New(isolate, SQLITE_PERM)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_ABORT"), v8::Integer::New(isolate, SQLITE_ABORT)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_BUSY"), v8::Integer::New(isolate, SQLITE_BUSY)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LOCKED"), v8::Integer::New(isolate, SQLITE_LOCKED)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_NOMEM"), v8::Integer::New(isolate, SQLITE_NOMEM)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_READONLY"), v8::Integer::New(isolate, SQLITE_READONLY)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_INTERRUPT"), v8::Integer::New(isolate, SQLITE_INTERRUPT)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_IOERR"), v8::Integer::New(isolate, SQLITE_IOERR)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_CORRUPT"), v8::Integer::New(isolate, SQLITE_CORRUPT)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_NOTFOUND"), v8::Integer::New(isolate, SQLITE_NOTFOUND)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_FULL"), v8::Integer::New(isolate, SQLITE_FULL)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_CANTOPEN"), v8::Integer::New(isolate, SQLITE_CANTOPEN)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_PROTOCOL"), v8::Integer::New(isolate, SQLITE_PROTOCOL)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_EMPTY"), v8::Integer::New(isolate, SQLITE_EMPTY)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_SCHEMA"), v8::Integer::New(isolate, SQLITE_SCHEMA)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_TOOBIG"), v8::Integer::New(isolate, SQLITE_TOOBIG)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_CONSTRAINT"), v8::Integer::New(isolate, SQLITE_CONSTRAINT)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_MISMATCH"), v8::Integer::New(isolate, SQLITE_MISMATCH)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_MISUSE"), v8::Integer::New(isolate, SQLITE_MISUSE)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_NOLFS"), v8::Integer::New(isolate, SQLITE_NOLFS)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_AUTH"), v8::Integer::New(isolate, SQLITE_AUTH)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_FORMAT"), v8::Integer::New(isolate, SQLITE_FORMAT)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_RANGE"), v8::Integer::New(isolate, SQLITE_RANGE)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_NOTADB"), v8::Integer::New(isolate, SQLITE_NOTADB)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_LENGTH"), v8::Integer::New(isolate, SQLITE_LIMIT_LENGTH)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_SQL_LENGTH"), v8::Integer::New(isolate, SQLITE_LIMIT_SQL_LENGTH)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_COLUMN"), v8::Integer::New(isolate, SQLITE_LIMIT_COLUMN)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_EXPR_DEPTH"), v8::Integer::New(isolate, SQLITE_LIMIT_EXPR_DEPTH)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_COMPOUND_SELECT"), v8::Integer::New(isolate, SQLITE_LIMIT_COMPOUND_SELECT)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_VDBE_OP"), v8::Integer::New(isolate, SQLITE_LIMIT_VDBE_OP)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_FUNCTION_ARG"), v8::Integer::New(isolate, SQLITE_LIMIT_FUNCTION_ARG)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_ATTACHED"), v8::Integer::New(isolate, SQLITE_LIMIT_ATTACHED)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_LIKE_PATTERN_LENGTH"), v8::Integer::New(isolate, SQLITE_LIMIT_LIKE_PATTERN_LENGTH)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_VARIABLE_NUMBER"), v8::Integer::New(isolate, SQLITE_LIMIT_VARIABLE_NUMBER)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_TRIGGER_DEPTH"), v8::Integer::New(isolate, SQLITE_LIMIT_TRIGGER_DEPTH)).FromJust();
metadata->Set(context, InternalizedFromLatin1(isolate, "SQLITE_LIMIT_WORKER_THREADS"), v8::Integer::New(isolate, SQLITE_LIMIT_WORKER_THREADS)).FromJust();

// Store addon instance data.
addon->Statement.Reset(isolate, exports->Get(context, InternalizedFromLatin1(isolate, "Statement")).ToLocalChecked().As<v8::Function>());
addon->StatementIterator.Reset(isolate, exports->Get(context, InternalizedFromLatin1(isolate, "StatementIterator")).ToLocalChecked().As<v8::Function>());
Expand Down
6 changes: 6 additions & 0 deletions test/12.database.pragma.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,10 @@ describe('Database#pragma()', function () {
it('should return undefined if no rows exist and simpler results are desired', function () {
expect(this.db.pragma('table_info', { simple: true })).to.be.undefined;
});
// Added for issue: https://github.com/WiseLibs/better-sqlite3/issues/1021
it('should return sqlite3 compile_options', function () {
const compileOptionRows = this.db.pragma('compile_options')
const compileOption = compileOptionRows.map((x) => x.compile_options)
expect(compileOption).to.have.length(57)
});
});
65 changes: 65 additions & 0 deletions test/51.metadata.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
'use strict';
const Database = require('../lib');

describe('version', function () {
beforeEach(function () {
this.db = new Database(util.next());
});
afterEach(function () {
this.db.close();
});
// Added for issue: https://github.com/WiseLibs/better-sqlite3/issues/1021
it('can get metadata', function () {
expect(this.db.metadata).to.deep.equal({
SQLITE_ABORT: 4,
SQLITE_AUTH: 23,
SQLITE_BUSY: 5,
SQLITE_CANTOPEN: 14,
SQLITE_CONSTRAINT: 19,
SQLITE_CORRUPT: 11,
SQLITE_EMPTY: 16,
SQLITE_ERROR: 1,
SQLITE_FORMAT: 24,
SQLITE_FULL: 13,
SQLITE_INTERNAL: 2,
SQLITE_INTERRUPT: 9,
SQLITE_IOERR: 10,
SQLITE_LIMIT_ATTACHED: 7,
SQLITE_LIMIT_COLUMN: 2,
SQLITE_LIMIT_COMPOUND_SELECT: 4,
SQLITE_LIMIT_EXPR_DEPTH: 3,
SQLITE_LIMIT_FUNCTION_ARG: 6,
SQLITE_LIMIT_LENGTH: 0,
SQLITE_LIMIT_LIKE_PATTERN_LENGTH: 8,
SQLITE_LIMIT_SQL_LENGTH: 1,
SQLITE_LIMIT_TRIGGER_DEPTH: 10,
SQLITE_LIMIT_VARIABLE_NUMBER: 9,
SQLITE_LIMIT_VDBE_OP: 5,
SQLITE_LIMIT_WORKER_THREADS: 11,
SQLITE_LOCKED: 6,
SQLITE_MISMATCH: 20,
SQLITE_MISUSE: 21,
SQLITE_NOLFS: 22,
SQLITE_NOMEM: 7,
SQLITE_NOTADB: 26,
SQLITE_NOTFOUND: 12,
SQLITE_OK: 0,
SQLITE_OPEN_CREATE: 4,
SQLITE_OPEN_FULLMUTEX: 65536,
SQLITE_OPEN_PRIVATECACHE: 262144,
SQLITE_OPEN_READONLY: 1,
SQLITE_OPEN_READWRITE: 2,
SQLITE_OPEN_SHAREDCACHE: 131072,
SQLITE_OPEN_URI: 64,
SQLITE_PERM: 3,
SQLITE_PROTOCOL: 15,
SQLITE_RANGE: 25,
SQLITE_READONLY: 8,
SQLITE_SCHEMA: 17,
SQLITE_SOURCE_ID: "2023-11-24 11:41:44 ebead0e7230cd33bcec9f95d2183069565b9e709bf745c9b5db65cc0cbf92c0f",
SQLITE_TOOBIG: 18,
SQLITE_VERSION: "3.44.2",
SQLITE_VERSION_NUMBER: 3044002,
})
});
});

0 comments on commit 65d8966

Please sign in to comment.