Spec-Zone.ru › Node.js 24 LTS

SQLite

История
Версия Изменения
v23.4.0, v22.13.0

SQLite больше не находится за --experimental-sqlite, но по-прежнему является экспериментальной функцией.

v22.5.0

Добавлено в: v22.5.0

Стабильность: 1.1 - Активная разработка.

Исходный код: lib/sqlite.js

Модуль node:sqlite упрощает работу с базами данных SQLite. Для доступа к нему:

Модули JavaScript
import sqlite from 'node:sqlite';
CommonJS
const sqlite = require('node:sqlite');

Этот модуль доступен только по схеме node:.

В следующем примере показано базовое использование модуля node:sqlite для открытия базы данных в памяти, записи в неё данных и последующего чтения этих данных.

Модули JavaScript
import { DatabaseSync } from 'node:sqlite';
const database = new DatabaseSync(':memory:');

// Execute SQL statements from strings.
database.exec(`
  CREATE TABLE data(
    key INTEGER PRIMARY KEY,
    value TEXT
  ) STRICT
`);
// Create a prepared statement to insert data into the database.
const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
// Execute the prepared statement with bound values.
insert.run(1, 'hello');
insert.run(2, 'world');
// Create a prepared statement to read data from the database.
const query = database.prepare('SELECT * FROM data ORDER BY key');
// Execute the prepared statement and log the result set.
console.log(query.all());
// Prints: [ { key: 1, value: 'hello' }, { key: 2, value: 'world' } ]
CommonJS
'use strict';
const { DatabaseSync } = require('node:sqlite');
const database = new DatabaseSync(':memory:');

// Execute SQL statements from strings.
database.exec(`
  CREATE TABLE data(
    key INTEGER PRIMARY KEY,
    value TEXT
  ) STRICT
`);
// Create a prepared statement to insert data into the database.
const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
// Execute the prepared statement with bound values.
insert.run(1, 'hello');
insert.run(2, 'world');
// Create a prepared statement to read data from the database.
const query = database.prepare('SELECT * FROM data ORDER BY key');
// Execute the prepared statement and log the result set.
console.log(query.all());
// Prints: [ { key: 1, value: 'hello' }, { key: 2, value: 'world' } ]

Класс: DatabaseSync

История
Версия Изменения
v24.0.0

Добавлен параметр timeout.

v23.10.0, v22.15.0

Аргумент path теперь поддерживает объекты Buffer и URL.

v22.5.0

Добавлено в: v22.5.0

Этот класс представляет собой одно подключение к базе данных SQLite. Все API, предоставляемые этим классом, выполняются синхронно.

new DatabaseSync(path[, options])

История
Версия Изменения
v24.14.0

Включить defensive по умолчанию.

v24.12.0

Добавлен параметр defensive.

v24.4.0

Добавлены новые параметры базы данных SQLite.

v22.5.0

Добавлено в: v22.5.0

  • path <string> | <Buffer> | <URL> Путь к базе данных. База данных SQLite может храниться в файле или полностью в памяти. Чтобы использовать базу данных, хранящуюся в файле, укажите путь к файлу. Чтобы использовать базу данных в памяти, укажите специальное имя ':memory:'.
  • options <Object> Параметры конфигурации подключения к базе данных. Поддерживаются следующие параметры:
    • open <boolean> Если true, база данных открывается конструктором. Если это значение равно false, базу данных необходимо открыть с помощью метода open(). По умолчанию: true.
    • readOnly <boolean> Если true, база данных открывается в режиме только для чтения. Если база данных не существует, открыть её не удастся. По умолчанию: false.
    • enableForeignKeyConstraints <boolean> Если true, ограничения внешних ключей включены. Это рекомендуется, но для совместимости с устаревшими схемами баз данных их можно отключить. Проверку ограничений внешних ключей можно включать и отключать после открытия базы данных с помощью PRAGMA foreign_keys. По умолчанию: true.
    • enableDoubleQuotedStringLiterals <boolean> Если true, SQLite будет принимать строковые литералы в двойных кавычках. Это не рекомендуется, но такую возможность можно включить для совместимости с устаревшими схемами баз данных. По умолчанию: false.
    • allowExtension <boolean> Если true, включаются функция SQL loadExtension и метод loadExtension(). Позже можно вызвать enableLoadExtension(false), чтобы отключить эту возможность. По умолчанию: false.
    • timeout <number> Тайм-аут ожидания блокировки в миллисекундах. Это максимальное время, в течение которого SQLite будет ждать снятия блокировки базы данных, прежде чем вернуть ошибку. По умолчанию: 0.
    • readBigInts <boolean> Если true, целочисленные поля считываются как значения JavaScript типа BigInt. Если false, целочисленные поля считываются как числа JavaScript. По умолчанию: false.
    • returnArrays <boolean> Если true, результаты запросов возвращаются в виде массивов, а не объектов. По умолчанию: false.
    • allowBareNamedParameters <boolean> Если true, именованные параметры можно привязывать без символа-префикса (например, foo вместо :foo). По умолчанию: true.
    • allowUnknownNamedParameters <boolean> Если true, неизвестные именованные параметры при привязке игнорируются. Если false, для неизвестных именованных параметров выбрасывается исключение. По умолчанию: false.
    • defensive <boolean> Если true, включается защитный флаг. Когда защитный флаг включён, отключаются языковые средства, позволяющие намеренно повредить файл базы данных с помощью обычных SQL-команд. Защитный флаг также можно установить с помощью enableDefensive(). По умолчанию: true.

Создаёт новый экземпляр DatabaseSync.

database.aggregate(name, options)

Добавлено в: v24.0.0

