diff --git a/doc/api/sqlite.md b/doc/api/sqlite.md index 897242c8f16ba2..b22e0a704df57d 100644 --- a/doc/api/sqlite.md +++ b/doc/api/sqlite.md @@ -429,11 +429,19 @@ exception. | `TEXT` | {string} | | `BLOB` | {Uint8Array} | -## SQLite constants +## `sqlite.constants` -The following constants are exported by the `node:sqlite` module. + + +* {Object} + +An object containing commonly used constants for SQLite operations. + +### SQLite constants -### SQLite Session constants +The following constants are exported by the `sqlite.constants` object. #### Conflict-resolution constants @@ -454,7 +462,7 @@ The following constants are meant for use with [`database.applyChangeset()`](#da SQLITE_CHANGESET_ABORT - Abort when a change encounters a conflict and roll back databsase. + Abort when a change encounters a conflict and roll back database. diff --git a/src/node_sqlite.cc b/src/node_sqlite.cc index dd78f4e6dacf59..92c7960d5bb060 100644 --- a/src/node_sqlite.cc +++ b/src/node_sqlite.cc @@ -1293,6 +1293,12 @@ void Session::Delete() { session_ = nullptr; } +void DefineConstants(Local target) { + NODE_DEFINE_CONSTANT(target, SQLITE_CHANGESET_OMIT); + NODE_DEFINE_CONSTANT(target, SQLITE_CHANGESET_REPLACE); + NODE_DEFINE_CONSTANT(target, SQLITE_CHANGESET_ABORT); +} + static void Initialize(Local target, Local unused, Local context, @@ -1303,6 +1309,9 @@ static void Initialize(Local target, NewFunctionTemplate(isolate, DatabaseSync::New); db_tmpl->InstanceTemplate()->SetInternalFieldCount( DatabaseSync::kInternalFieldCount); + Local constants = Object::New(isolate); + + DefineConstants(constants); SetProtoMethod(isolate, db_tmpl, "open", DatabaseSync::Open); SetProtoMethod(isolate, db_tmpl, "close", DatabaseSync::Close); @@ -1318,9 +1327,7 @@ static void Initialize(Local target, "StatementSync", StatementSync::GetConstructorTemplate(env)); - NODE_DEFINE_CONSTANT(target, SQLITE_CHANGESET_OMIT); - NODE_DEFINE_CONSTANT(target, SQLITE_CHANGESET_REPLACE); - NODE_DEFINE_CONSTANT(target, SQLITE_CHANGESET_ABORT); + target->Set(context, OneByteString(isolate, "constants"), constants).Check(); } } // namespace sqlite diff --git a/test/parallel/test-sqlite-session.js b/test/parallel/test-sqlite-session.js index 306f439939e2e0..617c0c2aa71181 100644 --- a/test/parallel/test-sqlite-session.js +++ b/test/parallel/test-sqlite-session.js @@ -3,9 +3,7 @@ require('../common'); const { DatabaseSync, - SQLITE_CHANGESET_OMIT, - SQLITE_CHANGESET_REPLACE, - SQLITE_CHANGESET_ABORT + constants, } = require('node:sqlite'); const { test, suite } = require('node:test'); @@ -165,7 +163,7 @@ suite('conflict resolution', () => { test('database.applyChangeset() - conflict with SQLITE_CHANGESET_ABORT', (t) => { const { database2, changeset } = prepareConflict(); const result = database2.applyChangeset(changeset, { - onConflict: SQLITE_CHANGESET_ABORT + onConflict: constants.SQLITE_CHANGESET_ABORT }); // When changeset is aborted due to a conflict, applyChangeset should return false t.assert.strictEqual(result, false); @@ -177,7 +175,7 @@ suite('conflict resolution', () => { test('database.applyChangeset() - conflict with SQLITE_CHANGESET_REPLACE', (t) => { const { database2, changeset } = prepareConflict(); const result = database2.applyChangeset(changeset, { - onConflict: SQLITE_CHANGESET_REPLACE + onConflict: constants.SQLITE_CHANGESET_REPLACE }); // Not aborted due to conflict, so should return true t.assert.strictEqual(result, true); @@ -189,7 +187,7 @@ suite('conflict resolution', () => { test('database.applyChangeset() - conflict with SQLITE_CHANGESET_OMIT', (t) => { const { database2, changeset } = prepareConflict(); const result = database2.applyChangeset(changeset, { - onConflict: SQLITE_CHANGESET_OMIT + onConflict: constants.SQLITE_CHANGESET_OMIT }); // Not aborted due to conflict, so should return true t.assert.strictEqual(result, true); @@ -199,12 +197,6 @@ suite('conflict resolution', () => { }); }); -test('session related constants are defined', (t) => { - t.assert.strictEqual(SQLITE_CHANGESET_OMIT, 0); - t.assert.strictEqual(SQLITE_CHANGESET_REPLACE, 1); - t.assert.strictEqual(SQLITE_CHANGESET_ABORT, 2); -}); - test('database.createSession() - filter changes', (t) => { const database1 = new DatabaseSync(':memory:'); const database2 = new DatabaseSync(':memory:'); diff --git a/test/parallel/test-sqlite.js b/test/parallel/test-sqlite.js index 825e44fb2965f7..87162526ffadcd 100644 --- a/test/parallel/test-sqlite.js +++ b/test/parallel/test-sqlite.js @@ -2,7 +2,7 @@ const { spawnPromisified } = require('../common'); const tmpdir = require('../common/tmpdir'); const { join } = require('node:path'); -const { DatabaseSync } = require('node:sqlite'); +const { DatabaseSync, constants } = require('node:sqlite'); const { suite, test } = require('node:test'); let cnt = 0; @@ -85,6 +85,12 @@ test('in-memory databases are supported', (t) => { ); }); +test('sqlite constants are defined', (t) => { + t.assert.strictEqual(constants.SQLITE_CHANGESET_OMIT, 0); + t.assert.strictEqual(constants.SQLITE_CHANGESET_REPLACE, 1); + t.assert.strictEqual(constants.SQLITE_CHANGESET_ABORT, 2); +}); + test('PRAGMAs are supported', (t) => { const db = new DatabaseSync(nextDb()); t.after(() => { db.close(); }); diff --git a/typings/internalBinding/constants.d.ts b/typings/internalBinding/constants.d.ts index 89d2a53aae2118..dc4657080ba54b 100644 --- a/typings/internalBinding/constants.d.ts +++ b/typings/internalBinding/constants.d.ts @@ -130,6 +130,11 @@ export interface ConstantsBinding { PRIORITY_HIGHEST: -20; }; }; + sqlite: { + SQLITE_CHANGESET_OMIT: 0; + SQLITE_CHANGESET_REPLACE: 1; + SQLITE_CHANGESET_ABORT: 2; + }; fs: { UV_FS_SYMLINK_DIR: 1; UV_FS_SYMLINK_JUNCTION: 2;