From 8981dedc3e734dfc16b5619aebc36000dd96fbcd Mon Sep 17 00:00:00 2001 From: "Edigleysson Silva (Edy)" Date: Tue, 17 Dec 2024 14:36:58 -0300 Subject: [PATCH] sqlite: aggregate constants in a single property PR-URL: https://github.com/nodejs/node/pull/56213 Fixes: https://github.com/nodejs/node/issues/56193 Refs: https://github.com/nodejs/node/issues/56193 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Yongsheng Zhang Reviewed-By: Rafael Gonzaga Reviewed-By: Stephen Belanger --- doc/api/sqlite.md | 16 ++++++++++++---- src/node_sqlite.cc | 13 ++++++++++--- test/parallel/test-sqlite-session.js | 16 ++++------------ test/parallel/test-sqlite.js | 8 +++++++- typings/internalBinding/constants.d.ts | 5 +++++ 5 files changed, 38 insertions(+), 20 deletions(-) diff --git a/doc/api/sqlite.md b/doc/api/sqlite.md index 94bbc5d5236077..9576f112b2ec41 100644 --- a/doc/api/sqlite.md +++ b/doc/api/sqlite.md @@ -472,11 +472,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 @@ -497,7 +505,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 1238643b764415..7f5e2f89ce9dba 100644 --- a/src/node_sqlite.cc +++ b/src/node_sqlite.cc @@ -1658,6 +1658,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, @@ -1668,6 +1674,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); @@ -1690,9 +1699,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;