Регистрирует в базе данных SQLite новую агрегатную функцию. Этот метод является обёрткой для sqlite3_create_window_function().

  • name <string> Имя создаваемой функции SQLite.
  • options <Object> Параметры конфигурации функции.
    • deterministic <boolean> Если true, для созданной функции устанавливается флаг SQLITE_DETERMINISTIC. По умолчанию: false.
    • directOnly <boolean> Если true, для созданной функции устанавливается флаг SQLITE_DIRECTONLY. По умолчанию: false.
    • useBigIntArguments <boolean> Если true, целочисленные аргументы функций options.step и options.inverse преобразуются в BigInt. Если false, целочисленные аргументы передаются как числа JavaScript. По умолчанию: false.
    • varargs <boolean> Если true, функции options.step и options.inverse можно вызывать с любым количеством аргументов (от нуля до SQLITE_MAX_FUNCTION_ARG). Если false, функции inverse и step необходимо вызывать ровно с length аргументами. По умолчанию: false.
    • start <number> | <string> | <null> | <Array> | <Object> | <Function> Начальное значение функции агрегации. Это значение используется при инициализации функции агрегации. Если передана функция <Function>, начальным значением будет результат её вызова.
    • step <Function> Функция, вызываемая для каждой строки при агрегации. Функция получает текущее состояние и значение строки. Она должна возвращать новое состояние.
    • result <Function> Функция, вызываемая для получения результата агрегации. Функция получает итоговое состояние и должна возвращать результат агрегации.
    • inverse <Function> Если эта функция задана, метод aggregate будет работать как оконная функция. Функция получает текущее состояние и значение удалённой строки. Она должна возвращать новое состояние.

При использовании в качестве оконной функции функция result будет вызываться несколько раз.

CommonJS
const { DatabaseSync } = require('node:sqlite');

const db = new DatabaseSync(':memory:');
db.exec(`
  CREATE TABLE t3(x, y);
  INSERT INTO t3 VALUES ('a', 4),
                        ('b', 5),
                        ('c', 3),
                        ('d', 8),
                        ('e', 1);
`);

db.aggregate('sumint', {
  start: 0,
  step: (acc, value) => acc + value,
});

db.prepare('SELECT sumint(y) as total FROM t3').get(); // { total: 21 }
Модули JavaScript
import { DatabaseSync } from 'node:sqlite';

const db = new DatabaseSync(':memory:');
db.exec(`
  CREATE TABLE t3(x, y);
  INSERT INTO t3 VALUES ('a', 4),
                        ('b', 5),
                        ('c', 3),
                        ('d', 8),
                        ('e', 1);
`);

db.aggregate('sumint', {
  start: 0,
  step: (acc, value) => acc + value,
});

db.prepare('SELECT sumint(y) as total FROM t3').get(); // { total: 21 }

database.close()

Добавлено в: v22.5.0

Закрывает подключение к базе данных. Если база данных не открыта, выбрасывается исключение. Этот метод является обёрткой для sqlite3_close_v2().

database.loadExtension(path)

Добавлено в: v23.5.0, v22.13.0
  • path <string> Путь к загружаемой общей библиотеке.

Загружает общую библиотеку в подключение к базе данных. Этот метод является обёрткой для sqlite3_load_extension(). При создании экземпляра DatabaseSync необходимо включить параметр allowExtension.

database.enableLoadExtension(allow)

Добавлено в: v23.5.0, v22.13.0
  • allow <boolean> Разрешить ли загрузку расширений.

Включает или отключает функцию SQL loadExtension и метод loadExtension(). Если при создании allowExtension имеет значение false, включить загрузку расширений нельзя из соображений безопасности.

database.enableDefensive(active)

Добавлено в: v24.12.0
  • active <boolean> Устанавливать ли защитный флаг.

Включает или отключает защитный флаг. Когда защитный флаг активен, отключаются языковые средства, позволяющие намеренно повредить файл базы данных с помощью обычных SQL-команд. Подробности см. в разделе SQLITE_DBCONFIG_DEFENSIVE документации SQLite.

database.location([dbName])

Добавлено в: v24.0.0
  • dbName <string> Имя базы данных. Это может быть 'main' (основная база данных по умолчанию) или любая другая база данных, добавленная с помощью ATTACH DATABASE По умолчанию: 'main'.
  • Возвращает: <string> | <null> Расположение файла базы данных. При использовании базы данных в памяти этот метод возвращает null.

Этот метод является обёрткой для sqlite3_db_filename()

database.exec(sql)

Добавлено в: v22.5.0
  • sql <string> Строка SQL для выполнения.

Этот метод позволяет выполнить одну или несколько инструкций SQL, не возвращая результаты. Он полезен для выполнения инструкций SQL, прочитанных из файла. Этот метод является обёрткой для sqlite3_exec().

database.function(name[, options], function)

Добавлено в: v23.5.0, v22.13.0
  • name <string> Имя создаваемой функции SQLite.
  • options <Object> Необязательные параметры конфигурации функции. Поддерживаются следующие свойства:
    • deterministic <boolean> Если true, для созданной функции устанавливается флаг SQLITE_DETERMINISTIC. По умолчанию: false.
    • directOnly <boolean> Если true, для созданной функции устанавливается флаг SQLITE_DIRECTONLY. По умолчанию: false.
    • useBigIntArguments <boolean> Если true, целочисленные аргументы функции function преобразуются в BigInt. Если false, целочисленные аргументы передаются как числа JavaScript. По умолчанию: false.
    • varargs <boolean> Если true, функцию function можно вызывать с любым количеством аргументов (от нуля до SQLITE_MAX_FUNCTION_ARG). Если false, функцию function необходимо вызывать ровно с function.length аргументами. По умолчанию: false.
  • function <Function> Функция JavaScript, вызываемая при вызове функции SQLite. Она должна возвращать допустимый тип данных SQLite: см. раздел Преобразование типов между JavaScript и SQLite. Если возвращаемое значение равно undefined, результатом по умолчанию будет NULL.

Этот метод используется для создания пользовательских функций SQLite. Он является обёрткой для sqlite3_create_function_v2().

database.setAuthorizer(callback)

Добавлено в: v24.10.0
  • callback <Function> | <null> Функция авторизации, которую нужно установить, или null, чтобы сбросить текущую функцию авторизации.

