Small. Fast. Reliable. Choose any three.
SQLite C Interface
Параметры конфигурации соединения с базой данных
#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
#define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
#define SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */
#define SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004 /* int int* */
#define SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 /* int int* */
#define SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006 /* int int* */
#define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
#define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
#define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */
#define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */
#define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012 /* int int* */
#define SQLITE_DBCONFIG_DQS_DML 1013 /* int int* */
#define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */
#define SQLITE_DBCONFIG_ENABLE_VIEW 1015 /* int int* */
#define SQLITE_DBCONFIG_LEGACY_FILE_FORMAT 1016 /* int int* */
#define SQLITE_DBCONFIG_TRUSTED_SCHEMA 1017 /* int int* */
#define SQLITE_DBCONFIG_STMT_SCANSTATUS 1018 /* int int* */
#define SQLITE_DBCONFIG_REVERSE_SCANORDER 1019 /* int int* */
#define SQLITE_DBCONFIG_MAX 1019 /* Largest DBCONFIG */
Эти константы это доступные параметры конфигурации, которые могут быть
переданы как второй аргумент
sqlite3_db_config().
Новые параметры конфигурации могут быть добавлены в будущих выпусках
SQLite. Могли бы быть прекращены существующие параметры конфигурации.
Запросы должны проверить код возврата от
sqlite3_db_config(), чтобы удостовериться,
что запрос работал. sqlite3_db_config()
возвратит ненулевой код ошибки,
если неподдержанный параметр конфигурации будет вызван.
- SQLITE_DBCONFIG_LOOKASIDE
- Этот выбор берет три дополнительных аргумента, которые определяют
настройку распределителя памяти
для соединения с базой данных.
Первый аргумент (третий параметр
sqlite3_db_config()) это указатель на буфер памяти, чтобы использовать
для сохраняющей памяти. Первый аргумент после SQLITE_DBCONFIG_LOOKASIDE
может быть NULL, в этом случае, SQLite ассигнует сам буфер предыстории,
используя sqlite3_malloc().
Второй аргумент это размер каждого места буфера предыстории. Третий аргумент
количество мест. Размер буфера в первом аргументе должен быть больше чем или
равным произведению второго и третьего аргументов.
Буфер должен быть выровнен с 8-байтовой границей. Если второй аргумент
SQLITE_DBCONFIG_LOOKASIDE не кратное число 8, это внутренне округлено в
меньшую сторону к следующему меньшему числу, кратному 8.
Сохраняющая конфигурация памяти для соединения с базой данных может быть
изменена только когда та связь в настоящее время не использует сохраняющую
память, или другими словами когда "текущее значение", возвращенное
sqlite3_db_status(D,
SQLITE_DBSTATUS_LOOKASIDE_USED,
...) = 0. Любая попытка изменить сохраняющую конфигурацию памяти, когда
сохраняющая память используется, оставляет конфигурацию без изменений и
возвращает SQLITE_BUSY.
- SQLITE_DBCONFIG_ENABLE_FKEY
- Этот выбор используется, чтобы позволить или отключить осуществление
ограничений внешнего ключа.
Должно быть два дополнительных аргумента. Первый аргумент это целое число,
которое является 0, чтобы отключить осуществление FK, положительное, чтобы
позволить осуществление FK, или отрицательное, чтобы оставить осуществление
FK без изменений. Второй параметр это указатель на целое число, в которое
написан 0 или 1, чтобы указать, выключено ли осуществление FK.
Второй параметр может быть NULL, в этом случае урегулирование осуществления
FK не отчитывается.
- SQLITE_DBCONFIG_ENABLE_TRIGGER
- Этот выбор используется, чтобы позволить или отключить
триггеры.
Должно быть два дополнительных аргумента. Первый аргумент это целое число,
которое является 0, чтобы отключить триггеры, положительное, чтобы включить,
или отрицательное, чтобы оставить урегулирование без изменений.
Второй параметр это указатель на целое число, в которое написан 0 или 1,
чтобы указать, отключены ли триггеры. Второй параметр может быть NULL,
в этом случае урегулирование не отчитывается.
Первоначально этот выбор отключил все триггеры.
Однако начиная с версии 3.35.0 SQLite, триггеры TEMP
все еще позволены, даже если этот выбор выключен. Другими словами, этот выбор
теперь отключает только триггеры
в главной схеме базы данных или в схемах баз данных ATTACH.
- SQLITE_DBCONFIG_ENABLE_VIEW
- Этот выбор используется, чтобы позволить или отключить
обзоры.
Должно быть два дополнительных аргумента. Первый аргумент это целое число,
которое является 0, чтобы отключить обзоры, положительное, чтобы включить,
или отрицательное, чтобы оставить урегулирование без изменений.
Второй параметр это указатель на целое число, в которое написан 0 или 1,
чтобы указать, отключены ли триггеры. Второй параметр может быть NULL,
в этом случае урегулирование не отчитывается.
Первоначально этот выбор отключил все обзоры.
Однако начиная с версии 3.35.0 SQLite, обзоры TEMP
все еще позволены, даже если этот выбор выключен. Другими словами, этот выбор
теперь отключает только обзоры
в главной схеме базы данных или в схемах баз данных ATTACH.
- SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER
- Этот выбор используется, чтобы позволить или отключить функцию
fts3_tokenizer(),
которая является частью полнотекстового расширения поисковой системы
FTS3.
Должно быть два дополнительных аргумента. Первый аргумент это
которое является 0, чтобы отключить, положительное, чтобы включить,
или отрицательное, чтобы оставить урегулирование без изменений.
Второй параметр это указатель на целое число, в которое написан 0 или 1,
чтобы указать, отключено ли. Второй параметр может быть NULL,
в этом случае урегулирование не отчитывается.
- SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION
- Этот выбор используется, чтобы позволить или отключить
sqlite3_load_extension()
независимо от функции SQL
load_extension().
API
sqlite3_enable_load_extension() позволяет или выключает вместе
C API sqlite3_load_extension()
и функцию SQL load_extension()
. Должно быть два дополнительных аргумента. Когда первый аргумент
равняется 1, тогда только C-API позволяют, и функция SQL остается
отключенной. Если первый аргумент 0, то C API и функция SQL выключены.
Если первый аргумент-1, то никакие изменения не внесены.
Второй параметр это указатель на целое число, в которое написан 0 или 1,
чтобы указать, отключен ли интерфейс
sqlite3_load_extension().
Второй параметр может быть NULL,
в этом случае новое урегулирование не отчитывается.
- SQLITE_DBCONFIG_MAINDBNAME
- Этот выбор используется, чтобы изменить название "main"
схемы базы данных. Единственный аргумент это указатель на постоянную
последовательность UTF8, которая станет новым названием схемы вместо "main".
SQLite не делает копию новой последовательности названия схемы, таким
образом, применение должно гарантировать, что аргумент, переданный в этот
выбор DBCONFIG неизменен, пока соединение с базой
данных не закрывается.
- SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE
- Обычно, когда база данных в wal-режиме закрыта или отделена от
обработчика базы данных, SQLite проверяет, будет ли это означать, что теперь
нет никаких связей вообще с базой данных. Если так, это выполняет операцию по
контрольной точке прежде, чем закрыть связь.
Этот выбор может использоваться, чтобы отвергнуть это поведение.
Первый параметр, переданный к этой операции, является целым числом:
положительным, чтобы отключить контрольные точки на завершении, ноль
(умолчание), чтобы позволить их, и отрицательное, чтобы оставить
урегулирование без изменений. Второй параметр это указатель на целое число, в
которое написан 0 или 1, чтобы указать, были ли контрольные точки
отключены: 0, если они включены, 1, если они выключены.
- SQLITE_DBCONFIG_ENABLE_QPSG
- SQLITE_DBCONFIG_ENABLE_QPSG активирует или дезактивирует
query planner stability guarantee
(QPSG). Когда QPSG активен, единственное выполнение SQL-запроса будет всегда
использовать тот же самый алгоритм независимо от значений
связанных параметров.
QPSG отключает некоторые оптимизации запросов, которые смотрят на значения
связанных параметров, которые могут сделать некоторые запросы медленнее.
Но QPSG имеет преимущество более предсказуемого поведения.
С активным QPSG SQLite будет всегда использовать тот же самый план запросов,
какой использовался во время тестирования в лаборатории.
Первый аргумент этому урегулированию это
целое число, которое является 0, чтобы отключить QPSG, положительным, чтобы
позволить QPSG, или отрицательным, чтобы оставить урегулирование без
изменений. Второй параметр это указатель на целое число, в которое написан 0
или 1, чтобы указать, отключен ли QPSG или позволен
после этого вызова.
- SQLITE_DBCONFIG_TRIGGER_EQP
- По умолчанию вывод EXPLAIN QUERY PLAN не включает вывод
ни для каких операций, выполненных триггерами.
Этот выбор используется, чтобы установить или очистить (умолчание) флаг,
который управляет этим поведением.
Первый параметр, переданный к этой операции, является целым числом,
положительным, чтобы включить вывод от триггеров, 0 для отключения или
отрицательным, чтобы оставить урегулирование без изменений.
Второй параметр это указатель на целое число, в которое написан 0 или 1,
чтобы указать, был ли вывод от триггеров отключен: 0, если
выключен, 1, если включен.
- SQLITE_DBCONFIG_RESET_DATABASE
- Установите флаг SQLITE_DBCONFIG_RESET_DATABASE и затем выполните
VACUUM, чтобы перезагрузить базу данных
назад к пустой базе данных без схемы и содержания.
Следующий процесс работает даже на ужасно испорченном файле базы данных:
- Если соединение с базой данных недавно открыто, удостоверьтесь,
что оно прочитало схему базы данных, вызывая sqlite3_table_column_metadata(),
игнорируя любые ошибки. Этот шаг необходим только если применение желает
держать базу данных в режиме WAL после сброса, если это было в режиме
WAL перед сбросом.
- sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0);
- sqlite3_exec(db,
"VACUUM", 0, 0, 0);
- sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0);
Поскольку сброс базы данных разрушительный и необратимый, процесс требует,
чтобы использование этого API и многократных шагов помогло
гарантировать, что это не происходит случайно.
Поскольку эта особенность должна быть способна
к сбросу поврежденных баз данных, а закрытие виртуальных таблиц может
потребовать доступа к хранилищу, библиотека должна оставить любые
установленные виртуальные таблицы, не вызывая их методы xDestroy().
- SQLITE_DBCONFIG_DEFENSIVE
- SQLITE_DBCONFIG_DEFENSIVE активирует или дезактивирует
"защитный" флаг для соединения с базой данных. Когда защитный флаг
позволен, отключены языковые опции, которые позволяют обычному SQL
сознательно портить файл базы данных.
Отключенные опции включают, но не ограничиваются следующим:
- SQLITE_DBCONFIG_WRITABLE_SCHEMA
- SQLITE_DBCONFIG_WRITABLE_SCHEMA активирует или дезактивирует флаг
"writable_schema". Это имеет тот же самый эффект и логически
эквивалентно PRAGMA
writable_schema=ON или
PRAGMA writable_schema=OFF. Первый аргумент это
целое число, которое является 0, чтобы отключить writable_schema,
положительным, чтобы позволить writable_schema, или отрицательным, чтобы
оставить урегулирование без изменений. Второй параметр это указатель на целое
число, в которое написан 0 или 1, чтобы указать, позволен
ли writable_schema.
- SQLITE_DBCONFIG_LEGACY_ALTER_TABLE
- SQLITE_DBCONFIG_LEGACY_ALTER_TABLE активирует или дезактивирует
устаревшее поведение
ALTER TABLE RENAME, как это сделано до версии
version 3.24.0 (2018-06-04).
См. документацию на
ALTER TABLE RENAME для подробностей.
Эта особенность может также быть включена и использованием
PRAGMA legacy_alter_table.
- SQLITE_DBCONFIG_DQS_DML
- SQLITE_DBCONFIG_DQS_DML активирует или дезактивирует устаревший
строковый литерал в двойных кавычках
только для DML, который является DELETE, INSERT, SELECT и UPDATE.
Значение по умолчанию этого урегулирования определяется выбором времени
компиляции -DSQLITE_DQS.
- SQLITE_DBCONFIG_DQS_DDL
- SQLITE_DBCONFIG_DQS активирует или дезактивирует устаревший
строковый литерал в двойных кавычках
для DDL, таких как CREATE TABLE и CREATE INDEX.
Значение по умолчанию этого урегулирования определяется выбором времени
компиляции -DSQLITE_DQS.
- SQLITE_DBCONFIG_TRUSTED_SCHEMA
- SQLITE_DBCONFIG_TRUSTED_SCHEMA говорит SQLite предполагать, что схемы
базы данных не испорчены злонамеренным содержанием. Когда выбор
SQLITE_DBCONFIG_TRUSTED_SCHEMA отключен, SQLite делает дополнительные
защитные шаги, чтобы защитить применение от вреда включая:
- Запрет использования функций SQL в триггерах, обзорах, ограничениях
CHECK, DEFAULT, индексах выражения, частичных индексах или произведенных
колонках, если те функции не помечены
SQLITE_INNOCUOUS.
- Запрет использования виртуальных таблиц в триггерах или обзорах, если те
виртуальные таблицы не помечены
SQLITE_VTAB_INNOCUOUS.
Это урегулирование по умолчанию "on" для совместимости с прежними системами,
однако всем приложениям рекомендуют выключить его, если это возможно.
Этим урегулированием можно также управлять, используя
PRAGMA trusted_schema
.
- SQLITE_DBCONFIG_LEGACY_FILE_FORMAT
- SQLITE_DBCONFIG_LEGACY_FILE_FORMAT
активирует или дезактивирует устаревший флаг формата файла.
Когда активировано, этот флаг заставляет любой недавно созданный файл базы
данных иметь номер версии формата схемы (4-байтовое целое число, найденное в
смещении 44 в заголовке базы данных) 1. Это в свою очередь означает, что
получающийся файл базы данных будет читаемым и перезаписываемым любой версией
SQLite до 3.0.0 (2004-06-18). Без этого урегулирования недавно созданные базы
данных обычно непонятны версиями SQLite до 3.3.0 (2006-01-11).
Обратите внимание на то, что, когда
SQLITE_DBCONFIG_LEGACY_FILE_FORMAT = on, команда
VACUUM
потерпит неудачу с неясной ошибкой, пытаясь обработать таблицу
с произведенными колонками и спускающимся индексом. Это не считают ошибкой,
начиная с версий SQLite 3.3.0, но ранее не поддерживались произведенные
колонки или спускающиеся индексы.
- SQLITE_DBCONFIG_STMT_SCANSTATUS
- SQLITE_DBCONFIG_STMT_SCANSTATUS
полезен только в сборках SQLITE_ENABLE_STMT_SCANSTATUS.
В этом случае это устанавливает или очищает флаг, который позволяет сбор
статистики sqlite3_stmt_scanstatus_v2().
Для статистики, которая будет собрана, флаг должен быть установлен в
дескрипторе базы данных когда SQL-оператор подготовлен и когда он
выполняется. Флаг установлен (сбор статистики позволен) по умолчанию.
Этот выбор берет два аргумента: целое число и указатель на целое число.
Первый аргумент равняется 1, 0 или -1, чтобы позволить, отключить или
оставить без изменений выбор scanstatus.
Если второй аргумент не NULL, то значение scanstatus
после обработки первого аргумента написано в целое число,
на которое указывает второй аргумент.
- SQLITE_DBCONFIG_REVERSE_SCANORDER
- SQLITE_DBCONFIG_REVERSE_SCANORDER
изменяет порядок по умолчанию, в котором просматриваются таблицы и индексы
так, чтобы просмотры начались в конце и шли к началу
вместо того, чтобы начаться в начале и идти к концу. Урегулирование
SQLITE_DBCONFIG_REVERSE_SCANORDER совпадает с урегулированием
PRAGMA
reverse_unordered_selects. Этот выбор берет два аргумента, которые
являются целым числом и указателем на целое число. Первый аргумент равняется
1, 0 или -1, чтобы позволить, отключить или оставить обратный флаг
просмотра без изменений, соответственно. Если второй аргумент не NULL, то 0
или 1 написан в целое число, на которое указывает второй аргумент в
зависимости от того, установлен ли обратный флаг просмотра после
обработки первого аргумента.
|