Устанавливает функцию обратного вызова авторизации, которую SQLite вызывает при каждой попытке доступа к данным или изменения схемы базы данных с помощью подготовленных инструкций. Её можно использовать для реализации политик безопасности, аудита доступа или ограничения определённых операций. Этот метод является обёрткой для sqlite3_set_authorizer().

При вызове функция обратного вызова получает пять аргументов:

  • actionCode <number> Тип выполняемой операции (например, SQLITE_INSERT, SQLITE_UPDATE, SQLITE_SELECT).
  • arg1 <string> | <null> Первый аргумент (зависит от контекста; часто это имя таблицы).
  • arg2 <string> | <null> Второй аргумент (зависит от контекста; часто это имя столбца).
  • dbName <string> | <null> Имя базы данных.
  • triggerOrView <string> | <null> Имя триггера или представления, вызвавшего доступ.

Функция обратного вызова должна возвращать одну из следующих констант:

  • SQLITE_OK - Разрешить операцию.
  • SQLITE_DENY - Запретить операцию (вызывает ошибку).
  • SQLITE_IGNORE - Игнорировать операцию (молча пропустить её).
CommonJS
const { DatabaseSync, constants } = require('node:sqlite');
const db = new DatabaseSync(':memory:');

// Set up an authorizer that denies all table creation
db.setAuthorizer((actionCode) => {
  if (actionCode === constants.SQLITE_CREATE_TABLE) {
    return constants.SQLITE_DENY;
  }
  return constants.SQLITE_OK;
});

// This will work
db.prepare('SELECT 1').get();

// This will throw an error due to authorization denial
try {
  db.exec('CREATE TABLE blocked (id INTEGER)');
} catch (err) {
  console.log('Operation blocked:', err.message);
}
Модули JavaScript
import { DatabaseSync, constants } from 'node:sqlite';
const db = new DatabaseSync(':memory:');

// Set up an authorizer that denies all table creation
db.setAuthorizer((actionCode) => {
  if (actionCode === constants.SQLITE_CREATE_TABLE) {
    return constants.SQLITE_DENY;
  }
  return constants.SQLITE_OK;
});

// This will work
db.prepare('SELECT 1').get();

// This will throw an error due to authorization denial
try {
  db.exec('CREATE TABLE blocked (id INTEGER)');
} catch (err) {
  console.log('Operation blocked:', err.message);
}

database.isOpen

Добавлено в: v23.11.0, v22.15.0
  • Тип: <boolean> Открыта ли база данных в данный момент.

database.isTransaction

Добавлено в: v24.0.0
  • Тип: <boolean> Находится ли база данных в данный момент в транзакции. Этот метод является обёрткой для sqlite3_get_autocommit().

database.open()

Добавлено в: v22.5.0

Открывает базу данных, указанную в аргументе path конструктора DatabaseSync. Этот метод следует использовать только в том случае, если база данных не открывается конструктором. Если база данных уже открыта, выбрасывается исключение.

database.prepare(sql[, options])

Добавлено в: v22.5.0
  • sql <string> Строка SQL для компиляции в подготовленную инструкцию.
  • options <Object> Необязательная конфигурация подготовленной инструкции.
    • readBigInts <boolean> Если true, целочисленные поля считываются как значения типа BigInt. По умолчанию: наследуется из параметров базы данных или false.
    • returnArrays <boolean> Если true, результаты возвращаются в виде массивов. По умолчанию: наследуется из параметров базы данных или false.
    • allowBareNamedParameters <boolean> Если true, именованные параметры можно привязывать без символа-префикса. По умолчанию: наследуется из параметров базы данных или true.
    • allowUnknownNamedParameters <boolean> Если true, неизвестные именованные параметры игнорируются. По умолчанию: наследуется из параметров базы данных или false.
  • Возвращает: <StatementSync> Подготовленную инструкцию.

Компилирует инструкцию SQL в подготовленную инструкцию. Этот метод является обёрткой для sqlite3_prepare_v2().

database.createTagStore([maxSize])

Добавлено в: v24.9.0
  • maxSize <integer> Максимальное количество подготовленных инструкций для кэширования. По умолчанию: 1000.
  • Возвращает: <SQLTagStore> Новое хранилище SQL-тегов для кэширования подготовленных инструкций.

Создаёт новое SQLTagStore — кэш вытеснения давно не использовавшихся элементов (LRU) для хранения подготовленных инструкций. Это позволяет эффективно повторно использовать подготовленные инструкции, помечая их уникальным идентификатором.

При выполнении помеченного SQL-литерала SQLTagStore проверяет, есть ли в кэше подготовленная инструкция для соответствующей строки запроса SQL. Если есть, используется кэшированная инструкция. Если нет, создаётся новая подготовленная инструкция, выполняется и сохраняется в кэше для дальнейшего использования. Этот механизм помогает избежать накладных расходов на повторный разбор и подготовку одних и тех же инструкций SQL.

В помеченных инструкциях значения-заполнители из шаблонного литерала привязываются в качестве параметров к базовой подготовленной инструкции. Например:

sqlTagStore.get`SELECT ${value}`; copy

эквивалентно следующему:

db.prepare('SELECT ?').get(value); copy

Однако в первом примере хранилище тегов кэширует базовую подготовленную инструкцию для дальнейшего использования.

Примечание: Синтаксис ${value} в помеченных инструкциях привязывает параметр к подготовленной инструкции. Это отличается от его поведения в непомеченных шаблонных литералах, где он выполняет интерполяцию строк.

// This a safe example of binding a parameter to a tagged statement.
sqlTagStore.run`INSERT INTO t1 (id) VALUES (${id})`;

// This is an *unsafe* example of an untagged template string.
// `id` is interpolated into the query text as a string.
// This can lead to SQL injection and data corruption.
db.run(`INSERT INTO t1 (id) VALUES (${id})`); copy

Хранилище тегов использует инструкцию из кэша, если строки запроса (включая позиции всех связанных заполнителей) идентичны.

// The following statements will match in the cache:
sqlTagStore.get`SELECT * FROM t1 WHERE id = ${id} AND active = 1`;
sqlTagStore.get`SELECT * FROM t1 WHERE id = ${12345} AND active = 1`;

// The following statements will not match, as the query strings
// and bound placeholders differ:
sqlTagStore.get`SELECT * FROM t1 WHERE id = ${id} AND active = 1`;
sqlTagStore.get`SELECT * FROM t1 WHERE id = 12345 AND active = 1`;

// The following statements will not match, as matches are case-sensitive:
sqlTagStore.get`SELECT * FROM t1 WHERE id = ${id} AND active = 1`;
sqlTagStore.get`select * from t1 where id = ${id} and active = 1`; copy

Единственный способ привязать параметры в помеченных инструкциях — использовать синтаксис ${value}. Не добавляйте заполнители для привязки параметров (например, ?) непосредственно в строку запроса SQL.

Модули JavaScript
import { DatabaseSync } from 'node:sqlite';

const db = new DatabaseSync(':memory:');
const sql = db.createTagStore();

db.exec('CREATE TABLE users (id INT, name TEXT)');

// Using the 'run' method to insert data.
// The tagged literal is used to identify the prepared statement.
sql.run`INSERT INTO users VALUES (1, 'Alice')`;
sql.run`INSERT INTO users VALUES (2, 'Bob')`;

// Using the 'get' method to retrieve a single row.
const name = 'Alice';
const user = sql.get`SELECT * FROM users WHERE name = ${name}`;
console.log(user); // { id: 1, name: 'Alice' }

// Using the 'all' method to retrieve all rows.
const allUsers = sql.all`SELECT * FROM users ORDER BY id`;
console.log(allUsers);
// [
//   { id: 1, name: 'Alice' },
//   { id: 2, name: 'Bob' }
// ]
CommonJS
const { DatabaseSync } = require('node:sqlite');

const db = new DatabaseSync(':memory:');
const sql = db.createTagStore();

db.exec('CREATE TABLE users (id INT, name TEXT)');

// Using the 'run' method to insert data.
// The tagged literal is used to identify the prepared statement.
sql.run`INSERT INTO users VALUES (1, 'Alice')`;
sql.run`INSERT INTO users VALUES (2, 'Bob')`;

// Using the 'get' method to retrieve a single row.
const name = 'Alice';
const user = sql.get`SELECT * FROM users WHERE name = ${name}`;
console.log(user); // { id: 1, name: 'Alice' }

// Using the 'all' method to retrieve all rows.
const allUsers = sql.all`SELECT * FROM users ORDER BY id`;
console.log(allUsers);
// [
//   { id: 1, name: 'Alice' },
//   { id: 2, name: 'Bob' }
// ]

database.createSession([options])

Добавлено в: v23.3.0, v22.12.0
  • options <Object> Параметры конфигурации сеанса.
    • table <string> Конкретная таблица, изменения в которой нужно отслеживать. По умолчанию отслеживаются изменения во всех таблицах.
    • db <string> Имя отслеживаемой базы данных. Это полезно, если с помощью ATTACH DATABASE было добавлено несколько баз данных. По умолчанию: 'main'.
  • Возвращает: <Session> Дескриптор сеанса.

Создаёт сеанс и подключает его к базе данных. Этот метод является обёрткой для sqlite3session_create() и sqlite3session_attach().

database.applyChangeset(changeset[, options])

Добавлено в: v23.3.0, v22.12.0
  • changeset <Uint8Array> Двоичный набор изменений или набор исправлений.
  • options <Object> Параметры конфигурации, определяющие способ применения изменений.
    • filter <Function> Пропускает изменения, если эта функция возвращает истинное значение для переданного ей имени целевой таблицы. По умолчанию предпринимается попытка применить все изменения.

    • onConflict <Function> Функция, определяющая способ обработки конфликтов. Функция получает один аргумент, который может принимать одно из следующих значений:

      • SQLITE_CHANGESET_DATA: изменение DELETE или UPDATE не содержит ожидаемых значений «до».
      • SQLITE_CHANGESET_NOTFOUND: строка, соответствующая первичному ключу изменения DELETE или UPDATE, не существует.
      • SQLITE_CHANGESET_CONFLICT: изменение INSERT приводит к дублированию первичного ключа.
      • SQLITE_CHANGESET_FOREIGN_KEY: применение изменения приведет к нарушению внешнего ключа.
      • SQLITE_CHANGESET_CONSTRAINT: применение изменения приводит к нарушению ограничения UNIQUE, CHECK или NOT NULL.

      Функция должна возвращать одно из следующих значений:

      • SQLITE_CHANGESET_OMIT: пропустить конфликтующие изменения.
      • SQLITE_CHANGESET_REPLACE: заменить существующие значения конфликтующими изменениями (допустимо только для конфликтов SQLITE_CHANGESET_DATA или SQLITE_CHANGESET_CONFLICT).
      • SQLITE_CHANGESET_ABORT: прервать выполнение при конфликте и выполнить откат базы данных.

      Если в обработчике конфликтов возникает исключение или обработчик возвращает любое другое значение, применение набора изменений прерывается, а база данных откатывается.

      По умолчанию: функция, возвращающая SQLITE_CHANGESET_ABORT.

  • Возвращает: <boolean> Указывает, был ли набор изменений успешно применен без прерывания.

Если база данных не открыта, возникает исключение. Этот метод является оболочкой для sqlite3changeset_apply().

Модули JavaScript
import { DatabaseSync } from 'node:sqlite';

const sourceDb = new DatabaseSync(':memory:');
const targetDb = new DatabaseSync(':memory:');

sourceDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)');
targetDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)');

const session = sourceDb.createSession();

const insert = sourceDb.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
insert.run(1, 'hello');
insert.run(2, 'world');

const changeset = session.changeset();
targetDb.applyChangeset(changeset);
// Now that the changeset has been applied, targetDb contains the same data as sourceDb.
CommonJS
const { DatabaseSync } = require('node:sqlite');

const sourceDb = new DatabaseSync(':memory:');
const targetDb = new DatabaseSync(':memory:');

sourceDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)');
targetDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)');

const session = sourceDb.createSession();

const insert = sourceDb.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
insert.run(1, 'hello');
insert.run(2, 'world');

const changeset = session.changeset();
targetDb.applyChangeset(changeset);
// Now that the changeset has been applied, targetDb contains the same data as sourceDb.

database[Symbol.dispose]()

История
Версия Изменения
v24.2.0

Больше не является экспериментальным.

v23.11.0, v22.15.0

Добавлено в: v23.11.0, v22.15.0

Закрывает соединение с базой данных. Если соединение с базой данных уже закрыто, ничего не происходит.

Класс: Session

Добавлено в: v23.3.0, v22.12.0

session.changeset()

Добавлено в: v23.3.0, v22.12.0
  • Возвращает: <Uint8Array> Двоичный набор изменений, который можно применить к другим базам данных.

Получает набор изменений, содержащий все изменения с момента его создания. Метод можно вызывать несколько раз. Если база данных или сеанс не открыты, возникает исключение. Этот метод является оболочкой для sqlite3session_changeset().

session.patchset()

Добавлено в: v23.3.0, v22.12.0
  • Возвращает: <Uint8Array> Двоичный набор исправлений, который можно применить к другим базам данных.

Аналогичен описанному выше методу, но создает более компактный набор исправлений. См. раздел Наборы изменений и наборы исправлений в документации SQLite. Если база данных или сеанс не открыты, возникает исключение. Этот метод является оболочкой для sqlite3session_patchset().

session.close()

Закрывает сеанс. Если база данных или сеанс не открыты, возникает исключение. Этот метод является оболочкой для sqlite3session_delete().

session[Symbol.dispose]()

Добавлено в: v24.9.0

Закрывает сеанс. Если сеанс уже закрыт, ничего не происходит.

Класс: StatementSync

Добавлено в: v22.5.0

Этот класс представляет собой один подготовленный оператор. Нельзя создать экземпляр этого класса с помощью конструктора. Вместо этого экземпляры создаются с помощью метода database.prepare(). Все API, предоставляемые этим классом, выполняются синхронно.

Подготовленный оператор — это эффективное двоичное представление SQL-кода, использованного для его создания. В подготовленные операторы можно подставлять параметры, и их можно вызывать несколько раз с разными привязанными значениями. Параметры также обеспечивают защиту от атак типа SQL-инъекции. По этим причинам при обработке пользовательского ввода предпочтительнее использовать подготовленные операторы, а не SQL-строки, созданные вручную.

statement.all([namedParameters][, ...anonymousParameters])

История
Версия Изменения
v23.7.0, v22.14.0

Добавлена поддержка DataView и объектов типизированных массивов для anonymousParameters.

v22.5.0

Добавлено в: v22.5.0

  • namedParameters <Object> Необязательный объект для привязки именованных параметров. Ключи этого объекта используются для настройки сопоставления.
  • ...anonymousParameters <null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Ноль или более значений для привязки к анонимным параметрам.
  • Возвращает: <Array> Массив объектов. Каждый объект соответствует строке, возвращенной при выполнении подготовленного оператора. Ключи и значения каждого объекта соответствуют именам столбцов и значениям в строке.

Этот метод выполняет подготовленный оператор и возвращает все результаты в виде массива объектов. Если подготовленный оператор не возвращает результатов, метод возвращает пустой массив. Параметры подготовленного оператора привязываются с использованием значений из namedParameters и anonymousParameters.

statement.columns()

Добавлено в: v23.11.0
  • Возвращает: <Array> Массив объектов. Каждый объект соответствует столбцу подготовленного оператора и содержит следующие свойства:

    • column <string> | <null> Имя столбца исходной таблицы без псевдонима или null, если столбец является результатом выражения или подзапроса. Это свойство соответствует результату sqlite3_column_origin_name().
    • database <string> | <null> Имя исходной базы данных без псевдонима или null, если столбец является результатом выражения или подзапроса. Это свойство соответствует результату sqlite3_column_database_name().
    • name <string> Имя, присвоенное столбцу в результирующем наборе оператора SELECT. Это свойство соответствует результату sqlite3_column_name().
    • table <string> | <null> Имя исходной таблицы без псевдонима или null, если столбец является результатом выражения или подзапроса. Это свойство соответствует результату sqlite3_column_table_name().
    • type <string> | <null> Объявленный тип данных столбца или null, если столбец является результатом выражения или подзапроса. Это свойство соответствует результату sqlite3_column_decltype().

Этот метод используется для получения сведений о столбцах, возвращаемых подготовленным оператором.

statement.expandedSQL

Добавлено в: v22.5.0
  • Тип: <string> Исходный SQL-код с подставленными значениями параметров.

Исходный текст SQL подготовленного оператора, в котором заполнители параметров заменены значениями, использованными при последнем выполнении этого подготовленного оператора. Это свойство является оболочкой для sqlite3_expanded_sql().

statement.get([namedParameters][, ...anonymousParameters])

История
Версия Изменения
v23.7.0, v22.14.0

Добавлена поддержка DataView и объектов типизированных массивов для anonymousParameters.

v22.5.0

Добавлено в: v22.5.0

  • namedParameters <Object> Необязательный объект для привязки именованных параметров. Ключи этого объекта используются для настройки сопоставления.
  • ...anonymousParameters <null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Ноль или более значений для привязки к анонимным параметрам.
  • Возвращает: <Object> | <undefined> Объект, соответствующий первой строке, возвращенной при выполнении подготовленного оператора. Ключи и значения объекта соответствуют именам столбцов и значениям в строке. Если база данных не вернула ни одной строки, метод возвращает undefined.

Этот метод выполняет подготовленный оператор и возвращает первый результат в виде объекта. Если подготовленный оператор не возвращает результатов, метод возвращает undefined. Параметры подготовленного оператора привязываются с использованием значений из namedParameters и anonymousParameters.

statement.iterate([namedParameters][, ...anonymousParameters])

История
Версия Изменения
v23.7.0, v22.14.0

Добавлена поддержка DataView и объектов типизированных массивов для anonymousParameters.

v23.4.0, v22.13.0

Добавлено в: v23.4.0, v22.13.0

  • namedParameters <Object> Необязательный объект для привязки именованных параметров. Ключи этого объекта используются для настройки сопоставления.
  • ...anonymousParameters <null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Ноль или более значений для привязки к анонимным параметрам.
  • Возвращает: <Iterator> Итерируемый итератор объектов. Каждый объект соответствует строке, возвращенной при выполнении подготовленного оператора. Ключи и значения каждого объекта соответствуют именам столбцов и значениям в строке.

Этот метод выполняет подготовленный оператор и возвращает итератор объектов. Если подготовленный оператор не возвращает результатов, метод возвращает пустой итератор. Параметры подготовленного оператора привязываются с использованием значений из namedParameters и anonymousParameters.

statement.run([namedParameters][, ...anonymousParameters])

История
Версия Изменения
v23.7.0, v22.14.0

Добавлена поддержка DataView и объектов типизированных массивов для anonymousParameters.

v22.5.0

Добавлено в: v22.5.0

  • namedParameters <Object> Необязательный объект для привязки именованных параметров. Ключи этого объекта используются для настройки сопоставления.
  • ...anonymousParameters <null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Ноль или более значений для привязки к анонимным параметрам.
  • Возвращает: <Object>
    • changes <number> | <bigint> Число строк, измененных, добавленных или удаленных при последнем завершенном операторе INSERT, UPDATE или DELETE. Это поле содержит число или BigInt в зависимости от конфигурации подготовленного оператора. Это свойство соответствует результату sqlite3_changes64().
    • lastInsertRowid <number> | <bigint> Идентификатор последней добавленной строки (rowid). Это поле содержит число или BigInt в зависимости от конфигурации подготовленного оператора. Это свойство соответствует результату sqlite3_last_insert_rowid().

Этот метод выполняет подготовленный оператор и возвращает объект со сводной информацией о внесенных изменениях. Параметры подготовленного оператора привязываются с использованием значений из namedParameters и anonymousParameters.

statement.setAllowBareNamedParameters(enabled)

Добавлено в: v22.5.0
  • enabled <boolean> Включает или отключает возможность привязки именованных параметров без символа-префикса.

Имена параметров SQLite начинаются с символа-префикса. По умолчанию node:sqlite требует наличия этого символа-префикса при привязке параметров. Однако, за исключением знака доллара, при использовании этих символов-префиксов в качестве ключей объектов требуется дополнительное экранирование.

Для удобства этот метод также позволяет использовать простые именованные параметры, которым не нужен символ-префикс в коде JavaScript. При включении простых именованных параметров следует учитывать несколько особенностей:

  • В SQL по-прежнему требуется символ-префикс.
  • В JavaScript символ-префикс по-прежнему разрешен. Более того, привязка имен с префиксом будет немного производительнее.
  • Использование неоднозначных именованных параметров, например $k и @k, в одном подготовленном операторе приведет к исключению, поскольку определить способ привязки имени без префикса невозможно.

statement.setAllowUnknownNamedParameters(enabled)

Добавлено в: v23.11.0, v22.15.0
  • enabled <boolean> Включает или отключает поддержку неизвестных именованных параметров.

По умолчанию, если при привязке параметров встречается неизвестное имя, возникает исключение. Этот метод позволяет игнорировать неизвестные именованные параметры.

statement.setReturnArrays(enabled)

Добавлено в: v24.0.0
  • enabled <boolean> Включает или отключает возврат результатов запроса в виде массивов.

Если этот параметр включен, результаты запросов, возвращаемые методами all(), get() и iterate(), будут представлены в виде массивов, а не объектов.

statement.setReadBigInts(enabled)

Добавлено в: v22.5.0
  • enabled <boolean> Включает или отключает использование BigInt при чтении из базы данных полей INTEGER.

При чтении из базы данных значения INTEGER SQLite по умолчанию преобразуются в числа JavaScript. Однако значения INTEGER SQLite могут быть больше чисел, которые способны представлять JavaScript. В таких случаях этот метод можно использовать для чтения данных INTEGER с помощью значений BigInt JavaScript. Этот метод не влияет на операции записи в базу данных, где всегда поддерживаются как числа, так и значения BigInt.

statement.sourceSQL

Добавлено в: v22.5.0
  • Тип: <string> Исходный SQL-код, использованный для создания этого подготовленного оператора.

Исходный текст SQL подготовленного оператора. Это свойство является оболочкой для sqlite3_sql().

Class: SQLTagStore

Добавлено в: v24.9.0

Этот класс представляет собой отдельный кэш LRU (Least Recently Used, вытесняющий давно не использовавшиеся элементы) для хранения подготовленных инструкций.

Экземпляры этого класса создаются с помощью метода database.createTagStore(), а не через конструктор. Хранилище кэширует подготовленные инструкции на основе переданной строки SQL-запроса. При повторном появлении того же запроса хранилище извлекает кэшированную инструкцию и безопасно подставляет новые значения с помощью привязки параметров, предотвращая тем самым атаки, такие как SQL-инъекция.

Максимальный размер кэша по умолчанию составляет 1000 инструкций, но можно указать пользовательский размер (например, database.createTagStore(100)). Все API этого класса выполняются синхронно.

sqlTagStore.all(stringElements[, ...boundParameters])

Добавлено в: v24.9.0
  • stringElements <string[]> Элементы шаблонной строки, содержащие SQL-запрос.
  • ...boundParameters <null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Значения параметров, которые нужно привязать к заполнителям в шаблонной строке.
  • Возвращает: <Array> Массив объектов, представляющих строки, возвращённые запросом.

Выполняет указанный SQL-запрос и возвращает все полученные строки в виде массива объектов.

Эта функция предназначена для использования в качестве тега шаблонной строки, а не для прямого вызова.

sqlTagStore.get(stringElements[, ...boundParameters])

Добавлено в: v24.9.0
  • stringElements <string[]> Элементы шаблонной строки, содержащие SQL-запрос.
  • ...boundParameters <null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Значения параметров, которые нужно привязать к заполнителям в шаблонной строке.
  • Возвращает: <Object> | <undefined> Объект, представляющий первую строку, возвращённую запросом, или undefined, если строки не возвращены.

Выполняет указанный SQL-запрос и возвращает первую полученную строку в виде объекта.

Эта функция предназначена для использования в качестве тега шаблонной строки, а не для прямого вызова.

sqlTagStore.iterate(stringElements[, ...boundParameters])

Добавлено в: v24.9.0
  • stringElements <string[]> Элементы шаблонной строки, содержащие SQL-запрос.
  • ...boundParameters <null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Значения параметров, которые нужно привязать к заполнителям в шаблонной строке.
  • Возвращает: <Iterator> Итератор, который возвращает объекты, представляющие строки, возвращённые запросом.

Выполняет указанный SQL-запрос и возвращает итератор по полученным строкам.

Эта функция предназначена для использования в качестве тега шаблонной строки, а не для прямого вызова.

sqlTagStore.run(stringElements[, ...boundParameters])

Добавлено в: v24.9.0
  • stringElements <string[]> Элементы шаблонной строки, содержащие SQL-запрос.
  • ...boundParameters <null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Значения параметров, которые нужно привязать к заполнителям в шаблонной строке.
  • Возвращает: <Object> Объект с информацией о выполнении, включая changes и lastInsertRowid.

Выполняет указанный SQL-запрос, который не должен возвращать строки (например, INSERT, UPDATE, DELETE).

Эта функция предназначена для использования в качестве тега шаблонной строки, а не для прямого вызова.

sqlTagStore.size

История
Версия Изменения
v24.13.1

Изменено с метода на геттер.

v24.9.0

Добавлено в: v24.9.0

  • Тип: <integer>

Свойство только для чтения, возвращающее количество подготовленных инструкций, находящихся в кэше.

sqlTagStore.capacity

Добавлено в: v24.9.0
  • Тип: <integer>

Свойство только для чтения, возвращающее максимальное количество подготовленных инструкций, которое может храниться в кэше.

sqlTagStore.db

Добавлено в: v24.9.0
  • Тип: <DatabaseSync>

Свойство только для чтения, возвращающее объект DatabaseSync, связанный с этим SQLTagStore.

sqlTagStore.clear()

Добавлено в: v24.9.0

Сбрасывает кэш LRU, удаляя все хранящиеся в нём подготовленные инструкции.

Преобразование типов между JavaScript и SQLite

При записи данных в SQLite из Node.js или чтении данных из SQLite необходимо преобразовывать типы данных JavaScript в типы SQLite и наоборот. Поскольку JavaScript поддерживает больше типов данных, чем SQLite, поддерживается только подмножество типов JavaScript. Попытка записать в SQLite неподдерживаемый тип данных приведёт к исключению.

SQLite JavaScript
NULL <null>
INTEGER <number> или <bigint>
REAL <number>
TEXT <string>
BLOB <TypedArray> или <DataView>

sqlite.backup(sourceDb, path[, options])

История
Версия Изменения
v23.10.0

Аргумент path теперь поддерживает объекты Buffer и URL.

v23.8.0

Добавлено в: v23.8.0

  • sourceDb <DatabaseSync> База данных для резервного копирования. Исходная база данных должна быть открыта.
  • path <string> | <Buffer> | <URL> Путь, по которому будет создана резервная копия. Если файл уже существует, его содержимое будет перезаписано.
  • options <Object> Необязательные параметры резервного копирования. Поддерживаются следующие свойства:
    • source <string> Имя исходной базы данных. Это может быть 'main' (основная база данных по умолчанию) или любая другая база данных, добавленная с помощью ATTACH DATABASE По умолчанию: 'main'.
    • target <string> Имя целевой базы данных. Это может быть 'main' (основная база данных по умолчанию) или любая другая база данных, добавленная с помощью ATTACH DATABASE По умолчанию: 'main'.
    • rate <number> Количество страниц, передаваемых в каждом пакете резервной копии. По умолчанию: 100.
    • progress <Function> Необязательная функция обратного вызова, вызываемая после каждого шага резервного копирования. В эту функцию передаётся аргумент <Object> со свойствами remainingPages и totalPages, описывающими текущий ход операции резервного копирования.
  • Возвращает: <Promise> Промис, который при успешном завершении выполняется с общим количеством страниц резервной копии или отклоняется при возникновении ошибки.

Этот метод создаёт резервную копию базы данных. Метод абстрагирует функции sqlite3_backup_init(), sqlite3_backup_step() и sqlite3_backup_finish().

Резервную копию базы данных можно использовать в обычном режиме во время процесса её создания. Изменения, внесённые через то же подключение — тот же объект <DatabaseSync>, — сразу же отразятся в резервной копии. Однако изменения из других подключений приведут к перезапуску процесса резервного копирования.

CommonJS
const { backup, DatabaseSync } = require('node:sqlite');

(async () => {
  const sourceDb = new DatabaseSync('source.db');
  const totalPagesTransferred = await backup(sourceDb, 'backup.db', {
    rate: 1, // Copy one page at a time.
    progress: ({ totalPages, remainingPages }) => {
      console.log('Backup in progress', { totalPages, remainingPages });
    },
  });

  console.log('Backup completed', totalPagesTransferred);
})();
Модули JavaScript
import { backup, DatabaseSync } from 'node:sqlite';

const sourceDb = new DatabaseSync('source.db');
const totalPagesTransferred = await backup(sourceDb, 'backup.db', {
  rate: 1, // Copy one page at a time.
  progress: ({ totalPages, remainingPages }) => {
    console.log('Backup in progress', { totalPages, remainingPages });
  },
});

console.log('Backup completed', totalPagesTransferred);

sqlite.constants

Добавлено в: v23.5.0, v22.13.0
  • Тип: <Object>

Объект, содержащий часто используемые константы для операций SQLite.

Константы SQLite

Следующие константы экспортируются объектом sqlite.constants.

Константы разрешения конфликтов

Одна из следующих констант передаётся в качестве аргумента обработчику разрешения конфликтов onConflict, переданному методу database.applyChangeset(). См. также раздел Константы, передаваемые обработчику конфликтов в документации SQLite.

Константа Описание
SQLITE_CHANGESET_DATA Эта константа передаётся обработчику конфликтов при обработке изменения DELETE или UPDATE, если в базе данных присутствует строка с требуемыми полями PRIMARY KEY, но одно или несколько других (не являющихся первичными ключами) полей, изменённых операцией UPDATE, не содержат ожидаемых предыдущих значений.
SQLITE_CHANGESET_NOTFOUND Эта константа передаётся обработчику конфликтов при обработке изменения DELETE или UPDATE, если в базе данных отсутствует строка с требуемыми полями PRIMARY KEY.
SQLITE_CHANGESET_CONFLICT Эта константа передаётся обработчику конфликтов при обработке изменения INSERT, если операция приведёт к дублированию значений первичного ключа.
SQLITE_CHANGESET_CONSTRAINT Если обработка внешних ключей включена и применение набора изменений приводит к нарушениям ограничений внешнего ключа в базе данных, эта константа передаётся обработчику конфликтов ровно один раз перед фиксацией набора изменений. Если обработчик конфликтов возвращает SQLITE_CHANGESET_OMIT, изменения, в том числе вызвавшие нарушение ограничения внешнего ключа, фиксируются. Если же он возвращает SQLITE_CHANGESET_ABORT, набор изменений откатывается.
SQLITE_CHANGESET_FOREIGN_KEY Если при применении изменения происходит любое другое нарушение ограничений (например, UNIQUE, CHECK или NOT NULL), эта константа передаётся обработчику конфликтов.

Обработчик разрешения конфликтов onConflict, переданный методу database.applyChangeset(), должен возвращать одну из следующих констант. См. также раздел Константы, возвращаемые обработчиком конфликтов в документации SQLite.

Константа Описание
SQLITE_CHANGESET_OMIT Конфликтующие изменения пропускаются.
SQLITE_CHANGESET_REPLACE Конфликтующие изменения заменяют существующие значения. Обратите внимание, что это значение можно вернуть, только если тип конфликта — SQLITE_CHANGESET_DATA или SQLITE_CHANGESET_CONFLICT.
SQLITE_CHANGESET_ABORT Прервать операцию при возникновении конфликта во время изменения и откатить базу данных.
Константы авторизации

Следующие константы используются с методом database.setAuthorizer().

Коды результатов авторизации

Функция обратного вызова авторизатора, переданная методу database.setAuthorizer(), должна возвращать одну из следующих констант.

Константа Описание
SQLITE_OK Разрешить выполнение операции в обычном режиме.
SQLITE_DENY Запретить операцию и вызвать ошибку.
SQLITE_IGNORE Игнорировать операцию и продолжить выполнение так, как если бы она не запрашивалась.
Коды действий авторизации

Следующие константы передаются первым аргументом функции обратного вызова авторизатора и указывают тип операции, для которой выполняется авторизация.

Константа Описание
SQLITE_CREATE_INDEX Создание индекса
SQLITE_CREATE_TABLE Создание таблицы
SQLITE_CREATE_TEMP_INDEX Создание временного индекса
SQLITE_CREATE_TEMP_TABLE Создание временной таблицы
SQLITE_CREATE_TEMP_TRIGGER Создание временного триггера
SQLITE_CREATE_TEMP_VIEW Создание временного представления
SQLITE_CREATE_TRIGGER Создание триггера
SQLITE_CREATE_VIEW Создание представления
SQLITE_DELETE Удаление данных из таблицы
SQLITE_DROP_INDEX Удаление индекса
SQLITE_DROP_TABLE Удаление таблицы
SQLITE_DROP_TEMP_INDEX Удаление временного индекса
SQLITE_DROP_TEMP_TABLE Удаление временной таблицы
SQLITE_DROP_TEMP_TRIGGER Удаление временного триггера
SQLITE_DROP_TEMP_VIEW Удаление временного представления
SQLITE_DROP_TRIGGER Удаление триггера
SQLITE_DROP_VIEW Удаление представления
SQLITE_INSERT Вставка данных в таблицу
SQLITE_PRAGMA Выполнение инструкции PRAGMA
SQLITE_READ Чтение данных из таблицы
SQLITE_SELECT Выполнение инструкции SELECT
SQLITE_TRANSACTION Начало, фиксация или откат транзакции
SQLITE_UPDATE Обновление таблицы
SQLITE_ATTACH Подключение базы данных
SQLITE_DETACH Отключение базы данных
SQLITE_ALTER_TABLE Изменение таблицы
SQLITE_REINDEX Перестроение индексов
SQLITE_ANALYZE Анализ базы данных
SQLITE_CREATE_VTABLE Создание виртуальной таблицы
SQLITE_DROP_VTABLE Удаление виртуальной таблицы
SQLITE_FUNCTION Использование функции
SQLITE_SAVEPOINT Создание, освобождение или откат точки сохранения
SQLITE_COPY Копирование данных (устаревшее)
SQLITE_RECURSIVE Рекурсивный запрос

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v24.x/docs/api/sqlite.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API