История выпусков
На этой странице приведена общая сводка изменений SQLite. Подробнее см. журналы фиксаций Fossil по адресу https://sqlite.org/src/timeline и https://sqlite.org/src/timeline?t=release. Краткий список выпусков см. в хронологии.
2026-04-09 (3.53.0)
- Исправлена ошибка сброса WAL, приводившая к повреждению базы данных.
- Добавлена библиотека Query Result Formatter (QRF) для форматирования результатов SQL-запросов с целью удобочитаемого отображения на экране с моноширинным шрифтом.
- В интерфейс TCL добавлен метод format, позволяющий использовать QRF из TCL.
- QRF используется для форматирования результатов в CLI, что улучшает возможности отображения.
- Новые возможности языка SQL:
- В ALTER TABLE добавлена возможность добавлять и удалять ограничения NOT NULL и CHECK.
- Оператор REINDEX EXPRESSIONS перестраивает индексы по выражениям. (Полезно для исправления устаревших индексов по выражениям.)
- Теперь тело TEMP-триггеров может изменять таблицы в основной схеме и/или выполнять к ним запросы.
- Улучшена команда VACUUM INTO: если в качестве целевого файла используется имя файла URI с параметром запроса reserve=N, где N находится в диапазоне от 0 до 255, то резервируемый объем для созданной копии базы данных устанавливается равным N.
- Новые функции SQL:
- Обновления CLI:
- Существенно улучшена команда .mode.
- Улучшено форматирование результатов благодаря добавлению расширения QRF. Например, числовые значения теперь по умолчанию выравниваются по правому краю в режимах табличного вывода.
- В интерактивных сеансах CLI по умолчанию теперь используется QRF для отображения результатов запросов в рамках, построенных с помощью символов псевдографики Unicode, что повышает удобочитаемость. В пакетных сеансах CLI для совместимости используется прежний формат вывода.
- Неэкранированные точки с запятой в конце команд, начинающихся с точки, игнорируются без предупреждения. ← Возможна несовместимость!
- Исправлены команды .testcase и .check, чтобы они действительно работали; эти команды используются в скриптах стандартного набора тестов SQLite, поставляемого в дереве исходного кода.
- Аргументы командной строки, соответствующие шаблонам *.sql или *.txt и являющиеся именами непустых файлов, считываются и интерпретируются как скрипты с операторами SQL и/или командами, начинающимися с точки.
- Аргументом команды ".timer" теперь может быть "once", чтобы таймер запускался только для следующего оператора SQL.
- Новый параметр "--timeout S" команды .progress, начинающейся с точки, прерывает выполнение операторов SQL через S секунд.
- Команда ".indexes" изменена: аргумент PATTERN теперь сопоставляется с именем индекса, а не с именем индексируемой таблицы (благодаря чему аргумент PATTERN действительно полезен). Кроме того, в ".indexes" добавлено несколько новых параметров.
- Новые интерфейсы языка C:
- sqlite3_str_truncate()
- sqlite3_str_free()
- sqlite3_carray_bind_v2()
- В sqlite3_prepare_v3() добавлен параметр SQLITE_PREPARE_FROM_DDL, позволяющий реализациям виртуальных таблиц безопасно подготавливать операторы SQL, созданные на основе схемы базы данных.
- Добавлена константа SQLITE_UTF8_ZT, которую можно использовать в качестве параметра кодировки для sqlite3_result_text64() или sqlite3_bind_text64(), чтобы указать, что значение закодировано в UTF-8 и завершается нулевым символом.
- В sqlite3_limit() добавлен параметр SQLITE_LIMIT_PARSER_DEPTH.
- В sqlite3_db_config() добавлен параметр SQLITE_DBCONFIG_FP_DIGITS. См. также пункт 9b ниже.
- Улучшения планировщика запросов:
- Для EXCEPT, INTERSECT и UNION всегда используется алгоритм сортировки и слияния, поскольку почти всегда он быстрее, чем использование хеш-таблицы.
- Улучшен выбор порядка соединения при больших многотабличных соединениях в схемах типа «звезда».
- Улучшена оптимизация EXISTS-to-JOIN: вставленные условия JOIN не обязательно должны находиться во внутренних циклах, если все зависимости циклов EXISTS-to-JOIN находятся во внешних циклах.
- Улучшена оптимизация omit-noop-join: теперь она может исключать цепочки соединений, не влияющих на результат.
- Запросы вида "GROUP BY e1 ORDER BY e2", где e1 и e2 совпадают, за исключением порядка сортировки ASC/DESC, теперь можно оптимизировать с помощью одного индекса.
- Виртуальным таблицам разрешено оптимизировать DISTINCT в случаях, когда результирующий набор запроса не полностью соответствует предложению ORDER BY.
- В расширение session добавлены новые интерфейсы, позволяющие приложению добавлять изменения в объект sqlite3_changegroup по одному:
- Улучшено преобразование чисел с плавающей запятой ↔ текста.
- Реализация переписана для повышения производительности.
- Теперь по умолчанию выполняется округление до 17 значащих цифр вместо 15, как во всех предыдущих версиях. При необходимости это можно изменить с помощью API sqlite3_db_config(SQLITE_DBCONFIG_FP_DIGITS) (пункт 6g выше).
- Добавлена функция самовосстановления индексов для решения проблемы устаревших индексов по выражениям.
- В sqlite3_rsync добавлен параметр "-p|--port".
- Прекращена поддержка Windows RT.
- JavaScript/WASM
- Добавлена VFS "opfs-wl", функционально идентичная VFS "opfs", но использующая Web Locks для блокировок. Это обеспечивает более справедливое распределение блокировок, чем специальный протокол "opfs". Для "opfs-wl" требуется
Atomics.waitAsync(), поэтому она поддерживается в более новых браузерах, чем "opfs".
- Добавлена VFS "opfs-wl", функционально идентичная VFS "opfs", но использующая Web Locks для блокировок. Это обеспечивает более справедливое распределение блокировок, чем специальный протокол "opfs". Для "opfs-wl" требуется
- SQLITE_SOURCE_ID: 2026-04-09 11:41:38 4525003a53a7fc63ca75c59b22c79608659ca12f0131f52c18637f829977f20b
- SHA3-256 для sqlite3.c: bb317fbbd2b3bc53233ddd5894bf4d2dc6f533445f350d4235dbcc86f65af4ec
Хеши:
2026-03-13 (3.51.3)
- Исправлена ошибка сброса WAL, приводившая к повреждению базы данных.
- Прочие незначительные исправления ошибок.
- SQLITE_SOURCE_ID: 2026-03-13 10:38:09 737ae4a34738ffa0c3ff7f9bb18df914dd1cad163f28fd6b6e114a344fe6d618
- SHA3-256 для sqlite3.c: 32d5424f97e0a7fc5ed2f6335afbb58be4e0298bd7117a34e39d345ff13d859e
2026-03-06 (3.52.0)
- Отозван
Все функции, изначально запланированные для выпуска 3.52.0, перенесены в версию 3.53.0.
2026-01-09 (3.51.2)
- Исправлена малозаметная взаимоблокировка в новой логике обнаружения неисправных блокировок POSIX, описанной выше в пункте 17.
- Исправлены многочисленные проблемы оптимизации EXISTS-to-JOIN, добавленной в рамках пункта 6b оптимизации выше.
- Прочие незначительные исправления ошибок.
- SQLITE_SOURCE_ID: 2026-01-09 17:27:48 b270f8339eb13b504d0b2ba154ebca966b7dde08e40c3ed7d559749818cb2075
- SHA3-256 для sqlite3.c: 733b3fcc6cccb1e334424b9b91a9d68b618385b76ebfcbb106690bd3a9e61367
2025-11-28 (3.51.1)
- Исправлена выдача неверных результатов вложенными запросами EXISTS из-за оптимизации, описанной в пункте 6b выпуска 3.51.0.
- Исправлена скрытая ошибка в виртуальной таблице fts5vocab, проявившаяся из-за новых оптимизаций выпуска 3.51.0
Хеши:
- SQLITE_SOURCE_ID: 2025-11-28 17:28:25 281fc0e9afc38674b9b0991943b9e9d1e64c6cbdb133d35f6f5c87ff6af38a88
- SHA3-256 для sqlite3.c: 7cec3a104797bea93970408168197af37f178ab608ea55efd48d28daa87a8ce3
2025-11-04 (3.51.0)
- Новые макросы в
sqlite3.h:-
SQLITE_SCM_BRANCH→ имя ветки, из которой взят исходный код. -
SQLITE_SCM_TAGS→ разделенный пробелами список тегов фиксации исходного кода. -
SQLITE_SCM_DATETIME→ дата и время фиксации исходного кода в формате ISO-8601.
-
- Две новые функции JSON, jsonb_each() и jsonb_tree(), работают так же, как существующие функции json_each() и json_tree(), за исключением того, что в столбце "value" они возвращают JSONB, если значение в столбце "type" равно 'array' или 'object'.
- Расширения carray и percentile теперь встроены в амальгаму, однако по умолчанию они отключены; для их активации во время компиляции следует использовать параметры -DSQLITE_ENABLE_CARRAY и/или -DSQLITE_ENABLE_PERCENTILE соответственно.
- Улучшения интерфейса TCL:
- В команду
evalдобавлен флаг-asdict, позволяющий возвращать данные строки в виде словаря, а не массива. - Пользовательские функции теперь могут
breakвозвращать SQL NULL.
- В команду
-
Улучшения CLI:
- Повышена точность команды ".timer" до микросекунд.
- Режимы форматирования "box" и "column" улучшены для работы с символами двойной ширины.
- Команда ".imposter" предоставляет доступные только для чтения таблицы-подделки, совместимые с VACUUM и не требующие параметра --unsafe-testing.
- Параметр --ifexists добавлен в командную строку CLI и в команду .open.
- Ширина столбцов, заданная командой ".width", ограничена значением 30 000 или меньше: более широкие столбцы не нужны, а их поддержка создает возможности для злоумышленников.
- Улучшения производительности:
- Сокращено количество циклов ЦП, необходимых для фиксации транзакции чтения.
- Добавлено раннее обнаружение соединений, не возвращающих строк из-за того, что одна или несколько таблиц не содержат строк.
- Исключено вычисление скалярных подзапросов, если их результат не меняет результат всего выражения.
- Ускорена обработка запросов с оконными функциями при использовании "
BETWEEN :x FOLLOWING AND :y FOLLOWING" с большим значением :y.
- Добавлена команда PRAGMA wal_checkpoint=NOOP; и аргумент SQLITE_CHECKPOINT_NOOP для sqlite3_wal_checkpoint_v2().
- Добавлен API sqlite3_set_errmsg() для использования расширениями.
- Добавлен API sqlite3_db_status64(), работающий так же, как существующий API sqlite3_db_status(), но возвращающий 64-разрядные результаты.
- В интерфейсы sqlite3_db_status() и sqlite3_db_status64() добавлен параметр SQLITE_DBSTATUS_TEMPBUF_SPILL.
- В расширение session добавлен интерфейс sqlite3changeset_apply_v3().
- Для встроенной функции printf() и функции SQL format() ведущий знак '-' у отрицательных чисел с плавающей запятой не выводится, если флаг '+' отсутствует, флаг "#" присутствует, а все отображаемые цифры равны '0'. Используйте '%#f' или аналогичный формат, чтобы вместо '-0.00' выводилось '0.00'.
- Улучшены сообщения об ошибках, создаваемые FTS5.
- Для вычисляемых столбцов принудительно включена типизация STRICT.
- Улучшена поддержка VxWorks
- JavaScript/WASM теперь поддерживает 64-разрядный WASM. Официальные сборки по-прежнему 32-разрядные, но создание собственной 64-разрядной сборки теперь сводится к запуску команды "make".
- Повышена устойчивость к повреждению базы данных, которое может возникнуть, если приложение нарушает рекомендательные блокировки POSIX с помощью close().
Хеши:
- SQLITE_SOURCE_ID: 2025-11-04 19:38:17 fb2c931ae597f8d00a37574ff67aeed3eced4e5547f9120744ae4bfa8e74527b
- SHA3-256 для sqlite3.c: e2add951748f73587cadd1b2684defb4f39fa58dca14b16162d4237e50af9afa
2025-07-30 (3.50.4)
- Исправлены два давно существовавших случая использования неинициализированных переменных в редких обстоятельствах.
Хеши:
- SQLITE_SOURCE_ID: 2025-07-30 19:33:53 4d8adfb30e03f9cf27f800a2c1ba3c48fb4ca1b08b0f5ed59a4d5ecbf45e20a3
- SHA3-256 для sqlite3.c: 9145255e83da6529e70121ee4d7a4c88fe83ca4511da0c9ed13d10842df36782
2025-07-17 (3.50.3)
- Исправлена возможная ошибка памяти, возникающая при выполнении запроса к индексу FTS5, намеренно поврежденному особым образом.
- Исправлен синтаксический анализатор: теперь он игнорирует комментарии SQL во всех частях оператора CREATE TRIGGER. Это устраняет проблему, возникшую после добавления функции SQLITE_DBCONFIG_ENABLE_COMMENTS в версии 3.49.0.
- Исправлен неверный результат, вызванный чрезмерной оптимизацией оператора AND. Сообщение на форуме f4878de3e.
- Исправлены незначительные проблемы с makefile и опечатки в документации.
Хеши:
- SQLITE_SOURCE_ID: 2025-07-17 13:25:10 3ce993b8657d6d9deda380a93cdd6404a8c8ba1b185b2bc423703e41ae5f2543
- SHA3-256 для sqlite3.c: 934fafe96caa7f4c16e82e0c2b674441a715c038acc9780bf15e09411daba70c
2025-06-28 (3.50.2)
- Исправлена функция SQL concat_ws(): теперь она включает пустые строки в конкатенацию. Сообщение на форуме 52503ac21d.
- Исправлено расширение file-io (используемое CLI), чтобы его можно было собирать с помощью набора компиляторов MinGW.
- Предотвращена запись кадров без контрольных сумм в файл wal, если точка сохранения откатывается после того, как измененные страницы уже были выгружены в файл wal. Сообщение на форуме b490f726db.
- Исправлен объект Bitvec, чтобы избежать переполнения стека, когда размер базы данных не превышает максимальный на 60 страниц.
- Исправлена проблема с операторами UPDATE для таблиц fts5, содержащих значения BLOB.
- Исправлена проблема с транзитивными ограничениями IS в RIGHT JOIN.
- Ошибка теперь выдается заранее, если количество агрегатных выражений в запросе превышает максимальное число столбцов, что позволяет избежать последующих сбоев утверждений.
- Гарантировано, что sqlite3_setlk_timeout() удерживает мьютекс базы данных.
- Исправлены опечатки в документации API.
Хеши:
- SQLITE_SOURCE_ID: 2025-06-28 14:00:48 2af157d77fb1304a74176eaee7fbc7c7e932d946bf25325e9c26c91db19e3079
- SHA3-256 для sqlite3.c: 889bf23942c52f38a6f182e71d3f0a03db490fd731f02147b1142c11153f3b3a
2025-06-06 (3.50.1)
- Исправлена давняя ошибка в jsonb_set() и аналогичных функциях, проявившаяся из-за новых оптимизаций, добавленных в версии 3.50.0.
- Исправлено, по-видимому, безвредное предупреждение ASAN, которое может появляться в сборках с параметром -DSQLITE_DEFAULT_MEMSTATUS=0.
- Исправлена ошибка на единицу в sqlite3_rsync, из-за которой последняя страница могла не передаваться в реплицируемую базу данных.
- Оптимизация планировщика запросов: разрешено сведение правой части LEFT JOIN, даже если она является виртуальной таблицей.
- Исправлена функция sqlite3_setlk_timeout(): теперь она использует блокирующую блокировку при открытии транзакции-снимка и при блокировке другим процессом, выполняющим восстановление.
- Прочие незначительные исправления, о которых сообщили после выпуска 3.50.0.
Хеши:
- SQLITE_SOURCE_ID: 2025-06-06 14:52:32 b77dc5e0f596d2140d9ac682b2893ff65d3a4140aa86067a3efebe29dc914c95
- SHA3-256 для sqlite3.c: c3bdffa01dab94be370bdcaeb819cda4a6e0c61f0c6e19a6f94ccba76fc9eeca
2025-05-29 (3.50.0)
- Добавлен интерфейс sqlite3_setlk_timeout(), устанавливающий отдельный тайм-аут, отличный от sqlite3_busy_timeout(), для блокирующих блокировок в сборках, поддерживающих такие блокировки.
- Ограничение SQLITE_DBCONFIG_ENABLE_COMMENTS (добавленное в предыдущем выпуске) слегка ослаблено: комментарии всегда разрешены при чтении схемы из существующей таблицы sqlite_schema. Комментарии запрещаются только в новых операторах SQL.
- Новые функции SQL:
- Для преобразований %Q и %q во встроенной функции printf() (включая API sqlite3_mprintf(), функцию SQL format() и аналогичные) флаг альтернативной формы 1 ("#") вызывает преобразование управляющих символов в экранированные обратной косой чертой последовательности, подходящие для unistr().
- Улучшения CLI:
- Предотвращен прямой вывод большинства управляющих символов.
- Вывод команды .dump использует новую функцию SQL unistr() для кодирования специальных символов, если только режим --escape не отключен.
- Улучшено форматирование сложных частичных индексов в выводе команды ".schema --indent".
- Улучшения sqlite3_rsync:
- Удалено требование, чтобы база данных находилась в режиме WAL.
- Протокол синхронизации усовершенствован для уменьшения использования пропускной способности сети, когда исходные данные на обеих сторонах очень похожи.
- Теперь программа sqlite3_rsync работает на компьютерах Mac без указания полного пути к исполняемому файлу sqlite3_rsync на удаленной стороне, если исполняемый файл установлен в одном из каталогов: $HOME/bin:/usr/local/bin:/opt/homebrew/bin
- Изменения в функциях JSON:
- Исправлена ошибка: обеспечено соблюдение ограничения JSON5, согласно которому после escape-последовательности "\0" не должна следовать цифра.
- Исправлена ошибка: если аргумент LABEL функции json_group_object(LABEL,VALUE) равен NULL, соответствующий элемент результирующего объекта пропускается.
- Оптимизация: если функции jsonb_set() или jsonb_replace() изменяют внутреннюю часть большого объекта JSONB, они стараются сохранить размер объекта JSONB и изменить как можно меньше байтов внутри него. Это позволяет сократить операции ввода-вывода: SQLite может записать только страницу с измененными байтами, а не все окружающие страницы.
- Улучшена поддержка сборки в Cygwin, MinGW и подобных средах, а также в Termux.
- Исправлены опечатки в документации и комментариях исходного кода.
- Различные улучшения производительности.
- JavaScript/WASM:
- Исправлена давно существовавшая ошибка вычисления дайджеста имени файла в VFS OPFS SAHPool. Базы данных, созданные в этой VFS версиями 3.50.0 и новее, нельзя прочитать более старыми версиями VFS, однако версия 3.50.0 обратно совместима с существующими базами данных, созданными более ранними версиями.
Хеши:
- SQLITE_SOURCE_ID: 2025-05-29 14:26:00 dfc790f998f450d9c35e3ba1c8c89c17466cb559f87b0239e4aab9d34e28f742
- SHA3-256 для sqlite3.c: b8a2bcdd2ec60f87c3bbe7a2c25eb65e476e40fe80cd066ab8aa98e5d516c1e4
2025-05-07 (3.49.2)
- Исправлена ошибка оптимизации NOT NULL в версии 3.40.0 (пункт 3c в журнале изменений версии 3.40.0), которая при неправильном использовании могла привести к ошибке памяти.
- Исправлена оптимизация подсчета строк представления: теперь она не выдает неверный результат для запроса DISTINCT.
- Исправлена возможная ошибка результата, возникавшая, если ограничение UNIQUE таблицы включало столбец PRIMARY KEY и использовалось оператором IN.
- Исправлены редкие проблемы с функцией расширения generate_series().
- Постепенно улучшена работа configure/make.
Хеши:
- SQLITE_SOURCE_ID: 2025-05-07 10:39:52 17144570b0d96ae63cd6f3edca39e27ebd74925252bbaf6723bcb2f6b4861fb1
- SHA3-256 для sqlite3.c: 17f4857fc6a0def2749d248d5365c59282c044270533c6c2b21287295f01eb23
2025-02-18 (3.49.1)
- Улучшена переносимость make-файлов и скриптов configure.
- Исправлена ошибка функции concat_ws(), появившаяся в версии 3.44.0 и способная привести к ошибке памяти, а именно записи за пределы выделенной области, если строка-разделитель превышает два мегабайта.
- Интерфейс SQLITE_DBCONFIG_LOOKASIDE улучшен для повышения устойчивости к неправильному использованию.
Хеши:
- SQLITE_SOURCE_ID: 2025-02-18 13:38:58 873d4e274b4988d260ba8354a9718324a1c26187a4ab4c1cc0227c03d0f10e70
- SHA3-256 для sqlite3.c: 22eab05c842463a3705c63922f12f68531200185ced510ed6aed2065ca44e816
2025-02-06 (3.49.0)
- Улучшения планировщика запросов:
- Улучшена оптимизация индексов, создаваемых во время выполнения запроса: теперь она работает с таблицами WITHOUT ROWID.
- Улучшены планы запросов для больших соединений типа «звезда». Это исправляет три различные проблемы с производительностью, о которых сообщалось на форуме SQLite.
- Если предполагаемая стоимость двух или более запросов одинакова, выбирается запрос с меньшим количеством байтов на строку.
- Улучшена функция SQL iif(): теперь она принимает любое количество аргументов, большее или равное двум.
- Улучшено расширение session: теперь оно работает с базами данных, использующими генерируемые столбцы.
- Удален параметр времени компиляции SQLITE_USE_STDIO_FOR_CONSOLE, реализованный некорректно и никогда не работавший как следует. Вместо него добавлен параметр времени компиляции SQLITE_USE_W32_FOR_CONSOLE_IO. Этот параметр применяется только к инструментам командной строки, например CLI, и не затрагивает ядро SQLite. Он заставляет использовать API Win32 для консольного ввода-вывода вместо stdio. Этот параметр влияет только на сборки для Windows.
- Добавлены три новых параметра для sqlite3_db_config(). По умолчанию все они включены.
- Для скрипта configure, используемого в предварительно скомпилированном архиве амальгамы, Autotools заменен на Autosetup. Скрипт configure для канонического исходного кода был переведен на Autosetup в предыдущем выпуске (3.48.0). Изменен только основной скрипт configure в архиве амальгамы. Скрипт конфигурации (устаревший), используемый в подкаталоге TEA архива амальгамы, по-прежнему зависит от Autotools.
- Различные незначительные исправления и исправления проблем, обнаруженных в выпуске 3.48.0.
Хеши:
- SQLITE_SOURCE_ID: 2025-02-06 11:55:18 4a7dd425dc2a0e5082a9049c9b4a9d4f199a71583d014c24b4cfe276c5a77cde
- SHA3-256 для sqlite3.c: 030c764eba64a3fa3bbf87447abd175bfef94851f970d62126a92877b30b611e
2025-01-14 (3.48.0)
- Переработан скрипт "configure", используемый для сборки SQLite из канонических исходников, чтобы исправить ошибки, повысить производительность и упростить сопровождение кода.
- Это не затрагивает скрипт "configure" в архиве "amalgamation tarball" sqlite3-autoconf-NNNNNNN.tar.gz, а касается только канонических исходников. Система сборки архива амальгамы не изменилась. Если вы используете архив амальгамы, эта запись журнала изменений вас не касается.
- Главное нововведение — использование Autosetup вместо GNU Autoconf. Это может показаться существенным изменением, но на деле это лишь деталь реализации. Скрипт ./configure написан совершенно иначе, но должен работать как прежде.
- Одно из преимуществ нового configure — для сборки большинства целевых компонентов SQLite больше не требуется устанавливать TCL. TCL по-прежнему нужен для запуска тестов и сборки вспомогательных программ (например, sqlite3_analyzer), использующих TCL, но для большинства распространенных целей он не требуется. Таким образом, начиная с этого выпуска, единственные зависимости сборки — компилятор C и "make" или "nmake".
- Улучшен вывод EXPLAIN QUERY PLAN для покрывающих индексов.
- Разрешена двухаргументная версия функции SQL iif(). Также разрешено использовать if() как альтернативное написание iif().
- В CLI добавлена команда ".dbtotxt".
- К методу xDeviceCharacteristics объекта sqlite3_io_methods добавлено свойство SQLITE_IOCAP_SUBPAGE_READ.
- В sqlite3_prepare_v3() добавлен параметр SQLITE_PREPARE_DONT_LOG, предотвращающий отправку предупреждений в журнал ошибок, если SQL имеет неправильный формат. Это позволяет использовать sqlite3_prepare_v3() для пробной компиляции SQL с целью проверки его корректности, не засоряя журнал ошибок ложными сообщениями.
- Минимально допустимое значение SQLITE_LIMIT_LENGTH увеличено с 1 до 30.
- Добавлен элемент управления файлом SQLITE_FCNTL_NULL_IO.
- Вспомогательный API FTS5 xInstToken расширен для поддержки запросов с префиксом с помощью параметра конфигурации insttoken и функции SQL fts5_insttoken().
- Максимальное количество аргументов функции SQL увеличено со 127 до 1000.
- Удалены оставшиеся следы SQLITE_USER_AUTHENTICATION.
- Различные редкие исправления ошибок.
Хеши:
- SQLITE_SOURCE_ID: 2025-01-14 11:05:00 d2fe6b05f38d9d7cd78c5d252e99ac59f1aea071d669830c1ffe4e8966e84010
- SHA3-256 для sqlite3.c: 522bd9492526147d12fc8521028eb960557353d8f08c2035f15ac737d4b91e21
2024-12-07 (3.47.2)
- Исправлена проблема преобразования текста в число с плавающей запятой в SQLite, из-за которой значения между '1.8446744073709550592eNNN' и '1.8446744073709551609eNNN' при любом показателе степени NNN могли отображаться неправильно. Иными словами, некоторые текстовые числовые значения, у которых первые 16 значащих цифр — '1844674407370955', могли преобразовываться в неверное число с плавающей запятой. См. обсуждение на форуме 569a7209179a7f5e. Эта проблема возникает только на оборудовании x64 и i386. Она появилась в версии 3.47.0.
- Прочие незначительные исправления ошибок.
Хеши:
- SQLITE_SOURCE_ID: 2024-12-07 20:39:59 2aabe05e2e8cae4847a802ee2daddc1d7413d8fc560254d93ee3e72c14685b6c
- SHA3-256 для sqlite3.c: 586b5789453ee5c51e8d858cd836f20ce60df882323f2070547cbaf23a5898af
2024-11-25 (3.47.1)
- Исправлены make-файлы, чтобы цель "install" снова учитывала DESTDIR.
- В VFS добавлена возможность SQLITE_IOCAP_SUBPAGE_READ, чтобы обойти проблемы в некоторых нестандартных VFS, вызванные тем, что в версии 3.45.0 параметр SQLITE_DIRECT_OVERFLOW_READ стал включён по умолчанию.
- Исправлены проблемы с переводами строк в новой утилите sqlite3_rsync.exe для Windows.
- Исправлены неверные результаты некоторых редких запросов IN, вызванные новыми оптимизациями запросов, добавленными в выпуске 3.47.0.
- Другие мелкие исправления ошибок.
Хеши:
- SQLITE_SOURCE_ID: 2024-11-25 12:07:48 b95d11e958643b969c47a8e5857f3793b9e69700b8f1469371386369a26e577e
- SHA3-256 для sqlite3.c: d91b8b5671a127bd41057bc758d6d59fb7aceda67934a1c0166ab2e133f2f902
2024-10-21 (3.47.0)
- Во втором аргументе функции RAISE разрешены произвольные выражения.
- Если правая часть оператора ->> отрицательна, элементы массива отсчитываются справа.
- Исправлена проблема с откатом файлов горячего журнала в редко используемой VFS unix-dotfile.
- Теперь таблицы FTS5 можно удалять, даже если они используют незарегистрированный нестандартный токенизатор.
- Исправлена агрегатная функция group_concat(): если она получает одно входное значение — пустую строку, — то возвращает пустую строку, а не NULL.
- Расширена табличная функция generate_series(): теперь она может распознавать и использовать ограничения на выходное значение.
- Хуки предварительного обновления теперь распознают ненулевое значение по умолчанию у столбца, добавленного командой ALTER TABLE ADD COLUMN.
- Оптимизации производительности:
- Улучшено повторное использование подзапросов, связанных с оператором IN, особенно если оператор IN дублируется из-за проталкивания предиката вниз.
- Для подзапросов в правой части оператора IN используется фильтр Блума в случаях, когда это, вероятно, повысит производительность.
- Обеспечено, чтобы запросы вида "
SELECT func(a) FROM tab GROUP BY 1" вызывали функцию func() только один раз для каждой строки. - Не предпринимается попыток создавать автоматические индексы по столбцу, заведомо не обладающему избирательностью из-за использования в других проанализированных индексах.
- Скорректирован планировщик запросов, чтобы он строил более эффективные планы для звёздочных запросов с большим количеством таблиц измерений.
- Добавлена оптимизация "order-by-subquery", которая пытается отключать операции сортировки во внешних запросах, если нужный порядок естественным образом обеспечивается предложениями ORDER BY в подзапросах.
- Оптимизация "indexed-subtype-expr" стремится использовать выражения, входящие в индекс, а не вычислять выражение заново по значениям таблицы, если планировщик запросов может доказать, что подтип выражения никогда не будет использоваться.
- Различные небольшие изменения в коде для ускорения выполнения.
- Улучшения программ командной строки, связанных с SQLite:
- Добавлена экспериментальная программа sqlite3_rsync.
- В CLI добавлены функции расширения median(), percentile(), percentile_cont() и percentile_disc().
- В CLI добавлена точечная команда .www.
- Теперь утилита sqlite3_analyzer отдельно выводит статистику для таблиц WITHOUT ROWID.
- Утилита sqldiff не создаёт пустую базу данных, если её второй аргумент не существует.
- Расширена табличная функция sqlite_dbpage: с помощью INSERT теперь можно увеличивать или уменьшать размер файла базы данных.
- SQLite больше не использует тип данных "long double": аппаратная поддержка long double становится всё менее распространённой, а этот тип создаёт сложности для некоторых цепочек компиляторов. Вместо этого SQLite использует алгоритм Деккера, когда требуется расширенная точность.
- Интерфейс TCL SQLite поддерживает TCL9. Вероятно, всё по-прежнему работает с TCL 8.5 и более поздними версиями, хотя это не гарантируется. Пользователям рекомендуется перейти на TCL9.
- JavaScript/WASM:
- Исправлена ошибка, вызывавшая повреждение данных в JavaScript-VFS "opfs".
- Исправлена обработка "mode=ro" в VFS "opfs".
- Добавлены обходные решения для нескольких особенностей OPFS, характерных для отдельных браузеров.
- Изменения FTS5:
- Добавлены API fts5_tokenizer_v2 и параметр locale=1 для создания пользовательских токенизаторов с поддержкой локалей и таблиц fts5, которые могут их использовать.
- Добавлен параметр contentless_unindexed=1 для создания таблиц fts5 без содержимого, в которых значения любых столбцов UNINDEXED постоянно хранятся в базе данных.
- Таблицу FTS5 можно удалить, даже если она использует пользовательский токенизатор, реализация которого недоступна.
Хеши:
- SQLITE_SOURCE_ID: 2024-10-21 16:30:22 03a9703e27c44437c39363d0baf82db4ebc94538a0f28411c85dda156f82636e
- SHA3-256 для sqlite3.c: bcec3a4fbc97e973547924677332996ef64e06a6d10d22e2c2344f447536cc29
2024-08-13 (3.46.1)
- Повышена надёжность разбора аргументов tokenize= в FTS5. Сообщение на форуме 171bcc2bcd.
- Улучшено прогнозирование использования покрывающего индекса планировщиком запросов. Добавлено раннее обнаружение чрезмерно оптимистичного прогноза использования покрывающего индекса, чтобы sqlite3_prepare() возвращала ошибку, а не создавала некорректный байт-код. Сообщение на форуме e60e4c295d22f8ce.
- Количество элементов в предложении VALUES больше не ограничивается параметром SQLITE_LIMIT_COMPOUND_SELECT, даже если предложение VALUES содержит элементы, которые из-за строковых литералов в двойных кавычках выглядят как переменные.
- Исправлена версия group_concat() для оконных функций: теперь она возвращает пустую строку, если получила одну или несколько пустых строк.
- В режиме secure-delete FTS5 исправлены ложные сообщения проверки целостности о повреждённых индексах.
- Синтаксические ошибки в ALTER TABLE всегда должны возвращать SQLITE_ERROR. Ранее в некоторых случаях возвращался SQLITE_INTERNAL.
- JavaScript/WASM:
- Исправлена ошибка, вызывавшая повреждение данных в JavaScript-VFS "opfs".
- Добавлены обходные решения для нескольких особенностей OPFS, характерных для отдельных браузеров.
- Другие мелкие исправления.
Хеши:
- SQLITE_SOURCE_ID: 2024-08-13 09:16:08 c9c2ab54ba1f5f46360f1b4f35d849cd3f080e6fc2b6c60e91b16c63f69a1e33
- SHA3-256 для sqlite3.c: 186a1baa476b6d546de155160ca6d30ff7b7e6ee375f0bb6445e1a3d180a7dad
2024-05-23 (3.46.0)
- Многосторонне усовершенствована PRAGMA optimize, чтобы её было проще использовать:
- PRAGMA optimize автоматически применяет временное ограничение анализа, чтобы избежать чрезмерного времени выполнения на больших базах данных.
- Добавлена новая битовая маска 0x10000 для проверки обновлений во всех таблицах.
- Автоматически повторно анализируются таблицы, для которых отсутствуют записи sqlite_stat1.
- Улучшения функций даты и времени:
- В SQL-функции strftime() теперь поддерживаются %G, %g, %U и %V.
- Новые модификаторы 'ceiling' и 'floor' управляют алгоритмом разрешения неоднозначных дат при сдвиге даты на целое число месяцев и/или лет.
- Модификаторы 'utc' и 'localtime' теперь ничего не делают, если SQLite знает, что время уже задано в UTC или в местном часовом поясе соответственно.
- Добавлена поддержка символов подчёркивания ("_") между цифрами в числовых литералах.
- Добавлена SQL-функция json_pretty().
- Улучшения планировщика запросов:
- Оптимизация "VALUES-as-coroutine" позволяет разбирать и выполнять операторы INSERT с тысячами строк в предложении VALUES примерно вдвое быстрее и примерно вдвое сократить расход памяти.
- Разрешено использовать индекс для запросов вида "SELECT count(DISTINCT col) FROM ...", даже если записи индекса не меньше записей таблицы.
- Улучшено распознавание случаев, когда значение SQL-функции является константой, поскольку все её аргументы — константы.
- Расширена оптимизация проталкивания условий WHERE вниз: теперь она может проталкивать условия WHERE, содержащие некоррелированные подзапросы.
- Если стек SQL-парсера переполняется, из кучи выделяется дополнительная память, а не возвращается ошибка "parser stack overflow".
- Изменения JSON:
- В строковых литералах JSON5 разрешены управляющие символы ASCII.
- Исправлены операторы -> и ->>: если операнд в правой части — строка, похожая на целое число, она всё равно рассматривается как строка, как это делается в PostgreSQL.
- Большие шестнадцатеричные литералы теперь можно использовать в качестве значения DEFAULT для столбца таблицы.
Хеши:
- SQLITE_SOURCE_ID: 2024-05-23 13:25:27 96c92aba00c8375bc32fafcdf12429c58bd8aabfcadab6683e35bbb9cdebf19e
- SHA3-256 для sqlite3.c: 094429ea827fcd32275e767134bc6c7b9ea394a2c5a9e653dd0a0690b2c11358
2024-04-15 (3.45.3)
- Исправлена давняя ошибка (существовавшая со времён версии 3.24.0), которая в редких случаях могла приводить к неверным значениям "old.*" в триггере UPDATE, если он срабатывал в ответ на UPSERT. Сообщение на форуме 284955a3cd454a15.
- Исправлена ошибка в sum(), из-за которой функция могла возвращать NULL вместо Infinity. Сообщение на форуме 23b8688ef4.
- Прочие незначительные исправления и устранение предупреждений компилятора, появившихся после предыдущего исправительного выпуска. Подробнее см. в хронологии.
Хеши:
- SQLITE_SOURCE_ID: 2024-04-15 13:34:05 8653b758870e6ef0c98d46b3ace27849054af85da891eb121e9aaa537f1e8355
- SHA3-256 для sqlite3.c: 21dbe688a71b449d28e2a8ec6a43e7520e54df456e02b6d4f6a1d1c7a998c826
2024-03-12 (3.45.2)
- Исправлена ошибка в UPSERT, появившаяся в результате улучшения 3a в версии 3.35.0 (2021-03-12), из-за которой индекс мог рассинхронизироваться с таблицей. Обсуждение на форуме 919c6579c8.
- Ограничена область применения оптимизации ослабления ограничения NOT NULL, добавленной в пункте 8e версии 3.35.0 (2021-03-12). Оптимизация применялась в некоторых контекстах, где она не работала, что приводило к неверным результатам запросов. Обсуждение на форуме 440f2a2f17.
- Прочие незначительные исправления и устранение предупреждений компилятора, появившихся после предыдущего исправительного выпуска. Подробнее см. в хронологии.
Хеши:
- SQLITE_SOURCE_ID: "2024-03-12 11:06:23 d8cd6d49b46a395b13955387d05e9e1a2a47e54fb99f3c9b59835bbefad6af77"
- SHA3-256 для sqlite3.c: bd76ad2dc9cde151e469e86627a7e8753aa8ef1a6f657c5a80ba48324b53226b
2024-01-30 (3.45.1)
- Восстановлено ошибочное поведение при передаче BLOB в JSON, и обещана поддержка этой аномалии в последующих выпусках для обеспечения обратной совместимости.
- Исправлена команда PRAGMA integrity_check, чтобы она работала с базами данных, открытыми только для чтения и содержащими таблицы FTS3 и FTS5. Это устраняет проблему, появившуюся в версии 3.44.0, но обнаруженную лишь после выпуска 3.45.0.
- Исправлены проблемы, связанные с обработкой повреждённых входных данных JSONB:
- Предотвращено экспоненциальное увеличение времени выполнения при преобразовании повреждённого JSONB в текст.
- Исправлено возможное чтение одного байта за концом BLOB JSONB при преобразовании повреждённого JSONB в текст.
- Усилено тестирование с помощью jfuzz, чтобы предотвратить подобные проблемы с JSONB в будущем.
- Исправлена давняя ошибка, из-за которой при доступе к искусно повреждённой базе данных с помощью базы данных с отображением в память могли считываться несколько байтов за концом сегмента, отображённого в память.
- Исправлена давняя ошибка, из-за которой в механизме байт-кода могло происходить разыменование нулевого указателя. Причиной была генерация неверного байт-кода для класса SQL-операторов, намеренно созданных для стресс-тестирования планировщика запросов, но в остальном не имеющих смысла.
Хеши:
- SQLITE_SOURCE_ID: 2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257cc467a
- SHA3-256 для sqlite3.c: 0474604df9e1b69a5544295dd046aad954749279780d557da80f44b958100295
2024-01-15 (3.45.0)
- Для определяемых приложением SQL-функций добавлено свойство SQLITE_RESULT_SUBTYPE. Все определяемые приложением SQL-функции, вызывающие sqlite3_result_subtype(), необходимо регистрировать с этим новым свойством. В противном случае вызов sqlite3_result_subtype() может ничего не делать. Скомпилируйте с параметром -DSQLITE_STRICT_SUBTYPE=1, чтобы при попытке вызвать sqlite3_result_subtype() из функции без свойства SQLITE_RESULT_SUBTYPE возникала ошибка SQL. Использование -DSQLITE_STRICT_SUBTYPE=1 рекомендуется в качестве параметра компиляции для любого приложения, использующего подтипы.
- Улучшения SQL-функций JSON:
- Все функции JSON переписаны для использования нового внутреннего формата дерева разбора, называемого JSONB. Новый формат дерева разбора можно сериализовать и, следовательно, хранить в базе данных, чтобы избежать ненужного повторного разбора при каждом использовании значения JSON.
- Новые версии функций генерации JSON создают двоичный JSONB вместо текста JSON.
- Функция json_valid() получила необязательный второй аргумент, задающий, что считать «правильно сформированным» первым аргументом.
- В виртуальную таблицу FTS5 добавлен параметр FTS5 tokendata.
- Оптимизация SQLITE_DIRECT_OVERFLOW_READ теперь включена по умолчанию. Её можно отключить при компиляции с помощью -DSQLITE_DIRECT_OVERFLOW_READ=0.
- Улучшения планировщика запросов:
- Оптимизация транзитивных ограничений больше не вводит планировщик запросов в заблуждение, заставляя его использовать ограничение диапазона, если доступно более эффективное ограничение равенства. (Сообщение на форуме 2568d1f6e6.)
- Планировщик запросов теперь лучше отбрасывает индексы, которые команда ANALYZE определяет как низкокачественные. (Сообщение на форуме 6f0958b03b.)
- Значение по умолчанию для SQLITE_MAX_PAGE_COUNT увеличено с 1073741824 до 4294967294.
- Улучшения CLI:
- Улучшено отображение содержимого UTF-8 в Windows.
- Автоматически определяется воспроизведение скриптов ".dump" и соответствующим образом изменяются параметры, например ".dbconfig defensive off" и ".dbconfig dqs_dll on".
Хеши:
- SQLITE_SOURCE_ID: 2024-01-15 17:01:13 1066602b2b1976fe58b5150777cced894af17c803e068f5918390d6915b46e1d
- SHA3-256 для sqlite3.c: f56d8e5e8c61d87b957f1cc60b3042c134d7bc0ca3aba002e6999e8f0af310a3
2023-11-24 (3.44.2)
- Исправлена ошибка в CLI, появившаяся в результате исправления (пункт 15 выше) в версии 3.44.1.
- Исправлена проблема в FTS5, обнаруженная при внутреннем фазз-тестировании всего через несколько минут после пометки выпуска 3.44.1.
- Исправлены неполные инструкции assert(), обнаруженные фаззером на следующий день после предыдущего выпуска.
- Исправлены несколько безвредных предупреждений компилятора, появлявшихся при отладочных сборках с GCC 16.
Хеши:
- SQLITE_SOURCE_ID: 2023-11-24 11:41:44 ebead0e7230cd33bcec9f95d2183069565b9e709bf745c9b5db65cc0cbf92c0f
- SHA3-256 для sqlite3.c: bd70b012e2d1b3efa132d905224cd0ab476a69b892f8c6b21135756ec7ffbb13
2023-11-22 (3.44.1)
- В CLI изменён способ ввода-вывода через консоль в Windows: теперь используется UTF-16. Это обеспечивает корректное отображение текста Unicode на старых компьютерах с Windows 7.
- Другие малозаметные исправления ошибок.
Хеши:
- SQLITE_SOURCE_ID: 2023-11-22 14:18:12 d295f48e8f367b066b881780c98bdf980a1d550397d5ba0b0e49842c95b3e8b4
- SHA3-256 для sqlite3.c: e359dc502a73f3a8ad8e976a51231134d25cb93ad557a724dd92fe0c5897113a
2023-11-01 (3.44.0)
- В агрегатные функции теперь можно добавлять предложение ORDER BY после последнего параметра. Аргументы функции обрабатываются в заданном порядке. Это может быть важно для таких функций, как string_agg() и json_group_array().
- Добавлена поддержка скалярных SQL-функций concat() и concat_ws(), совместимых с PostgreSQL, SQLServer и MySQL.
- Добавлена поддержка агрегатной SQL-функции string_agg(), совместимой с PostgreSQL и SQLServer.
- В SQL-функцию strftime() добавлены новые спецификаторы преобразования: %e %F %I %k %l %p %P %R %T %u
- Добавлены новые API на языке C: sqlite3_get_clientdata() и sqlite3_set_clientdata().
- Многие ошибки, связанные с CREATE TABLE, теперь обнаруживаются при выполнении самого оператора CREATE TABLE, а не откладываются до первого использования таблицы.
- Команда PRAGMA integrity_check теперь проверяет согласованность содержимого различных встроенных виртуальных таблиц с помощью нового метода xIntegrity. Это работает для расширений FTS3, FTS4, FTS5, RTREE и GEOPOLY.
- Теперь параметр SQLITE_DBCONFIG_DEFENSIVE запрещает включать PRAGMA writable_schema. Ранее writable_schema можно было включить, но это не позволяло изменять схему. Теперь его включение полностью запрещено.
- Встроенные виртуальные таблицы FTS3, FTS4, FTS5, RTREE и GEOPOLY помечены как SQLITE_VTAB_INNOCUOUS, поэтому их можно использовать в триггерах в системах с высокими требованиями к безопасности.
- Оператор PRAGMA case_sensitive_like объявлен устаревшим, поскольку его использование при наличии в схеме операторов LIKE может привести к сообщениям о повреждении базы данных от команды PRAGMA integrity_check.
- SQLITE_USE_SEH (структурированная обработка исключений) теперь включается по умолчанию при сборке SQLite с помощью компилятора Microsoft C. Его можно отключить с помощью -DSQLITE_OMIT_SEH.
- Оптимизации планировщика запросов:
- При сканировании частичного индекса, если предложение WHERE задаёт постоянное значение для столбца таблицы, все вхождения этого столбца заменяются константой. Это повышает вероятность того, что частичный индекс станет покрывающим.
- Отключена оптимизация сканирования представлений (добавленная в версии 3.40.0, пункт 3d), поскольку она приводила к нескольким регрессиям производительности. Вместо неё расчётное количество строк для подзапросов DISTINCT уменьшено в 8 раз.
- SQLite теперь во время выполнения определяет, поддерживает ли оборудование тип "long double" с точностью выше, чем у "double", и выбирает подходящие процедуры работы с числами с плавающей запятой в зависимости от результата.
- Теперь CLI для Windows по умолчанию использует UTF-8 для ввода и вывода на платформах, поддерживающих его. Для отключения поддержки UTF8 предусмотрен параметр --no-utf8.
Хеши:
- SQLITE_SOURCE_ID: 2023-11-01 11:23:50 17129ba1ff7f0daf37100ee82d507aef7827cf38de1866e2633096ae6ad8130
- SHA3-256 для sqlite3.c: d9e6530096136067644b1cb2057b3b0fa51070df99ec61971f73c9ba6aa9a36e
2023-10-10 (3.43.2)
- Исправлены несколько малозаметных ошибок UAF и одна малозаметная утечка памяти.
- В CLI исключено использование библиотечной функции sprintf(), поскольку на некоторых платформах она теперь вызывает предупреждения.
- Исключено преобразование double в целое число unsigned long long, поскольку некоторые платформы выполняют такие преобразования некорректно.
Хеши:
- SQLITE_SOURCE_ID: 2023-10-10 12:14:04 4310099cce5a487035fa535dd3002c59ac7f1d1bec68d7cf317fd3e769484790
- SHA3-256 для sqlite3.c: e17a3dc69330bd109256fb5a6e2b3ce8fbec48892a800389eb7c0f8856703161
2023-09-11 (3.43.1)
- Исправлена регрессия в обработке бесконечностей агрегатными функциями sum(), avg() и total().
- Исправлена ошибка функции json_array_length(), возникающая, когда аргумент передаётся непосредственно из json_remove().
- Исправлена оптимизация удаления неиспользуемых столбцов подзапросов (введённая в версии 3.42.0): теперь она корректно работает, если подзапрос является составным, причём одна его часть использует DISTINCT, а другая — нет.
- Другие мелкие исправления.
Хеши:
- SQLITE_SOURCE_ID: 2023-09-11 12:01:27 2d3a40c05c49e1a49264912b1a05bc2143ac0e7c3df588276ce80a4cbc9bd1b0
- SHA3-256 для sqlite3.c: 391af0a4755e31ae8b29776a4a060b678823ffe4c4db558567567c688a578589
2023-08-24 (3.43.0)
- Добавлена поддержка индексов FTS5 без содержимого с удалением. Это разновидность полнотекстового поискового индекса FTS5, которая не хранит индексируемое содержимое, но позволяет удалять записи.
- Улучшения функций даты и времени:
- Добавлены новые модификаторы сдвига времени вида
±YYYY-MM-DD HH:MM:SS.SSS. - Добавлена SQL-функция timediff().
- Добавлены новые модификаторы сдвига времени вида
- Добавлена SQL-функция octet_length(X).
- Добавлен API sqlite3_stmt_explain().
- Улучшения планировщика запросов:
- Обобщена оптимизация ослабления ограничений LEFT JOIN, теперь она работает также для RIGHT и FULL JOIN. Переименована в ослабление ограничений OUTER JOIN.
- Усовершенствована система доказательств в оптимизации ослабления ограничений OUTER JOIN, благодаря чему она реже выдаёт ложноотрицательные результаты.
- Улучшения расширения decimal:
- Новая функция decimal_pow2(N) возвращает степень числа 2 с показателем N для целых N от -20000 до +20000.
- Новая функция decimal_exp(X) работает как decimal(X), но возвращает результат в экспоненциальной записи — с "e+NN" в конце.
- Если X — значение с плавающей запятой, функция decimal(X) теперь полностью раскрывает его до точного десятичного представления.
- Повышена производительность обработки JSON: для некоторых видов обработки больших строк JSON она увеличилась вдвое.
- Добавлена новая цель make-файла "verify-source", проверяющая отсутствие непреднамеренных изменений в дереве исходного кода. (Работает только для канонического исходного кода, но не для предварительно скомпилированных архивов амальгамации.)
- Добавлен параметр компиляции SQLITE_USE_SEH, включающий структурированную обработку исключений в Windows при работе с отображённым в память файлом shm, который используется при обработке в режиме WAL. Этот параметр включён по умолчанию при сборке в Windows с помощью Makefile.msc.
- Теперь VFS unix предполагает, что системный вызов nanosleep() доступен, если только сборка не выполнена с параметром -DHAVE_NANOSLEEP=0.
Хеши:
- SQLITE_SOURCE_ID: 2023-08-24 12:36:59 0f80b798b3f4b81a7bb4233c58294edd0f1156f36b6ecf5ab8e83631d468778c
- SHA3-256 для sqlite3.c: a6fc5379891d77b69a7d324cd24a437307af66cfdc3fef5dfceec3c82c8d4078
2023-05-16 (3.42.0)
- Добавлена команда secure-delete для FTS5. Этот параметр удаляет все криминалистические следы из инвертированного индекса FTS5 при удалении содержимого.
- SQL-функции JSON расширены поддержкой расширений JSON5.
- Вызовы sqlite3_config() с параметрами SQLITE_CONFIG_LOG и SQLITE_CONFIG_PCACHE_HDRSZ теперь разрешено выполнять после вызова sqlite3_initialize().
- Добавлены новые параметры sqlite3_db_config(): SQLITE_DBCONFIG_STMT_SCANSTATUS и SQLITE_DBCONFIG_REVERSE_SCANORDER.
- Улучшения планировщика запросов:
- По умолчанию включена оптимизация "count-of-view".
- Исключено вычисление неиспользуемых столбцов в подзапросах.
- Улучшена оптимизация проталкивания условий WHERE вниз.
- Улучшения CLI:
- Добавлен параметр командной строки --unsafe-testing. Без него некоторые точечные команды (например, ".testctrl") теперь отключены, поскольку они предназначены только для тестирования и при неправильном использовании могут привести к сбоям.
- Команды ".log on" и ".log off" теперь разрешены даже в безопасном режиме --safe.
- Аргумент командной строки "--" означает, что все последующие аргументы, начинающиеся с "-", интерпретируются как обычные аргументы, а не как параметры.
- Магические параметры ":inf" и ":nan" связываются с литералами чисел с плавающей запятой Infinity и NaN соответственно.
- Параметр командной строки --utf8 отключает все преобразования в MBCS и из MBCS для интерактивных сеансов в консоли Windows и устанавливает кодовую страницу консоли для ввода-вывода UTF-8 на время этих сеансов. На всех остальных платформах параметр --utf8 ничего не делает.
- Добавлена возможность задавать для определяемых приложением SQL-функций имена, совпадающие с ключевыми словами соединения: CROSS, FULL, INNER, LEFT, NATURAL, OUTER или RIGHT.
- Улучшения PRAGMA integrity_check:
- Обнаруживается и вызывается ошибка, если в столбце NOT NULL хранится значение NaN.
- Улучшен вывод сообщения об ошибке: если ошибка обнаружена внутри b-дерева, указывается его корневая страница.
- Добавлена возможность настроить расширение session для отслеживания изменений в таблицах без явного ROWID.
- В функции даты и времени добавлен модификатор subsecond.
- Отрицательные значения, переданные в sqlite3_sleep(), отныне интерпретируются как 0.
- Максимальная глубина рекурсии для массивов и объектов JSON уменьшена с 2000 до 1000.
- Встроенная функция printf() расширена: параметр запятой теперь работает и для преобразований чисел с плавающей запятой, и для преобразований целых чисел.
- Различные исправления ошибок и оптимизации производительности
Хеши:
- SQLITE_SOURCE_ID: 2023-05-16 12:36:15 831d0fb2836b71c9bc51067c49fee4b8f18047814f2ff22d817d25195cf350b0
- SHA3-256 для sqlite3.c: 6aa3fadf000000625353bbaa1e83af114c40c240a0aa5a2c1c2aabcfc28d4f92
2023-03-22 (3.41.2)
- Исправлено несколько случаев чтения за пределами буферов памяти (примечание: речь о чтении, а не о записи) при следующих обстоятельствах:
- При обработке повреждённого файла базы данных с использованием нестандартного параметра компиляции SQLITE_ENABLE_STAT4.
- В CLI, когда процедура sqlite3_error_offset() возвращает значение за пределами допустимого диапазона (см. также исправление sqlite3_error_offset() ниже).
- В расширении восстановления.
- В FTS3 при обработке повреждённого файла базы данных.
- Исправлена функция sqlite3_error_offset(), чтобы при сообщении об ошибках, связанных с генерируемыми столбцами, она не возвращала значения за пределами допустимого диапазона.
- В оптимизатор запросов внесено несколько исправлений для устранения проблем, приводивших к неверным результатам для необычных запросов, сгенерированных фаззером.
- Размер счётчика ссылок в объекте кэша страниц увеличен до 64 бит, чтобы гарантировать отсутствие переполнения счётчика.
- Исправлена регрессия производительности, вызванная исправлением ошибки в выпуске 3.41.1.
- Исправлено несколько некорректных операторов assert().
Хеши:
- SQLITE_SOURCE_ID: 2023-03-22 11:56:21 0d1fc92f94cb6b76bffe3ec34d69cffde2924203304e8ffc4155597af0c191da
- SHA3-256 для sqlite3.c: c83f68b7aac1e7d3ed0fcdb9857742f024449e1300bfb3375131a6180b36cf7c
2023-03-10 (3.41.1)
- Добавлены параметры компиляции -DHAVE_LOG2=0 и -DHAVE_LOG10=0, позволяющие компилировать SQLite в системах, где отсутствуют стандартные библиотечные функции log2() и log10() соответственно.
- Гарантировано, что тип данных столбца t1.x в "
CREATE TABLE t1 AS SELECT CAST(7 AS INT) AS x;" остаётся INT, а не NUM, для обеспечения исторической совместимости. - Улучшена команда PRAGMA integrity_check: теперь она обнаруживает лишние байты в конце записи индекса.
- Исправлены различные малозаметные ошибки, о которых сообщило сообщество пользователей. Подробности см. в хронологии изменений.
Хеши:
- SQLITE_SOURCE_ID: 2023-03-10 12:13:52 20399f3eda5ec249d147ba9e48da6e87f969d7966a9a896764ca437ff7e737ff
- SHA3-256 для sqlite3.c: d0d9db8425570f4a57def04fb8f4ac84f5c3e4e71d3d4d10472e3639c5fdf09f
2023-02-21 (3.41.0)
- Улучшения планировщика запросов:
- Использование индексированных выражений в агрегатном запросе, содержащем предложение GROUP BY.
- Планировщик запросов лучше определяет, является ли индекс покрывающим индексом, и соответствующим образом корректирует прогнозируемое время выполнения.
- Планировщик запросов активнее использует сопрограммы вместо материализации подзапросов и представлений.
- Запросы к встроенным табличным функциям json_tree() и json_each() теперь обычно рассматривают "ORDER BY rowid" как пустую операцию.
- Улучшена возможность планировщика запросов использовать индексированные выражения, даже если выражение было изменено оптимизацией распространения констант. (См. обсуждение на форуме 0a539c7.)
- Добавлена встроенная SQL-функция unhex().
- Функции base64 и base85, определяемые приложением, добавлены в виде расширения; это расширение также включено в CLI.
- Добавлен интерфейс sqlite3_stmt_scanstatus_v2(). (Этот интерфейс доступен только при компиляции SQLite с параметром SQLITE_ENABLE_STMT_SCANSTATUS.)
- Базы данных в памяти, созданные с помощью sqlite3_deserialize(), теперь сообщают имя файла в виде пустой строки, а не 'x'.
- Изменения в CLI:
- Добавлены новые SQL-функции base64() и base85()
- Улучшен вывод EXPLAIN QUERY PLAN за счёт использования нового интерфейса sqlite3_stmt_scanstatus_v2() при компиляции с параметром SQLITE_ENABLE_STMT_SCANSTATUS.
- Команда "
.scanstats est" выводит в профилях оценки планировщика запросов. - В приглашении продолжения указывается, находится ли текущий ввод внутри строкового литерала, литерала-идентификатора, комментария, определения триггера и т. п.
- Параметр командной строки --safe улучшен: теперь он запрещает опасные SQL-функции.
- Особенность двойных кавычек для строк теперь по умолчанию отключена в сборках CLI. Для устаревших сценариев использования эту особенность можно повторно включить во время выполнения командами "
.dbconfig dqs_dml on" и ".dbconfig dqs_ddl on".
- Улучшена команда PRAGMA integrity_check: теперь она обнаруживает случаи, когда текстовые строки в таблице эквивалентны строкам в индексе, но не совпадают с ними побайтно.
- Улучшена табличная функция carray: теперь она может привязывать массив объектов BLOB.
- Добавлен интерфейс sqlite3_is_interrupted().
- Длительные вызовы sqlite3_prepare() и аналогичных функций теперь вызывают обратный вызов обработчика прогресса и реагируют на sqlite3_interrupt().
- Функции sqlite3_vtab_in_first() и sqlite3_vtab_in_next() улучшены: теперь они надёжно определяют, были ли вызваны для параметра, не выбранного для обработки IN с несколькими значениями посредством sqlite3_vtab_in(). В этом случае они возвращают SQLITE_ERROR вместо SQLITE_MISUSE.
- Теперь парсер игнорирует лишние скобки вокруг подзапроса в правой части оператора IN, поэтому в этом отношении SQLite работает так же, как PostgreSQL. Ранее SQLite рассматривала такой подзапрос как выражение с неявным "LIMIT 1".
- В API sqlite3_file_control() добавлен параметр SQLITE_FCNTL_RESET_CACHE.
- Улучшения Makefile:
- Новая цель make-файла "sqlite3r.c" собирает амальгамацию, включающую расширение восстановления.
- Добавлены новые цели make-файла "devtest" и "releasetest" для быстрого тестирования в процессе разработки перед фиксацией изменений и для полного тестирования выпуска соответственно.
- Различные улучшения производительности.
Хеши:
- SQLITE_SOURCE_ID: 2023-02-21 18:09:37 05941c2a04037fc3ed2ffae11f5d2260706f89431f463518740f72ada350866d
- SHA3-256 для sqlite3.c: 02bd9e678460946810801565667fdb8f0c29c78e51240512d2e5bb3dbdee7464
2022-12-28 (3.40.1)
- Исправлен параметр командной строки --safe для CLI: теперь он корректно запрещает использование SQL-функций, таких как writefile(), которые могут вызвать вредные побочные эффекты.
- Исправлен возможный бесконечный цикл в альтернативном распределителе памяти memsys5. Эта ошибка появилась из-за оптимизации производительности в версии 3.39.0.
- Исправлены и другие малозаметные ошибки.
Хеши:
- SQLITE_SOURCE_ID: 2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24
- SHA3-256 для sqlite3.c: 4d6800e9032ff349376fe612e422b49ba5eb4e378fac0b3e405235d09dd366ab
2022-11-16 (3.40.0)
- Добавлена поддержка компиляции SQLite в WASM и запуска в веб-браузерах. Примечание: сборка WASM и её интерфейсы считаются «бета-версией» и при необходимости могут незначительно измениться. Мы планируем окончательно утвердить интерфейс в следующем выпуске.
- Добавлено расширение восстановления, которое может восстановить часть содержимого повреждённого файла базы данных.
- Улучшения планировщика запросов:
- Распознавание покрывающих индексов для таблиц более чем с 63 столбцами, если столбцы после 63-го используются в запросе и/или на них ссылается индекс.
- Извлечение значений выражений, входящих в индексы по выражениям, если это целесообразно, вместо повторного вычисления выражения.
- Операторы NOT NULL и IS NULL (а также их эквиваленты) не загружают с диска содержимое больших строк и значений BLOB.
- Исключена материализация представления, если полный просмотр выполняется ровно один раз. Строки представления используются и отбрасываются по мере вычисления.
- Разрешено упрощение подзапроса, являющегося правым операндом LEFT JOIN в агрегатном запросе.
- Добавлен новый typedef sqlite3_filename, используемый для представления имени файла базы данных. Несколько интерфейсов изменены: вместо "char*" в них используется новый typedef. Это изменение интерфейса должно быть полностью обратно совместимым, хотя при пересборке некоторых устаревших приложений могут появиться безвредные предупреждения компилятора.
- Добавлен интерфейс sqlite3_value_encoding().
- Улучшение безопасности: SQLITE_DBCONFIG_DEFENSIVE расширен запретом на изменение schema_version. В защитном режиме schema_version становится доступным только для чтения.
- Улучшения оператора PRAGMA integrity_check:
- Столбцы в таблицах без STRICT с текстовой аффинностью не должны содержать числовые значения.
- Столбцы в таблицах без STRICT с аффинностью NUMERIC не должны содержать текстовые значения, которые можно преобразовать в числа.
- Проверяется правильность порядка строк в таблице WITHOUT ROWID.
- Улучшен оператор VACUUM INTO: теперь он учитывает настройку PRAGMA synchronous.
- Улучшены API sqlite3_strglob() и sqlite3_strlike(): теперь они принимают нулевые указатели в качестве строковых параметров и при этом возвращают осмысленный результат.
- Добавлен новый параметр компиляции SQLITE_MAX_ALLOCATION_SIZE для ограничения размера выделяемых блоков памяти.
- Алгоритм встроенного генератора псевдослучайных чисел (PRNG) SQLite заменён с RC4 на Chacha20.
- Разрешено использовать одинаковые имена для двух или более индексов, если они находятся в разных схемах.
- Различные оптимизации производительности позволяют примерно на 1% сократить число тактов CPU при типичных нагрузках.
Хеши:
- SQLITE_SOURCE_ID: 2022-11-16 12:10:08 89c459e766ea7e9165d0beeb124708b955a4950d0f4792f457465d71b158d318
- SHA3-256 для sqlite3.c: ab8da6bc754642989e67d581f26683dc705b068cea671970f0a7d32cfacbad19
2022-09-29 (3.39.4)
- Исправлена сборка в Windows: теперь она работает с -DSQLITE_OMIT_AUTOINIT
- Исправлена давняя проблема балансировщика btree, которая в редких случаях могла приводить к повреждению базы данных, если приложение использует кэш страниц, определяемый приложением.
- Улучшен параметр SQLITE_DBCONFIG_DEFENSIVE: теперь он запрещает операторы CREATE TRIGGER, если один или несколько операторов в теле триггера записывают данные в теневые таблицы.
- Исправлено возможное переполнение целого числа при вычислении размера выделения памяти в FTS3.
- Исправлено неправильное использование интерфейса sqlite3_set_auxdata() в расширении ICU.
Хеши:
- SQLITE_SOURCE_ID: 2022-09-29 15:55:41 a29f9949895322123f7c38fbe94c649a9d6e6c9cd0c3b41c96d694552f26b309
- SHA3-256 для sqlite3.c: f65082298127e2ddae6539beb94f5204b591df64ba2c7da83c7d0faffd6959d8
2022-09-05 (3.39.3)
- Для операторов DML, затрагивающих две или более строк базы данных, используется журнал операторов, если оператор вызывает SQL-функцию, способную прервать выполнение. См. обсуждение на форуме 9b9e4716c0d7bbd1.
- Для защиты операторов PRAGMA temp_store_directory и PRAGMA data_store_directory используется мьютекс, несмотря на то что они устарели и в документации указано, что они не являются потокобезопасными. См. сообщение на форуме 719a11e1314d1c70.
- Исправлены другие ошибки и предупреждения. Подробности см. в хронологии.
Хеши:
- SQLITE_SOURCE_ID: 2022-09-05 11:02:23 4635f4a69c8c2a8df242b384a992aea71224e39a2ccab42d8c0b0602f1e826e8
- SHA3-256 для sqlite3.c: 2fc273cf8032b601c9e06207efa0ae80eb73d5a1d283eb91096c815fa9640257
2022-07-21 (3.39.2)
- Исправлена регрессия производительности планировщика запросов, связанная с изменением порядка элементов предложения FROM при наличии LEFT JOIN.
- Внесены исправления для CVE-2022-35737, ошибок Chromium 1343348 и 1345947, сообщения на форуме 3607259d3c и других незначительных проблем, обнаруженных при внутреннем тестировании.
Хеши:
- SQLITE_SOURCE_ID: 2022-07-21 15:24:47 698edb77537b67c41adc68f9b892db56bcf9a55e00371a61420f3ddd668e6603
- SHA3-256 для sqlite3.c: bffbaafa94706f0ed234f183af3eb46e6485e7e2c75983173ded76e0da805f11
2022-07-13 (3.39.1)
- Исправлен неверный результат запроса, использующего представление с составным SELECT, в котором RIGHT JOIN присутствует только в одной ветви, если это представление не является первым элементом предложения FROM запроса, содержащего данное представление. Сообщение на форуме 174afeae5734d42d.
- Исправлены некоторые безвредные предупреждения компилятора.
- Исправлена давняя проблема с ALTER TABLE RENAME, которая могла возникнуть только при очень малом значении sqlite3_limit(SQLITE_LIMIT_SQL_LENGTH).
- Исправлена давняя проблема в FTS3, которая могла возникнуть только при компиляции с параметром SQLITE_ENABLE_FTS3_PARENTHESIS.
- Исправлена сборка: теперь она работает, если одновременно заданы параметры компиляции SQLITE_DEBUG и SQLITE_OMIT_WINDOWFUNC.
- Исправлена оптимизация начального префикса для расширения REGEXP: теперь она работает корректно, даже если префикс содержит символы, для кодирования которых требуется 3 байта UTF-8.
- Улучшена виртуальная таблица sqlite_stmt: теперь она буферизует весь вывод.
Хеши:
- SQLITE_SOURCE_ID: 2022-07-13 19:41:41 7c16541a0efb3985578181171c9f2bb3fdc4bad6a2ec85c6e31ab96f3eff201f
- SHA3-256 для sqlite3.c: 6d13fcf1c31133da541d1eb8a83552d746f39b81a0657bd4077fed0221749511
2022-06-25 (3.39.0)
- Добавлена (давно ожидавшаяся) поддержка RIGHT и FULL OUTER JOIN.
- Добавлены новые операторы бинарного сравнения IS NOT DISTINCT FROM и IS DISTINCT FROM, эквивалентные IS и IS NOT соответственно, для совместимости с PostgreSQL и стандартами SQL.
- В интерфейс sqlite3_vtab_distinct() добавлен новый код возврата (значение "3"), указывающий на запрос, содержащий одновременно предложения DISTINCT и ORDER BY.
- Добавлен интерфейс sqlite3_db_name().
- Интерфейс ОС unix разрешает все символические ссылки в именах файлов баз данных, чтобы сформировать каноническое имя базы данных до открытия файла. Если с sqlite3_open_v2() или аналогичной функцией используется флаг SQLITE_OPEN_NOFOLLOW, открытие завершится ошибкой, если какой-либо элемент пути является символической ссылкой.
- Материализация представлений откладывается до момента, когда она действительно потребуется, что позволяет избежать лишней работы, если материализация в итоге не будет использована.
- Оператор SELECT теперь может содержать предложение HAVING в любом агрегатном запросе, в том числе в запросах без предложения GROUP BY.
- Многочисленные микрооптимизации в совокупности сокращают число тактов CPU примерно на 2,3%.
Хеши:
- SQLITE_SOURCE_ID: 2022-06-25 14:57:57 14e166f40dbfa6e055543f8301525f2ca2e96a02a57269818b9e69e162e98918
- SHA3-256 для sqlite3.c: d9c439cacad5e4992d0d25989cfd27a4c4f59a3183c97873bc03f0ad1aa78b7a
2022-05-06 (3.38.5)
- Исправлена серьёзная ошибка в CLI выпуска 3.38.4.
Хеши:
- SQLITE_SOURCE_ID: 2022-05-06 15:25:27 78d9c993d404cdfaa7fdd2973fa1052e3da9f66215cff9c5540ebe55c407d9fe
- SHA3-256 для sqlite3.c: b05ef42ed234009b4b3dfb36c5f5ccf6d728da80f25ee560291269cf6cfe635f
2022-05-04 (3.38.4)
- Исправлена проблема с байт-кодом в оптимизации проталкивания фильтра Блума, добавленной в выпуске 3.38.0. Из-за ошибки в байт-коде его движок зацикливался при обнаружении оптимизацией проталкивания ключа NULL. Обсуждение на форуме 2482b32700384a0f.
- Прочие незначительные исправления. Подробности см. в хронологии.
Хеши:
- SQLITE_SOURCE_ID: 2022-05-04 15:45:55 d402f49871152670a62f4f28cacb15d814f2c1644e9347ad7d258e562978e45e
- SHA3-256 для sqlite3.c: e6a50effb021858c200e885664611ed3c5e949413ff2dca452ac7ee336b9de1d
2022-04-27 (3.38.3)
- Исправлен случай чрезмерно агрессивной оптимизации построения автоматического индекса и фильтра Блума планировщиком запросов: для ограничения размера автоматического индекса или фильтра Блума использовались неподходящие условия ON, что приводило к пропуску строк в результате. Обсуждение на форуме 0d3200f4f3bcd3a3.
- Прочие незначительные исправления. Подробности см. в хронологии.
Хеши:
- SQLITE_SOURCE_ID: 2022-04-27 12:03:15 9547e2c38a1c6f751a77d4d796894dec4dc5d8f5d79b1cd39e1ffc50df7b3be4
- SHA3-256 для sqlite3.c: d4d66feffad66ea82073fbb97ae9c84e3615887ebc5168226ccee28d82424517
2022-03-26 (3.38.2)
- Исправлена обнаруженная пользователем проблема с новой оптимизацией фильтра Блума, из-за которой мог возвращаться неверный результат при LEFT JOIN с ограничением в предложении WHERE, указывающим, что один из столбцов правой таблицы LEFT JOIN равен NULL. См. обсуждение на форуме 031e262a89b6a9d2.
- Прочие незначительные исправления. Подробности см. в хронологии.
Хеши:
- SQLITE_SOURCE_ID: 2022-03-26 13:51:10 d33c709cc0af66bc5b6dc6216eba9f1f0b40960b9ae83694c986fbf4c1d6f08f
- SHA3-256 для sqlite3.c: 0fbac6b6999f894184899431fb77b9792324c61246b2a010d736694ccaa6d613
2022-03-12 (3.38.1)
- Исправлены проблемы с новой оптимизацией фильтра Блума, из-за которых некоторые малораспространённые запросы могли возвращать неверный результат.
- Исправлен модификатор localtime функций даты и времени: теперь он сохраняет дробные секунды.
- Исправлена SQL-функция sqlite_offset: теперь она корректно работает даже в особых случаях, например когда аргументом является виртуальный столбец или столбец представления.
- Исправлены ограничения оператора IN для значений строк в виртуальных таблицах: теперь они работают корректно, даже если реализация виртуальной таблицы использует байт-код для фильтрации строк, не удовлетворяющих ограничению.
- Прочие незначительные исправления операторов assert(), тестов и документации. Подробности см. в хронологии исходного кода.
Хеши:
- SQLITE_SOURCE_ID: 2022-03-12 13:37:29 38c210fdd258658321c85ec9c01a072fda3ada94540e3239d29b34dc547a8cbc
- SHA3-256 для sqlite3.c: 262ba071e960a8a0a6ce39307ae30244a2b0dc9fe1c4c09d0e1070d4353cd92c
2022-02-22 (3.38.0)
- Добавлены операторы -> и ->> для упрощения обработки JSON. Новые операторы совместимы с MySQL и PostgreSQL.
- Функции JSON теперь встроены. Для включения поддержки JSON больше не требуется параметр компиляции -DSQLITE_ENABLE_JSON1. JSON включён по умолчанию. Интерфейс JSON можно отключить с помощью нового параметра компиляции -DSQLITE_OMIT_JSON.
- Улучшения функций даты и времени:
- Добавлена функция unixepoch().
- Добавлены модификатор auto и модификатор julianday.
- Для лучшей совместимости SQL-функция printf() переименована в format(). Исходное имя printf() сохранено как псевдоним для обратной совместимости.
- Добавлен интерфейс sqlite3_error_offset(), который в некоторых случаях помогает определить конкретный символ во входном тексте SQL, вызвавший ошибку, и тем самым позволяет приложениям выдавать более точные сообщения об ошибках.
- Интерфейс для виртуальных таблиц расширен следующим образом:
- Добавлен интерфейс sqlite3_vtab_distinct().
- Добавлен интерфейс sqlite3_vtab_rhs_value().
- Добавлены новые типы операторов SQLITE_INDEX_CONSTRAINT_LIMIT и SQLITE_INDEX_CONSTRAINT_OFFSET.
- Добавлен интерфейс sqlite3_vtab_in() (и связанные с ним интерфейсы), позволяющий виртуальной таблице обрабатывать ограничения оператора IN сразу для всех значений, а не обрабатывать каждое значение правой части оператора IN отдельно.
- Улучшения CLI:
- Режимы вывода в виде таблицы улучшены: теперь они корректно обрабатывают табуляции и символы новой строки, встроенные в текст.
- В режимы вывода в виде таблицы добавлены параметры "--wrap N", "--wordwrap on" и "--quote".
- Добавлен псевдоним .mode qbox.
- Команда .import автоматически устраняет неоднозначность имён столбцов.
- Для улучшения сообщений об ошибках используется новый интерфейс sqlite3_error_offset().
- Улучшения планировщика запросов:
- Для ускорения крупных аналитических запросов используется фильтр Блума.
- Для вычисления составных операторов SELECT с UNION или UNION ALL и предложением ORDER BY используется сбалансированное дерево слияния.
- Оператор ALTER TABLE изменён: теперь он без уведомления игнорирует записи в таблице sqlite_schema, которые не удаётся разобрать, если задано PRAGMA writable_schema=ON.
Хеши:
- SQLITE_SOURCE_ID: 2022-02-22 18:58:40 40fa792d359f84c3b9e9d6623743e1a59826274e221df1bde8f47086968a1bab
- SHA3-256 для sqlite3.c: a69af0a88d59271a2dd3c846a3e93cbd29e7c499864f6c0462a3b4160bee1762
2022-01-06 (3.37.2)
- Исправлена ошибка, появившаяся в версии 3.35.0 (2021-03-12), которая могла привести к повреждению базы данных, если при включённом режиме PRAGMA temp_store=MEMORY выполнялся откат SAVEPOINT, затем вносились другие изменения, а после этого фиксировалась внешняя транзакция. Фиксация 73c2b50211d3ae26
- Исправлена давняя проблема с ON DELETE CASCADE и ON UPDATE CASCADE: кэш байт-кода, используемого для выполнения каскадного изменения, не сбрасывался после локального изменения DDL. Фиксация 5232c9777fe4fb13.
- Прочие незначительные исправления, которые не должны повлиять на производственные сборки.
Хеши:
- SQLITE_SOURCE_ID: 2022-01-06 13:25:41 872ba256cbf61d9290b571c0e6d82a20c224ca3ad82971edc46b29818d5d17a0
- SHA3-256 для sqlite3.c: 1bb01c382295cba85ec4685cedc52a7477cdae71cc37f1ad0f48719a17af1e1e
2021-12-30 (3.37.1)
- Исправлена ошибка, появившаяся при улучшении UPSERT в версии 3.35.0: для некоторых необычных, но допустимых SQL-запросов мог генерироваться неверный байт-код, что потенциально приводило к разыменованию нулевого указателя.
- Исправлено чтение за пределами буфера, которое могло возникнуть в FTS5 при чтении повреждённых файлов базы данных.
- Повышена надёжность параметра --safe в CLI.
- Прочие незначительные исправления операторов assert() и тестов.
Хеши:
- SQLITE_SOURCE_ID: 2021-12-30 15:30:28 378629bf2ea546f73eee84063c5358439a12f7300e433f18c9e1bddd948dea62
- SHA3-256 для sqlite3.c: 915afb3f29c2d217ea0c283326a9df7d505e6c73b40236f0b33ded91f812d174
2021-11-27 (3.37.0)
- Таблицы STRICT предоставляют строгий способ управления типами данных для разработчиков, которым нужен именно такой подход.
- При добавлении столбцов с ограничением CHECK или генерируемого столбца с ограничением NOT NULL команда ALTER TABLE ADD COLUMN теперь проверяет новые ограничения для уже существующих строк базы данных и выполняется только в том случае, если ни одно ограничение не нарушено.
- Добавлен оператор PRAGMA table_list.
- Улучшения CLI:
- Добавлена команда .connection, позволяющая CLI одновременно поддерживать открытыми несколько подключений к базам данных.
- Добавлен параметр командной строки --safe, отключающий команды с точкой и SQL-операторы, способные вызвать побочные эффекты за пределами единственного файла базы данных, указанного в командной строке.
- Повышена производительность чтения SQL-операторов, занимающих много строк.
- Добавлен интерфейс sqlite3_autovacuum_pages().
- Функция sqlite3_deserialize() не работает и никогда не работала с базой данных TEMP. Это ограничение теперь указано в документации.
- Планировщик запросов теперь исключает предложения ORDER BY из подзапросов и представлений, если их удаление не меняет семантику запроса.
- Расширение табличной функции generate_series изменено: первый параметр ("START") теперь обязателен. Это сделано для демонстрации того, как писать табличные функции с обязательными параметрами. Прежнее поведение доступно при использовании параметра компиляции -DZERO_ARGUMENT_GENERATE_SERIES.
- Добавлены новые интерфейсы sqlite3_changes64() и sqlite3_total_changes64().
- В sqlite3_open_v2() добавлен параметр-флаг SQLITE_OPEN_EXRESCODE.
- Для хранения схемы базы данных требуется меньше памяти.
Хеши:
- SQLITE_SOURCE_ID: 2021-11-27 14:13:22 bd41822c7424d393a30e92ff6cb254d25c26769889c1499a18a0b9339f5d6c8a
- SHA3-256 для sqlite3.c: a202a950ab401cda052e81259e96d6e64ad91faaaaf5690d769f64c2ab962f27
2021-06-18 (3.36.0)
- Улучшен вывод EXPLAIN QUERY PLAN, чтобы его было проще понимать.
- Маркеры порядка байтов в начале токена пропускаются так же, как пробелы.
- При любой попытке обратиться к rowid представления или подзапроса возникает ошибка. Ранее значение rowid представления было неопределенным и часто равнялось NULL. Чтобы восстановить прежнее поведение в приложениях, которым оно необходимо, доступен параметр компиляции -DSQLITE_ALLOW_ROWID_IN_VIEW.
- Интерфейсы sqlite3_deserialize() и sqlite3_serialize() теперь включены по умолчанию. Параметр компиляции -DSQLITE_ENABLE_DESERIALIZE больше не требуется. Вместо него появился новый параметр компиляции -DSQLITE_OMIT_DESERIALIZE, позволяющий исключить эти интерфейсы.
- VFS «memdb» теперь позволяет совместно использовать одну и ту же базу данных в памяти нескольким подключениям к базе данных в одном процессе, если имя базы данных начинается с «/».
- Отменена оптимизация EXISTS-to-IN (пункт 8b в журнале изменений SQLite 3.35.0), поскольку выяснилось, что она чаще замедляет запросы, чем ускоряет их.
- Улучшена оптимизация распространения констант, теперь она работает и для запросов без соединений.
- Расширение REGEXP теперь включено в сборки CLI.
Хеши:
- SQLITE_SOURCE_ID: 2021-06-18 18:36:39 5c9a6c06871cb9fe42814af9c039eb6da5427a6ec28f187af7ebfb62eafa66e5
- SHA3-256 для sqlite3.c: 2a8e87aaa414ac2d45ace8eb74e710935423607a8de0fafcb36bbde5b952d157
2021-04-19 (3.35.5)
- Исправлены дефекты новой функции ALTER TABLE DROP COLUMN, которые могли повредить файл базы данных.
- Исправлена малозаметная проблема оптимизатора запросов, которая могла приводить к неправильному результату запроса.
Хеши:
- SQLITE_SOURCE_ID: 2021-04-19 18:32:05 1b256d97b553a9611efca188a3d995a2fff712759044ba480f9a0c9e98fae886
- SHA3-256 для sqlite3.c: e42291343e8f03940e57fffcf1631e7921013b94419c2f943e816d3edf4e1bbe
2021-04-02 (3.35.4)
- Исправлен дефект в оптимизации планировщика запросов, указанный выше в пункте 8b. Заявка de7db14784a08053.
- Исправлен дефект нового синтаксиса RETURNING. Заявка 132994c8b1063bfb.
- Исправлена новая функция RETURNING: теперь она выдает ошибку, если один из элементов в предложении RETURNING ссылается на неизвестную таблицу, вместо того чтобы молча игнорировать эту ошибку.
- Исправлено срабатывание утверждения, связанного с обработкой агрегатных функций, которое ошибочно вызывалось оптимизацией проталкивания.
Хеши:
- SQLITE_SOURCE_ID: 2021-04-02 15:20:15 5d4c65779dab868b285519b19e4cf9d451d50c6048f06f653aa701ec212df45e
- SHA3-256 для sqlite3.c: 528b8a26bf5ffd4c7b4647b5b799f86e8fb1a075f715b87a414e94fba3d09dbe
2021-03-26 (3.35.3)
- Улучшен код операции OP_OpenDup в байткодовом движке, чтобы он работал, даже если дублируемый курсор сам был создан с помощью OP_OpenDup. Исправление для заявки bb8a9fd4a9b7fce5. Эта проблема обнаружилась только благодаря недавнему улучшению подсказки MATERIALIZED.
- При материализации коррелированных обобщенных табличных выражений материализация выполняется отдельно для каждого случая использования, как того требует корректность. Это исправляет проблему, появившуюся после улучшения подсказки MATERIALIZED.
- Исправлена проблема нормализатора имен файлов в Unix-реализации VFS.
- Исправлен режим вывода «box» в CLI, чтобы он работал с операторами, возвращающими одну или несколько строк без столбцов (например, PRAGMA incremental_vacuum). Сообщение на форуме afbbcb5b72.
- Улучшены сообщения об ошибках, генерируемые некорректными обобщенными табличными выражениями. Сообщение на форуме aa5a0431c99e.
- Исправлены некоторые некорректные инструкции assert().
- Исправлена синтаксическая диаграмма оператора SELECT, чтобы синтаксис предложения FROM отображался правильно. Сообщение на форуме 9ed02582fe.
- Исправлен классификатор символов EBCDIC, чтобы он распознавал символы новой строки как пробелы. Сообщение на форуме 58540ce22dcd.
- Улучшен метод xBestIndex в реализации расширения виртуальной таблицы wholenumber (неподдерживаемого), чтобы эффективнее убеждать планировщик запросов не пытаться материализовать таблицу с бесконечным числом строк. Сообщение на форуме b52a020ce4.
Хеши:
- SQLITE_SOURCE_ID: 2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a
- SHA3-256 для sqlite3.c: 91ca6c0a30ebfdba4420bb35f4fd9149d13e45fc853d86ad7527db363e282683
2021-03-17 (3.35.2)
- Исправлена проблема в расширении appendvfs.c, появившаяся в версии 3.35.0.
- Гарантировано, что функции даты и времени без аргументов (которые возвращают результаты, зависящие от текущего времени) рассматриваются как недетерминированные функции. Заявка 2c6c8689fb5f3d2f
- Исправлена проблема в служебной программе sqldiff, связанная с необычными пробельными символами в определении виртуальной таблицы.
- Ограничена новая оптимизация UNION ALL, описанная в пункте 8c выпуска 3.35.0, чтобы она не создавала слишком много новых подзапросов. Подробности см. в обсуждении на форуме 140a67d3d2.
Хеши:
- SQLITE_SOURCE_ID: 2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827
- SHA3-256 для sqlite3.c: e8edc7b1512a2e050d548d0840bec6eef83cc297af1426c34c0ee8720f378a11
2021-03-15 (3.35.1)
- Исправлена ошибка в новой функции DROP COLUMN при ее применении к индексированным столбцам, имена которых заключены в кавычки в определении индекса.
- Улучшена встроенная документация команды .dump в CLI.
Хеши:
- SQLITE_SOURCE_ID: 2021-03-15 16:53:57 aea12399bf1fdc76af43499d4624c3afa17c3e6c2459b71c195804bb98def66a
- SHA3-256 для sqlite3.c: fc79e27fd030226c07691b7d7c23aa81c8d46bc3bef5af39060e1507c82b0523
2021-03-12 (3.35.0)
- Добавлены встроенные математические функции SQL(). (Требуется параметр компиляции -DSQLITE_ENABLE_MATH_FUNCTIONS.)
- Добавлена поддержка ALTER TABLE DROP COLUMN.
- Расширен синтаксис UPSERT:
- Разрешены несколько предложений ON CONFLICT, обрабатываемых по порядку;
- В последнем предложении ON CONFLICT можно не указывать цель конфликта, но при этом использовать DO UPDATE.
- Добавлена поддержка предложения RETURNING в операторах DELETE, INSERT и UPDATE.
- При выполнении VACUUM для баз данных, содержащих очень большие значения TEXT или BLOB, используется меньше памяти. Теперь нет необходимости хранить все значение TEXT или BLOB в памяти одновременно.
- Добавлена поддержка подсказок MATERIALIZED и NOT MATERIALIZED при указании обобщенных табличных выражений. Ранее по умолчанию использовалось NOT MATERIALIZED, но теперь для CTE, используемых более одного раза, по умолчанию применяется MATERIALIZED.
- Параметры SQLITE_DBCONFIG_ENABLE_TRIGGER и SQLITE_DBCONFIG_ENABLE_VIEW изменены: теперь они управляют только триггерами и представлениями в основной схеме базы данных или в схемах подключенных баз данных, но не в схеме TEMP. Триггеры и представления TEMP разрешены всегда.
- Улучшения планировщика/оптимизатора запросов:
- Улучшена оптимизация min/max, чтобы она лучше работала с оператором IN и оптимизацией OP_SeekScan из предыдущего выпуска.
- Предпринимается попытка обрабатывать операторы EXISTS в предложении WHERE как операторы IN в тех случаях, когда такое преобразование допустимо и, вероятно, повысит производительность.
- Разрешено сведение подзапросов UNION ALL, даже если родительский запрос является соединением.
- Если это уместно, используется индекс для выражений IS NOT NULL в предложении WHERE, даже если STAT4 отключен.
- Выражения вида «x IS NULL» или «x IS NOT NULL» могут быть преобразованы просто в FALSE или TRUE, если «x» — столбец с ограничением «NOT NULL», не участвующий во внешнем соединении.
- При выполнении оператора UPDATE пропускается проверка ограничений внешнего ключа, если UPDATE не изменяет ни одного столбца, связанного с этим внешним ключом.
- Разрешено проталкивать условия WHERE в подзапросы с оконными функциями, если условие WHERE целиком состоит из констант и копий выражений, встречающихся в предложениях PARTITION BY всех оконных функций подзапроса.
- Улучшения CLI:
- Команда «.stats» принимает новые аргументы «stmt» и «vmstep»: они выводят соответственно статистику подготовленных операторов и только число шагов виртуальной машины.
- Добавлена команда «.filectrl data_version».
- Команды «.once» и «.output» улучшены: если аргумент назначения начинается с «|» (что указывает на перенаправление вывода в канал), его не нужно заключать в кавычки.
- Исправления ошибок:
- Исправлено возможное разыменование NULL-указателя при обработке синтаксически некорректного оператора SELECT с коррелированным предложением WHERE и предложением «HAVING 0». (Исправление также включено в исправительный выпуск 3.34.1.)
- Исправлена ошибка в оптимизации оператора IN версии 3.33.0, которая могла приводить к неправильному результату.
- Исправлены неправильные результаты оператора LIKE, если шаблон заканчивается на «%» и присутствует предложение «ESCAPE '_'».
Хеши:
- SQLITE_SOURCE_ID: 2021-03-12 15:10:09 acd63062eb06748bfe9e4886639e4f2b54ea6a496a83f10716abbaba4115500b
- SHA3-256 для sqlite3.c: 73a740d881735bef9de7f7bce8c9e6b9e57fe3e77fa7d76a6e8fc5c262fbaedf
2021-01-20 (3.34.1)
- Исправлена возможная ошибка использования памяти после освобождения при обработке подзапроса с коррелированным предложением WHERE и предложением «HAVING 0», если родительский запрос является агрегатным.
- Исправлены опечатки в документации
- Исправлены незначительные проблемы в расширениях.
Хеши:
- SQLITE_SOURCE_ID: 2021-01-20 14:10:07 10e20c0b43500cfb9bbc0eaa061c57514f715d87238f4d835880cd846b9ebd1f
- SHA3-256 для sqlite3.c: 799a7be90651fc7296113b641a70b028c142d767b25af1d0a78f93dcf1a2bf20
2020-12-01 (3.34.0)
- Добавлен интерфейс sqlite3_txn_state() для получения сведений о текущем состоянии транзакции подключения к базе данных.
- В рекурсивные обобщенные табличные выражения добавлена поддержка двух или более рекурсивных элементов, как в SQL Server. Это упрощает написание и ускоряет выполнение запросов к графам.
- Улучшены сообщения об ошибках при нарушении ограничения CHECK.
- Улучшения CLI:
- Теперь точечная команда .read принимает канал в дополнение к имени файла.
- В точечную команду .dump добавлены параметры --data-only и --nosys.
- В точечную команду .schema добавлен параметр --nosys.
- В точечной команде .import имена таблиц теперь заключаются в кавычки корректно.
- Табличная функция-расширение generate_series(START,END,STEP) теперь встроена в CLI.
- Точечная команда .databases теперь показывает состояние каждого файла базы данных, определяемое функциями sqlite3_db_readonly() и sqlite3_txn_state().
- Добавлен параметр командной строки --tabs, который включает .mode tabs.
- Параметр --init сообщает об ошибке, если не удается открыть файл, указанный в качестве аргумента. Параметр --init теперь также учитывает параметр --bail.
- Улучшения планировщика запросов:
- Улучшены оценки стоимости выполнения оператора DISTINCT.
- При выполнении UPDATE или DELETE с использованием многоколоночного индекса, когда для поиска по индексу полезны лишь несколько его первых столбцов, основной поиск в таблице откладывается до проверки всех ограничений предложения WHERE. Это позволяет выяснить, могут ли ограничения быть покрыты неиспользованными последующими элементами индекса, и избежать ненужных поисков в основной таблице.
- Новый код операции OP_SeekScan используется для повышения производительности поиска по многоколоночному индексу, когда последующие столбцы ограничены оператором IN.
- Команды BEGIN IMMEDIATE и BEGIN EXCLUSIVE теперь работают, даже если один или несколько подключенных файлов баз данных доступны только для чтения.
- В FTS5 добавлена поддержка триграммных индексов.
- Повышена производительность примитивов блокировки в режиме WAL в ситуациях, когда сотни подключений одновременно обращаются к одному файлу базы данных.
- Табличная функция carray() дополнена формой с одним аргументом, связываемым с помощью вспомогательного интерфейса sqlite3_carray_bind().
- Функцию substr() SQL теперь также можно вызывать как «substring()» для совместимости с SQL Server.
- Синтаксические диаграммы теперь реализованы в виде скриптов Pikchr и преобразуются в SVG для лучшей читаемости и удобства сопровождения.
Хеши:
- SQLITE_SOURCE_ID: 2020-12-01 16:14:00 a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089fed5b
- SHA3-256 для sqlite3.c: fbd895b0655a337b2cd657675f314188a4e9fe614444cc63dfeb3f066f674514
2020-08-14 (3.33.0)
- Добавлена поддержка UPDATE FROM в соответствии с синтаксисом PostgreSQL.
- Максимальный размер файлов базы данных увеличен до 281 ТБ.
- Оператор PRAGMA integrity_check расширен: теперь при желании можно ограничить проверку одной таблицей и ее индексами вместо всего файла базы данных.
- Добавлено расширение decimal для десятичной арифметики произвольной точности.
- Улучшено расширение ieee754 для работы с числами IEEE 754 binary64.
- Улучшения CLI:
- Добавлены четыре новых режима вывода: «box», «json», «markdown» и «table».
- Режим вывода «column» автоматически расширяет столбцы по самой длинной строке результата и автоматически включает «.header», если эта настройка еще не была задана.
- Режим вывода «quote» учитывает «.separator».
- Расширение decimal и расширение ieee754 встроены в CLI.
- Улучшения планировщика запросов:
- Добавлена возможность находить план запроса с полным сканированием индекса для запросов с INDEXED BY, которые раньше завершались ошибкой «no query solution».
- Улучшено обнаружение отсутствующих, неполных и/или сомнительных данных sqlite_stat1; теперь даже при наличии неверных данных формируются хорошие планы запросов.
- Повышена производительность запросов наподобие «SELECT min(x) FROM t WHERE y IN (?,?,?)» при наличии индекса по t(x,y).
- В режиме WAL, если процесс записи аварийно завершается и оставляет файл shm в несогласованном состоянии, последующие транзакции теперь могут восстановить файл shm, даже если активны транзакции чтения. До этого улучшения попытка восстановления файла shm в такой ситуации приводила к ошибке SQLITE_PROTOCOL.
Хеши:
- SQLITE_SOURCE_ID: 2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f
- SHA3-256 для sqlite3.c: d00b7fffa6d33af2303430eaf394321da2960604d25a4471c7af566344f2abf9
2020-06-18 (3.32.3)
- Различные незначительные исправления ошибок, включая исправления для заявок 8f157e8010b22af0, 9fb26d37cefaba40, e367f31901ea8700, b706351ce2ecf59a, 7c6d876f84e6e7e2 и c8d3b9f0a750a529.
Хеши:
- SQLITE_SOURCE_ID: 2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933cc8fd
- SHA3-256 для sqlite3.c: b62b77ee1c561a69a71bb557694aaa5141f1714c1ff6cc1ba8aa8733c92d4f52
2020-06-04 (3.32.2)
- Исправлена давняя ошибка в байткодовом движке, из-за которой команда COMMIT могла сообщать об успехе, хотя фиксация фактически завершилась неудачей. Заявка 810dc8038872e212
Хеши:
- SQLITE_SOURCE_ID: 2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c
- SHA3-256 для sqlite3.c: f17a2a57f7eebc72d405f3b640b4a49bcd02364a9c36e04feeb145eccafa3f8d
2020-05-25 (3.32.1)
- Исправлены две давние ошибки, из-за которых вредоносные операторы SQL могли привести к аварийному завершению процесса, выполняющего SQLite. Об этих ошибках сообщил сторонний исследователь примерно через 24 часа после выпуска версии 3.32.0, однако они не относятся исключительно к версии 3.32.0.
- Другие незначительные исправления предупреждений компилятора и прочие мелкие изменения.
Хеши:
- SQLITE_SOURCE_ID: 2020-05-25 16:19:56 0c1fcf4711a2e66c813aed38cf41cd3e2123ee8eb6db98118086764c4ba83350
- SHA3-256 для sqlite3.c: f695ae21abf045e4ee77980a67ab2c6e03275009e593ee860a2eabf840482372
2020-05-22 (3.32.0)
- Добавлена поддержка приближенного ANALYZE с помощью команды PRAGMA analysis_limit.
- Добавлена виртуальная таблица байткода.
- В набор загружаемых во время выполнения расширений в исходном дереве добавлена прослойка VFS checksum.
- Добавлена функция SQL iif().
- Операторы INSERT и UPDATE теперь всегда применяют типовое соответствие столбцов до вычисления ограничений CHECK. Это исправление ошибки теоретически может создать проблемы в старых базах данных с нестандартными ограничениями CHECK, для которых тип входных данных INSERT должен отличаться от объявленного типа столбца. Дополнительные сведения см. в заявке 86ba67afafded936.
- Добавлены интерфейсы sqlite3_create_filename(), sqlite3_free_filename() и sqlite3_database_file_object() для улучшенной поддержки реализаций прослоек VFS.
- Значение верхней границы по умолчанию для числа параметров увеличено с 999 до 32766.
- Добавлен код для последовательности сортировки UINT в виде необязательного загружаемого расширения.
- Улучшения CLI:
- В команду .import добавлены параметры: --csv, --ascii, --skip.
- Команда .dump теперь принимает несколько аргументов-шаблонов LIKE и выводит объединение всех совпадающих таблиц.
- В сборки для отладки добавлена команда .oom.
- В команды .excel, .output и .once добавлен параметр --bom.
- Команда .filectrl дополнена поддержкой параметра --schema.
- Расширение последовательности сортировки UINT загружается автоматически.
- Предложение ESCAPE оператора LIKE теперь переопределяет символы-шаблоны, обеспечивая поведение, соответствующее PostgreSQL.
- SQLITE_SOURCE_ID: 2020-05-22 17:46:16 5998789c9c744bce92e4cff7636bba800a75574243d6977e1fc8281e360f8d5a
- SHA3-256 для sqlite3.c: 33ed868b21b62ce1d0352ed88bdbd9880a42f29046497a222df6459fc32a356f
2020-01-27 (3.31.1)
- Восстановлен прежний формат данных внутренней структуры SQLite, предназначенной только для внутреннего использования. Приложениям, использующим SQLite, не следует обращаться к внутренним структурам данных SQLite, однако некоторые это делают, и изменение одной из таких структур в версии 3.30.0 нарушило работу популярного и широко распространенного приложения. Временный откат этого изменения в SQLite дает разработчикам таких приложений время исправить свой код.
- Исправлены опечатки в заголовочном файле sqlite3ext.h, которые не позволяли вызывать интерфейсы sqlite3_stmt_isexplain() и sqlite3_value_frombind() из расширений, загружаемых во время выполнения.
Хеши:
- SQLITE_SOURCE_ID: 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6
- SHA3-256 для sqlite3.c: de465c64f09529429a38cbdf637acce4dfda6897f93e3db3594009e0fed56d27
2020-01-22 (3.31.0)
- Добавлена поддержка генерируемых столбцов.
- Добавлен интерфейс sqlite3_hard_heap_limit64() и соответствующая команда PRAGMA hard_heap_limit.
- Расширен прагматик function_list: теперь для каждой функции отображается число аргументов, тип функции (скалярная, агрегатная, оконная) и флаги свойств функции SQLITE_DETERMINISTIC, SQLITE_DIRECTONLY, SQLITE_INNOCUOUS и/или SQLITE_SUBTYPE.
- В виртуальную таблицу DBSTAT добавлена функция агрегированного режима.
- В sqlite3_open_v2() добавлен параметр SQLITE_OPEN_NOFOLLOW, запрещающий SQLite открывать символические ссылки.
- Добавлена нотация массива «#-N» для аргументов пути функций JSON.
- Добавлена настройка подключения SQLITE_DBCONFIG_TRUSTED_SCHEMA, которой также можно управлять с помощью нового прагматика trusted_schema и во время компиляции с помощью параметра -DSQLITE_TRUSTED_SCHEMA.
- Добавлены API sqlite3_filename_database(), sqlite3_filename_journal() и sqlite3_filename_wal(), полезные для специализированных расширений.
- Добавлен интерфейс sqlite3_uri_key().
- Функция sqlite3_uri_parameter() обновлена: теперь она работает не только с именем файла базы данных, но и с именами файлов журнала отката или WAL.
- Добавлена возможность помечать определяемые приложением функции SQL новыми свойствами SQLITE_INNOCUOUS или SQLITE_DIRECTONLY.
- В sqlite3_vtab_config() добавлены новые параметры, позволяющие методу xConnect виртуальных таблиц объявлять виртуальную таблицу как SQLITE_VTAB_INNOCUOUS или SQLITE_VTAB_DIRECTONLY.
- Ускорен отклик на вызов sqlite3_interrupt().
- Добавлен модуль расширения uuid.c, реализующий функции обработки UUID формата RFC-4122.
- Аллокатор памяти lookaside усовершенствован: теперь он поддерживает два отдельных пула памяти с выделением блоков разного размера в каждом пуле. Благодаря этому lookaside охватывает больше выделений памяти, а использование памяти в куче при этом снижено со 120 КБ до 48 КБ на подключение.
- Прагматик legacy_file_format отключен и теперь ничего не делает. Вместо него предоставлен параметр SQLITE_DBCONFIG_LEGACY_FILE_FORMAT для sqlite3_db_config(). Прагматик legacy_file_format отключен, поскольку (1) он редко бывает полезен и (2) несовместим с VACUUM в схемах, содержащих таблицы как с генерируемыми столбцами, так и с индексами по убыванию. Заявка 6484e6ce678fffab
Хеши:
- SQLITE_SOURCE_ID: 2020-01-22 18:38:59 f6affdd41608946fcfcea914ece149038a8b25a62bbe719ed2561c649b86d824
- SHA3-256 для sqlite3.c: a5fca0b9f8cbf80ac89b97193378c719d4af4b7d647729d8df9c0c0fca7b1388
2019-10-10 (3.30.1)
- Исправлена ошибка в механизме упрощения запросов, которая могла вызывать аварийное завершение при выполнении вложенных запросов с новым предложением FILTER для агрегатных функций. Заявка 1079ad19993d13fa
- Перенесены исправления других малозаметных проблем, обнаруженных после выпуска версии 3.30.0.
Хеши:
- SQLITE_SOURCE_ID: 2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3df1b0b
- SHA3-256 для sqlite3.c: f96fafe4c110ed7d77fc70a7d690e5edd1e64fefb84b3b5969a722d885de1f2d
2019-10-04 (3.30.0)
- Добавлена поддержка предложения FILTER для агрегатных функций.
- Добавлена поддержка синтаксиса NULLS FIRST и NULLS LAST в предложениях ORDER BY.
- Прагмы index_info и index_xinfo усовершенствованы: теперь они предоставляют информацию о дисковом представлении таблиц WITHOUT ROWID.
- Добавлен интерфейс sqlite3_drop_modules(), позволяющий приложениям отключать автоматически загружаемые виртуальные таблицы, которые им не нужны.
- Улучшена команда .recover в CLI, чтобы она восстанавливала больше данных из повреждённых файлов баз данных.
- Расширение RBU усовершенствовано и теперь поддерживает индексы по выражениям.
- Изменён анализатор схемы: теперь он выдаёт ошибку, если любой из столбцов type, name или tbl_name таблицы sqlite_master повреждён, а подключение к базе данных не находится в режиме writable_schema.
- Команды PRAGMA function_list, PRAGMA module_list и PRAGMA pragma_list теперь по умолчанию включены во всех сборках. Их можно отключить с помощью -DSQLITE_OMIT_INTROSPECTION_PRAGMAS.
- Для sqlite3_db_config() добавлена опция SQLITE_DBCONFIG_ENABLE_VIEW.
- В интерфейс TCL добавлен метод config, позволяющий отключать SQLITE_DBCONFIG_ENABLE_VIEW, а также управлять другими параметрами sqlite3_db_config() из TCL.
- Для определяемых приложением функций SQL добавлен флаг SQLITE_DIRECTONLY, запрещающий использовать эти функции в триггерах и представлениях.
- Устаревший параметр времени компиляции SQLITE_ENABLE_STAT3 теперь ничего не делает.
Хэши:
- SQLITE_SOURCE_ID: 2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f
- SHA3-256 для sqlite3.c: f04393dd47205a4ee2b98ff737dc51a3fdbcc14c055b88d58f5b27d0672158f5
2019-07-10 (3.29.0)
- В sqlite3_db_config() добавлены действия SQLITE_DBCONFIG_DQS_DML и SQLITE_DBCONFIG_DQS_DDL для включения и отключения нежелательной особенности строковых литералов в двойных кавычках. Для обеспечения обратной совместимости оба параметра по умолчанию включены, но разработчикам рекомендуется отключить их, например, с помощью параметра времени компиляции -DSQLITE_DQS=0.
- -DSQLITE_DQS=0 теперь является рекомендуемым параметром времени компиляции.
- Улучшения планировщика запросов:
- Улучшена оптимизация операторов AND и OR, когда один из операндов является константой.
- Усовершенствована оптимизация LIKE для случаев, когда столбец в левой части имеет числовую аффинность.
- Добавлена виртуальная таблица «sqlite_dbdata» для извлечения низкоуровневых исходных данных из базы SQLite, в том числе из повреждённой базы.
- Улучшено округление: результаты округления двоичных чисел с помощью функции round() теперь лучше соответствуют ожиданиям людей, привыкших мыслить десятичными числами.
- Улучшения CLI:
- Добавлена команда «.recover», которая пытается восстановить как можно больше данных из повреждённого файла базы данных.
- Добавлена команда «.filectrl», полезная для тестирования.
- Давно существующая команда «.testctrl» добавлена в меню «.help».
- Добавлена команда «.dbconfig»
Хэши:
- SQLITE_SOURCE_ID: 2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6
- SHA3-256 для sqlite3.c: d9a5daf7697a827f4b2638276ce639fa04e8e8bb5fd3a6b683cfad10f1c81b12
2019-04-16 (3.28.0)
- Усовершенствованы оконные функции:
- Добавлена поддержка предложения EXCLUDE.
- Добавлена поддержка цепочек окон.
- Добавлена поддержка кадров GROUPS.
- Добавлена поддержка границ «<expr> PRECEDING» и «<expr> FOLLOWING» в кадрах RANGE.
- Добавлен новый интерфейс sqlite3_stmt_isexplain(S), позволяющий определить, является ли подготовленная инструкция инструкцией EXPLAIN.
- Доработана команда VACUUM INTO: теперь она работает с базами данных, открытыми только для чтения.
- Новые оптимизации запросов:
- Включена оптимизация LIKE для случаев, когда присутствует ключевое слово ESCAPE и включена PRAGMA case_sensitive_like.
- В запросах, выполняемых с использованием частичного индекса, устранены ненужные проверки условия, указанного в предложении WHERE частичного индекса, поскольку известно, что это условие всегда истинно.
- Улучшения интерфейса TCL:
- В метод function добавлена опция -returntype.
- Добавлен новый метод bind_fallback.
- Улучшения CLI:
- Добавлена поддержка параметров с привязанными значениями и команды .parameter.
- Исправлена функция readfile(): при чтении пустого файла она возвращает пустой BLOB, а не выдаёт ошибку нехватки памяти.
- Исправлена функция writefile(): при создании новых каталогов по пути к новому файлу теперь для каталогов устанавливаются права доступа umask, а не такие же права, как у файла.
- Изменена работа параметра --update команды .archive: он пропускает файлы, уже находящиеся в архиве и не изменившиеся. Добавлен новый параметр --insert, который работает так же, как раньше работал --update.
- Добавлено расширение fossildelta.c, позволяющее создавать, применять и разбирать формат файловых дельт Fossil DVCS, используемый расширением RBU.
- В интерфейс sqlite3_db_config() добавлена команда SQLITE_DBCONFIG_WRITABLE_SCHEMA, выполняющая ту же функцию, что и PRAGMA writable_schema, но без использования анализатора SQL.
- Добавлен API sqlite3_value_frombind() для определения того, получен ли аргумент функции SQL из привязанного параметра.
- Улучшена безопасность и совместимость fts3_tokenizer():
- Функция fts3_tokenizer() всегда возвращает NULL, если не включён интерфейс токенизаторов FTS3, определяемых приложением, для обратной совместимости (с помощью настройки sqlite3_db_config(SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER)) и если первый аргумент fts3_tokenizer() не является привязанным параметром.
- Двухаргументная версия fts3_tokenizer() принимает указатель на объект метода токенизатора даже без настройки sqlite3_db_config(SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER), если второй аргумент является привязанным параметром.
- Повышена устойчивость к повреждённым файлам баз данных.
- Различные улучшения производительности
- Создано зеркало официального дерева исходного кода SQLite в Git. Канонические исходные файлы SQLite ведутся с помощью Fossil DVCS по адресу https://sqlite.org/src. Зеркало Git доступно по адресу https://github.com/sqlite/sqlite.
Хэши:
- SQLITE_SOURCE_ID: 2019-04-16 19:49:53 884b4b7e502b4e991677b53971277adfaf0a04a284f8e483e2553d0f83156b50
- SHA3-256 для sqlite3.c: 411efca996b65448d9798eb203d6ebe9627b7161a646f5d00911e2902a57b2e9
2019-02-25 (3.27.2)
- Исправлена ошибка в операторе IN, появившаяся в результате попытки оптимизации в версии 3.27.0. Задача df46dfb631f75694
- Исправлена ошибка, приводившая к аварийному завершению при неправильном использовании оконной функции. Задача 4feb3159c6bc3f7e33959.
- Исправлены различные опечатки в документации
Хэши:
- SQLITE_SOURCE_ID: bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
- SHA3-256 для sqlite3.c: 1dbae33bff261f979d0042338f72c9e734b11a80720fb32498bae9150cc576e7
2019-02-08 (3.27.1)
- Исправлена ошибка оптимизатора запросов: неблагоприятное взаимодействие между оптимизацией OR и оптимизацией, которая пытается использовать значения, непосредственно считанные из индекса по выражению, вместо повторного вычисления выражения. Задача 4e8e4857d32d401f
Хэши:
- SQLITE_SOURCE_ID: 2019-02-08 13:17:39 0eca3dd3d38b31c92b49ca2d311128b74584714d9e7de895b1a6286ef959a1dd
- SHA3-256 для sqlite3.c: 11c14992660d5ac713ea8bea48dc5e6123f26bc8d3075fe5585d1a217d090233
2019-02-07 (3.27.0)
- Добавлена команда VACUUM INTO
- Если используется строковый литерал в двойных кавычках, в журнал ошибок записывается сообщение SQLITE_WARNING.
- Интерфейс sqlite3_normalized_sql() работает с любой подготовленной инструкцией, созданной с помощью sqlite3_prepare_v2() или sqlite3_prepare_v3(). Для использования sqlite3_normalized_sql() больше не требуется вызывать sqlite3_prepare_v3() с параметром SQLITE_PREPARE_NORMALIZE.
- В FTS3 и FTS5 добавлен параметр remove_diacritics=2.
- В sqlite3_prepare_v3() добавлен параметр SQLITE_PREPARE_NO_VTAB. Используйте этот параметр, чтобы предотвратить утечки ресурсов, вызванные циклическими ссылками на теневые таблицы.
- Усовершенствования интерфейса sqlite3_deserialize():
- Добавлен элемент управления файлом SQLITE_FCNTL_SIZE_LIMIT для установки верхнего предела размера базы данных в памяти, создаваемой sqlite3_deserialize. По умолчанию верхний предел составляет 1 ГиБ или альтернативное значение, заданное с помощью sqlite3_config(SQLITE_CONFIG_MEMDB_MAXSIZE) и/или SQLITE_MEMDB_DEFAULT_MAXSIZE.
- Теперь учитывается флаг SQLITE_DESERIALIZE_READONLY, ранее описанный в документации, но фактически не работавший.
- Команда «deserialize» в интерфейсе TCL дополнена новыми параметрами «--maxsize N» и «--readonly BOOLEAN».
- Улучшения CLI, в основном предназначенные для тестирования и отладки самой библиотеки SQLite:
- Добавлена поддержка «.open --hexdb». В дерево исходного кода добавлена служебная программа «dbtotxt», используемая для генерации текста «hexdb».
- Добавлена поддержка параметра «--maxsize N» для «.open --deserialize».
- Добавлен параметр командной строки «--memtrace», показывающий все выделения и освобождения памяти.
- В сборках с SQLITE_DEBUG добавлен параметр «.eqp trace», позволяющий одной командой включить вывод байт-кода с отступами и PRAGMA vdbe_trace.
- Добавлена команда «.progress» для доступа к интерфейсу sqlite3_progress_handler().
- В команду «.backup» добавлен параметр «--async».
- В команду «.trace» добавлены параметры «--expanded», «--normalized», «--plain», «--profile», «--row», «--stmt» и «--close».
- Повышена устойчивость к вредоносному SQL, выполняемому в намеренно повреждённой базе данных.
Исправления ошибок:
- Не использовать частичный индекс для сканирования таблицы при работе с оператором IN. Задача 1d958d90596593a774.
- Исправлен механизм упрощения запросов, чтобы он работал с запросами, содержащими подзапросы с оконными функциями. Задача 709fcd17810f65f717
- Обеспечено изменение командой ALTER TABLE имён таблиц и столбцов, встроенных в предложения WITH, входящие в состав представлений и триггеров.
- Исправлена ошибка анализатора, препятствовавшая использованию скобок вокруг табличных функций.
- Исправлена проблема с оптимизацией OR при использовании индексов по выражениям. Задача d96eba87698a428c1d.
- Исправлена проблема с оптимизацией понижения силы LEFT JOIN: она ошибочно применялась из-за оператора IS NOT NULL. Задача 5948e09b8c415bc45d.
- Исправлена команда REPLACE, которая позволяла помещать значение NULL в столбец NOT NULL, даже если для этого столбца было задано значение NULL по умолчанию. Задача e6f1f2e34dceeb1ed6
- Исправлена проблема при использовании оконных функций внутри коррелированных подзапросов. Задача d0866b26f83e9c55e3
- Исправлена команда ALTER TABLE RENAME COLUMN, чтобы она работала с таблицами, имеющими избыточные ограничения UNIQUE. Задача bc8d94f0fbd633fd9a
- Исправлена ошибка, из-за которой значения zeroblob обрезались при вставке в таблицу, использующую индекс по выражению. Задача bb4bdb9f7f654b0bb9
Хэши:
- SQLITE_SOURCE_ID: "2019-02-07 17:02:52 97744701c3bd414e6c9d7182639d8c2ce7cf124c4fce625071ae65658ac61713 "
- SHA3-256 для sqlite3.c: ca011a10ee8515b33e5643444b98ee3d74dc45d3ac766c3700320def52bc6aba
2018-12-01 (3.26.0)
- Оптимизация: при выполнении UPDATE для таблицы с индексами по выражениям не обновлять индексы по выражениям, если они не ссылаются ни на один из обновляемых столбцов таблицы.
- Разрешено методам xBestIndex() реализаций виртуальных таблиц возвращать SQLITE_CONSTRAINT, чтобы указать, что предложенный план запроса непригоден и его не следует рассматривать дальше.
- Добавлена опция SQLITE_DBCONFIG_DEFENSIVE, отключающая возможность создавать повреждённые файлы баз данных с помощью обычного SQL.
- Добавлена поддержка теневых таблиц только для чтения, если включена опция SQLITE_DBCONFIG_DEFENSIVE.
- Добавлена команда PRAGMA legacy_alter_table. Если она включена, команда ALTER TABLE для обеспечения совместимости работает так же, как в более старых версиях SQLite (до версии 3.25.0).
- Добавлена команда PRAGMA table_xinfo, работающая так же, как PRAGMA table_info, но дополнительно отображающая скрытые столбцы виртуальных таблиц.
- Добавлена виртуальная таблица explain в виде расширения, загружаемого во время выполнения.
- В планировщик запросов добавлен счётчик ограничений, предотвращающий чрезмерные затраты времени на sqlite3_prepare() для некоторых патологических входных данных SQL.
- Добавлена поддержка интерфейса sqlite3_normalized_sql() при компиляции с SQLITE_ENABLE_NORMALIZE.
- Триггеры усовершенствованы: теперь они могут использовать табличные функции, находящиеся в схемах, отличных от схемы, в которой определён триггер.
- Улучшения CLI:
- Улучшена команда «.help».
- Если существует переменная окружения SQLITE_HISTORY, она задаёт имя файла истории командной строки.
- Параметр --deserialize при открытии новой базы данных загружает файл базы данных в память и обращается к нему с помощью API sqlite3_deserialize(). Это упрощает выполнение тестов с базой данных без изменения файла на диске.
- Улучшения расширения geopoly:
- Многоугольники всегда сохраняются в двоичном формате, который работает быстрее и занимает меньше места.
- Добавлена функция geopoly_regular().
- Добавлена функция geopoly_ccw().
- Улучшения расширения session:
- Добавлен флаг SQLITE_CHANGESETAPPLY_INVERT
- Добавлен интерфейс sqlite3changeset_start_v2() и флаг SQLITE_CHANGESETSTART_INVERT.
- Добавлена утилита генерации тестовых случаев changesetfuzz.c.
Хэши:
- SQLITE_SOURCE_ID: "2018-12-01 12:34:55 bf8c1b2b7a5960c282e543b9c293686dccff272512d08865f4600fb58238b4f9"
- SHA3-256 для sqlite3.c: 72c08830da9b5d1cb397c612c0e870d7f5eb41a323b41aa3d8aa5ae9ccedb2c4
2018-11-05 (3.25.3)
- Запрещено использование оконных функций в рекурсивной части CTE. Задача e8275b415a2f03bee
- Исправлена работа typeof() и length() с виртуальными таблицами. Задача 69d642332d25aa3b7315a6d385
- Усилена защита от намеренно повреждённых файлов баз данных.
- Исправлена проблема планировщика запросов, возникавшая при использовании выражения со значениями строки вместе с PRIMARY KEY, содержащим избыточные столбцы. Задача 1a84668dcfdebaf12415d
- Исправлен планировщик запросов: теперь он корректно работает с операторами IS NOT NULL в предложении ON команды LEFT JOIN при параметре времени компиляции SQLITE_ENABLE_STAT4. 65eb38f6e46de8c75e188a17ec
Хэши:
- SQLITE_SOURCE_ID: "2018-11-05 20:37:38 89e099fbe5e13c33e683bef07361231ca525b88f7907be7092058007b75036f2"
- SHA3-256 для sqlite3.c: 45586e4df74de3a43f3a1f8c7a78c3c3f02edce01af7d10cafe68bb94476a5c5
2018-09-25 (3.25.2)
- Добавлена команда PRAGMA legacy_alter_table=ON, которая заставляет команду «ALTER TABLE RENAME» работать так же, как в SQLite версий 3.24.0 и более ранних: ссылки на переименованную таблицу в телах триггеров и представлений не обновляются. Эта новая прагма обеспечивает обходное решение для совместимости со старыми программами, ожидающими прежнего нестандартного поведения ALTER TABLE RENAME.
- Исправлена проблема в новой реализации оконных функций, которая вызывала сбой при использовании сложных выражений с оконными функциями внутри представления.
- Исправлены различные другие предупреждения компилятора и незначительные проблемы, связанные с редкими конфигурациями.
Хэши:
- SQLITE_SOURCE_ID: "2018-09-25 19:08:10 fb90e7189ae6d62e77ba3a308ca5d683f90bbe633cf681865365b8e92792d1c7"
- SHA3-256 для sqlite3.c: 34c23ff91631ae10354f8c9d62fd7d65732b3d7f3acfd0bbae31ff4a62fe28af
2018-09-18 (3.25.1)
- Дополнительная проверка корректности, добавленная для ALTER TABLE в выпуске 3.25.0, иногда давала ложное срабатывание, если у изменяемой таблицы был триггер, обновляющий виртуальную таблицу. Ложное срабатывание приводило к откату ALTER TABLE, в результате чего схема оставалась неизменной. Задача b41031ea2b537237.
- Исправление бесконечного цикла в байт-коде, связанном с оптимизацией ORDER BY LIMIT, выпущенное в версии 3.25.0, не работало для некоторых запросов с оконными функциями. Требуется дополнительное исправление. Задача 510cde277783b5fb
Хэши:
- SQLITE_SOURCE_ID: "2018-09-18 20:20:44 2ac9003de44da7dafa3fbb1915ac5725a9275c86bf2f3b7aa19321bf1460b386"
- SHA3-256 для sqlite3.c: 1b2302e7a54cc99c84ff699a299f61f069a28e1ed090b89e4430ca80ae2aab06
2018-09-15 (3.25.0)
- Добавлена поддержка оконных функций
- Усовершенствована команда ALTER TABLE:
- Добавлена поддержка переименования столбцов таблицы с помощью команды ALTER TABLE table RENAME COLUMN oldname TO newname.
- Исправлена функция переименования таблицы: теперь она также обновляет ссылки на переименованную таблицу в триггерах и представлениях.
- Улучшения оптимизатора запросов:
- Устранена ненужная загрузка столбцов в агрегатных запросах, если эти столбцы не входят в агрегатную функцию и не указаны в предложении GROUP BY.
- Оптимизация раннего выхода для IN: при поиске по многоколоночному индексу, если оператор IN используется для столбца, отличного от самого левого, и для первого значения IN не найдено совпадений, перед переходом к следующему значению IN проверяется наличие строк, соответствующих столбцам справа.
- Для распространения константных значений в предложении WHERE используется транзитивность. Например, «a=99 AND b=a» преобразуется в «a=99 AND b=99».
- В Unix VFS для каждого inode используется отдельный мьютекс вместо одного общего мьютекса, что немного повышает параллелизм в многопоточных средах.
- Усовершенствована команда PRAGMA integrity_check для более эффективного обнаружения проблем в списке свободных страниц.
- В команде «.dump» командной оболочки бесконечность выводится как 1e999.
- Добавлен элемент управления файлом SQLITE_FCNTL_DATA_VERSION.
- Добавлен модуль Geopoly
Исправления ошибок:
- При крайне редком сочетании небольших дефектов оптимизатора запросов оптимизация ORDER BY LIMIT могла вызывать бесконечный цикл в байт-коде подготовленной инструкции. Исправление для задачи 9936b2fa443fec03ff25
- При UPSERT, если порядок проверок ограничений изменён, обеспечено выполнение преобразований аффинности вставляемых данных до любой из проверок ограничений. Исправление для задачи 79cad5e4b2e219dd197242e9e.
- Предотвращено использование подготовленной инструкции для команды «.stats on» интерфейса CLI после её закрытия логикой «.eqp full». Исправление для задачи 7be932dfa60a8a6b3b26bcf76.
- Оптимизация LIKE генерировала неправильный байт-код и, следовательно, давала неверный результат, если левый операнд имел числовую аффинность, а шаблон справа был «/%» или начинался с символа ESCAPE. Исправление для задачи c94369cae9b561b1f996d0054b
Хэши:
- SQLITE_SOURCE_ID: "2018-09-15 04:01:47 b63af6c3bd33152742648d5d2e8dc5d5fcbcdd27df409272b6aea00a6f761760"
- SHA3-256 для sqlite3.c: 989e3ff37f2b5eea8e42205f808ccf0ba86c6ea6aa928ad2c011f33a108ac45d
2018-06-04 (3.24.0)
- Добавлена поддержка UPSERT в стиле PostgreSQL.
- Добавлена поддержка вспомогательных столбцов в таблицах r-tree.
- Добавлены API на языке C для определения ключевых слов SQL, используемых SQLite: sqlite3_keyword_count(), sqlite3_keyword_name() и sqlite3_keyword_check().
- Добавлены API на языке C для работы с динамическими строками на основе объекта sqlite3_str.
- Улучшена команда ALTER TABLE: теперь она распознаёт «true» и «false» как допустимые аргументы DEFAULT.
- Оптимизация sorter-reference добавлена в качестве параметра времени компиляции. Доступна только при компиляции с SQLITE_ENABLE_SORTER_REFERENCES.
- Улучшен формат исходных данных EXPLAIN QUERY PLAN, чтобы предоставлять более подробные сведения о плане запроса и взаимосвязях между его компонентами.
- В API sqlite3_db_config() добавлен параметр SQLITE_DBCONFIG_RESET_DATABASE.
Улучшения CLI:
- Автоматически перехватывает исходные данные EXPLAIN QUERY PLAN и форматирует их в виде ASCII-графа.
- Строки, начинающиеся с «#» и находящиеся не внутри инструкции SQL, интерпретируются как комментарии.
- В команду «.backup» добавлен параметр --append.
- Добавлена команда «.dbconfig».
Производительность:
- Команда UPDATE избегает ненужной низкоуровневой записи на диск, если содержимое файла базы данных фактически не меняется. Например, «UPDATE t1 SET x=25 WHERE y=?» не вызывает дополнительных операций ввода-вывода на диск, если значение столбца x уже равно 25. Аналогично, при выполнении UPDATE для записей, занимающих несколько страниц, на диск записывается только изменившееся подмножество страниц. Это исключительно низкоуровневая оптимизация производительности, не влияющая на поведение TRIGGER или других высокоуровневых структур SQL.
- Запросы с ORDER BY и LIMIT теперь стараются не вычислять строки, которые заведомо не могут попасть в результат из-за ограничения LIMIT. Это может значительно повысить производительность запросов ORDER BY LIMIT, особенно если значение LIMIT мало по сравнению с количеством строк в неограниченном результате.
- Оптимизация OR теперь применяется, даже если выражение OR также было преобразовано в выражение IN. Использование оптимизации OR теперь также нагляднее отображается в выводе EXPLAIN QUERY PLAN.
- Планировщик запросов активнее использует автоматические индексы для представлений и подзапросов, для которых невозможно создать постоянный индекс.
- В расширении R-Tree при необходимости используются однопроходные планы запросов UPDATE и DELETE.
- Повышена производительность парсера, сгенерированного LEMON.
Исправления ошибок:
- Для правой таблицы LEFT JOIN значения выражений вычисляются напрямую, а не загружаются из индекса выражений, поскольку индекс выражений может не содержать правильное значение. Задача 7fa8049685b50b5aeb0c2
- Не использовать условия из предложения WHERE для включения индексированного поиска в правой таблице LEFT JOIN. Задача 4ba5abf65c5b0f9a96a7a
- Исправлена утечка памяти, которая могла возникнуть после ошибки открытия в виртуальной таблице CSV.
- Исправлена давняя проблема, из-за которой повреждённая схема таблицы sqlite_sequence, используемой AUTOINCREMENT, могла привести к сбою. Задача d8dc2b3a58cd5dc2918a1
- Исправлена функция json_each(): теперь она возвращает корректные результаты в столбце «fullkey», если входное значение является простым значением, а не массивом или объектом.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2018-06-04 19:24:41 c7ee0833225bfd8c5ec2f9bf62b97c4e04d03bd9566366d5221ac8fb199a87ca"
- SHA3-256 для sqlite3.c: 0d384704e1c66026228336d1e91771d295bf688c9c44c7a44f25a4c16c26ab3c
2018-04-10 (3.23.1)
- Исправлены две проблемы в новой оптимизации LEFT JOIN с понижением силы. Задачи 1e39b966ae9ee739 и fac496b61722daf2.
- Исправлена неправильная работа метода xBestIndex в FTS5. Задача 2b8aed9f7c9e61e8.
- Исправлена безвредная ссылка на неинициализированный регистр виртуальной машины. Задача 093420fc0eb7cba7.
- Исправлена CLI: теперь она собирается с параметром -DSQLITE_UNTESTABLE.
- Исправлено расширение eval.c: теперь оно работает с PRAGMA empty_result_callbacks=ON.
- Исправлена виртуальная таблица generate_series: теперь она корректно не возвращает строк, если какое-либо из её ограничений имеет значение NULL.
- Повышена производительность парсера.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2018-04-10 17:39:29 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b"
- SHA3-256 для sqlite3.c: 65750d1e506f416a0b0b9dd22d171379679c733e3460549754dc68c92705b5dc
2018-04-02 (3.23.0)
- Добавлены интерфейсы sqlite3_serialize() и sqlite3_deserialize(), доступные при использовании параметра времени компиляции SQLITE_ENABLE_DESERIALIZE.
- TRUE и FALSE распознаются как константы. (Для совместимости, если существуют столбцы с именами «true» или «false», идентификаторы обозначают столбцы, а не логические константы.)
- Добавлена поддержка операторов IS TRUE, IS FALSE, IS NOT TRUE и IS NOT FALSE.
- Для sqlite3_db_status() добавлен параметр SQLITE_DBSTATUS_CACHE_SPILL, позволяющий сообщать количество случаев вытеснения данных из кэша.
- Флаг «alternate-form-2» («!») в встроенной реализации printf теперь заставляет подстановки строк измерять ширину и точность в символах, а не в байтах.
- Если метод xColumn реализации виртуальной таблицы возвращает сообщение об ошибке с помощью sqlite3_result_error(), это сообщение получает приоритет над сообщениями, сгенерированными внутри системы.
- В CLI добавлен параметр командной строки -A, упрощающий работу с архивами SQLite.
- В виртуальную таблицу Zipfile добавлена поддержка INSERT OR REPLACE, INSERT OR IGNORE и UPDATE OR REPLACE.
- Интерфейс sqlite3changeset_apply() усилен для защиты от атак с использованием намеренно повреждённых объектов changeset.
- Добавлена функция расширения sqlite3_normalize().
- Улучшения оптимизатора запросов:
- Улучшена оптимизация исключения левого соединения: теперь она работает, если правая таблица имеет ограничение UNIQUE, но не обязательно NOT NULL.
- Улучшена оптимизация проталкивания вниз: теперь она работает со многими LEFT JOIN.
- Добавлена оптимизация LEFT JOIN с понижением силы, преобразующая LEFT JOIN в обычный JOIN, если в предложении WHERE имеются условия, не позволяющие дополнительной строке, состоящей только из NULL, появиться в результирующем наборе.
- Исключена лишняя запись в таблицу sqlite_sequence, если таблица AUTOINCREMENT обновляется с rowid, меньшим максимального значения.
- Исправления ошибок:
- Исправлен парсер: теперь он принимает корректный синтаксис значений строк. Задача 7310e2fb3d046a5
- Исправлен планировщик запросов: теперь он учитывает зависимости в аргументах табличных функций во вложенных выражениях предложения WHERE. Задача 80177f0c226ff54
- Исправлен некорректный результат для сложного условия WHERE со связями OR и STAT4. Задача ec32177c99ccac2
- Исправлено потенциальное повреждение индексов по выражениям, вызванное автоматическим преобразованием типов данных. Задача 343634942dd54ab
- Исправлена ошибка утверждения в FTS4. Задача d6ec09eccf68cfc
- Исправлен некорректный результат оператора «меньше» для значений строк. Задача f484b65f3d62305
- Ненулевые значения с плавающей точкой всегда интерпретируются как TRUE, даже если их целая часть равна нулю. Задача 36fae083b450e3a
- Исправлена проблема в fileio.c — расширении с табличной функцией fsdir(PATH), вызывавшая сбой сегментации, если таблица fsdir() использовалась как внутренняя таблица соединения. О проблеме сообщили в списке рассылки; исправление внесено в ревизии 7ce4e71c1b7251be.
- При повреждении таблицы sqlite_master, из-за которого корневая страница таблицы sqlite_sequence на самом деле является страницей btree-индекса, теперь выдаётся ошибка вместо ошибки утверждения или разыменования нулевого указателя. Ревизия 525deb7a67fbd647
- Исправлена команда ANALYZE: теперь она вычисляет статистику для таблиц, имена которых начинаются с «sqlite». Ревизия 0249d9aecf69948d
- Дополнительные исправления проблем, обнаруженных OSSFuzz:
- Исправлен возможный бесконечный цикл при выполнении VACUUM для повреждённых файлов базы данных. Ревизия 27754b74ddf64
- Запрещено использовать параметры в предложении WITH триггеров и представлений. Ревизия b918d4b4e546d
- Исправлена потенциальная утечка памяти при обработке значений строк. Ревизия 2df6bbf1b8ca8
- Повышена производительность функции SQL replace() в случаях, когда выполняется множество подстановок в строках размером в несколько мегабайт; это сделано, чтобы избежать превышения времени ожидания OSSFuzz во время тестирования. Ревизия fab2c2b07b5d3
- Добавлено подходящее сообщение об ошибке для случая, когда таблица sqlite_master содержит инструкцию CREATE TABLE AS. Ранее это приводило к ошибке утверждения или разыменованию нулевого указателя. Проблема обнаружена OSSFuzz в проекте GDAL. Ревизия d75e67654aa96
- Удалена некорректная инструкция assert(). Ревизия 823779d31eb09cda.
- Исправлена проблема с использованием оптимизации LIKE для INTEGER PRIMARY KEY. Ревизия b850dd159918af56.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2018-04-02 11:04:16 736b53f57f70b23172c30880186dce7ad9baa3b74e3838cae5847cffb98f5cd2"
- SHA3-256 для sqlite3.c: 4bed3dc2dc905ff55e2c21fd2725551fc0ca50912a9c96c6af712a4289cb24fa
2018-01-22 (3.22.0)
- Теперь вывод sqlite3_trace_v2() показывает каждую отдельную инструкцию SQL, выполняемую внутри триггера.
- Добавлена возможность читать базы данных в режиме WAL, даже если у приложения нет разрешения на запись в базу данных и содержащий её каталог, при условии, что в этом каталоге существуют файлы -shm и -wal.
- В расширение R-Tree добавлена скалярная функция SQL rtreecheck().
- Добавлены интерфейсы sqlite3_vtab_nochange() и sqlite3_value_nochange(), помогающие реализациям виртуальных таблиц оптимизировать операции UPDATE.
- Добавлен интерфейс sqlite3_vtab_collation().
- Добавлена поддержка синтаксиса начального токена «^» в FTS5.
- Новые расширения:
- Виртуальная таблица Zipfile позволяет читать и записывать ZIP-архивы.
- В расширение fileio.c добавлена табличная функция fsdir(PATH) для вывода списка файлов в каталоге.
- Одноимённая виртуальная таблица sqlite_btreeinfo предназначена для анализа и оценки размеров btree-структур в базе данных.
- Append VFS — это прослойка VFS, позволяющая дописать базу данных SQLite в другой файл. Благодаря этому, например, базу данных можно добавить к исполняемому файлу, который затем откроет и прочитает эту базу данных.
- Улучшения планировщика запросов:
- Оптимизация, использующая индекс для быстрого вычисления агрегатной функции min() или max(), теперь работает и с индексами по выражениям.
- При выборе способа реализации подзапроса из предложения FROM — как сопрограммы или с помощью уплощения запроса — теперь учитывается, является ли результирующий набор внешнего запроса «сложным» (то есть содержит ли он функции или подзапросы в выражениях). Сложный результирующий набор повышает вероятность выбора сопрограмм.
- Планировщик избегает планов запросов, использующих индексы с неизвестными функциями сортировки.
- Планировщик исключает неиспользуемые LEFT JOIN, даже если они не являются крайними справа соединениями запроса.
- Другие оптимизации производительности:
- Более компактная и быстрая реализация подпрограммы преобразования текста в число с плавающей точкой: sqlite3AtoF().
- Генератор парсеров Lemon создаёт более быстрый парсер.
- Для ускорения операторов LIKE и GLOB используется библиотечная функция C strcspn().
- Улучшения оболочки командной строки:
- Команда «.schema» отображает структуру виртуальных таблиц.
- Добавлена поддержка чтения и записи файлов архивов SQLite с помощью команды .archive.
- Добавлена экспериментальная команда .expert.
- Добавлен вариант «.eqp trigger» команды «.eqp».
- Улучшена команда «.lint fkey-indexes»: теперь она работает с таблицами WITHOUT ROWID.
- Если аргумент имени файла для оболочки указывает на ZIP-архив, а не на базу данных SQLite, оболочка автоматически открывает этот ZIP-архив с помощью виртуальной таблицы Zipfile.
- Добавлена функция SQL edit().
- Добавлена команда .excel, упрощающая экспорт содержимого базы данных в электронную таблицу.
- При указании флага --append в командной строке или в команде .open базы данных открываются с помощью Append VFS.
- Параметр времени компиляции SQLITE_ENABLE_UPDATE_DELETE_LIMIT улучшен: теперь он работает с таблицами WITHOUT ROWID.
- При компиляции с параметром -DSQLITE_ENABLE_OFFSET_SQL_FUNC доступна функция SQL sqlite_offset(X), возвращающая байтовое смещение в файле базы данных, указывающее на начало записи со значением X.
- Исправления ошибок:
- Исправлен бесконечный цикл при выполнении UPDATE, использующего оператор OR в предложении WHERE. Проблема появилась в версии 3.17.0; о ней сообщили в списке рассылки примерно год спустя. Задача 47b2581aa9bfecec.
- Исправлены некорректные результаты запросов при использовании оптимизации skip-ahead-distinct. Задача ef9318757b152e3a.
- Исправлены некорректные результаты запроса для соединения с ORDER BY DESC. Задача 123c9ba32130a6c9.
- Исправлено несоответствие имён столбцов результирующего набора между CREATE TABLE AS и простым SELECT. Задача 3b4450072511e621
- Исправлена ошибка утверждения при выполнении REPLACE для индекса по выражению. Задача dc3f932f5a147771
- Исправлена ошибка утверждения при применении оператора IN к индексу по константе. Задача aa98619ad08ddcab
Контрольные суммы:
- SQLITE_SOURCE_ID: "2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2171d"
- SHA3-256 для sqlite3.c: 206df47ebc49cd1710ac0dd716ce5de5854826536993f4feab7a49d136b85069
2017-10-24 (3.21.0)
- При наличии файловой системы F2FS используется её поддержка атомарной записи, что значительно снижает накладные расходы на транзакции. Для этого требуется параметр времени компиляции SQLITE_ENABLE_BATCH_ATOMIC_WRITE.
- Команды ATTACH и DETACH теперь можно выполнять внутри транзакции.
- Виртуальные таблицы WITHOUT ROWID теперь доступны для записи, если PRIMARY KEY содержит ровно один столбец.
- Операция «fsync()», выполняемая после записи заголовка при сбросе WAL, теперь использует параметры синхронизации контрольных точек. Это означает, что на компьютерах Mac будет использоваться «fullfsync», если включён параметр PRAGMA checkpoint_fullfsync.
- Функция sqlite3_sourceid() пытается определить, изменялся ли исходный код после фиксации в системе контроля версий; если изменения есть, последние четыре символа хеша версии отображаются как «alt1» или «alt2». Это позволяет обнаруживать случайные и/или небрежные правки. Злоумышленник может обойти эту проверку.
- Улучшено снятие кавычек с имён столбцов в инструкциях CREATE TABLE AS, если справа от них находится агрегатный запрос.
- В Unix VFS стало выполняться меньше системных вызовов «stat()».
- Улучшена оптимизация LIKE: теперь она работает с предложением ESCAPE.
- Улучшены PRAGMA integrity_check и PRAGMA quick_check: теперь они обнаруживают некоторые малозаметные повреждения строк, которые раньше пропускали. Кроме того, при обнаружении повреждений в записях обе прагмы теперь возвращают текст ошибки, а не SQLITE_CORRUPT.
- Теперь планировщик запросов предпочитает реализовывать подзапросы из предложения FROM с помощью сопрограмм, а не оптимизации уплощения запросов. Отключить поддержку сопрограмм для подзапросов больше нельзя.
- Ограничения !=, IS, IS NOT, NOT NULL и IS NULL передаются в метод xBestIndex виртуальных таблиц.
- Улучшена виртуальная таблица CSV: теперь она принимает последнюю строку входных данных, даже если в конце отсутствует символ новой строки.
- Удален редко используемый распределитель памяти «scratch». Вместо него добавлен параметр конфигурации SQLITE_CONFIG_SMALL_MALLOC, позволяющий сообщить SQLite, что по возможности следует избегать крупных выделений памяти.
- В существующее расширение виртуальных таблиц union добавлена виртуальная таблица swarm.
- Добавлена виртуальная таблица sqlite_dbpage, обеспечивающая прямой доступ к страницам файла базы данных. Исходный код включён в амальгамацию; таблица активируется параметром времени компиляции -DSQLITE_ENABLE_DBPAGE_VTAB.
- Добавлен новый тип виртуальной таблицы fts5vocab — «instance», обеспечивающий прямой доступ к полнотекстовому индексу FTS5 на самом низком уровне.
- Из Windows VFS удалён вызов rand_s(), вызывавший проблемы в Firefox на некоторых старых ноутбуках.
- Исходный код src/shell.c для оболочки командной строки больше не находится под контролем версий. Теперь этот файл генерируется в процессе сборки.
- Различные микрооптимизации снизили загрузку ЦП примерно на 2,1%.
- Исправления ошибок:
- Исправлена ошибочная инструкция assert(), обнаруженная OSSFuzz. Задача cb91bf4290c211d
- Исправлена малозаметная утечка памяти в sqlite3_result_pointer(). Задача 7486aa54b968e9b
- Устранена возможность ошибки использования после освобождения памяти: сброс схемы отложен до завершения работы планировщика запросов. Задача be436a7f4587ce5
- Индексы по выражениям используются для оптимизации ORDER BY или GROUP BY только при правильном COLLATE. Задача e20dd54ab0e4383
- Исправлена ошибка утверждения, возникавшая, если выражение в индексе по выражению фактически является константой. Задача aa98619ad08ddca
- Исправлена ошибка утверждения, которая могла возникнуть после выполнения PRAGMA reverse_unordered_selects. Задача cb91bf4290c211d
- Исправлен сбой сегментации, возможный в запросах с табличными функциями во вложенном запросе IN или EXISTS. Задача b899b6042f97f5
- Исправлена возможная целочисленная переполненность при компиляции конкретного чрезвычайно сложного обобщённого табличного выражения. Эта проблема также обнаружена OSSFuzz. Ревизия 6ee8cb6ae5.
- Исправлено возможное чтение за пределами буфера при запросе к повреждённому файлу базы данных. Проблему обнаружила Натали Сильванович из Google Project Zero. Ревизия 04925dee41a21f.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de48827"
- SHA3-256 для sqlite3.c: 84c181c0283d0320f488357fc8aab51898370c157601459ebee49d779036fe03
2017-08-24 (3.20.1)
- Исправлена потенциальная утечка памяти в новом интерфейсе sqlite3_result_pointer(). Задача 7486aa54b968e9b5.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34"
- SHA3-256 для sqlite3.c: 93b1a6d69b48dc39697d1d3a1e4c30b55da0bdd2cad0c054462f91081832954a
2017-08-01 (3.20.0)
- Обновлены тексты сообщений об ошибках, возвращаемых sqlite3_errmsg() для некоторых кодов ошибок.
- Добавлены новые интерфейсы передачи указателей.
- В некоторые расширения внесены несовместимые с предыдущими версиями изменения, чтобы воспользоваться повышенной безопасностью, обеспечиваемой новыми интерфейсами передачи указателей:
- Расширение FTS5 → для поиска указателя fts5_api требуется sqlite3_bind_pointer().
- carray(PTR,N) → для задания параметра PTR требуется sqlite3_bind_pointer().
- remember(V,PTR) → для задания параметра PTR требуется sqlite3_bind_pointer().
- Добавлено расширение виртуальной таблицы SQLITE_STMT.
- Добавлено расширение COMPLETION, предназначенное для подсказок автодополнения по клавише Tab в интерактивных пользовательских интерфейсах. Работа над ним продолжается. В будущих выпусках ожидаются дальнейшие улучшения.
- Добавлено расширение виртуальной таблицы UNION.
- Встроенные функции даты и времени усовершенствованы: теперь их можно использовать в ограничениях CHECK, в индексах по выражениям и в предложениях WHERE частичных индексов, если при этом не используются ключевые слова 'now', 'localtime' или 'utc'. Подробнее.
- Добавлены интерфейсы sqlite3_prepare_v3() и sqlite3_prepare16_v3() с дополнительными параметрами "prepFlags".
- Предоставлен флаг SQLITE_PREPARE_PERSISTENT для sqlite3_prepare_v3(); он используется для ограничения ненадлежащего применения буфера lookaside в FTS3, FTS5 и расширении R-Tree.
- Добавлена команда PRAGMA secure_delete=FAST. Когда для secure_delete задано значение FAST, старое содержимое перезаписывается нулями, если это не увеличивает объём операций ввода-вывода. Удалённое содержимое может по-прежнему оставаться в списке свободных страниц, но удаляется со всех страниц b-дерева.
- Улучшения командной оболочки:
- Добавлена поддержка автодополнения по клавише Tab с помощью расширения COMPLETION для readline и linenoise.
- Добавлена команда ".cd".
- Улучшена команда ".schema": теперь она показывает схему всех подключённых баз данных.
- Улучшена команда ".tables": если имя любой из подключённых баз данных отличается от "main", она показывает имена схем.
- Команда ".import" игнорирует начальный маркер UTF-8 BOM.
- В команду ".dump" добавлен параметр "--newlines", чтобы символы U+000a и U+000d выводились буквально, а не экранировались с помощью функции replace().
- Улучшения планировщика запросов:
- При создании отдельных циклов для каждого терма OR в сканировании OR все константные выражения WHERE выносятся за пределы цикла, как это делается для циклов верхнего уровня.
- Планировщик запросов анализирует значения связанных параметров, чтобы определить, можно ли использовать частичный индекс.
- При выборе между двумя планами с одинаковой расчётной стоимостью предпочтение отдаётся плану, не использующему сортировщик.
- Ограничения предложения WHERE, содержащие коррелированные подзапросы, вычисляются последними — в надежде, что их вовсе не придётся вычислять.
- Для подзапроса в правой части LEFT JOIN не применяется оптимизация свёртки, если подзапрос читает данные из виртуальной таблицы. Иначе планировщик запросов не сможет создавать автоматические индексы по результатам подзапроса, что может замедлить выполнение запроса.
- Добавлены параметры SQLITE_STMTSTATUS_REPREPARE, SQLITE_STMTSTATUS_RUN и SQLITE_STMTSTATUS_MEMUSED для интерфейса sqlite3_stmt_status().
- Добавлены функции PRAGMA для PRAGMA integrity_check, PRAGMA quick_check и PRAGMA foreign_key_check.
- В метод eval интерфейса TCL добавлен параметр -withoutnulls.
- Утилита sqlite3_analyzer.exe улучшена: теперь она показывает количество байтов метаданных на страницах b-дерева.
- Параметр времени выполнения SQLITE_DBCONFIG_ENABLE_QPSG и параметр компиляции SQLITE_ENABLE_QPSG включают гарантию стабильности планировщика запросов. См. также заявку 892fc34f173e99d8
- Различные оптимизации позволили сократить количество используемых циклов ЦП на 2%.
Исправления ошибок:
- Исправлено поведение sqlite3_column_name() для запросов с оптимизацией свёртки, чтобы результат соответствовал результатам других запросов, не использующих эту оптимизацию, а также PostgreSQL, MySQL и SQLServer. Заявка de3403bf5ae.
- Исправлен планировщик запросов: теперь он не использует автоматические индексы для правой таблицы LEFT JOIN, если в предложении WHERE используется оператор IS. Исправление для заявки ce68383bf6aba.
- Планировщик запросов теперь учитывает, что любой столбец свёрнутого LEFT JOIN может иметь значение NULL, даже если для этого столбца указано "NOT NULL". Исправление для заявки 892fc34f173e99d8.
- Исправлены редкие ложноположительные результаты PRAGMA integrity_check при выполнении для подключения к базе данных с присоединёнными базами данных. Заявка a4e06e75a9ab61a12
- Исправлена ошибка (обнаруженная OSSFuzz), из-за которой возникал сбой утверждения при использовании некоторых некорректных объявлений CREATE TABLE. Заявка bc115541132dad136
Контрольные суммы:
- SQLITE_SOURCE_ID: "2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8"
- SHA3-256 для sqlite3.c: 79b7f3b977360456350219cba0ba0e5eb55910565eab68ea83edda2f968ebe95
2017-06-17 (3.18.2)
- Исправлена ошибка, которая могла приводить к появлению дублирующихся строк в результате, если в предложении WHERE использовался оператор IN. Заявка 61fe9745.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2017-06-17 09:59:36 036ebf729e4b21035d7f4f8e35a6f705e6bf99887889e2dc14ebf2242e7930dd"
- SHA3-256 для sqlite3.c: b0bd014f2776b9f9508a3fc6432f70e2436bf54475369f88f0aeef75b0eec93e
2017-06-16 (3.18.1)
- Исправлена ошибка, связанная с auto_vacuum, которая могла приводить к повреждению базы данных. Ошибка появилась в версии 3.16.0 (2017-01-02). Заявка fda22108.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2017-06-16 13:41:15 77bb46233db03a3338bacf7e56f439be3dfd1926ea0c44d252eeafa7a7b31c06"
- SHA3-256 для sqlite3.c: 334eaf776db9d09a4e69d6012c266bc837107edc2c981739ef82081cb11c5723
2017-06-08 (3.19.3)
- Исправлена ошибка, связанная с auto_vacuum, которая могла приводить к повреждению базы данных. Ошибка появилась в версии 3.16.0 (2017-01-02). Заявка fda22108.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2017-06-08 14:26:16 0ee482a1e0eae22e08edc8978c9733a96603d4509645f348ebf55b579e89636b"
- SHA3-256 для sqlite3.c: 368f1d31272b1739f804bcfa5485e5de62678015c4adbe575003ded85c164bb8
2017-05-25 (3.19.2)
- Исправлены дополнительные ошибки в оптимизации свёртки LEFT JOIN. Заявка 7fde638e94287d2c.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2017-05-25 16:50:27 edb4e819b0c058c7d74d27ebd14cc5ceb2bad6a6144a486a970182b7afe3f8b9"
- SHA3-256 для sqlite3.c: 1be0c457869c1f7eba58c3b5097b9ec307a15be338308bee8e5be8570bcf5d1e
2017-05-24 (3.19.1)
- Исправлена ошибка в оптимизации свёртки LEFT JOIN. Заявка cad1ab4cb7b0fc.
- Удалена лишняя точка с запятой, вызывавшая проблемы в старых версиях MSVC.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2017-05-24 13:08:33 f6d7b988f40217821a382bc298180e9e6794f3ed79a83c6ef5cae048989b3f86"
- SHA3-256 для sqlite3.c: 996b2aff37b6e0c6663d0312cd921bbdf6826c989cbbb07dadde5e9672889bca
2017-05-22 (3.19.0)
- Для каждой таблицы, указанной в запросе, из которой не извлекаются столбцы, авторизующий обратный вызов SQLITE_READ вызывается один раз с пустым именем столбца.
- При использовании индекса по выражению предпринимается попытка использовать уже доступные в индексе значения выражения вместо загрузки исходных столбцов и повторного вычисления выражения.
- Улучшена оптимизация свёртки: теперь она позволяет сворачивать представления в правой части LEFT JOIN.
- Для экранирования символов перевода строки и возврата каретки внутри строк в выводе .dump командной оболочки используется replace() вместо char().
- Исключена ненужная обработка внешних ключей в инструкциях UPDATE, не затрагивающих столбцы, на которые распространяются ограничения внешних ключей.
- Для запроса DISTINCT с индексом, если доступен подходящий индекс, выполняется попытка перейти сразу к следующему уникальному элементу с помощью индекса, а не перебирать строки по одной.
- Исключена ненужная инвалидация дескрипторов sqlite3_blob при изменении несвязанных таблиц.
- Для ускорения обработки все термы предложения HAVING, использующие только столбцы, указанные в предложении GROUP BY, переносятся в предложение WHERE.
- Если одно и то же представление встречается в запросе несколько раз, результат его материализации используется повторно.
- Улучшена команда PRAGMA integrity_check: теперь она обнаруживает таблицы, в которых две или более строк имеют одинаковый rowid.
- Улучшен синтаксис запросов FTS5: теперь фильтры столбцов можно применять к произвольным выражениям.
- Улучшена функция json_extract(): добавлено кэширование и повторное использование результатов разбора входного текста JSON.
- Добавлено расширение anycollseq.c, подключаемое расширение, позволяющее обычному подключению к базе данных SQLite читать схему, содержащую неизвестные и/или специфичные для приложения последовательности сортировки.
Исправления ошибок:
- Исправлена проблема в REPLACE, которая могла приводить к повреждению базы данных с двумя или более строками, имеющими одинаковый rowid. Исправление для заявки f68dc596c4e6018d.
- Исправлена проблема в PRAGMA integrity_check, из-за которой последующая команда VACUUM работала неоптимально.
- Исправлена команда PRAGMA foreign_key_check: теперь она корректно работает с внешними ключами в таблицах WITHOUT ROWID.
- Исправлена ошибка в логике b-дерева, которая могла приводить к неверным дублирующимся результатам запросов с оператором IN. Заявка 61fe9745
- В числовых константах JSON запрещены ведущие нули. Исправление для заявки b93be8729a895a528e2.
- В строках JSON запрещены управляющие символы. Исправление для заявки 6c9b5514077fed34551.
- Ограничена глубина рекурсии для объектов и массивов JSON, чтобы избежать чрезмерного использования стека при рекурсивном разборе. Исправление для заявки 981329adeef51011052.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2017-05-22 13:58:13 28a94eb282822cad1d1420f2dad6bf65e4b8b9062eda4a0b9ee8270b2c608e40"
- SHA3-256 для sqlite3.c: c30326aa1a9cc342061b755725eac9270109acf878bc59200dd4b1cea6bc2908
2017-03-30 (3.18.0)
- Добавлена команда PRAGMA optimize
- Идентификатор версии SQLite, возвращаемый SQL-функцией sqlite_source_id() и API C sqlite3_sourceid(), а также содержащийся в макросе SQLITE_SOURCE_ID, теперь представляет собой 64-значный хеш SHA3-256 вместо 40-значного хеша SHA1.
- В расширение JSON1 добавлена SQL-функция json_patch().
- Улучшена оптимизация LIKE: теперь она работает с произвольными выражениями в левой части, если шаблон LIKE в правой части не начинается с цифры или знака минуса.
- Добавлен интерфейс sqlite3_set_last_insert_rowid(); новый интерфейс используется в расширениях FTS3, FTS4 и FTS5, чтобы интерфейс sqlite3_last_insert_rowid() всегда возвращал корректные значения.
- Улучшены PRAGMA integrity_check и PRAGMA quick_check: теперь они проверяют ограничения CHECK.
- Улучшены планы выполнения запросов с соединениями: теперь обнаружение пустых таблиц происходит раньше, и выполнение прекращается без лишней работы.
- Семейство интерфейсов sqlite3_mprintf() и SQL-функция printf улучшены: если между "%" и "d" используется модификатор формата ",", целые числа выводятся с разделителями тысяч (например, "%,d").
- Добавлен параметр компиляции -DSQLITE_MAX_MEMORY=N.
- В командную оболочку добавлены команда .sha3sum и команда .selftest
- Начато применение ограничения SQLITE_LIMIT_VDBE_OP. Например, его можно использовать для запрета чрезмерно больших подготовленных инструкций в системах, принимающих SQL-запросы от недоверенных пользователей.
- Различные улучшения производительности.
Исправления ошибок:
- Обеспечена правильная обработка индексированных выражений с последовательностями сортировки. Исправление для заявки eb703ba7b50c1a5.
- Исправлена ошибка в модификаторах 'start of ...' для функций даты и времени. Заявка 6097cb92745327a1
- Исправлена потенциальная ошибка сегментации во вложенных рекурсивных триггерах, возникшая из-за ошибки в опкоде OP_Once, добавленной в рамках оптимизации производительности в версии 3.15.0. Заявка 06796225f59c057c
- В расширение RBU добавлены дополнительные операции синхронизации, чтобы избежать возможного повреждения данных после сбоя питания.
- Вывод sqlite3_trace_v2() для вложенных инструкций SQL всегда должен начинаться с маркера комментария "--".
Контрольные суммы:
- SQLITE_SOURCE_ID: "2017-03-28 18:48:43 424a0d380332858ee55bdebc4af3789f74e70a2b3ba1cf29d84b9b4bcf3e2e37"
- SHA3-256 для sqlite3.c: cbf322df1f76be57fb3be84f3da1fc71d1d3dfdb7e7c2757fb0ff630b3bc2e5d
2017-02-13 (3.17.0)
- Производительность расширения R-Tree повышена примерно на 25%.
- Если доступны встроенные функции компилятора для перестановки байтов (например, __builtin_bswap32() или _byteswap_ulong()), используются они.
- Для извлечения содержимого из узлов R-Tree вместо SQL используется объект доступа к ключу/значению sqlite3_blob
- Другие разнообразные улучшения, например разворачивание циклов.
- Добавлен параметр компиляции SQLITE_DEFAULT_LOOKASIDE.
- Размер буфера lookaside по умолчанию увеличен с 512,125 до 1200,100, поскольку это повышает производительность, добавляя лишь 56 КБ дополнительной памяти на подключение. Приложения с ограничением по памяти могут восстановить прежнее значение по умолчанию во время компиляции, запуска или выполнения.
- При наличии встроенных функций компилятора __builtin_sub_overflow(), __builtin_add_overflow() и __builtin_mul_overflow() используются они. (Все встроенные функции компилятора можно отключить параметром компиляции SQLITE_DISABLE_INTRINSIC.)
- Добавлен параметр компиляции SQLITE_ENABLE_NULL_TRIM, который в некоторых приложениях позволяет значительно уменьшить размер файлов баз данных, но может привести к несовместимости со старыми версиями SQLite.
- Для повышения производительности значение SQLITE_DEFAULT_PCACHE_INITSZ изменено со 100 на 20.
- Добавлен параметр компиляции SQLITE_UINT64_TYPE, аналогичный SQLITE_INT64_TYPE.
- Некоторые операции UPDATE выполняются за один проход вместо двух.
- В расширение сеансов добавлена поддержка таблиц WITHOUT ROWID.
- Исправлены проблемы с производительностью и возможным переполнением стека при создании представлений из многорядных предложений VALUES с сотнями тысяч строк.
- Добавлено расширение sha1.c.
- В командной оболочке улучшена команда ".mode": теперь она восстанавливает разделители столбцов и строк по умолчанию для режимов "line", "list", "column" и "tcl".
- Параметр SQLITE_DIRECT_OVERFLOW_READ улучшен: теперь он работает в режиме WAL, если считываемые страницы не находятся в файле WAL.
- Генератор парсеров Lemon улучшен: теперь он может хранить объект парсера в переменной стека, а не выделять для него место в куче. Это улучшение используется в амальгамации.
- Другие улучшения производительности. Используется примерно на 6,5% меньше циклов ЦП.
Исправления ошибок:
- Выдаётся ошибка, если предложение ON в LEFT JOIN ссылается на таблицы, расположенные справа от предложения ON. Такое же поведение реализовано в PostgreSQL. Ранее SQLite молча преобразовывал LEFT JOIN в INNER JOIN. Исправление для заявки 25e335f802dd.
- Для столбцов автоматических индексов используется правильная аффинность. Заявка 7ffd1ca1d2ad4ec.
- Обеспечена корректная обработка коротких строк интерфейсом sqlite3_blob_reopen(). Исправление для заявки e6e962d6b0f06f46e.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2017-02-13 16:02:40 ada05cfa86ad7f5645450ac7a2a21c9aa6e57d2c"
- SHA1 для sqlite3.c: cc7d708bb073c44102a59ed63ce6142da1f174d1
2017-01-06 (3.16.2)
- Исправлена инструкция REPLACE для таблиц WITHOUT ROWID без вторичных индексов: теперь она корректно работает с триггерами и внешними ключами. Это новая ошибка, вызванная оптимизациями производительности, добавленными в версии 3.16.0. Заявка 30027b613b4
- Исправлен интерфейс sqlite3_value_text(): теперь он корректно преобразует содержимое, созданное функцией zeroblob(), в строку, состоящую из символов 0x00. Это давняя проблема, обнаруженная OSS-Fuzz после выпуска версии 3.16.1
- Исправлен генератор байт-кода для обработки подзапроса в предложении FROM, который сам является UNION ALL, если одна из частей UNION ALL — представление, содержащее ORDER BY. Это давняя проблема, обнаруженная после выпуска версии 3.16.1. См. заявку 190c2507.
- Скорректирован API sqlite3_column_count(), чтобы он чаще возвращал для инструкций PRAGMA те же значения, что и в предыдущих выпусках, и тем самым свести к минимуму нарушения работы приложений, использующих этот интерфейс непредусмотренным образом.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2017-01-06 16:32:41 a65a62893ca8319e89e48b8a38cf8a59c69a8209"
- SHA1 для sqlite3.c: 2bebdc3f24911c0d12b6d6c0123c3f84d6946b08
2017-01-03 (3.16.1)
- Исправлена ошибка, связанная с использованием значений строк в триггерах (см. заявку 8c9458e7), которая присутствовала в версии 3.15.0, но о которой сообщили лишь через несколько мгновений после публикации версии 3.16.0.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2017-01-03 18:27:03 979f04392853b8053817a3eea2fc679947b437fd"
- SHA1 для sqlite3.c: 354f6223490b30fd5320b4066b1535e4ce33988d
2017-01-02 (3.16.0)
- Используется на 9% меньше циклов ЦП. (Подробнее о методике расчёта прироста производительности см. в отчёте об измерении производительности ЦП.)
- Добавлена экспериментальная поддержка функций PRAGMA.
- В sqlite3_db_config() добавлен параметр SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE.
- Улучшены функции даты и времени: теперь модификатор 'unixepoch' работает для всего диапазона поддерживаемых дат.
- Изменена конфигурация по умолчанию распределителя памяти lookaside: вместо 500 слотов по 128 байт теперь используется 125 слотов по 512 байт.
- Улучшены частичные индексы "WHERE x NOT NULL": теперь их можно использовать, если столбец "x" участвует в операторе LIKE или GLOB.
- Улучшена функция sqlite3_interrupt(): теперь она прерывает выполняющиеся операции контрольной точки.
- Улучшен алгоритм сопоставления LIKE и GLOB: теперь он быстрее обрабатывает шаблоны с несколькими подстановочными знаками.
- Добавлен код операции управления файлом SQLITE_FCNTL_WIN32_GET_HANDLE.
- В командную оболочку добавлен режим ".mode quote".
- В командную оболочку добавлена команда ".lint fkey-indexes".
- В командную оболочку добавлена команда .imposter.
- SQL-функция remember(V,PTR) добавлена в качестве подключаемого расширения.
- Параметр компиляции SQLITE_OMIT_BUILTIN_TEST переименован в SQLITE_UNTESTABLE, чтобы точнее отражать последствия его использования.
Исправления ошибок:
- Исправлена давняя ошибка планировщика запросов, которая приводила к неверным результатам для LEFT JOIN, если левая таблица является подзапросом, а ограничение соединения — это простое имя столбца из левого подзапроса. Заявка 2df0107b.
- Обеспечена правильная обработка целочисленного литерала -0x8000000000000000 в планировщике запросов.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2017-01-02 11:57:58 04ac0b75b1716541b2b97704f4809cb7ef19cccf"
- SHA1 для sqlite3.c: e2920fb885569d14197c9b7958e6f1db573ee669
2016-11-28 (3.15.2)
- Исправлен ряд ошибок в логике значений строк, добавленной в версии 3.15.0.
- Исправлено разыменование нулевого указателя в ATTACH/DETACH после намеренно сформированной синтаксической ошибки. Заявка 2f1b168ab4d4844.
- Исправлен сбой, который мог возникать после нехватки памяти во встроенной функции instr().
- В расширении JSON исправлен валидатор JSON: теперь он корректно отклоняет недопустимые обратные косые черты в строках.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8"
- SHA1 для sqlite3.c: 06d77b42a3e70609f8d4bbb97caf53652f1082cb
2016-11-04 (3.15.1)
- Добавлен код операции управления файлом SQLITE_FCNTL_WIN32_GET_HANDLE.
- Исправлена команда VACUUM: теперь избыточное содержимое выгружается на диск, а не целиком хранится в памяти, что могло приводить к ошибке нехватки памяти при обработке больших файлов баз данных. Исправлена проблема, появившаяся в версии 3.15.0.
- Исправлен случай (существовавший с версии 3.8.0 — 2013-08-26), когда термы ON, соединённые оператором OR в предложении LEFT JOIN, могли приводить к неверным результатам. Заявка 34a579141b2c5ac.
- Исправлен случай, когда использование значений строк в предложении ON LEFT JOIN могло приводить к неверным результатам. Заявка fef4bb4bd9185ec8f.
Контрольные суммы:
- SQLITE_SOURCE_ID: "2016-11-04 12:08:49 1136863c76576110e710dd5d69ab6bf347c65e36"
- SHA1 для sqlite3.c: e7c26a7be3e431dd06898f8d262c4ef240c07366
2016-10-14 (3.15.0)
- Добавлена поддержка значений строк.
- Разрешено использовать детерминированные SQL-функции в предложении WHERE частичного индекса.
- В VFS unix добавлен параметр URI "modeof=filename"
- Добавлена поддержка SQLITE_DBCONFIG_MAINDBNAME.
- Добавлена возможность выполнять VACUUM для базы данных, подключённой с помощью ATTACH.
- Улучшения командной оболочки:
- Добавлены команды .testcase и .check.
- В команду ".open" добавлен параметр --new, который удаляет всё предыдущее содержимое базы данных перед открытием.
- Виртуальная таблица fts5vocab улучшена для эффективной обработки "ORDER BY term".
- Различные микрооптимизации сократили использование ЦП более чем на 7% при типичных нагрузках. В основном в этом выпуске оптимизировалась фронтенд-часть (sqlite3_prepare_v2()).
Исправления ошибок:
- Оператор умножения теперь корректно обнаруживает переполнение 64-разрядного целого числа и во всех крайних случаях преобразует результат в число с плавающей точкой. Исправление для заявки 1ec41379c9c1e400.
- Исправлена обработка столбцов с избыточными уникальными индексами, когда эти столбцы используются в левой части оператора IN. Исправление для заявки 0eab1ac759.
- В диапазонных запросах пропускаются записи NULL в индексах по выражениям. Исправление для заявки 4baa46491212947.
- Обеспечена инициализация счётчиков AUTOINCREMENT в таблице sqlite_sequence при выполнении «оптимизации Xfer» для инструкций "INSERT ... SELECT". Исправление для заявки 7b3328086a5c116c.
- Обеспечена работа оптимизации ORDER BY LIMIT (из фиксации 559733b09e) с операторами IN для INTEGER PRIMARY KEY. Исправление для заявки 96c1454c
Контрольные суммы:
- SQLITE_SOURCE_ID: "2016-10-14 10:20:30 707875582fcba352b4906a595ad89198d84711d8"
- SHA1 для sqlite3.c: fba106f8f6493c66eeed08a2dfff0907de54ae76
2016-09-12 (3.14.2)
- Улучшена поддержка использования соглашения о вызовах STDCALL в winsqlite3.dll.
- Исправлен интерфейс sqlite3_trace_v2(): теперь он отключается, если аргумент callback или mask равен нулю, в соответствии с документацией.
- Исправлены ошибки в комментариях и улучшены комментарии, создаваемые в выводе EXPLAIN при использовании параметра компиляции -DSQLITE_ENABLE_EXPLAIN_COMMENTS.
- Исправлена команда ".read" в оболочке командной строки: теперь она учитывает, что ввод не является интерактивным.
- Исправлены вычисления affinity для SELECT в правой части оператора IN. Исправление для тикета 199df4168c.
- Оптимизация ORDER BY LIMIT недопустима, если самый внутренний цикл оператора IN фактически не используется планом запроса. Исправление для тикета 0c4df46116e90f92.
- Исправлена проблема во внутреннем генераторе кода, из-за которой некоторые операции DELETE ничего не делали. Тикет ef360601
Хеш-суммы:
- SQLITE_SOURCE_ID: "2016-09-12 18:50:49 29dbef4b8585f753861a36d6dd102ca634197bd6"
- SHA1 для sqlite3.c: bcc4a1989db45e7f223191f2d0f66c1c28946383
2016-08-11 (3.14.1)
- Повышена производительность операции «truncate» кэша страниц: время выполнения COMMIT сокращается на десятки миллисекунд в системах с большим кэшем страниц.
- Исправлена опция --rbu в sqldiff.
Хеш-суммы:
- SQLITE_SOURCE_ID: "2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b"
- SHA1 для sqlite3.c: d545b24892278272ce4e40e0567d69c8babf12ea
2016-08-08 (3.14)
- Добавлена поддержка виртуальных таблиц WITHOUT ROWID.
- Улучшен планировщик запросов: теперь оптимизация OR может применяться к виртуальным таблицам, даже если один или несколько дизъюнктов используют операторы LIKE, GLOB, REGEXP, MATCH.
- Добавлена виртуальная таблица CSV для чтения файлов со значениями, разделёнными запятыми, в формате RFC 4180.
- Добавлено расширение табличная функция carray().
- Добавлена поддержка постоянно загружаемых расширений с использованием нового кода возврата SQLITE_OK_LOAD_PERMANENTLY из точки входа расширения.
- Добавлена опция SQLITE_DBSTATUS_CACHE_USED_SHARED для sqlite3_db_status().
- Добавлено загружаемое расширение vfsstat.c — прослойка VFS, измеряющая операции ввода-вывода, вместе с виртуальной таблицей с одноимённой табличной функцией, предоставляющей доступ к измерениям.
- Улучшен алгоритм выполнения запросов одновременно с ORDER BY и LIMIT, если только самый внутренний цикл естественным образом формирует строки в правильном порядке.
- Усовершенствован генератор синтаксических анализаторов Lemon, благодаря чему он создаёт более быстрый анализатор.
- Команда PRAGMA compile_options теперь пытается показать номер версии компилятора, с помощью которого была собрана библиотека.
- Расширена команда PRAGMA table_info: теперь она предоставляет сведения о виртуальных таблицах с одноимённой табличной функцией.
- Добавлена VFS «win32-none», аналогичная VFS «unix-none»: она работает как VFS «win32» по умолчанию, но игнорирует все блокировки файлов.
- В случаях, когда это целесообразно, планировщик запросов выполняет полное сканирование частичного индекса вместо полного сканирования основной таблицы.
- Разрешено использовать табличные функции в правой части оператора IN.
- Создана утилита командной строки dbhash.exe.
- Добавлены два новых интерфейса языка C: sqlite3_expanded_sql() и sqlite3_trace_v2(). Эти новые интерфейсы заменяют функции sqlite3_trace() и sqlite3_profile(), которые теперь объявлены устаревшими.
- В расширение json1 добавлена функция SQL json_quote().
- Обратный вызов authorizer отключён на время повторного разбора схемы.
- Добавлен параметр компиляции SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION; он включён по умолчанию при сборке оболочки командной строки.
Исправления ошибок:
- Исправлена команда ALTER TABLE: теперь она не повреждает индексы по убыванию при добавлении столбца в базу данных с устаревшим форматом файла. Тикет f68bf68513a1c15f
- Исправлено разыменование нулевого указателя и возможный сбой, возникавшие, когда транзитивное предложение WHERE ссылалось на несуществующую последовательность сортировки. Тикет e8d439c77685eca6.
- Улучшена оценка стоимости сканирования индекса, включающего предложение WHERE, которое можно частично или полностью вычислить по столбцам индекса без обращения к таблице. Это исправляет ухудшение производительности, возникавшее для некоторых редких запросов после появления оптимизации ORDER BY LIMIT в версии 3.12.0.
Хеш-суммы:
- SQLITE_SOURCE_ID: "2016-08-08 13:40:27 d5e98057028abcf7217d0d2b2e29bbbcdf09d6de"
- SHA1 для sqlite3.c: 234a3275d03a287434ace3ccdf1afb208e6b0e92
2016-05-18 (3.13.0)
- Операции ввода-вывода, связанные с файлами TEMP, откладываются как можно дольше в надежде полностью их избежать.
- Расширение session включено в основную ветку разработки.
- В оболочку командной строки добавлена команда ".auth ON|OFF".
- В команды ".schema" и ".fullschema" оболочки командной строки добавлена опция "--indent" для включения форматирования.
- В оболочку командной строки добавлена опция ".eqp full", которая выполняет EXPLAIN и EXPLAIN QUERY PLAN для каждого выполняемого оператора.
- Улучшена обработка имён файлов в Unicode в оболочке командной строки в Windows.
- Повышена устойчивость к неудачным решениям планировщика запросов, вызванным неполными или неверными изменениями таблицы sqlite_stat1 со стороны приложения.
- Добавлен интерфейс sqlite3_db_config(db,SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION), позволяющий включить C-API sqlite3_load_extension(), оставив функцию SQL load_extension() отключённой в целях безопасности.
- В Unix изменён алгоритм поиска временного каталога: теперь в качестве временных каталогов можно использовать каталоги с разрешениями на запись и выполнение, но без разрешения на чтение. Это же правило применяется к каталогу "." в качестве запасного варианта.
Исправления ошибок:
- Исправлена проблема с оптимизацией DELETE в один проход для нескольких строк, из-за которой вычислялись неверные результаты при наличии в предложении WHERE подзапроса, ссылающегося на самого себя. Исправление для тикета dc6ebeda9396087
- Исправлен возможный сбой сегментации при выполнении DELETE, когда таблица является таблицей rowid с INTEGER PRIMARY KEY, предложение WHERE содержит OR, а в таблице есть один или несколько индексов, способных задействовать оптимизацию OR, но ни один из индексов не ссылается на столбцы таблицы, кроме INTEGER PRIMARY KEY. Тикет 16c9801ceba49.
- При проверке возможности применения оптимизации проталкивания условия WHERE теперь проверяется, что все части составного внутреннего SELECT не являются агрегатными, а не только последняя часть. Исправление для тикета f7f8c97e97597.
- Исправлено состояние гонки при блокировке в Windows, которое могло возникать, когда два или более процесса одновременно пытались восстановить один и тот же горячий журнал.
Хеш-суммы:
- SQLITE_SOURCE_ID: "2016-05-18 10:57:30 fc49f556e48970561d7ab6a2f24fdd7d9eb81ff2"
- SHA1 для sqlite3.c: 9b9171b1e6ce7a980e6b714e9c0d9112657ad552
Исправления ошибок, перенесённые в выпуск 3.12.2 (2016-04-18):
- Исправлена проблема обратной совместимости в версиях 3.12.0 и 3.12.1: столбцы, объявленные как
"INTEGER" PRIMARY KEY(с кавычками вокруг ключевого слова типа данных), не распознавались как INTEGER PRIMARY KEY, что приводило к несовместимости файла базы данных. Тикет 7d7525cb01b68 - Исправлена ошибка (присутствовавшая начиная с версии 3.9.0), из-за которой операция DELETE могла пропускать строки при включённом параметре PRAGMA reverse_unordered_selects. Тикет a306e56ff68b8fa5
- Исправлена ошибка генератора кода, из-за которой могли возвращаться неверные результаты при соединении двух или более виртуальных таблиц, если виртуальная таблица во внешнем цикле соединения имела ограничение с оператором IN.
- Исправлена обработка отрицательных значений "PRAGMA cache_size" при определении размера кэша, используемого для сортировки больших объёмов данных.
Исправления ошибок, перенесённые в выпуск 3.12.1 (2016-04-08):
- Исправлена ошибка граничного условия, появившаяся в версии 3.12.0 и способная привести к сбою при интенсивном использовании SAVEPOINT. Тикет 7f7f8026eda38.
- Исправлена обработка представлений: теперь, когда это возможно, они наследуют типы данных столбцов таблицы, на основе которой определены.
- Исправлен планировщик запросов: теперь операторы IS и IS NULL могут использовать индекс при LEFT OUTER JOIN.
2016-04-18 (3.12.2)
- Исправлена проблема обратной совместимости в версиях 3.12.0 и 3.12.1: столбцы, объявленные как
"INTEGER" PRIMARY KEY(с кавычками вокруг ключевого слова типа данных), не распознавались как INTEGER PRIMARY KEY, что приводило к несовместимости файла базы данных. Тикет 7d7525cb01b68 - Исправлена ошибка (присутствовавшая начиная с версии 3.9.0), из-за которой операция DELETE могла пропускать строки при включённом параметре PRAGMA reverse_unordered_selects. Тикет a306e56ff68b8fa5
- Исправлена ошибка генератора кода, из-за которой могли возвращаться неверные результаты при соединении двух или более виртуальных таблиц, если виртуальная таблица во внешнем цикле соединения имела ограничение с оператором IN.
- Исправлена обработка отрицательных значений "PRAGMA cache_size" при определении размера кэша, используемого для сортировки больших объёмов данных.
Хеш-суммы:
- SQLITE_SOURCE_ID: "2016-04-18 17:30:31 92dc59fd5ad66f646666042eb04195e3a61a9e8e"
- SHA1 для sqlite3.c: de5a5898ebd3a3477d4652db143746d008b24c83
2016-04-08 (3.12.1)
- Исправлена ошибка граничного условия, появившаяся в версии 3.12.0 и способная привести к сбою при интенсивном использовании SAVEPOINT. Тикет 7f7f8026eda38.
- Исправлена обработка представлений: теперь, когда это возможно, они наследуют типы данных столбцов таблицы, на основе которой определены.
- Исправлен планировщик запросов: теперь операторы IS и IS NULL могут использовать индекс при LEFT OUTER JOIN.
Хеш-суммы:
- SQLITE_SOURCE_ID: "2016-04-08 15:09:49 fe7d3b75fe1bde41511b323925af8ae1b910bc4d"
- SHA1 для sqlite3.c: ebb18593350779850e3e1a930eb84a70fca8c1d1
2016-04-01 (3.9.3)
- Перенесена обратно простая оптимизация планировщика запросов, позволяющая оператору IS использовать индекс при LEFT OUTER JOIN. Других изменений относительно базовой версии 3.9.2 нет.
2016-03-29 (3.12.0)
- Значение SQLITE_DEFAULT_PAGE_SIZE увеличено с 1024 до 4096. Значение SQLITE_DEFAULT_CACHE_SIZE изменено с 2000 на -2000, поэтому по умолчанию используется тот же объём памяти для кэша. Дополнительную информацию см. в примечании о изменении размера страницы в версии 3.12.0.
Повышение производительности:
- Усовершенствован генератор синтаксических анализаторов Lemon: теперь он создаёт более компактный и быстрый анализатор SQL.
- Файлы главного журнала создаются, только если изменены две или более подключённые базы данных, для которых параметр PRAGMA synchronous не установлен в OFF, а параметр journal_mode не установлен в OFF, MEMORY или WAL.
- Файлы журнала операторов создаются, только когда их размер превышает пороговое значение. В противном случае журнал хранится в памяти, и операции ввода-вывода не выполняются. Пороговое значение можно задать во время компиляции с помощью SQLITE_STMTJRNL_SPILL или при запуске с помощью sqlite3_config(SQLITE_CONFIG_STMTJRNL_SPILL).
- Планировщик запросов может оптимизировать операторы IN для виртуальных таблиц, даже если метод xBestIndex не устанавливает флаг sqlite3_index_constraint_usage.omit для столбца виртуальной таблицы слева от оператора IN.
- Теперь планировщик запросов эффективнее оптимизирует обращения к виртуальным таблицам при соединении трёх или более таблиц, если ограничения виртуальной таблицы распределены между двумя или более другими таблицами соединения.
- Повышена эффективность обработки пользовательских функций SQL, особенно в случаях, когда приложение определяет сотни или тысячи пользовательских функций.
- При оценке стоимости ORDER BY планировщик запросов учитывает предложение LIMIT.
- Сценарий configure (в Unix) автоматически обнаруживает pread() и pwrite() и задаёт параметры компиляции для использования этих интерфейсов ОС, если они доступны.
- Сокращён объём памяти, необходимый для хранения схемы.
- Выполнены и другие небольшие оптимизации для повышения производительности и сокращения использования памяти.
Новые возможности:
- В sqlite3_db_config() добавлена опция SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER, позволяющая во время выполнения включать и отключать двухаргументный вариант функции SQL fts3_tokenizer().
- В расширение RBU добавлен интерфейс sqlite3rbu_bp_progress().
- Оператор PRAGMA defer_foreign_keys=ON теперь также отключает действия RESTRICT для внешних ключей.
- Добавлен интерфейс sqlite3_system_errno().
- Добавлены параметры компиляции SQLITE_DEFAULT_SYNCHRONOUS и SQLITE_DEFAULT_WAL_SYNCHRONOUS. Параметр компиляции SQLITE_DEFAULT_SYNCHRONOUS заменяет параметр SQLITE_EXTRA_DURABLE, который больше не поддерживается.
- Команда ".stats" в оболочке командной строки расширена: теперь она выводит больше сведений о производительности ввода-вывода, полученных из /proc, если они доступны.
Исправления ошибок:
- Обеспечено, чтобы значения sqlite3_set_auxdata() из нескольких триггеров в рамках одного оператора не влияли друг на друга. Тикет dc9b1c91.
- Исправлен генератор кода для выражений вида "x IN (SELECT...)", в которых оператор SELECT в правой части является коррелированным подзапросом. Тикет 5e3c886796e5512e.
- Исправлено безвредное предупреждение TSAN, связанное с интерфейсом sqlite3_db_readonly().
Хеш-суммы:
- SQLITE_SOURCE_ID: "2016-03-29 10:14:15 e9bb4cf40f4971974a74468ef922bdee481c988b"
- SHA1 для sqlite3.c: cba2be96d27cb51978cd4a200397a4ad178986eb
Потенциально существенное изменение:
2016-03-03 (3.11.1)
- Улучшены Makefile и сценарии сборки, используемые VisualStudio.
- Исправлена проблема в FTS5, из-за которой команда 'optimize' могла привести к повреждению индекса.
- Исправлено чтение за пределами буфера, которое могло возникнуть при запросе повреждённого файла базы данных с помощью FTS5.
- Максимальное значение "scope" для расширения spellfix1 увеличено с 6 до 30.
- SQLITE_SOURCE_ID: "2016-03-03 16:17:53 f047920ce16971e573bc6ec9a48b118c9de2b3a7"
- SHA1 для sqlite3.c: 3da832fd2af36eaedb05d61a8f4c2bb9f3d54265
2016-02-15 (3.11.0)
- Усовершенствован режим WAL: теперь он эффективно работает с транзакциями, размер которых превышает cache_size.
- Добавлена опция detail для FTS5.
- В PRAGMA synchronous добавлена опция "EXTRA", которая синхронизирует содержащий каталог при удалении файла журнала отката в режиме DELETE, обеспечивая повышенную надёжность. Параметр компиляции SQLITE_EXTRA_DURABLE включает PRAGMA synchronous=EXTRA по умолчанию.
- Усовершенствован планировщик запросов: теперь он может использовать покрывающий индекс как часть оптимизации OR.
- В операторах UPDATE больше не пересчитываются ограничения NOT NULL и CHECK для неизменённых столбцов.
- Выполнено множество небольших оптимизаций, благодаря которым библиотека работает быстрее предыдущего выпуска.
Улучшения оболочки командной строки:
- Теперь оболочка по умолчанию работает в режиме "auto-explain". Вывод команд EXPLAIN автоматически форматируется.
- Добавлена команда с точкой ".vfslist".
- Параметр компиляции SQLITE_ENABLE_EXPLAIN_COMMENTS теперь включён по умолчанию в стандартных сборках.
Улучшения интерфейса TCL:
- Если соединение с базой данных открыто с параметром "-uri 1", то команды "backup" и "restore" учитывают имена файлов URI.
- В команду "sqlite3" добавлена опция "-sourceid".
Улучшения Makefile:
- Улучшено обнаружение pthreads в сценариях configure.
- Добавлена возможность выполнять сборки Windows с MSVC из архива amalgamation.
Исправления ошибок
- Исправлена проблема с некорректным совместным использованием временных регистров VDBE корутинами, которая в редких случаях могла приводить к неверным результатам запросов. Тикет d06a25c84454a.
- Исправлена проблема в интерфейсе sqlite3_result_subtype(), которая при редких обстоятельствах могла приводить к сбоям расширения json1. Исправление для тикета f45ac567eaa9f9.
- В строках JSON экранируются управляющие символы. Исправление для тикета ad2559db380abf8.
- Повторно включены методы xCurrentTime и xGetLastError во встроенных VFS Unix, если не задан параметр SQLITE_OMIT_DEPRECATED.
Обратная совместимость:
- В связи с сохраняющимися проблемами безопасности двухаргументный вариант редко используемой и малоизвестной функции fts3_tokenizer() отключён, если SQLite не скомпилирована с параметром SQLITE_ENABLE_FTS3_TOKENIZER.
Хеш-суммы:
- SQLITE_SOURCE_ID: "2016-02-15 17:29:24 3d862f207e3adc00f78066799ac5a8c282430a5f"
- SHA1 для sqlite3.c: df01436c5fcfe72d1a95bc172158219796e1a90b
Общие улучшения:
2016-01-20 (3.10.2)
- В версии 3.10.0 появилась ошибка приведения регистра в операторе LIKE, исправленная этим обновлением. Тикет 80369eddd5c94.
Прочие исправления ошибок:
- Исправлено обращение к освобождённой памяти, которое могло возникать при компиляции SQLite с параметром -DSQLITE_HAS_CODEC.
- Исправлена сборка для работы с параметром -DSQLITE_OMIT_WAL.
- Исправлен сценарий configure для amalgamation: опция --readline снова работает на Raspberry Pi.
Хеш-суммы:
- SQLITE_SOURCE_ID: "2016-01-20 15:27:19 17efb4209f97fb4971656086b138599a91a75ff9"
- SHA1 для sqlite3.c: f7088b19d97cd7a1c805ee95c696abd54f01de4f
Критическое исправление ошибки:
2016-01-14 (3.10.1)
- Добавлен элемент управления файлами SQLITE_FCNTL_JOURNAL_POINTER.
Исправление ошибки:
- Исправлена ошибка планировщика запросов, существовавшая 16 месяцев и способная приводить к неверным результатам, когда скалярный подзапрос пытался использовать оптимизацию блочной сортировки. Тикет cb3aa0641d9a4.
Хеш-суммы:
- SQLITE_SOURCE_ID: "2016-01-13 21:41:56 254419c36766225ca542ae873ed38255e3fb8588"
- SHA1 для sqlite3.c: 1398ba8e4043550a533cdd0834bfdad1c9eab0f4
Новая возможность:
2016-01-06 (3.10.0)
- Добавлена поддержка операторов LIKE, GLOB и REGEXP для виртуальных таблиц.
- В sqlite3_index_info добавлено поле colUsed для использования методом sqlite3_module.xBestIndex.
- Расширена команда PRAGMA cache_spill: теперь она принимает 32-битный целочисленный параметр, задающий порог, ниже которого выгрузка кэша запрещена.
- В Unix, если открывается символическая ссылка на файл базы данных, связанные с ним файлы журналов теперь именуются на основе фактического имени файла, а не имени символической ссылки.
- В sqldiff добавлена опция "--transaction".
- Добавлен интерфейс sqlite3_db_cacheflush().
- Добавлен интерфейс sqlite3_strlike().
- При использовании ввода-вывода с отображением файла в память файл базы данных отображается только для чтения, чтобы случайные указатели и/или выходы за границы массива в приложении не могли непреднамеренно изменить файл базы данных.
- Добавлены экспериментальные интерфейсы sqlite3_snapshot_get(), sqlite3_snapshot_open() и sqlite3_snapshot_free(). В последующих выпусках они могут быть изменены или удалены.
- Расширен модификатор 'utc' в функциях даты и времени: теперь он ничего не делает, если заведомо известно, что дата/время уже указаны в UTC. (Это не нарушает совместимость, поскольку такое поведение давно документировано как «неопределённое».)
- В расширение json добавлены функции SQL json_group_array() и json_group_object().
- Добавлен параметр компиляции SQLITE_LIKE_DOESNT_MATCH_BLOBS.
- Выполнено множество небольших оптимизаций производительности.
Улучшения переносимости:
- Добавлен обходной путь для ошибки расширения знака в оптимизаторе компилятора HP C на HP/UX. (подробности)
Улучшения оболочки командной строки:
- Добавлены команды с точкой ".changes ON|OFF" и ".vfsinfo".
- При запуске в cmd.exe в Windows выполняется преобразование между MBCS и UTF8.
Улучшения Makefile:
- В различные сценарии configure, сгенерированные autoconf, добавлены параметры --enable-editline и --enable-static-shell.
- Из Makefile удалено любое использование "awk", чтобы упростить сборку для пользователей MSVC.
Важные исправления:
- Исправлены несогласованные операции сравнения целых чисел с числами с плавающей точкой, которые могли привести к повреждению индекса, если индекс создавался для столбца таблицы, содержащего большие целые числа и значения с плавающей точкой близкого порядка величины. Тикет 38a97a87a6.
- Исправлен бесконечный цикл в планировщике запросов, который мог возникнуть при обработке некорректных обобщённых табличных выражений.
- В инструмент sqldiff внесены различные исправления ошибок.
Хеш-суммы:
- SQLITE_SOURCE_ID: "2016-01-06 11:01:07 fd0a50f0797d154fefff724624f00548b5320566"
- SHA1 для sqlite3.c: b92ca988ebb6df02ac0c8f866dbf3256740408ac
Общие улучшения:
2015-11-02 (3.9.2)
- Исправлен анализатор схемы: теперь некоторые редкие и некорректно оформленные операторы CREATE TABLE интерпретируются так же, как в устаревших версиях. Исправление для тикета ac661962a2aeab3c331
- Исправлена проблема планировщика запросов, которая могла приводить к неверному результату из-за использования автоматической индексации в подзапросах предложения FROM коррелированных скалярных подзапросов. Исправление для тикета 8a2adec1.
- SQLITE_SOURCE_ID: "2015-11-02 18:31:45 bda77dda9697c463c3d0704014d51627fceee328"
- SHA1 для sqlite3.c: 1c4013876f50bbaa3e6f0f98e0147c76287684c1
2015-10-16 (3.9.1)
- Исправлено расширение json1: теперь оно не распознаёт символ перевода страницы ASCII как пробельный символ, что соответствует RFC-7159. Исправление для тикета 57eec374ae1d0a1d
- Добавлены несколько директив #ifdef и внесены изменения в сценарии сборки для решения проблем компиляции, появившихся после выпуска версии 3.9.0.
- SQLITE_SOURCE_ID: ""2015-10-16 17:31:12 767c1727fec4ce11b83f25b3f1bfcfe68a2c8b02"
- SHA1 для sqlite3.c: 5e6d1873a32d82c2cf8581f143649940cac8ae49
2015-10-14 (3.9.0)
- Правила нумерации версий SQLite пересмотрены с учетом принятого стандарта семантического версионирования.
Новые функции и улучшения:
- В дерево исходного кода и в амальгамацию добавлен модуль расширения json1. Поддержка включается с помощью параметра времени компиляции SQLITE_ENABLE_JSON1.
- В амальгамацию добавлен полнотекстовый поиск версии 5 (FTS5), включаемый с помощью SQLITE_ENABLE_FTS5. FTS5 будет считаться «экспериментальным» (возможны несовместимые изменения) как минимум еще один цикл выпуска.
- Оператор CREATE VIEW теперь принимает необязательный список имен столбцов после имени представления.
- Добавлена поддержка индексов по выражениям.
- Добавлена поддержка табличных функций в предложении FROM оператора SELECT.
- Добавлена поддержка виртуальных таблиц с одноименной функцией.
- При первоначальном создании представление VIEW теперь может ссылаться на неопределенные таблицы и функции. Отсутствующие таблицы и функции обнаруживаются при использовании VIEW в запросе.
- Добавлены интерфейсы sqlite3_value_subtype() и sqlite3_result_subtype() (используются расширением json1).
- Планировщик запросов теперь может использовать частичные индексы, содержащие условия, соединенные оператором AND в предложении WHERE.
- Утилита sqlite3_analyzer.exe обновлена: теперь она сообщает глубину каждого b-дерева и показывает средний коэффициент ветвления для индексов и таблиц WITHOUT ROWID.
- Улучшена виртуальная таблица dbstat: теперь ее можно использовать как табличную функцию, передавая в качестве аргумента схему для анализа.
Другие изменения:
- Интерфейс sqlite3_memory_alarm(), объявленный устаревшим и не документировавшийся в течение 8 лет, превращен в пустую операцию.
Важные исправления:
- Исправлена критическая ошибка в расширении шифрования SQLite, из-за которой база данных могла стать нечитаемой и не подлежащей восстановлению, если команда VACUUM изменяла размер nonce шифрования.
- В реализацию sqlite3_initialize() добавлен барьер памяти, чтобы гарантировать потокобезопасность.
- Исправлена оптимизация OR: теперь она всегда игнорирует подпланы, не использующие индекс.
- Оптимизация проталкивания условия WHERE вниз не применяется к условиям, происходящим из предложений ON или USING оператора LEFT JOIN. Исправление для заявки c2a19d81652f40568c.
- SQLITE_SOURCE_ID: "2015-10-14 12:29:53 a721fc0d89495518fe5612e2e3bbc60befd2e90d"
- SHA1 для sqlite3.c: c03e47e152ddb9c342b84ffb39448bf4a2bd4288
Изменения политики:
2015-07-29 (3.8.11.1)
- Восстановлен недокументированный побочный эффект PRAGMA cache_size: принудительный разбор схемы базы данных, если к базе данных ранее не обращались.
- Исправлена давняя проблема в sqlite3_changes() для таблиц WITHOUT ROWID, о которой сообщили через несколько часов после выпуска версии 3.8.11.
- SQLITE_SOURCE_ID: "2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f"
- SHA1 для sqlite3.c: 3be71d99121fe5b17f057011025bcf84e7cc6c84
2015-07-27 (3.8.11)
- Добавлено экспериментальное расширение RBU. Обратите внимание: это расширение экспериментальное, и в него могут вноситься несовместимые изменения.
- Добавлено экспериментальное расширение FTS5. Обратите внимание: это расширение экспериментальное, и в него могут вноситься несовместимые изменения.
- Добавлены интерфейсы sqlite3_value_dup() и sqlite3_value_free().
- В расширение spellfix1 добавлена поддержка предложений ON CONFLICT.
- Оператор IS теперь может использовать индексы.
- Улучшен планировщик запросов: теперь он допускает автоматическую индексацию подзапросов предложения FROM, реализованных с помощью сопрограммы.
- Запрещено использование "rowid" в обобщенных табличных выражениях.
- Добавлена команда PRAGMA cell_size_check для более раннего и эффективного обнаружения повреждения файла базы данных.
- В функцию matchinfo() в FTS3 добавлен флаг 'b' функции matchinfo.
- Улучшено фазз-тестирование файлов баз данных и исправлены обнаруженные проблемы.
- Добавлена тестовая программа fuzzcheck; теперь она автоматически запускается с использованием тестовых случаев SQL и баз данных при выполнении команды "make test".
- Добавлен статический мьютекс SQLITE_MUTEX_STATIC_VFS1, который используется в VFS для Windows.
- Обратный вызов sqlite3_profile() вызывается (функциями sqlite3_reset() или sqlite3_finalize()) для операторов, выполнение которых не завершилось.
- Улучшен кэш страниц: теперь он может предварительно выделять блок памяти для исходного набора строк кэша страниц. По умолчанию предварительно выделяется память для 100 страниц. Это повышает производительность типичных рабочих нагрузок примерно на 5%.
- Различные микрооптимизации обеспечивают на 22,3% больше работы за то же число циклов ЦП по сравнению с предыдущим выпуском. SQLite теперь работает вдвое быстрее, чем в версии 3.8.0, и втрое быстрее, чем в версии 3.3.9. (Измерено с помощью cachegrind на рабочей нагрузке speedtest1.c в Ubuntu 14.04 x64 с gcc 4.8.2 и -Os. Ваша производительность может отличаться.)
- Добавлены интерфейсы sqlite3_result_zeroblob64() и sqlite3_bind_zeroblob64().
Важные исправления ошибок:
- Исправлена команда CREATE TABLE AS: столбцы типа TEXT больше никогда не содержат значения типа INT. Заявка f2ad7de056ab1dc9200
- Исправлена команда CREATE TABLE AS: если оператор SELECT в правой части завершается с ошибкой, в таблице sqlite_master больше не остаются записи NULL. Заявка 873cae2b6e25b
- Исправлена оптимизация пропуска сканирования: теперь она правильно работает при использовании оптимизации OR для таблиц WITHOUT ROWID. Заявка 8fd39115d8f46
- Исправлены интерфейсы sqlite3_memory_used() и sqlite3_memory_highwater(): теперь они действительно возвращают 64-разрядное значение.
Хеши:
- SQLITE_SOURCE_ID: "2015-07-27 13:49:41 b8e92227a469de677a66da62e4361f099c0b79d0"
- SHA1 для sqlite3.c: 719f6891abcd9c459b5460b191d731cd12a3643e
2015-05-20 (3.8.10.2)
- Исправлена проблема повреждения индекса, появившаяся в версии 3.8.7. Индекс с ключом TEXT мог повреждаться при выполнении INSERT в соответствующую таблицу, если в таблице были два вложенных триггера, преобразующих значение ключа в INTEGER, а затем обратно в TEXT. Заявка 34cd55d68e0
- SQLITE_SOURCE_ID: "2015-05-20 18:17:19 2ef4f3a5b1d1d0c4338f8243d40a2452cc1f7fe4"
- SHA1 для sqlite3.c: 638abb77965332c956dbbd2c8e4248e84da4eb63
2015-05-09 (3.8.10.1)
- Обеспечена корректная работа sqlite3_compileoption_used() с параметром времени компиляции SQLITE_ENABLE_DBSTAT_VTAB.
- Исправлено безвредное предупреждение в оболочке командной строки для некоторых версий MSVC.
- Исправлены незначительные проблемы с виртуальной таблицей dbstat.
- SQLITE_SOURCE_ID: "2015-05-09 12:14:55 05b4b1f2a937c06c90db70c09890038f6c98ec40"
- SHA1 для sqlite3.c: 85e4e1c08c7df28ef61bb9759a0d466e0eefbaa2
2015-05-07 (3.8.10)
- Добавлена утилита sqldiff.exe для вычисления различий между двумя файлами баз данных SQLite.
- В функцию matchinfo() в FTS3 добавлен флаг matchinfo y.
- Повышена производительность операций ORDER BY, VACUUM, CREATE INDEX, PRAGMA integrity_check и PRAGMA quick_check.
- Исправлено множество малозаметных проблем, обнаруженных при фазз-тестировании SQL.
- В документации интерфейсов указаны все методы для важных объектов. (пример)
- Фаззер American Fuzzy Lop стал стандартной частью стратегии тестирования SQLite.
- В оболочку командной строки добавлены команды ".binary" и ".limits".
- Виртуальная таблица dbstat включается в стандартные сборки при компиляции с параметром SQLITE_ENABLE_DBSTAT_VTAB.
- SQLITE_SOURCE_ID: "2015-05-07 11:53:08 cf975957b9ae671f34bb65f049acf351e650d437"
- SHA1 для sqlite3.c: 0b34f0de356a3f21b9dfc761f3b7821b6353c570
2015-04-08 (3.8.9)
- VxWorks-7 добавлена в список официально поддерживаемых и тестируемых платформ.
- Добавлен интерфейс sqlite3_status64().
- Исправлен учет объема памяти: теперь он работает, даже если SQLite использует более 2 ГиБ памяти.
- Добавлена команда PRAGMA index_xinfo.
- Исправлена потенциальная проблема переполнения 32-разрядного целого числа в интерфейсах sqlite3_blob_read() и sqlite3_blob_write().
- Гарантирован автоматический сброс подготовленных операторов при расширенных кодах ошибок SQLITE_BUSY и SQLITE_LOCKED, даже если сборка выполнена с параметром SQLITE_OMIT_AUTORESET.
- Исправлены неверные подсчеты в утилите sqlite3_analyzer.exe, связанные с таблицами WITHOUT ROWID.
- В оболочку командной строки добавлена команда ".dbinfo".
- Повышена производительность запросов fts3/4, использующих оператор OR и хотя бы одну вспомогательную функцию fts.
- Исправлена ошибка в функции fts3 snippet(), из-за которой из фрагментов, начинающихся с первого токена столбца, удалялись начальные разделители.
- SQLITE_SOURCE_ID: "2015-04-08 12:16:33 8a8ffc862e96f57aa698f93de10dee28e69f6e09"
- SHA1 для sqlite3.c: 49f1c3ae347e1327b5aaa6c7f76126bdf09c6f42
2015-02-25 (3.8.8.3)
- Исправлена ошибка (заявка 2326c258d02ead33), которая могла приводить к неверным результатам, если условие отбора частичного индекса находилось в предложении ON оператора LEFT JOIN.
- В сборки оболочки командной строки для Unix добавлена возможность связывания с библиотекой редактирования командной строки "linenoise".
- SQLITE_SOURCE_ID: "2015-02-25 13:29:11 9d6c1880fb75660bbabd693175579529785f8a6b"
- SHA1 для sqlite3.c: 74ee38c8c6fd175ec85a47276dfcefe8a262827a
2015-01-30 (3.8.8.2)
- Улучшен интерфейс sqlite3_wal_checkpoint_v2(TRUNCATE): теперь он усекает файл WAL, даже если выполнять контрольную точку не требуется.
- SQLITE_SOURCE_ID: "2015-01-30 14:30:45 7757fc721220e136620a89c9d28247f28bbbc098"
- SHA1 для sqlite3.c: 85ce79948116aa9a087ec345c9d2ce2c1d3cd8af
2015-01-20 (3.8.8.1)
- Исправлена ошибка в логике сортировки, присутствовавшая начиная с версии 3.8.4: при запросах с предложениями ORDER BY и LIMIT, содержащих примерно 60 или более столбцов в результирующем наборе, вывод мог появляться в неправильном порядке. Заявка f97c4637102a3ae72b79.
- SQLITE_SOURCE_ID: "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55"
- SHA1 для sqlite3.c: 33987fb50dcc09f1429a653d6b47672f5a96f19e
2015-01-16 (3.8.8)
- Добавлена команда PRAGMA data_version, позволяющая определить, был ли файл базы данных изменен другим процессом.
- В интерфейс sqlite3_wal_checkpoint_v2() добавлен параметр SQLITE_CHECKPOINT_TRUNCATE; соответствующие улучшения внесены и в PRAGMA wal_checkpoint.
- Добавлен интерфейс sqlite3_stmt_scanstatus(), доступный только при компиляции с параметром SQLITE_ENABLE_STMT_SCANSTATUS.
- Функция sqlite3_table_column_metadata() усовершенствована: теперь она корректно работает с таблицами WITHOUT ROWID и проверяет существование таблицы, если параметр имени столбца равен NULL. Теперь этот интерфейс также включен в сборку по умолчанию без необходимости указывать параметр времени компиляции SQLITE_ENABLE_COLUMN_METADATA.
- Добавлен параметр времени компиляции SQLITE_ENABLE_API_ARMOR.
- Добавлен параметр времени компиляции SQLITE_REVERSE_UNORDERED_SELECTS.
- Добавлен параметр времени компиляции SQLITE_SORTER_PMASZ и параметр запуска SQLITE_CONFIG_PMASZ.
- В sqlite3_config() добавлен параметр SQLITE_CONFIG_PCACHE_HDRSZ, позволяющий приложениям проще определять подходящий объем памяти для использования с SQLITE_CONFIG_PAGECACHE.
- Число строк в предложении VALUES больше не ограничивается параметром SQLITE_LIMIT_COMPOUND_SELECT.
- Добавлено расширение eval.c, загружаемое с помощью механизма загрузки расширений. Оно реализует функцию SQL eval(), рекурсивно вычисляющую SQL.
Повышение производительности:
- Сокращено число операций memcpy(), необходимых для балансировки b-дерева; общая производительность повысилась на 3,2%.
- Улучшены оценки стоимости для оптимизации пропуска сканирования.
- Оптимизация автоматической индексации теперь при необходимости может создавать частичный индекс.
Исправления ошибок:
- Обеспечена сохранность данных при отключении питания в режиме "PRAGMA journal_mode=TRUNCATE": сразу после усечения файла журнала вызывается fsync().
- Планировщик запросов теперь учитывает, что любой столбец в правой таблице LEFT JOIN может содержать NULL, даже если для этого столбца задано ограничение NOT NULL. В таких случаях тесты на NULL не оптимизируются. Исправление для заявки 6f2222d550f5b0ee7ed.
- Гарантировано, что ORDER BY упорядочивает строки по возрастанию, даже если оператор DISTINCT реализован с использованием убывающего индекса. Исправление для заявки c5ea805691bfc4204b1cb9e.
- Исправлены состояния гонки, которые могли возникать при нагрузке с большим количеством потоков в режиме общего кэша, когда некоторые потоки открывают и закрывают соединения.
- Исправлены редкие сбои, обнаруженные с помощью american fuzzy lop. Заявка a59ae93ee990a55.
- Добавлен обходной путь для ошибки оптимизатора GCC (gcc 4.2.1 в MacOS 10.7), из-за которой расширение R-Tree вычисляло неверные результаты при компиляции с -O3.
Другие изменения:
- Использование библиотечной функции C strchrnul() отключено, если она явно не включена с помощью параметра времени компиляции -DHAVE_STRCHRNULL.
- Улучшены эффективность и точность вспомогательных функций-подсказок SQL likelihood(), likely() и unlikely().
- SQLITE_SOURCE_ID: "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
- SHA1 для sqlite3.c: 91aea4cc722371d58aae3d22e94d2a4165276905
Новые функции:
2014-12-09 (3.8.7.4)
- Исправление ошибки: добавлен мьютекс, пропущенный в предыдущем выпуске.
- SQLITE_SOURCE_ID: "2014-12-09 01:34:36 f66f7a17b78ba617acde90fc810107f34f1a1f2e"
- SHA1 для sqlite3.c: 0a56693a3c24aa3217098afab1b6fecccdedfd23
2014-12-05 (3.8.7.3)
- Исправление ошибки: обеспечено, что кэшированные объекты KeyInfo (внутреннее представление, невидимое приложению) не устаревают при работе в режиме общего кэша, если одни соединения с базой данных часто закрываются и открываются повторно, а другие соединения с той же общей кэш-памятью остаются открытыми. Заявка e4a18565a36884b00edf.
- Исправление ошибки: учтено, что любой столбец в правой таблице LEFT JOIN может содержать NULL, даже если для него задано ограничение NOT NULL. Не применяются оптимизации, предполагающие, что столбец никогда не содержит NULL. Заявка 6f2222d550f5b0ee7ed.
- SQLITE_SOURCE_ID: "2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86"
- SHA1 для sqlite3.c: 3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
2014-11-18 (3.8.7.2)
- Улучшена команда ROLLBACK: ожидающим запросам теперь разрешено продолжать выполнение, пока схема остается неизменной. Раньше ROLLBACK приводил к сбою всех ожидающих запросов с ошибкой SQLITE_ABORT или SQLITE_ABORT_ROLLBACK. Эта ошибка по-прежнему возвращается, если ROLLBACK изменяет схему.
- Исправление ошибки: обеспечено, что результаты NULL от OP_Column полностью и без остатка являются NULL и не имеют установленного бита MEM_Ephem. Заявка 094d39a4c95ee4.
- Исправление ошибки: формат %c в sqlite3_mprintf() теперь поддерживает точность больше 70.
- Исправление ошибки: ключевое слово DISTINCT больше не удаляется автоматически из SELECT, образующего правую часть оператора IN, поскольку оно необходимо, если SELECT также содержит LIMIT. Заявка db87229497.
- SQLITE_SOURCE_ID: "2014-11-18 20:57:56 2ab564bf9655b7c7b97ab85cafc8a48329b27f93"
- SHA1 для sqlite3.c: b2a68d5783f48dba6a8cb50d8bf69b238c5ec53a
2014-10-29 (3.8.7.1)
- В режиме PRAGMA journal_mode=TRUNCATE вызов fsync() выполняется сразу после усечения файла журнала, чтобы гарантировать сохранность транзакции при отключении питания.
- Исправлен сбой проверки утверждения, который мог возникать при обновлении значения NULL в последнем столбце таблицы, добавленном с помощью ALTER TABLE ADD COLUMN.
- Функция strchrnul() из стандартной библиотеки C не используется, если не задан параметр времени компиляции HAVE_STRCHRNULL.
- Исправлены две проблемы, связанные с выполнением UPDATE или DELETE для представления VIEW, если в предложении WHERE используется rowid.
- SQLITE_SOURCE_ID: "2014-10-29 13:59:56 3b7b72c4685aa5cf5e675c2c47ebec10d9704221"
- SHA1 для sqlite3.c: 2d25bd1a73dc40f538f3a81c28e6efa5999bdf0c
2014-10-17 (3.8.7)
- Множество микрооптимизаций обеспечивают на 20,3% больше работы за то же число циклов ЦП по сравнению с предыдущим выпуском. Совокупный прирост производительности с версии 3.8.0 составляет 61%. (Измерено с помощью cachegrind на рабочей нагрузке speedtest1.c в Ubuntu 13.10 x64 с gcc 4.8.1 и -Os. Ваша производительность может отличаться.)
- Сортировщик может использовать вспомогательные потоки для повышения быстродействия. По умолчанию эта функция отключена; ее можно включить с помощью команды PRAGMA threads или параметра времени компиляции SQLITE_DEFAULT_WORKER_THREADS.
- Улучшена оптимизация пропуска сканирования: теперь она может пропускать элементы индекса, расположенные в середине индекса, а не только в его левой части.
- Улучшена оптимизация операторов CAST.
- Улучшено использование планировщиком запросов сведений sqlite_stat4 для оценки стоимости планов.
Новые функции:
- Добавлены новые интерфейсы с 64-разрядными параметрами длины: sqlite3_malloc64(), sqlite3_realloc64(), sqlite3_bind_blob64(), sqlite3_result_blob64(), sqlite3_bind_text64() и sqlite3_result_text64().
- Добавлен новый интерфейс sqlite3_msize(), возвращающий размер области памяти, выделенной с помощью sqlite3_malloc64() и ее вариантов.
- В sqlite3_limit() добавлен параметр SQLITE_LIMIT_WORKER_THREADS, а в команду PRAGMA threads — настройка числа доступных рабочих потоков.
- Расширение spellfix1 позволяет приложению при необходимости указывать rowid для каждой операции INSERT.
- Добавлено расширение аутентификации пользователей.
Исправления ошибок:
- Исправлена ошибка в реализации частичных индексов, которая могла приводить к неверному результату, если частичный индекс использовался в подзапросе или представлении. Заявка 98d973b8f5.
- Исправлена ошибка планировщика запросов, из-за которой таблица могла сканироваться в неправильном направлении (и порядок вывода менялся на обратный), если для реализации предложения ORDER BY использовался индекс DESC в запросе с таким же предложением GROUP BY. Заявка ba7cbfaedc7e6.
- Исправлена ошибка в sqlite3_trace(), из-за которой иногда не выводился оператор SQL, если его требовалось подготовить повторно. Заявка 11d5aa455e0d98f3c1e6a08
- Исправлен некорректный оператор assert(). Заявка 369d57fb8e5ccdff06f1
Изменения в тестировании, отладке и анализе:
- При компиляции с параметрами SQLITE_DEBUG, SQLITE_ENABLE_SELECTTRACE и SQLITE_ENABLE_WHERETRACE в оболочке командной строки с помощью команд ".selecttrace" и ".wheretrace" выводятся ASCII-схемы абстрактного синтаксического дерева. Также добавлены точки входа sqlite3TreeViewExpr() и sqlite3TreeViewSelect(), которые можно вызвать из отладчика, чтобы вывести дерево разбора при остановке на точке останова.
- Прекращена поддержка SQLITE_ENABLE_TREE_EXPLAIN. Механизм SELECTTRACE предоставляет более полезную диагностическую информацию.
- В оболочку командной строки добавлены параметры настройки использования вспомогательной памяти: --pagecache, --lookaside и --scratch.
- SQLITE_SOURCE_ID: "2014-10-17 11:24:17 e4ab094f8afce0817f4074e823fabe59fc29ebb4"
- SHA1 для sqlite3.c: 56dcf5e931a9e1fa12fc2d600cd91d3bf9b639cd
Повышение производительности:
2014-08-15 (3.8.6)
- В синтаксический анализатор SQL добавлена поддержка шестнадцатеричных целочисленных литералов. (Например: 0x123abc)
- Команда PRAGMA integrity_check усовершенствована: теперь она обнаруживает нарушения ограничений UNIQUE и NOT NULL.
- Максимальное значение SQLITE_MAX_ATTACHED увеличено с 62 до 125.
- В режиме WAL тайм-аут перед выдачей ошибки SQLITE_PROTOCOL увеличен с 1 до 10 секунд.
- Добавлена функция SQL likely(X).
- Токенизатор unicode61 теперь включен в FTS4 по умолчанию.
- При запуске ANALYZE инициируется автоматическая повторная подготовка всех подготовленных операторов.
- В дерево исходного кода добавлен новый файл с исходным кодом загружаемого расширения: fileio.c
- В оболочку командной строки добавлены функции расширения readfile(X) и writefile(X,Y) (с использованием кода, скопированного из fileio.c в предыдущем пункте).
- В оболочку командной строки добавлена точечная команда .fullschema.
Повышение производительности:
- Отключено ключевое слово DISTINCT в подзапросах, находящихся в правой части оператора IN.
- Добавлена возможность вычислять оператор IN как последовательность сравнений вместо поиска в таблице. Последовательность сравнений используется в случаях, когда она, вероятно, работает быстрее, например, если правая часть оператора IN мала и/или часто меняется.
- Планировщик запросов теперь использует сведения sqlite_stat4 (создаваемые командой ANALYZE), чтобы определять, подходит ли оптимизация пропуска сканирования.
- Гарантировано, что планировщик запросов не пытается использовать созданный им временный индекс вместо индекса, определенного схемой.
- Внесены другие небольшие изменения для повышения качества кода VDBE.
Исправления ошибок:
- Исправлена ошибка в CREATE UNIQUE INDEX, появившаяся при добавлении поддержки WITHOUT ROWID в версии 3.8.2: она позволяла создавать UNIQUE-индекс для столбца NOT NULL, значения которого не уникальны. Заявка 9a6daf340df99ba93c
- Исправлена ошибка в расширении R-Tree, появившаяся в предыдущем выпуске: она могла приводить к неверным результатам запросов, в которых rowid R-Tree находится в левой части оператора IN. Заявка d2889096e7bdeac6.
- Исправлен интерфейс sqlite3_stmt_busy(): теперь он возвращает правильный результат для операторов ROLLBACK, выполнение которых началось, но которые так и не были сброшены.
- Исправлена ошибка, из-за которой происходило разыменование нулевого указателя, если для столбца со значением DEFAULT, являющимся агрегатной функцией, пытались использовать значение DEFAULT. Заявка 3a88d85f36704eebe1
- Вывод CSV из оболочки командной строки теперь всегда использует CRLF в качестве разделителя строк и не вставляет CR перед символами NL, содержащимися в данных.
- Исправлена проблема с типом столбца в операторе IN. Заявка 9a8b09f8e6.
- Исправлена команда ANALYZE: теперь она добавляет правильные выборки для таблиц WITHOUT ROWID в таблицу sqlite_stat4. Заявка b2fa5424e6fcb15.
- SQLITE_SOURCE_ID: "2014-08-15 11:46:33 9491ba7d738528f168657adb43a198238abde19e"
- SHA1 для sqlite3.c: 72c64f05cd9babb9c0f9b3c82536d83be7804b1c
2014-06-04 (3.8.5)
- Добавлена поддержка частичной сортировки по индексу.
- Улучшен планировщик запросов: теперь он всегда предпочитает индекс, использующий надмножество условий предложения WHERE по сравнению с другим индексом.
- Улучшена команда automerge для FTS4, позволяющая лучше контролировать размер полнотекстового индекса, в который вносится большое количество изменений.
- В расширение R-Tree добавлен интерфейс sqlite3_rtree_query_callback()
- Добавлены новые параметры URI-запроса "nolock" и "immutable".
- Используется меньше памяти: для подключений к базам данных только для чтения больше не запоминаются ограничения CHECK.
- Для таблиц WITHOUT ROWID включена оптимизация OR.
- Выражения вида "x IN (?)" (с одним значением в списке справа от оператора IN) обрабатываются так же, как "x==?". Аналогично оптимизировано "x NOT IN (?)".
- В оболочку командной строки добавлены команды ".system" и ".once".
- Бит SQLITE_IOCAP_IMMUTABLE добавлен в набор битов, которые может возвращать метод xDeviceCharacteristics объекта VFS.
- Добавлен тестовый параметр SQLITE_TESTCTRL_BYTEORDER.
Исправления ошибок:
- Предложение OFFSET игнорировалось в запросах без предложения FROM. Заявка 07d6a0453d
- Сбой проверки утверждения в запросах с выражениями вида "x IN (?)". Заявка e39d032577.
- Возвращался неверный тип данных столбца. Заявка a8a0d2996a
- При запросе к таблице более чем с 16 индексами, каждый из которых создан для отдельного столбца и используется в условиях, связанных через OR, возвращалась повторная строка. Заявка 10fb063b11
- Частичный индекс вызывал сбой проверки утверждения при UPDATE OR REPLACE. Заявка 2ea3e9fe63
- Сбой при вызове недокументированной SQL-функции sqlite_rename_parent() с параметрами NULL. Заявка 264b970c43
- ORDER BY игнорировалось, если в запросе было идентичное GROUP BY. Заявка b75a9ca6b0
- SQL-функция group_concat(x,'') возвращала NULL вместо пустой строки, если все входные значения были пустыми строками. Заявка 55746f9e65
- Исправлена ошибка в генераторе кода VDBE, вызывавшая сбой при выполнении оператора INSERT INTO ... SELECT, если число вставляемых столбцов превышало число столбцов в целевой таблице. Заявка e9654505cfd
- Исправлена ошибка импорта CSV в оболочке командной строки: если самое левое поле первой строки CSV-файла было нулевой длины и не заключено в кавычки, данные не импортировались.
- Исправлена ошибка в FTS4: индексировался не тот столбец, если имя столбца notindexed было префиксом имени самого левого столбца; вместо этого должен был индексироваться столбец с точным совпадением имени.
- Исправлен интерфейс sqlite3_db_readonly(): теперь он возвращает true, если база данных доступна только для чтения из-за слишком большого номера версии записи в формате файла.
- SQLITE_SOURCE_ID: "2014-06-04 14:06:34 b1ed4f2a34ba66c29b130f8d13e9092758019212"
- SHA1 для sqlite3.c: 7bc194957238c61b1a47f301270286be5bc5208c
2014-04-03 (3.8.4.3)
- Добавлено исправление из одного символа для проблемы, которая могла привести к неверным результатам запроса, сочетающего DISTINCT, GROUP BY во вложенном запросе и ORDER BY. Заявка 98825a79ce14.
- SQLITE_SOURCE_ID: "2014-04-03 16:53:12 a611fa96c4a848614efe899130359c9f6fb889c3"
- SHA1 для sqlite3.c: 310a1faeb9332a3cd8d1f53b4a2e055abf537bdc
2014-03-26 (3.8.4.2)
- Исправлено потенциальное чтение за пределами буфера, которое могло произойти при попытке поиска в повреждённом файле базы данных.
- SQLITE_SOURCE_ID: "2014-03-26 18:51:19 02ea166372bdb2ef9d8dfbb05e78a97609673a8e"
- SHA1 для sqlite3.c: 4685ca86c2ea0649ed9f59a500013e90b3fe6d03
2014-03-11 (3.8.4.1)
- Добавлено обходное решение конфликта макросов препроцессора C, из-за которого сборка завершалась ошибкой в некоторых конфигурациях Microsoft Visual Studio.
- При вычислении стоимости оптимизации пропуска сканирования учитывается необходимость выполнения нескольких поисков.
- SQLITE_SOURCE_ID: "2014-03-11 15:27:36 018d317b1257ce68a92908b05c9c7cf1494050d0"
- SHA1 для sqlite3.c: d5cd1535053a50aa8633725e3595740b33709ac5
2014-03-10 (3.8.4)
- Оптимизация и рефакторинг кода для повышения производительности.
- В оболочку командной строки добавлены команды ".clone" и ".save".
- Обновлён приветственный баннер оболочки командной строки: он предупреждает начинающих пользователей о том, что они работают с временной базой данных в памяти.
- Исправлена поддержка editline в оболочке командной строки.
- Добавлена поддержка проверки покрытия программ VDBE с помощью команды SQLITE_TESTCTRL_VDBE_COVERAGE функции sqlite3_test_control().
- Обновлён макрос _FILE_OFFSET_BITS, чтобы сборки снова работали в QNX.
- Тип SrcList.nSrc изменён с u8 на int для обхода проблемы компилятора C в AIX.
- Включена загрузка расширений в Cygwin.
- Исправление ошибки: SQL-функция char() теперь возвращает пустую строку, а не ошибку "out of memory", если вызвана без аргументов.
- Исправление ошибки: DISTINCT теперь распознаёт, что zeroblob и blob, состоящий только из байтов 0x00, — одно и то же. Заявка [fccbde530a]
- Исправление ошибки: вычисляется правильный результат для запросов, содержащих условие IS NOT NULL и условие OR в предложении WHERE, если они скомпилированы с SQLITE_ENABLE_STAT4. Заявка [4c86b126f2]
- Исправление ошибки: столбцы "rowid" теперь правильно разрешаются в соединениях обычных таблиц и таблиц WITHOUT ROWID. Заявка [c34d0557f7]
- Исправление ошибки: в параллельных сопрограммах, используемых для реализации составных операторов SELECT с предложениями ORDER BY, больше не используются одни и те же временные регистры, поскольку это могло приводить к неверным результатам. Заявка [8c63ff0eca]
- Исправление ошибки: предложения "ORDER BY random()" больше не исключаются при оптимизации. Заявка [65bdeb9739]
- Исправление ошибки: устранена ошибка разрешения имён, которая могла возникать во вложенных операторах SELECT внутри TRIGGER. Заявка [4ef7e3cfca]
- Исправление ошибки: выражения значений по умолчанию для столбцов вида "DEFAULT(-(-9223372036854775808))" теперь работают правильно и инициализируют столбец значением с плавающей точкой, приблизительно равным +9223372036854775808.0.
- SQLITE_SOURCE_ID: "2014-03-10 12:20:37 530a1ee7dc2435f80960ce4710a3c2d2bfaaccc5"
- SHA1 для sqlite3.c: b0c22e5f15f5ba2afd017ecd990ea507918afe1c
2014-02-11 (3.8.3.1)
- Исправлена ошибка (заявка 4c86b126f2), из-за которой в некоторых запросах с условиями OR и операторами IS NOT NULL в предложении WHERE пропадали строки при использовании параметров компиляции SQLITE_ENABLE_STAT3 или SQLITE_ENABLE_STAT4.
- Исправлено безвредное предупреждение компилятора, вызывавшее проблемы в VS2013.
- SQLITE_SOURCE_ID: "2014-02-11 14:52:19 ea3317a4803d71d88183b29f1d3086f46d68a00e"
- SHA1 для sqlite3.c: 990004ef2d0eec6a339e4caa562423897fe02bf0
2014-02-03 (3.8.3)
- Добавлена поддержка обобщённых табличных выражений и предложения WITH.
- Добавлена SQL-функция printf().
- SQLITE_DETERMINISTIC добавлен как необязательный бит в 4-й аргумент sqlite3_create_function() и связанных интерфейсов. Это позволяет приложениям создавать новые функции, которые можно вынести из внутренних циклов, если их аргументы постоянны.
- Добавлен код ошибки SQLITE_READONLY_DBMOVED, возвращаемый в начале транзакции и указывающий, что файл базы данных был переименован или перемещён из-под SQLite.
- В аргументе имени файла для ATTACH разрешены произвольные выражения, в том числе вызовы функций и вложенные запросы.
- Предложение VALUES разрешено использовать везде, где допустим оператор SELECT.
- Состояние ГПСЧ, используемого sqlite3_randomness(N,P), обновляется при вызове с N==0. В Unix автоматическое обновление выполняется после fork().
- Улучшена виртуальная таблица spellfix1: теперь она может эффективно выполнять поиск по rowid.
- Повышена производительность.
- Улучшены комментарии в отображении байт-кода VDBE при выполнении EXPLAIN.
- В генератор синтаксических анализаторов Lemon добавлена директива "%token_class", используемая для упрощения грамматики.
- Исходный код Lemon изменён так, чтобы не вызывать функции библиотеки C, которые OpenBSD считает опасными (например, sprintf).
- Исправление ошибки: при импорте CSV в оболочке командной строки поле не завершается, если экранированная двойная кавычка встречается в конце строки CRLN.
- SQLITE_SOURCE_ID: "2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538"
- SHA1 для sqlite3.c: 98a07da78f71b0275e8d9c510486877adc31dbee
2013-12-06 (3.8.2)
- Изменено определённое поведение выражения CAST: при преобразовании в целые числа значений с плавающей точкой больше +9223372036854775807 результатом теперь будет наибольшее возможное целое число, +9223372036854775807, а не наименьшее возможное целое число, -9223372036854775808. После этого изменения CAST(9223372036854775809.0 as INT) возвращает +9223372036854775807 вместо -9223372036854775808. ← Потенциально несовместимое изменение!
- Добавлена поддержка таблиц WITHOUT ROWID.
- В планировщик запросов добавлена оптимизация пропуска сканирования.
- Расширен интерфейс виртуальных таблиц, в частности объект sqlite3_index_info, чтобы виртуальная таблица могла сообщать оценочное число строк, которое вернёт запрос.
- Расширение R-Tree обновлено для использования улучшенного интерфейса виртуальных таблиц.
- Добавлен параметр компиляции SQLITE_ENABLE_EXPLAIN_COMMENTS.
- Улучшены комментарии, добавляемые в вывод EXPLAIN при включённом параметре компиляции SQLITE_ENABLE_EXPLAIN_COMMENTS.
- Повышена производительность VDBE, особенно кода операции OP_Column.
- Постоянные подвыражения выносятся из внутренних циклов в код инициализации подготовленных операторов.
- Улучшено форматирование вывода ".explain" в оболочке командной строки: циклы отступами выделяются так, чтобы лучше показать структуру программы.
- Улучшена функция ".timer" в оболочке командной строки: теперь она показывает также реальное время, помимо системного и пользовательского времени.
- SQLITE_SOURCE_ID: "2013-12-06 14:53:30 27392118af4c38c5203a04b8013e1afdb1cebd0d"
- SHA1 для sqlite3.c: 6422c7d69866f5ea3db0968f67ee596e7114544e
2013-10-17 (3.8.1)
- Добавлены SQL-функции unlikely() и likelihood(), используемые как подсказки для планировщика запросов.
- Улучшения планировщика запросов:
- Учитывается, что условия WHERE, которые нельзя использовать с индексами, всё равно, вероятно, сокращают число выходных строк.
- Оценивается размер строк таблиц и индексов; для полных сканирований и операций "count(*)" используется наименьшее подходящее B-дерево.
- Добавлена прагма soft_heap_limit.
- Добавлена поддержка SQLITE_ENABLE_STAT4.
- Добавлена поддержка параметров "sz=NNN" в конце полей sqlite_stat1.stat, указывающих среднюю длину строк таблиц и индексов в байтах.
- Проверки ограничений внешних ключей при UPDATE не выполняются, если ни один из изменённых столбцов не связан с внешними ключами.
- Добавлен параметр компиляции SQLITE_MINIMUM_FILE_DESCRIPTOR.
- В Windows добавлена VFS win32-longpath, допускающая имена файлов длиной до 32 тысяч символов.
- Функции даты и времени улучшены: текущее время (например, julianday('now')) теперь одинаково при нескольких вызовах функции в рамках одного вызова sqlite3_step().
- Добавлено расширение "totype.c", реализующее SQL-функции tointeger() и toreal().
- Запросы FTS4 теперь эффективнее используют ограничения docid<$limit, чтобы сократить объём операций ввода-вывода.
- В виртуальную таблицу fts4aux добавлен скрытый столбец languageid для fts4aux.
- Команда VACUUM уплотняет базу данных примерно на 1% сильнее.
- Утилита sqlite3_analyzer обновлена: улучшены описания и вычисляется более точная оценка для "Non-sequential pages".
- Реализация операторов PRAGMA переработана для повышения скорости разбора.
- Каталог для временных файлов в Unix теперь можно задать с помощью переменной окружения SQLITE_TMPDIR, которая имеет приоритет над переменной окружения TMPDIR. Однако глобальная переменная sqlite3_temp_directory по-прежнему имеет более высокий приоритет, чем обе переменные окружения.
- Добавлен оператор PRAGMA stats.
- Исправление ошибки: возвращается правильный результат для "SELECT count(*) FROM table", даже если в таблице есть частичный индекс. Заявка a5c8ed66ca.
- SQLITE_SOURCE_ID: "2013-10-17 12:57:35 c78be6d786c19073b3a6730dfe3fb1be54f5657a"
- SHA1 для sqlite3.c: 0a54d76566728c2ba96292a49b138e4f69a7c391
2013-09-03 (3.8.0.2)
- Исправлена ошибка оптимизации, пытающейся исключить неиспользуемые LEFT JOIN.
- SQLITE_SOURCE_ID: "2013-09-03 17:11:13 7dd4968f235d6e1ca9547cda9cf3bd570e1609ef"
- SHA1 для sqlite3.c: 6cf0c7b46975a87a0dc3fba69c229a7de61b0c21
2013-08-29 (3.8.0.1)
- Исправлена ошибка на единицу, из-за которой оболочка командной строки неправильно считывала заключённую в кавычки пустую строку в конце строки CSV, завершённой CRLF.
- Исправлена ошибка планировщика запросов, связанная с LEFT JOIN, содержащим ограничение BETWEEN или LIKE/GLOB, за которым следует ещё один INNER JOIN справа с ограничением OR.
- Исправлена ошибка планировщика запросов, которая могла приводить к ошибке сегментации при запросах к таблицам с ограничением UNIQUE или PRIMARY KEY, содержащим более четырёх столбцов.
- SQLITE_SOURCE_ID: "2013-08-29 17:35:01 352362bc01660edfbda08179d60f09e2038a2f49"
- SHA1 для sqlite3.c: 99906bf63e6cef63d6f3d7f8526ac4a70e76559e
2013-08-26 (3.8.0)
- Добавлена поддержка частичных индексов
- Выполнен переход на планировщик запросов следующего поколения для построения более быстрых и эффективных планов запросов.
- В выводе EXPLAIN QUERY PLAN больше не отображается оценка числа строк, создаваемых каждым циклом соединения.
- Добавлен параметр notindexed для FTS4, позволяющий создавать в таблице FTS4 неиндексируемые столбцы.
- В sqlite3_stmt_status() добавлен параметр SQLITE_STMTSTATUS_VM_STEP.
- Добавлена прагма cache_spill.
- Добавлена прагма query_only.
- Добавлены прагма defer_foreign_keys и интерфейс языка C sqlite3_db_status(db, SQLITE_DBSTATUS_DEFERRED_FKS,...).
- Функция "percentile()" добавлена в качестве загружаемого расширения в подкаталог ext/misc дерева исходного кода.
- Добавлен параметр компиляции SQLITE_ALLOW_URI_AUTHORITY.
- Добавлен интерфейс sqlite3_cancel_auto_extension(X).
- Выполняемый оператор SELECT без предложения FROM (или любой другой оператор, не читающий данные из файлов базы данных и не записывающий в них) больше не препятствует завершению транзакции чтения.
- Добавлен параметр компиляции SQLITE_DEFAULT_AUTOMATIC_INDEX. Если задать для него значение 0, автоматические индексы по умолчанию будут отключены.
- Каждый раз, когда планировщик запросов использует автоматический индекс, через SQLITE_CONFIG_LOG выдаётся предупреждение SQLITE_WARNING_AUTOINDEX.
- Добавлен параметр компиляции SQLITE_FTS3_MAX_EXPR_DEPTH.
- В функцию SQL-расширения next_char() добавлен необязательный пятый параметр, задающий последовательность сортировки.
- В режиме WAL возвращается расширенный код ошибки SQLITE_BUSY_SNAPSHOT, если транзакцию чтения нельзя повысить до транзакции записи, поскольку чтение выполняется из более старого снимка.
- Утилита sqlite3_analyzer улучшена: теперь она отдельно показывает размер каждого индекса таблицы, а также общий размер.
- Разрешено свободно открывать и закрывать транзакции чтения с помощью SQL-операторов, выполняемых внутри определённых приложением SQL-функций, если функция вызвана оператором SELECT, не обращающимся ни к одной таблице базы данных.
- Использование posix_fallocate() отключено во всех системах Unix, кроме тех, где задан параметр компиляции HAVE_POSIX_FALLOCATE.
- Команда ".import" в оболочке командной строки обновлена: добавлена поддержка многострочных полей и корректного экранирования по RFC-4180, а также вывод предупреждений и/или сообщений об ошибках, если входной текст не полностью соответствует RFC-4180.
- Исправление ошибки: в токенизаторе unicode61 для FTS4 все символы из частной области кодовых точек считаются символами-идентификаторами.
- Исправление ошибки: отдельные идентификаторы в предложениях ORDER BY в первую очередь сопоставляются с именами выходных столбцов, а идентификаторы в выражениях — с именами входных столбцов. В предложениях GROUP BY, однако, идентификаторы всегда в первую очередь сопоставляются с именами выходных столбцов.
- Исправления ошибок: переход на NGQP позволил устранить множество проблем в устаревшем оптимизаторе запросов.
- SQLITE_SOURCE_ID: "2013-08-26 04:50:08 f64cd21e2e23ed7cff48f7dafa5e76adde9321c2"
- SHA1 для sqlite3.c: b7347f4b4c2a840e6ba12040093d606bd16ea21e
2013-05-20 (3.7.17)
- Добавлена поддержка ввода-вывода с отображением в память.
- Добавлен вспомогательный интерфейс sqlite3_strglob().
- Целое число по смещению 68 в заголовке базы данных назначено идентификатором приложения для случаев использования SQLite в качестве файлового формата приложения. Добавлена команда PRAGMA application_id для получения и задания идентификатора приложения.
- Откат транзакции при восстановлении теперь отражается в журнале ошибок как SQLITE_NOTICE_RECOVER_ROLLBACK. Код журнала ошибок для восстановления WAL изменён с SQLITE_OK на SQLITE_NOTICE_RECOVER_WAL.
- Рискованное использование отвязанных файлов баз данных и псевдонимов имён файлов баз данных теперь отражается предупреждениями SQLITE_WARNING в журнале ошибок.
- Добавлен параметр компиляции SQLITE_TRACE_SIZE_LIMIT.
- Значение SQLITE_MAX_SCHEMA_RETRY по умолчанию увеличено до 50; теперь оно учитывается во всех случаях, когда изменение схемы может потребовать повторного выполнения оператора.
- Добавлен новый тестовый инструмент "mptester" для проверки корректной работы при одновременном обращении нескольких процессов к одному файлу базы данных.
- Механизм загрузки расширений сделан более гибким (с сохранением обратной совместимости) двумя способами:
- Если в загружаемом расширении отсутствует точка входа по умолчанию "sqlite3_extension_init", выполняется попытка найти точку входа "sqlite3_X_init", где "X" определяется по имени общей библиотеки. Это позволяет каждому расширению иметь собственную точку входа и статически связывать расширения без изменения кода.
- В имени общей библиотеки, передаваемом в sqlite3_load_extension(), теперь можно опускать суффикс файла; подходящий суффикс для конкретной архитектуры (".so", ".dylib" или ".dll") будет добавлен автоматически.
- В дерево исходного кода добавлено множество новых загружаемых расширений, в том числе amatch, closure, fuzzer, ieee754, nextchar, regexp, spellfix и wholenumber. Дополнительные сведения о назначении каждого расширения см. в комментариях в начале соответствующего файла исходного кода.
- Улучшена работа FTS3: теперь она не расходует избыточное пространство стека, если справа от оператора MATCH находится очень большое число терминов. Побочный эффект этого изменения: оператор MATCH теперь поддерживает не более 12 операторов NEAR одновременно.
- Улучшена виртуальная таблица fts4aux: теперь она может быть временной таблицей TEMP.
- В логику полнотекстового поиска добавлена виртуальная таблица fts3tokenize.
- Улучшение планировщика запросов: когда это возможно, транзитивные свойства ограничений используются для переноса ограничений во внешние циклы соединения, что сокращает объём работы во внутренних циклах.
- Использование posix_fallocate() в Unix прекращено, поскольку эта функция работает не во всех файловых системах.
- Улучшены средства трассировки и отладки в Windows VFS.
- Исправление ошибки: устранена потенциальная ошибка повреждения базы данных в режиме общего кэша, возникавшая при закрытии одного подключения к базе данных, когда другое находилось в процессе транзакции записи. Заявка e636a050b7
- Исправление ошибки: имена AS из набора результатов рассматриваются как кандидаты на разрешение идентификаторов в предложении WHERE, только если других совпадений нет. В предложении ORDER BY имена AS имеют приоритет над любыми именами столбцов. Заявка 2500cdb9be05
- Исправление ошибки: виртуальной таблице не разрешается отменять предложение ORDER BY, если не гарантировано, что все внешние циклы вернут не более одной строки результата. Заявка ba82a4a41eac1.
- Исправление ошибки: предложение ORDER BY не подавляется в запросе к виртуальной таблице, если используется ограничение IN. Заявка f69b96e3076e.
- Исправление ошибки: при завершении работы оболочки командной строки командой ".quit" возвращается код выхода 0.
- Исправление ошибки: операторы PRAGMA теперь отображаются в выводе sqlite3_trace().
- Исправление ошибки: если составной запрос использует предложение ORDER BY с оператором COLLATE, сортировка выполняется согласно указанной последовательности сортировки, а сравнения, связанные с составным запросом, используют собственную последовательность сортировки. Заявка 6709574d2a8d8.
- Исправление ошибки: при выполнении UPDATE, изменяющего rowid, обратный вызов authorizer теперь получает допустимый указатель на строку "ROWID" для параметра имени столбца. Заявка 0eb70d77cb05bb2272
- Исправление ошибки: условия предложения WHERE больше не перемещаются внутрь выражений OR, находящихся в предложении ON для LEFT JOIN. Заявка f2369304e4
- Исправление ошибки: при попытке выполнить операцию, требующую отсутствующую последовательность сортировки, всегда сообщается об ошибке. Заявка 0fc59f908b
- SQLITE_SOURCE_ID: "2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668"
- SHA1 для sqlite3.c: 246987605d0503c700a08b9ee99a6b5d67454aab
2013-04-12 (3.7.16.2)
- Исправлена ошибка (присутствовавшая начиная с версии 3.7.13), которая могла приводить к повреждению базы данных в Windows, если два или более процесса одновременно обращались к одному файлу базы данных сразу после аварийного завершения третьего процесса в середине фиксации изменений в этом же файле. Дополнительные сведения см. в заявке 7ff3120e4f.
- SQLITE_SOURCE_ID: "2013-04-12 11:52:43 cbea02d93865ce0e06789db95fd9168ebac970c7"
- SHA1 для sqlite3.c: d466b54789dff4fb0238b9232e74896deaefab94
2013-03-29 (3.7.16.1)
- Исправлена ошибка оптимизатора ORDER BY, появившаяся в версии 3.7.15: иногда он исключал этап сортировки, хотя сортировка была необходима. Заявка a179fe7465
- Исправлена давняя ошибка в выражении CAST, из-за которой символы UTF16 распознавались как цифры, даже если их старший байт не был равен нулю. Заявка 689137afb6da41.
- Исправлена ошибка оператора NEAR в FTS3 при применении к подполям. Заявка 38b1ae018f.
- Исправлена давняя ошибка подсистемы хранения, которая (в очень редких случаях) приводила к ложному сообщению об ошибке SQLITE_CORRUPT, хотя сама по себе не причиняла вреда. Заявка 6bfb98dfc0c.
- Параметр SQLITE_OMIT_MERGE_SORT удалён. Сортировщик слиянием теперь является обязательным компонентом SQLite.
- В комментариях исходного кода исправлено множество орфографических ошибок.
- SQLITE_SOURCE_ID: "2013-03-29 13:44:34 527231bc67285f01fb18d4451b28f61da3c4e39d"
- SHA1 для sqlite3.c: 7a91ceceac9bcf47ceb8219126276e5518f7ff5a
2013-03-18 (3.7.16)
- Добавлена команда PRAGMA foreign_key_check.
- Добавлены новые расширенные коды ошибок для всех ошибок SQLITE_CONSTRAINT.
- Добавлен расширенный код ошибки SQLITE_READONLY_ROLLBACK для случаев, когда базу данных нельзя открыть, поскольку ей требуется восстановление с откатом, но она доступна только для чтения.
- Добавлены функции SQL unicode(A) и char(X1,...,XN).
- Повышена производительность команды PRAGMA incremental_vacuum, особенно в случаях, когда количество свободных страниц превышает число страниц, помещающихся на одной странице-ветви списка свободных страниц.
- Улучшена оптимизация запросов, содержащих агрегатную функцию min() или max().
- Улучшены виртуальные таблицы: теперь они могут использовать индекс, если предложение WHERE содержит оператор IN.
- Разрешено использовать индексы для сортировки, даже если предыдущие термы индекса ограничены операторами IN в предложении WHERE.
- Улучшена команда PRAGMA table_info: теперь столбец "pk" содержит возрастающие целые числа, указывающие порядок столбцов в первичном ключе.
- Улучшен оптимизатор запросов: теперь он использует транзитивные ограничения соединений.
- Повышена производительность оптимизатора запросов.
- Разрешено выводить сообщения об ошибках команды PRAGMA integrity_check длиной более 20000 байт.
- Улучшено разрешение имён во вложенных запросах большой глубины.
- Добавлен модуль test_regexp.c, демонстрирующий реализацию оператора REGEXP.
- Улучшены сообщения об ошибках в расширении RTREE.
- Улучшена оболочка командной строки: ненулевой аргумент команды ".exit" приводит к немедленному завершению оболочки без корректного закрытия подключения к базе данных.
- Улучшены сообщения об ошибках при передаче недопустимых логических аргументов точечным командам в оболочке командной строки.
- Улучшены сообщения об ошибке "foreign key mismatch": теперь в них указываются имена обеих участвующих таблиц.
- Удалены все вызовы umask() из unix VFS.
- Добавлены команды PRAGMA vdbe_addoptrace и PRAGMA vdbe_debug.
- Для сравнения строк, не оканчивающихся нулём, вместо memcmp() используется strncmp() или её эквивалент.
- Обновлены интерфейсы cygwin: удалены устаревшие вызовы API.
- Улучшено расширение spellfix1: таблицу стоимости расстояния редактирования теперь можно изменять во время выполнения, вставив строку вида 'edit_cost_table=TABLE' в поле "command".
- Исправлена ошибка: устранена давняя проблема, из-за которой могли возвращаться неверные результаты запроса в соединении трёх или более таблиц, если в двух или более местах поля INTEGER сравнивались с полями TEXT. Заявка fc7bd6358f.
- Исправлена ошибка: теперь выводится сообщение об ошибке, если 16-битный счётчик ссылок на представление переполняется из-за чрезмерно сложного запроса.
- Исправлена ошибка: устранена утечка памяти в предложениях LIMIT и OFFSET глубоко вложенных запросов UNION ALL.
- Исправлена ошибка: теперь перед выполнением прагм table_info, index_list, index_info и foreign_key_list схема обновляется до актуального состояния.
- SQLITE_SOURCE_ID: "2013-03-18 11:39:23 66d5f2b76750f3520eb7a495f6247206758f5b90"
- SHA1 для sqlite3.c: 7308ab891ca1b2ebc596025cfe4dc36f1ee89cf6
2013-01-09 (3.7.15.2)
- Исправлена ошибка, появившаяся в версии 3.7.15, из-за которой при оптимизации удалялось предложение ORDER BY в соединении трёх таблиц, хотя оно было необходимо. Заявка 598f5f7596b055.
- SQLITE_SOURCE_ID: "2013-01-09 11:53:05 c0e09560d26f0a6456be9dd3447f5311eb4f238f"
- SHA1 для sqlite3.c: 5741f47d1bc38aa0a8c38f09e60a5fe0031f272d
2012-12-19 (3.7.15.1)
- Исправлена ошибка, появившаяся в версии 3.7.15, из-за которой происходил сбой сегментации, если имя AS столбца результата оператора SELECT использовалось как логическое условие в предложении WHERE. Заявка a7b7803e8d1e869.
- SQLITE_SOURCE_ID: "2012-12-19 20:39:10 6b85b767d0ff7975146156a99ad673f2c1a23318"
- SHA1 для sqlite3.c: bbbaa68061e925bd4d7d18d7e1270935c5f7e39a
2012-12-12 (3.7.15)
- Добавлен интерфейс sqlite3_errstr().
- Предотвращён многократный вызов функции обратного вызова sqlite3_trace(), когда оператор автоматически подготавливается заново из-за ошибок SQLITE_SCHEMA.
- Добавлена поддержка платформы Windows Phone 8.
- Улучшена обработка оператора IN, чтобы он мог использовать индексы с числовой аффинностью.
- Когда это возможно, полные сканирования таблиц выполняются с использованием покрывающих индексов: предполагается, что индекс будет меньше и, следовательно, потребует меньше операций ввода-вывода при сканировании.
- Улучшен оптимизатор запросов: предложения ORDER BY оптимизируются более активно, особенно в соединениях, где различные термы ORDER BY относятся к отдельным таблицам соединения.
- Добавлена возможность реализовывать подзапросы предложения FROM в виде сопрограмм, а не материализовывать их во временную таблицу.
- Улучшения оболочки командной строки:
- Добавлена команда ".print".
- Отрицательные числа в команде ".width" включают выравнивание по правому краю.
- Добавлена команда ".wheretrace" при компиляции с SQLITE_DEBUG.
- Добавлена pragma busy_timeout.
- Добавлена функция SQL instr().
- Добавлено файловое управление SQLITE_FCNTL_BUSYHANDLER, позволяющее реализациям VFS получать доступ к функции обратного вызова обработчика занятости.
- Метод xDelete во встроенных VFS теперь возвращает SQLITE_IOERR_DELETE_NOENT, если удаляемый файл не существует.
- Улучшена поддержка QNX.
- Добавлен обходной путь для ошибки оптимизатора компилятора MSVC при компиляции для ARM.
- Исправлена ошибка: устранены различные проблемы с параллельным доступом в режиме общего кэша.
- Исправлена ошибка: предотвращены взаимоблокировка или аварийное завершение, если одновременно используются API резервного копирования, общий кэш и расширение SQLite Encryption Extension.
- Исправлена ошибка: функции SQL, созданные с помощью интерфейса TCL, учитывают настройку "nullvalue".
- Исправлена ошибка: устранено 32-битное переполнение при выполнении CREATE INDEX для баз данных размером более 16 ГБ.
- Исправлена ошибка: предотвращён сбой сегментации при использовании оператора COLLATE внутри ограничения CHECK или представления в режиме общего кэша.
- SQLITE_SOURCE_ID: "2012-12-12 13:36:53 cd0b37c52658bfdf992b1e3dc467bae1835a94ae"
- SHA1 для sqlite3.c: 2b413611f5e3e3b6ef5f618f2a9209cdf25cbcff"
2012-10-04 (3.7.14.1)
- Исправлена ошибка (заявка [d02e1406a58ea02d]]), из-за которой происходил сбой сегментации при LEFT JOIN, содержащем OR в предложении ON.
- Добавлен обходной путь для ошибки оптимизатора компилятора VisualStudio-2012, из-за которой при компиляции SQLite для ARM генерировался некорректный код.
- Исправлен интерфейс TCL: настройка "nullvalue" теперь учитывается реализациями функций SQL на TCL.
- SQLITE_SOURCE_ID: "2012-10-04 19:37:12 091570e46d04e84b67228e0bdbcd6e1fb60c6bdb"
- SHA1 для sqlite3.c: 62aaecaacab3a4bf4a8fe4aec1cfdc1571fe9a44
2012-09-03 (3.7.14)
- Удалена встроенная поддержка OS/2. Если необходимо обновить приложение для OS/2, чтобы использовать эту или более позднюю версию SQLite, добавьте определённую приложением VFS с помощью интерфейса sqlite3_vfs_register(). Удалённый в этом выпуске код можно использовать как основу для VFS, определяемой приложением.
- Обеспечено точное сохранение значений с плавающей точкой при восстановлении базы данных из вывода команды ".dump" оболочки командной строки.
- Добавлен интерфейс sqlite3_close_v2().
- Обновлена оболочка командной строки: теперь её можно собирать с параметрами SQLITE_OMIT_FLOATING_POINT и SQLITE_OMIT_AUTOINIT.
- Улучшены make-файлы и процессы сборки для Windows.
- Улучшены PRAGMA integrity_check и PRAGMA quick_check: теперь при необходимости они могут проверять только одну подключённую базу данных, а не все подключённые базы данных.
- Улучшена обработка режима WAL: теперь гарантируется постоянное наличие хотя бы одной действительной отметки чтения, благодаря чему процессы, имеющие доступ только для чтения, всегда могут читать базу данных.
- Повышена производительность сортировщика, используемого в ORDER BY и CREATE INDEX.
- Добавлен параметр компиляции SQLITE_DISABLE_FTS4_DEFERRED.
- Улучшена обработка агрегатных запросов, в которых агрегатные функции находятся внутри подзапросов.
- Улучшен планировщик запросов: теперь он пытается использовать покрывающий индекс в запросах, использующих оптимизацию OR.
- SQLITE_SOURCE_ID: "2012-09-03 15:42:36 c0d89d4a9752922f9e367362366efde4f1b06f2a"
- SHA1 для sqlite3.c: 5fdf596b29bb426001f28b488ff356ae14d5a5a6
2012-06-11 (3.7.13)
- Базы данных в памяти, указанные с помощью имён файлов URI, теперь могут использовать общий кэш, благодаря чему к одной базе данных в памяти можно обращаться из нескольких подключений к базе данных.
- Распознаётся и используется параметр запроса mode=memory в именах файлов URI.
- Предотвращён сброс схемы подключений с общим кэшем при закрытии любого из подключений. Вместо этого сброс выполняется после закрытия последнего подключения.
- В расширении RTREE при округлении 64-битных чисел с плавающей точкой до 32-битных для хранения округление всегда выполняется в сторону увеличения ограничивающего прямоугольника.
- Изменён драйвер unix: устранены ненужные вызовы fchown().
- В модуль test_quota.c добавлены интерфейсы sqlite3_quota_ferror() и sqlite3_quota_file_available().
- Интерфейсы sqlite3_create_module() и sqlite3_create_module_v2() возвращают SQLITE_MISUSE при любой попытке переопределить или заменить модуль виртуальной таблицы. В этом случае деструктор всегда вызывается в соответствии с предыдущей и текущей документацией.
- SQLITE_SOURCE_ID: "2012-06-11 02:05:22 f5b5a13f7394dc143aa136f1d4faba6839eaa6dc"
- SHA1 для sqlite3.c: ff0a771d6252545740ba9685e312b0e3bb6a641b
2012-05-22 (3.7.12.1)
- Исправлена ошибка (заявка c2ad16f997) в выпуске 3.7.12, которая могла приводить к сбою сегментации в некоторых редких вложенных агрегатных запросах.
- Исправлены другие незначительные проблемы в тестовых сценариях.
- SQLITE_SOURCE_ID: "2012-05-22 02:45:53 6d326d44fd1d626aae0e8456e5fa2049f1ce0789"
- SHA1 для sqlite3.c: d494e8d81607f0515d4f386156fb0fd86d5ba7df
2012-05-14 (3.7.12)
- Добавлен параметр SQLITE_DBSTATUS_CACHE_WRITE для sqlite3_db_status().
- Оптимизированы функции SQL typeof() и length(), чтобы избежать ненужного чтения содержимого базы данных с диска.
- Добавлены команда FTS4 "merge", команда FTS4 "automerge" и команда FTS4 "integrity-check".
- Теперь при сбое ограничений CHECK указываются имена конкретных ограничений.
- В оболочке командной строки используется popen() вместо fopen(), если первый символ аргумента команды ".output" — "|".
- В Windows VFS используется OVERLAPPED, чтобы избежать некоторых системных вызовов и повысить производительность.
- Улучшена оптимизация оператора AND, если одна из его частей всегда ложна.
- Повышена производительность запросов с множеством условий, связанных через OR в предложении WHERE, которые все могут использовать индексы.
- Добавлен параметр компиляции SQLITE_RTREE_INT_ONLY, принудительно использующий целые числа вместо чисел с плавающей точкой для хранения и вычислений в модуле расширения R*Tree.
- Улучшена команда PRAGMA integrity_check: при обработке баз данных размером в несколько гигабайт она использует значительно меньше памяти.
- В дополнительный модуль test_quota.c добавлены новые интерфейсы.
- В оболочку командной строки добавлена точечная команда ".trace".
- Разрешён рекурсивный вызов конструкторов виртуальных таблиц.
- Улучшена оптимизация предложений ORDER BY в составных запросах.
- Улучшена оптимизация агрегатных подзапросов, содержащихся в агрегатном запросе.
- Исправлена ошибка: команда RELEASE больше не отменяет ожидающие запросы. Устранена проблема, появившаяся в версии 3.7.11.
- Исправлена ошибка: DISTINCT больше не удаляется как избыточное, если только подмножество набора результатов не подпадает под ограничение UNIQUE и ни один столбец этого подмножества не может содержать NULL. Заявка 385a5b56b9.
- Исправлена ошибка: предложение ORDER BY с термами, совпадающими с термами уникального индекса, больше не удаляется при оптимизации, если эти термы не имеют также ограничения NOT NULL. Заявка 2a5629202f.
- SQLITE_SOURCE_ID: "2012-05-14 01:41:23 8654aa9540fe9fd210899d83d17f3f407096c004"
- SHA1 для sqlite3.c: 57e2104a0f7b3f528e7f6b7a8e553e2357ccd2e1
2012-03-20 (3.7.11)
- Расширен синтаксис INSERT: теперь с помощью предложения VALUES можно вставлять несколько строк.
- Расширена команда CREATE VIRTUAL TABLE: добавлена поддержка предложения IF NOT EXISTS.
- Добавлен интерфейс sqlite3_stricmp() — аналог sqlite3_strnicmp().
- Добавлен интерфейс sqlite3_db_readonly().
- Добавлено файловое управление SQLITE_FCNTL_PRAGMA, позволяющее реализациям VFS добавлять новые операторы PRAGMA или переопределять встроенные PRAGMA.
- Запросы вида "SELECT max(x), y FROM table" возвращают значение y из той же строки, в которой содержится максимальное значение x.
- Добавлена поддержка параметра languageid FTS4.
- Документирована поддержка параметра content FTS4. Эта возможность присутствует в коде с версии 3.7.9, но официально поддерживаемой считается только теперь.
- Ожидающие выполнения операторы больше не блокируют ROLLBACK. Вместо этого при следующем обращении после ROLLBACK ожидающий оператор вернёт SQLITE_ABORT.
- Улучшена обработка входных данных CSV в оболочке командной строки.
- Исправлена ошибка, появившаяся в версии 3.7.10: LEFT JOIN мог ошибочно преобразоваться в INNER JOIN, если индексируемые термы предложения WHERE были связаны оператором OR.
- SQLITE_SOURCE_ID: "2012-03-20 11:35:50 00bb9c9ce4f465e6ac321ced2a9d0062dc364669"
- SHA1 для sqlite3.c: d460d7eda3a9dccd291aed2a9fda868b9b120a10
2012-01-16 (3.7.10)
- Формат схемы по умолчанию изменён с 1 на 4. Это означает, что если не выполнить оператор PRAGMA legacy_file_format=ON, файлы новых баз данных будут нечитаемы версиями SQLite до 3.3.0 (2006-01-10). Кроме того, по умолчанию включаются индексы по убыванию.
- Структура sqlite3_pcache_methods и параметры конфигурации SQLITE_CONFIG_PCACHE и SQLITE_CONFIG_GETPCACHE объявлены устаревшими. Вместо них используются новая структура sqlite3_pcache_methods2 и параметры конфигурации SQLITE_CONFIG_PCACHE2 и SQLITE_CONFIG_GETPCACHE2.
- В интерфейс VFS добавлено свойство безопасной перезаписи при отключении питания. Добавлены возможность ввода-вывода SQLITE_IOCAP_POWERSAFE_OVERWRITE, параметр компиляции SQLITE_POWERSAFE_OVERWRITE и параметр запроса "psow=BOOLEAN" для имён файлов URI.
- Добавлены интерфейс sqlite3_db_release_memory() и pragma shrink_memory.
- Добавлен интерфейс sqlite3_db_filename().
- Добавлен интерфейс sqlite3_stmt_busy().
- Добавлены интерфейсы sqlite3_uri_boolean() и sqlite3_uri_int64().
- Если аргумент PRAGMA cache_size — отрицательное число -N, это означает, что для кэша страниц следует использовать приблизительно -1024*N байт памяти независимо от размера страницы.
- Улучшен стандартный распределитель памяти: в Windows используется _msize(), на Mac — malloc_size(), а в Linux — malloc_usable_size().
- Улучшен планировщик запросов: добавлена поддержка индексных запросов с ограничениями диапазона по rowid.
- Улучшена логика разворачивания запросов в планировщике: составные запросы UNION ALL можно поднимать выше и использовать вместо простого внешнего SELECT, даже если составные запросы являются соединениями.
- Улучшен планировщик запросов: теперь можно применять оптимизацию xfer с INTEGER PRIMARY KEY ON CONFLICT, если целевая таблица изначально пуста.
- Улучшена Windows-реализация VFS: все системные вызовы теперь можно переопределять с помощью интерфейса xSetSystemCall.
- Обновлена встроенная VFS "unix-dotfile": для блокировок теперь используются каталоги, создаваемые с помощью mkdir() и удаляемые с помощью rmdir(), вместо файлов блокировки, создаваемых с помощью open() и удаляемых с помощью unlink().
- Расширение test_quota.c улучшено: добавлена поддержка интерфейсов, подобных stdio, с квотами.
- Изменена unix-реализация VFS: теперь она корректно обрабатывает системные вызовы read(), возвращающие меньше запрошенного количества байт.
- Изменены unix- и Windows-реализации VFS: теперь они сообщают о размере сектора 4096 вместо прежнего значения по умолчанию 512.
- В интерфейс TCL добавлен параметр -uri команды TCL "sqlite3", используемой для создания новых объектов подключения к базе данных.
- Добавлен параметр тестового управления SQLITE_TESTCTRL_EXPLAIN_STMT и параметр компиляции SQLITE_ENABLE_TREE_EXPLAIN, позволяющие оболочке командной строки выводить ASCII-деревья разбора обрабатываемых операторов SQL для отладки и анализа.
- Исправление ошибки: При перезапуске WAL добавлен дополнительный вызов xSync, чтобы предотвратить крайне маловероятное, но теоретически возможное повреждение базы данных после отключения питания. Заявка ff5be73dee.
- Исправление ошибки: VDBE изменена таким образом, чтобы все регистры инициализировались значением Invalid, а не NULL. Заявка 7bbfb7d442.
- Исправление ошибки: Устранены проблемы, вызванные переполнением 32-битных целых чисел. Заявка ac00f496b7e2.
- SQLITE_SOURCE_ID: "2012-01-16 13:28:40 ebd01a8deffb5024a5d7494eef800d2366d97204"
- SHA1 для sqlite3.c: 6497cbbaad47220bd41e2e4216c54706e7ae95d4
2011-11-01 (3.7.9)
- Если поисковый токен (в правой части оператора MATCH) в FTS4 начинается с "^", этот токен должен быть первым в своём поле документа. ** Потенциально несовместимое изменение **
- В интерфейс sqlite3_db_status() добавлены параметры SQLITE_DBSTATUS_CACHE_HIT и SQLITE_DBSTATUS_CACHE_MISS.
- Удалена поддержка SQLITE_ENABLE_STAT2, вместо неё добавлен значительно более функциональный параметр SQLITE_ENABLE_STAT3.
- Утилита sqlite3_analyzer улучшена: добавлены параметры --pageinfo и --stats, а также поддержка мультиплексированных баз данных.
- Улучшен интерфейс sqlite3_data_count(): теперь с его помощью можно определить, возвращал ли подготовленный оператор SQLITE_DONE.
- Добавлено файловое управление SQLITE_FCNTL_OVERWRITE, с помощью которого ядро SQLite сообщает VFS, что текущая транзакция перезапишет весь файл базы данных.
- Размер выделения памяти по умолчанию для распределителя памяти lookaside увеличен со 100 до 128 байт.
- Улучшен планировщик запросов: теперь он может выносить термы из выражений OR в предложении WHERE и добавлять их в такие выражения, чтобы найти более подходящие индексы.
- Добавлен параметр компиляции SQLITE_DIRECT_OVERFLOW_READ, при котором страницы переполнения читаются непосредственно из файла базы данных, минуя кэш страниц.
- Сняты ограничения на величину точности и ширины в спецификаторах формата семейства процедур форматирования строк sqlite3_mprintf().
- Исправлена ошибка, из-за которой команда ALTER TABLE ... RENAME не работала с некоторыми виртуальными таблицами в базе данных с кодировкой UTF16.
- Исправлена ошибка преобразования ASCII в число с плавающей точкой, которая приводила к низкой производительности и неверным результатам при преобразовании чисел с чрезвычайно большими показателями степени.
- Исправлена ошибка, из-за которой агрегатные запросы возвращали неверные результаты, если использовали несколько агрегатных функций с аргументами, содержащими сложные выражения, отличающиеся только регистром строковых литералов внутри этих выражений.
- Исправлена ошибка, из-за которой прагмы page_count и quick_check работали некорректно, если их имена были написаны заглавными буквами.
- Исправлена ошибка, из-за которой команда VACUUM завершалась неудачей, если была включена pragma count_changes.
- Исправлена ошибка в реализации виртуальных таблиц, из-за которой происходил сбой, если таблица FTS4 удалялась внутри транзакции, а затем выполнялась команда SAVEPOINT.
- SQLITE_SOURCE_ID: "2011-11-01 00:52:41 c7c6050ef060877ebe77b41d959e9df13f8c9b5e"
- SHA1 для sqlite3.c: becd16877f4f9b281b91c97e106089497d71bb47
2011-09-19 (3.7.8)
- Повышена производительность CREATE INDEX на несколько порядков при работе с очень большими таблицами.
- Улучшена Windows-реализация VFS для лучшей защиты от вмешательства антивирусного ПО.
- Улучшена оптимизация плана запроса при наличии ключевого слова DISTINCT.
- В unix-реализации VFS разрешено переопределять дополнительные системные вызовы, чтобы улучшить поддержку песочниц Chromium.
- Размер строки кэша опережающего чтения по умолчанию увеличен со 100 до 128 байт.
- Модуль test_quota.c улучшен: теперь он может отслеживать существующие файлы.
- Исправлена ошибка: виртуальные таблицы теперь корректно обрабатывают ограничения IS NOT NULL.
- Исправлены ошибки: обеспечена корректная обработка вложенных коррелированных подзапросов, использующих индексы в предложении WHERE.
- SQLITE_SOURCE_ID: "2011-09-19 14:49:19 3e0da808d2f5b4d12046e05980ca04578f581177"
- SHA1 для sqlite3.c: bfcd74a655636b592c5dba6d0d5729c0f8e3b4de
2011-06-28 (3.7.7.1)
- Исправлена ошибка, из-за которой операторы PRAGMA case_sensitive_like, скомпилированные с помощью sqlite3_prepare(), завершались ошибкой SQLITE_SCHEMA.
- SQLITE_SOURCE_ID: "2011-06-28 17:39:05 af0d91adf497f5f36ec3813f04235a6e195a605f"
- SHA1 для sqlite3.c: d47594b8a02f6cf58e91fb673e96cb1b397aace0
2011-06-23 (3.7.7)
- Добавлена поддержка имён файлов URI.
- Добавлен интерфейс sqlite3_vtab_config() для поддержки предложений ON CONFLICT в виртуальных таблицах.
- В виртуальные таблицы добавлены методы xSavepoint, xRelease и xRollbackTo для поддержки SAVEPOINT.
- Встроенные виртуальные таблицы FTS3/FTS4 и RTREE обновлены для поддержки предложений ON CONFLICT и REPLACE.
- Устранён ненужный повторный разбор схемы базы данных.
- Добавлена поддержка параметра префикса FTS4 и параметра порядка FTS4.
- Базы данных в режиме WAL теперь можно открывать только для чтения, если уже существует подключение с правами чтения и записи.
- Добавлена поддержка коротких имён файлов.
- SQLITE_SOURCE_ID: "2011-06-23 19:49:22 4374b7e83ea0a3fbc3691f9c0c936272862f32f2"
- SHA1 для sqlite3.c: 5bbe79e206ae5ffeeca760dbd0d66862228db551
2011-05-19 (3.7.6.3)
- Исправлена проблема в режиме WAL, из-за которой транзакции могли незаметно откатываться, если значение cache_size было очень маленьким (меньше 10), а SQLite испытывала нехватку памяти.
2011-04-17 (3.7.6.2)
- Исправлен прототип функции системного вызова open(2) в соответствии со стандартом POSIX. Без этого исправления pthreads работает в NetBSD некорректно.
- SQLITE_SOURCE_ID: "2011-04-17 17:25:17 154ddbc17120be2915eb03edc52af1225eb7cb5e"
- SHA1 для sqlite3.c: 806577fd524dd5f3bfd8d4d27392ed2752bc9701
2011-04-13 (3.7.6.1)
- Исправлена ошибка в версии 3.7.6, проявляющаяся только при использовании файлового управления SQLITE_FCNTL_SIZE_HINT в сборке SQLite с параметром компиляции HAVE_POSIX_FALLOCATE и выключенным параметром SQLITE_ENABLE_LOCKING_MODE.
- SQLITE_SOURCE_ID: "2011-04-13 14:40:25 a35e83eac7b185f4d363d7fa51677f2fdfa27695"
- SHA1 для sqlite3.c: b81bfa27d3e09caf3251475863b1ce6dd9f6ab66
2011-04-12 (3.7.6)
- Добавлен интерфейс sqlite3_wal_checkpoint_v2(); pragma wal_checkpoint улучшена для поддержки блокирующих контрольных точек.
- Улучшен планировщик запросов: теперь он точнее оценивает стоимость планов и лучше выбирает подходящий план, особенно при использовании SQLITE_ENABLE_STAT2.
- Исправлена ошибка, из-за которой не применялись отложенные ограничения внешнего ключа, если для оператора с нарушенным ограничением внешнего ключа не вызывался sqlite3_finalize() до выполнения другого оператора с ограничениями внешнего ключа.
- Арифметические операции над целыми числами, которые привели бы к переполнению, теперь выполняются с использованием чисел с плавающей точкой.
- Номер версии объекта VFS увеличен до 3; добавлены методы xSetSysCall, xGetSysCall и xNextSysCall для полного тестового покрытия.
- Максимальное значение SQLITE_MAX_ATTACHED увеличено с 30 до 62 (значение по умолчанию остаётся равным 10).
- Улучшения FTS4:
- Добавлена таблица fts4aux.
- Добавлена поддержка сжатого содержимого FTS4.
- Улучшена команда ANALYZE: теперь в качестве аргумента можно указать имя индекса, чтобы проанализировать только этот индекс.
- На unix- и unix-подобных платформах добавлена встроенная VFS "unix-excl".
- SQLITE_SOURCE_ID: "2011-04-12 01:58:40 f9d43fa363d54beab6f45db005abac0a7c0c47a7"
- SHA1 для sqlite3.c: f38df08547efae0ff4343da607b723f588bbd66b
2011-02-01 (3.7.5)
- Добавлен интерфейс sqlite3_vsnprintf().
- Добавлены параметры SQLITE_DBSTATUS_LOOKASIDE_HIT, SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE и SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL для интерфейса sqlite3_db_status().
- Добавлен параметр компиляции SQLITE_OMIT_AUTORESET.
- Добавлен параметр компиляции SQLITE_DEFAULT_FOREIGN_KEYS.
- Интерфейс sqlite3_stmt_readonly() обновлён: теперь его результат определён для всех подготовленных операторов, а также он работает с VACUUM.
- В оболочку командной строки добавлен параметр «-heap»
- Исправлена ошибка, связанная с частым переключением в режим WAL и обратно, а также с VACUUM, которая (теоретически) могла привести к повреждению базы данных.
- Улучшен механизм sqlite3_trace(): теперь отображаются вложенные SQL-операторы, например создаваемые виртуальными таблицами, но они выводятся в комментариях и без подстановки параметров. Это значительно улучшает трассировочный вывод при использовании виртуальных таблиц FTS3/4 и/или RTREE.
- Методы xFileControl() всех встроенных VFS теперь возвращают SQLITE_NOTFOUND, а не SQLITE_ERROR, если код операции не распознан.
- Ядро SQLite вызывает для VFS управление файлом SQLITE_FCNTL_SYNC_OMITTED вместо вызова xSync, если для базы данных установлено значение OFF параметра PRAGMA synchronous.
2010-12-07 (3.7.4)
- Добавлен интерфейс sqlite3_blob_reopen(), позволяющий привязать существующий объект sqlite3_blob к новой строке.
- Новый интерфейс sqlite3_blob_reopen() используется для повышения производительности FTS.
- VFS, не поддерживающие разделяемую память, могут обращаться к базам данных WAL, если для PRAGMA locking_mode установлено значение EXCLUSIVE.
- Улучшения EXPLAIN QUERY PLAN.
- Добавлен интерфейс sqlite3_stmt_readonly().
- Добавлен PRAGMA checkpoint_fullfsync.
- В sqlite3_file_control() добавлен параметр SQLITE_FCNTL_FILE_POINTER.
- Добавлена поддержка FTS4 и улучшена функция FTS matchinfo().
- Добавлен модуль test_superlock.c с примером кода для получения эксклюзивной блокировки базы данных с откатом или WAL.
- Добавлен модуль test_multiplex.c с примером VFS, обеспечивающего мультиплексирование (шардирование) базы данных путём её разделения на несколько файлов фиксированного размера.
- Исправлена крайне редкая ошибка, связанная с оптимизацией OR.
2010-10-08 (3.7.3)
- Добавлен интерфейс sqlite3_create_function_v2(), включающий функцию обратного вызова-деструктор.
- Добавлена поддержка пользовательских запросов к r-tree с использованием предоставленных приложением функций обратного вызова для определения границ области запроса.
- Кэш страниц по умолчанию прилагает больше усилий, чтобы не использовать память сверх объёма, выделенного ему с помощью SQLITE_CONFIG_PAGECACHE. Если же кэш страниц выделяется из кучи, он старается не превышать sqlite3_soft_heap_limit64(), даже если параметр SQLITE_ENABLE_MEMORY_MANAGEMENT не задан.
- Добавлен интерфейс sqlite3_soft_heap_limit64() в качестве замены sqlite3_soft_heap_limit().
- Команда ANALYZE теперь собирает статистику по таблицам, даже если у них нет индексов.
- В планировщик запросов внесены изменения, помогающие ему лучше находить наиболее эффективный план для каждого запроса.
- Улучшены внутренние процедуры преобразования текста в числа: теперь они работают с UTF8 и UTF16, что позволяет избежать некоторых преобразований текста из UTF16 в UTF8.
- Исправлена проблема, приводившая к чрезмерному использованию памяти при больших транзакциях WAL в системах win32.
- Улучшен интерфейс между уровнями VDBE и B-Tree: VDBE сообщает уровню B-Tree, когда безопасно использовать хеширование вместо B-деревьев для временных таблиц.
- Различные улучшения документации.
2010-08-24 (3.7.2)
- Исправлена старая и крайне редкая ошибка, которая могла привести к повреждению списка свободных страниц базы данных при использовании incremental_vacuum.
2010-08-23 (3.7.1)
- В интерфейс sqlite3_db_status() добавлены новые параметры SQLITE_DBSTATUS_SCHEMA_USED и SQLITE_DBSTATUS_STMT_USED, чтобы сообщать объём памяти, используемый для хранения схемы и подготовленных операторов соединения.
- Максимальный размер страниц базы данных увеличен с 32 КиБ до 64 КиБ.
- Оптимизация LIKE применяется, даже если строка справа не содержит подстановочных знаков.
- В интерфейс sqlite3_file_control() для unix и windows добавлена команда SQLITE_FCNTL_CHUNK_SIZE, позволяющая увеличивать файлы базы данных большими блоками и тем самым уменьшать фрагментацию диска.
- Исправлена ошибка планировщика запросов, которая приводила к снижению производительности относительно версии 3.6.23.1 для некоторых сложных соединений.
- Исправлена опечатка в серверной части OS/2.
- Модуль pager подвергнут рефакторингу.
- Параметр компиляции SQLITE_MAX_PAGE_SIZE теперь без предупреждений игнорируется. Максимальный размер страницы жёстко задан и равен 65536 байтам.
2010-08-04 (3.7.0.1)
- Исправлена потенциальная ошибка повреждения базы данных, которая могла возникнуть, если версии 3.7.0 и 3.6.23.1 поочерёдно записывали данные в один и тот же файл базы данных. Заявка [51ae9cad317a1]
- Исправлено снижение производительности, связанное с улучшениями планировщика запросов в версии 3.7.0.
2010-07-21 (3.7.0)
- Добавлена поддержка журналирования с предварительной записью.
- Улучшен планировщик запросов: при оценке уменьшения времени выполнения запроса автоматически создаются временные индексы.
- Улучшен планировщик запросов: ORDER BY становится пустой операцией, если запрос также содержит предложение GROUP BY, задающее правильный порядок вывода.
- Для sqlite3_db_status() добавлена команда SQLITE_DBSTATUS_CACHE_USED.
- Логический размер базы данных теперь хранится в её заголовке, благодаря чему в конец файла базы данных можно добавлять байты, не повреждая его, а SQLite корректно работает в системах без поддержки ftruncate().
2010-03-26 (3.6.23.1)
- Исправлена ошибка в функции offsets() модуля FTS3
- Исправлено отсутствие «sync», которое при пропуске могло привести к повреждению базы данных при отключении питания или сбое ОС непосредственно во время завершения операции ROLLBACK.
2010-03-09 (3.6.23)
- Добавлена прагма secure_delete.
- Добавлены интерфейсы sqlite3_compileoption_used() и sqlite3_compileoption_get(), а также прагма compile_options и SQL-функции sqlite_compileoption_used() и sqlite_compileoption_get().
- Добавлен интерфейс sqlite3_log() и команда SQLITE_CONFIG_LOG для sqlite3_config(). В интерфейс командной строки добавлена команда «.log».
- Улучшения FTS3.
- Улучшена поддержка SQLITE_OMIT_FLOATING_POINT и исправлены ошибки.
- Прагма integrity_check дополнена обнаружением rowid, расположенных не по порядку.
- Оператор «.genfkey» удалён из интерфейса командной строки.
- Обновлён входящий в комплект генератор парсеров Lemon LALR(1). (Эти обновления не затронули SQLite.)
- Различные мелкие исправления ошибок и улучшения производительности.
2010-01-06 (3.6.22)
- Исправлены ошибки, которые (редко) могли приводить к неправильным результатам запросов при использовании операторов CAST или OR в предложении WHERE.
- Продолжаются улучшения FTS3.
- Прочие различные исправления ошибок.
2009-12-07 (3.6.21)
- SQL-вывод, получаемый с помощью sqlite3_trace(), теперь изменяется так, чтобы включать значения связанных параметров.
- Оптимизация производительности для конкретного сценария использования одного известного пользователя SQLite. Количество операций ЦП сокращено на 12% (по измерениям Valgrind). Фактический прирост производительности может отличаться в зависимости от нагрузки. Изменения включают:
- SQL-функции ifnull() и coalesce() теперь реализованы с помощью встроенного кода VDBE, а не вызовов внешних функций, поэтому неиспользуемые аргументы можно не вычислять.
- SQL-функция substr() больше не измеряет длину всей входной строки, если вычисляет только префикс.
- Подавляются ненужные коды операций VDBE OP_IsNull, OP_Affinity и OP_MustBeInt.
- Различные изменения структуры кода для повышения производительности.
- Расширение FTS3 подверглось масштабной переработке и очистке кода. Теперь доступна новая документация по FTS3.
- Параметр компиляции SQLITE_SECURE_DELETE исправлен: теперь содержимое удаляется и при применении оптимизации truncate.
- Улучшена обработка «команд с точкой» в интерфейсе командной строки.
- Прочие мелкие исправления ошибок и улучшения документации.
2009-11-04 (3.6.20)
- Улучшение оптимизатора: подготовленные операторы автоматически перекомпилируются при изменении привязки справа от оператора LIKE или при изменении любого ограничения диапазона, если задан параметр SQLITE_ENABLE_STAT2.
- Различные мелкие исправления ошибок и улучшения документации.
2009-10-30 (3.6.16.1)
- Небольшое исправление для версии 3.6.16, устраняющее ошибку OP_If.
2009-10-14 (3.6.19)
- Добавлена поддержка ограничений внешних ключей. По умолчанию ограничения внешних ключей отключены. Чтобы включить их, используйте прагму foreign_keys.
- Операторы IS и IS NOT обобщены: справа от них теперь могут находиться произвольные выражения.
- Интерфейс TCL дополнен поддержкой интерфейса Non-Recursive Engine (NRE) интерпретатора TCL при компоновке с TCL версии 8.6 или более поздней.
- Исправлена ошибка, появившаяся в версии 3.6.18 и способная привести к аварийному завершению при попытке записи в базу данных, доступную только для чтения.
2009-09-11 (3.6.18)
- Система управления версиями исходного кода SQLite переведена с CVS на Fossil.
- Улучшения планировщика запросов.
- Параметр компиляции SQLITE_ENABLE_STAT2 приводит к тому, что команда ANALYZE собирает небольшую гистограмму для каждого индекса, помогая SQLite выбирать наиболее подходящий из конкурирующих индексов для запросов с диапазоном значений.
- Рекурсивные триггеры можно включить с помощью оператора PRAGMA recursive_triggers.
- Триггеры удаления срабатывают при удалении строк в результате разрешения конфликта REPLACE. Эта возможность включается только при включённых рекурсивных триггерах.
- Для sqlite3_open_v2() добавлены флаги SQLITE_OPEN_SHAREDCACHE и SQLITE_OPEN_PRIVATECACHE, позволяющие переопределять глобальные настройки режима общего кэша для отдельных подключений к базе данных.
- Добавлены улучшенные средства идентификации версии: макрос препроцессора C SQLITE_SOURCE_ID, интерфейс C/C++ sqlite3_sourceid() и SQL-функция sqlite_source_id().
- Исправлена редкая ошибка в триггерах ([efc02f9779]).
2009-08-10 (3.6.17)
- Открыт для расширений и приложений интерфейс sqlite3_strnicmp().
- Снято ограничение на одновременное использование виртуальных таблиц и режима общего кэша. Теперь виртуальные таблицы и общий кэш можно использовать одновременно.
- Выполнено множество упрощений кода и исправлений редких ошибок для обеспечения 100%-го покрытия ветвей тестами.
2009-06-27 (3.6.16)
- Исправлена ошибка (заявка #3929), из-за которой операции INSERT или UPDATE иногда завершались неудачно для индексированной таблицы с самоизменяющимся триггером.
- Прочие мелкие исправления ошибок и оптимизации производительности.
2009-06-15 (3.6.15)
- Переработано внутреннее представление SQL-выражений, чтобы уменьшить использование памяти на встроенных платформах.
- Уменьшен объём используемого стека.
- Исправлена ошибка выравнивания по 64-битной границе в HP/UX и Sparc.
- Семейство интерфейсов sqlite3_create_function() теперь возвращает SQLITE_MISUSE, а не SQLITE_ERROR, если переданы недопустимые комбинации параметров.
- При создании таблиц с помощью CREATE TABLE ... AS SELECT ... типы данных столбцов теперь задаются упрощёнными типами SQLite (TEXT, INT, REAL, NUMERIC или BLOB), а не копируются из исходной таблицы.
- Устранены состояния гонки при проверке наличия горячего журнала отката.
- Интерфейс sqlite3_shutdown() освобождает все мьютексы в windows.
- Повышена устойчивость к повреждённым файлам базы данных.
- Продолжается улучшение тестового набора, а также исправление редких ошибок и несоответствий, выявляемых благодаря этим улучшениям.
2009-05-25 (3.6.14.2)
- Исправлена ошибка генератора кода, появившаяся в версии 3.6.14. При некоторых редких условиях эта ошибка могла приводить к неправильным результатам запросов. Заявка #3879.
2009-05-19 (3.6.14.1)
- Исправлена ошибка в group_concat(), заявка #3841
- Исправлена ошибка производительности в кэше pager, заявка #3844
- Исправлена ошибка в реализации sqlite3_backup, которая могла привести к повреждению резервной копии базы данных. Заявка #3858.
2009-05-07 (3.6.14)
- Добавлен необязательный модуль асинхронного VFS.
- Улучшен оптимизатор запросов: теперь виртуальные таблицы могут использовать операторы OR и IN в предложении WHERE.
- Повышена скорость работы уровней btree и pager.
- Добавлен параметр компиляции SQLITE_HAVE_ISNAN, который позволяет использовать функцию isnan() из стандартной математической библиотеки вместо собственной реализации проверки NaN в SQLite.
- Исправлено множество мелких ошибок, улучшена документация, добавлены и улучшены тесты, упрощён и очищен код.
2009-04-13 (3.6.13)
- Исправлена ошибка в версии 3.6.12, приводившая к аварийному завершению при выполнении count(*) для таблицы sqlite_master пустой базы данных. Заявка #3774.
- Исправлена ошибка в версии 3.6.12, приводившая к аварийному завершению при вставке в таблицу со значением DEFAULT, выражение которого содержит функцию. Заявка #3791.
- Исправлены проблемы выравнивания структур данных в Sparc. Заявка #3777.
- Прочие мелкие исправления ошибок.
2009-03-31 (3.6.12)
- Исправлена ошибка, приводившая к повреждению базы данных при откате incremental_vacuum в базе данных в памяти. Заявка #3761.
- Добавлен интерфейс sqlite3_unlock_notify().
- Добавлена прагма reverse_unordered_selects.
- Размер страницы по умолчанию в windows автоматически подстраивается под возможности базовой файловой системы.
- В CLI добавлена новая команда «.genfkey» для создания триггеров, реализующих ограничения внешних ключей.
- Повышена производительность запросов «count(*)».
- Уменьшен объём используемой динамической памяти, особенно триггерами TRIGGER.
2009-02-18 (3.6.11)
- Добавлен интерфейс горячего резервного копирования.
- В CLI добавлены новые команды «.backup» и «.restore».
- В интерфейс TCL добавлены новые методы backup и restore.
- Улучшены синтаксические диаграммы.
- Различные мелкие исправления ошибок.
2009-01-15 (3.6.10)
- Исправлена проблема согласованности кэша, которая могла привести к повреждению базы данных. Заявка #3584.
2009-01-14 (3.6.9)
- Исправлены две ошибки, которые вместе могли привести к неправильным результатам запросов. По отдельности обе ошибки были безвредны; проблемы возникали только при их сочетании. Заявка #3581.
2009-01-12 (3.6.8)
- Добавлена поддержка вложенных транзакций
- Улучшен оптимизатор запросов: теперь он может использовать несколько индексов для эффективной обработки ограничений, соединённых оператором OR в предложении WHERE.
- Добавлена поддержка скобок в шаблонах запросов FTS3 при использовании параметра компиляции SQLITE_ENABLE_FTS3_PARENTHESIS.
2008-12-16 (3.6.7)
- Реорганизован интерфейс Unix в os_unix.c
- Добавлена поддержка «прокси-блокировок» в Mac OS X.
- Изменён прототип интерфейса sqlite3_auto_extension() таким образом, чтобы сохранить обратную совместимость, но при этом в новых сборках приложений, использующих этот интерфейс, могут появиться предупреждения.
- Изменена сигнатура метода xDlSym объекта sqlite3_vfs таким образом, чтобы сохранить обратную совместимость, но при этом могут появиться предупреждения компилятора.
- Добавлены избыточные приведения типов и инициализации переменных для подавления лишних предупреждений компилятора.
- Исправлены различные мелкие ошибки.
2008-11-26 (3.6.6.2)
- Исправлена ошибка в алгоритме удаления из B-дерева, которая, по всей видимости, могла привести к повреждению базы данных. Ошибка впервые появилась в версии 3.6.6 после фиксации [5899] от 2008-11-13.
- Исправлена утечка памяти, возникавшая после ошибки ввода-вывода диска.
2008-11-22 (3.6.6.1)
- Исправлена ошибка в кэше страниц, которая могла привести к повреждению базы данных после отката. Эта ошибка впервые появилась в версии 3.6.4.
- Исправлены ещё две совсем мелкие ошибки.
2008-11-19 (3.6.6)
- Исправлено определение #define, мешавшее компиляции memsys5
- Исправлена проблема в механизме фиксации виртуальных таблиц, приводившая к сбою в FTS3. Заявка #3497.
- Добавлен кэш страниц, определяемый приложением
- Добавлена встроенная поддержка VxWorks
2008-11-12 (3.6.5)
- В прагму journal_mode добавлен параметр MEMORY.
- Добавлен интерфейс sqlite3_db_mutex().
- Добавлен параметр компиляции SQLITE_OMIT_TRUNCATE_OPTIMIZATION.
- Исправлена оптимизация truncate, чтобы интерфейсы sqlite3_changes() и sqlite3_total_changes(), а также прагма count_changes возвращали правильные значения.
- Добавлен интерфейс sqlite3_extended_errcode().
- Команда COMMIT теперь завершается успешно, даже если есть ожидающие запросы. Она возвращает SQLITE_BUSY, если есть ожидающие запросы ввода-вывода для инкрементальных BLOB.
- При попытке выполнить ROLLBACK, пока ожидает завершения один или несколько запросов, код ошибки теперь меняется на SQLITE_BUSY (вместо SQLITE_ERROR).
- Полностью удалена поддержка экспериментальных распределителей памяти memsys4 и memsys6.
- Добавлен параметр компиляции SQLITE_ZERO_MALLOC.
2008-10-15 (3.6.4)
- Добавлена поддержка параметров LIMIT и предложений ORDER BY для операторов DELETE и UPDATE. Работает только при компиляции SQLite с параметром SQLITE_ENABLE_UPDATE_DELETE_LIMIT.
- Добавлен интерфейс sqlite3_stmt_status() для мониторинга производительности.
- Добавлено предложение INDEXED BY.
- Расширение LOCKING_STYLE теперь включено по умолчанию в Mac OS X.
- В PRAGMA journal_mode добавлен параметр TRUNCATE.
- Повышена производительность логики балансировки деревьев на уровне B-Tree.
- Добавлены исходный код и документация для программы genfkey, автоматически создающей триггеры для обеспечения соблюдения ограничений внешних ключей.
- Добавлен параметр компиляции SQLITE_OMIT_TRUNCATE_OPTIMIZATION.
- Документация по языку SQL переведена на использование синтаксических диаграмм вместо BNF.
- Прочие мелкие исправления ошибок.
2008-09-22 (3.6.3)
- Исправлена ошибка в логике SELECT DISTINCT, появившаяся в предыдущей версии.
- Прочие мелкие исправления ошибок.
2008-08-30 (3.6.2)
- Подсистема pager разделена на отдельные подсистемы pager и pcache.
- Процедуры разрешения идентификаторов вынесены в отдельные файлы.
- Исправления ошибок.
2008-08-06 (3.6.1)
- Добавлен распределитель памяти lookaside, обеспечивший прирост скорости более чем на 15% для некоторых нагрузок. (Результаты могут отличаться.)
- В sqlite3_config() добавлена команда SQLITE_CONFIG_LOOKASIDE для управления конфигурацией lookaside по умолчанию.
- В интерфейс sqlite3_status() добавлены команды SQLITE_STATUS_PAGECACHE_SIZE и SQLITE_STATUS_SCRATCH_SIZE.
- Изменены SQLITE_CONFIG_PAGECACHE и SQLITE_CONFIG_SCRATCH: из расчёта размера буфера удалено магическое число «+4».
- Добавлены интерфейсы sqlite3_db_config() и sqlite3_db_status() для раздельного управления распределителем lookaside и мониторинга его работы для каждого подключения к базе данных.
- Многочисленные другие улучшения производительности.
- Различные мелкие исправления ошибок.
2008-07-16 (3.6.0 beta)
- Изменён интерфейс виртуальной файловой системы для поддержки более широкого спектра встроенных систем. Дополнительные сведения см. в 35to36.html. *** Потенциально несовместимое изменение ***
- Теперь все макросы препроцессора C, управляющие параметрами компиляции, начинаются с префикса «SQLITE_». Это может потребовать изменений в приложениях, которые компилируют SQLite с помощью собственных make-файлов и нестандартных параметров компиляции, поэтому мы помечаем это изменение как *** Потенциально несовместимое изменение ***
- Параметр компиляции SQLITE_MUTEX_APPDEF больше не поддерживается. Альтернативные реализации мьютексов теперь можно добавлять во время выполнения с помощью интерфейса sqlite3_config() и команды SQLITE_CONFIG_MUTEX. *** Потенциально несовместимое изменение ***
- Обработка операторов IN и NOT IN, в правом выражении которых содержится NULL, приведена в соответствие со стандартом SQL и другими движками баз данных SQL. Это исправление ошибки, однако оно может нарушить работу старых приложений, зависящих от прежнего некорректного поведения, поэтому мы помечаем его как *** Потенциально несовместимое изменение ***
- Имена столбцов результатов, создаваемых составными подзапросами, упрощены: теперь они содержат только имя столбца исходной таблицы, без имени таблицы. Благодаря этому SQLite ведёт себя более похоже на другие движки баз данных SQL.
- Добавлен интерфейс sqlite3_config() для настройки всей библиотеки SQLite во время выполнения.
- Добавлен интерфейс sqlite3_status() для получения сведений о состоянии библиотеки SQLite в целом и её подсистем во время выполнения.
- Добавлены интерфейсы sqlite3_initialize() и sqlite3_shutdown().
- В sqlite3_open_v2() добавлен параметр SQLITE_OPEN_NOMUTEX.
- Добавлена команда PRAGMA page_count.
- Добавлен интерфейс sqlite3_next_stmt().
- Добавлена новая виртуальная таблица R*Tree
2008-05-14 (3.5.9)
- Добавлена экспериментальная поддержка прагмы journal_mode и постоянного журнала.
- Режим журнала PERSIST используется по умолчанию в режиме эксклюзивной блокировки.
- Исправлено снижение производительности при LEFT JOIN (см. заявку #3015), случайно появившееся в версии 3.5.8.
- Улучшение производительности: переработаны внутренние процедуры, используемые для интерпретации и вывода целых чисел переменной длины.
- Исправлена проблема выхода за границы буфера в sqlite3_mprintf(), возникавшая при передаче строки без завершающего нуля в «%.*s».
- При обработке значения NaN с плавающей точкой IEEE оно всегда преобразуется в NULL. (Заявка #3060)
- Гарантировано, что соединение, ожидающее освобождения блокировки RESERVED, сможет продолжить работу после её освобождения. (Заявка #3093)
- Скрипты «configure» теперь должны автоматически настраивать системы Unix для поддержки больших файлов. Улучшены сообщения об ошибках при обнаружении больших файлов, если поддержка больших файлов отключена.
- Предотвращены утечки страниц кэша после ошибок заполнения диска или ввода-вывода.
- А также множество других мелких исправлений ошибок и улучшений производительности....
2008-04-16 (3.5.8)
- Предоставлен доступ к внутреннему генератору псевдослучайных чисел SQLite (PRNG) через интерфейс sqlite3_randomness()
- Добавлен интерфейс sqlite3_context_db_handle(), возвращающий дескриптор соединения с базой данных, вызвавшего определённую приложением функцию SQL.
- Новый интерфейс sqlite3_limit() позволяет устанавливать ограничения на размер и длину отдельно для каждого соединения и во время выполнения.
- Повышена устойчивость к сбоям: размер страницы базы данных записывается в заголовок журнала отката.
- Команде VACUUM разрешено изменять размер страницы файла базы данных.
- Методу xAccess() VFS разрешено возвращать -1, чтобы сигнализировать об ошибке выделения памяти.
- Повышена производительность: опкод OP_IdxDelete использует распакованные записи, благодаря чему больше не требуется вызывать опкод OP_MakeRecord для каждой удаляемой записи индекса.
- Повышена производительность: постоянные подвыражения выносятся за пределы циклов.
- Повышена производительность: результаты OP_Column повторно используются вместо выполнения нескольких опкодов OP_Column.
- Исправлена ошибка в последовательности сортировки RTRIM.
- Исправлена ошибка в параметре SQLITE_SECURE_DELETE, вызывавшая сбои Firefox. Перед каждым выпуском теперь обязательно проверяется SQLITE_SECURE_DELETE.
- Прочие улучшения производительности.
- Прочие небольшие исправления ошибок.
2008-03-17 (3.5.7)
- Исправлена ошибка (заявка #2927) в распределении регистров для составных запросов SELECT — она появилась вместе с новым кодом виртуальной машины в версии 3.5.5.
- В ALTER TABLE для заключения имён файлов в кавычки используются двойные кавычки вместо одинарных.
- Для уменьшения размера материализованного VIEW в операторе UPDATE или DELETE используется предложение WHERE. (Оптимизация)
- Оптимизация уплощения не применяется, если внешний запрос является агрегатным, а внутренний запрос содержит ORDER BY. (Заявка #2943)
- Дополнительные обновления для OS/2
- Добавлен экспериментальный распределитель памяти с выделением блоков размера, равного степени двойки, методом first-fit.
- Удалены все вызовы sprintf() из кода
- В конце строк даты в качестве часового пояса UTC допускается символ "Z"
- Исправлена ошибка в оптимизаторе LIKE, возникавшая, когда последним символом перед первым подстановочным знаком была заглавная буква "Z"
- Добавлен объект "bitvec" для отслеживания страниц, записанных в журнал. Это повышает скорость и снижает потребление памяти, особенно для больших файлов баз данных.
- Снова включена работа макроса SQLITE_ENABLE_LOCKING_STYLE в Mac OS X.
- Журнал операторов сохраняется во временном каталоге, а не рядом с файлом базы данных.
- Много улучшений и упрощений в сценарии configure
2008-02-06 (3.5.6)
- Исправлена ошибка (заявка #2913), из-за которой виртуальные таблицы не работали в LEFT JOIN. Проблема появилась незадолго до выпуска версии 3.5.5.
- Обновлён уровень портирования для OS/2.
- Добавлен новый API sqlite3_result_error_code(); он используется в реализации ATTACH, чтобы при ошибке ATTACH возвращались правильные коды ошибок.
2008-01-31 (3.5.5)
- Базовая виртуальная машина преобразована в машину с регистрами вместо машины со стеком. Единственное видимое пользователю изменение — в выводе EXPLAIN.
- Добавлена встроенная последовательность сортировки RTRIM.
2007-12-14 (3.5.4)
- Исправлена критическая ошибка в UPDATE или DELETE, возникавшая, когда предложение OR REPLACE или триггер приводили к удалению строк той же таблицы в качестве побочного эффекта. (См. заявку #2832.) Наиболее вероятный результат этой ошибки — ошибка сегментации, однако возможна и порча базы данных.
- Обработка ORDER BY приведена в соответствие со стандартом SQL для случаев, когда имя результата и имя столбца таблицы конфликтуют. Правильное поведение — отдавать предпочтение имени результата. В старых версиях SQLite ошибочно выбирался столбец таблицы. (См. заявку #2822.)
- Команда VACUUM сохраняет значение прагмы legacy_file_format. (Заявка #2804.)
- Функция SQL group_concat() подготовлена к выпуску и получила официальную поддержку.
- Улучшена оптимизация некоторых выражений с оператором IN.
- Добавлена возможность менять состояние auto_vacuum базы данных: для этого нужно задать прагму auto_vaccum и выполнить VACUUM.
- Поиск по префиксу в FTS3 стал намного эффективнее.
- В CLI ослаблено ограничение на длину оператора SQL, чтобы вывод команды ".dump" для баз данных с очень большими BLOB-объектами и строками можно было выполнить для воссоздания базы данных.
- Другие небольшие исправления ошибок и оптимизации.
2007-11-27 (3.5.3)
- Файлы веб-сайта и документации перенесены из дерева исходного кода в отдельную систему управления версиями.
- Исправлена давняя ошибка в операторах INSERT INTO ... SELECT ..., когда SELECT является составным.
- Исправлена давняя ошибка в RAISE(IGNORE), используемом в триггерах BEFORE.
- Исправлен приоритет оператора ~.
- В Win32 при попытке удалить несуществующий файл ошибка больше не возвращается.
- Разрешено заключать имена последовательностей сортировки в кавычки.
- Интерфейс TCL изменён для использования sqlite3_prepare_v2().
- Исправлено несколько ошибок, возникавших после сбоя malloc().
- sqlite3_step() возвращает SQLITE_MISUSE, а не аварийно завершает работу, если вызван с параметром NULL.
- Теперь FTS3 использует исключительно распределитель памяти SQLite. Теперь амальгамацию FTS3 можно добавить к амальгамации SQLite, создав общую супер-амальгамацию.
- Ключевое слово DISTINCT теперь иногда использует INDEX, если доступен подходящий индекс и оптимизатор считает, что это может быть полезно.
2007-11-05 (3.5.2)
- Прекращена поддержка параметра компиляции SQLITE_OMIT_MEMORY_ALLOCATION.
- В Windows файлы всегда открываются с флагом FILE_FLAG_RANDOM_ACCESS.
- Третий параметр встроенной функции SUBSTR() теперь необязателен.
- Исправлена ошибка: при повторном разборе схемы после её изменения авторизатор больше не вызывается.
- В mem3.c добавлен экспериментальный распределитель памяти без malloc.
- Виртуальная машина хранит 64-битные целочисленные константы и константы с плавающей точкой в двоичном, а не текстовом виде, что повышает производительность.
- Исправлено состояние гонки в test_async.c.
- В CLI добавлена команда ".timer"
2007-10-04 (3.5.1)
- Обратите внимание: В этом выпуске мы не используем термины "alpha" или "beta", поскольку код стабилен и потому что при использовании этих терминов никто не станет обновляться. Тем не менее мы оставляем за собой право в будущих выпусках вносить несовместимые изменения в новый интерфейс VFS.
- Исправлена ошибка при обработке ошибок SQLITE_FULL, которая могла привести к повреждению базы данных. Заявка #2686.
- Драйвер test_async.c теперь выполняет полную блокировку файлов и корректно работает, когда несколько процессов одновременно используют одну базу данных.
- CLI игнорирует пробельные символы (включая комментарии) в конце строк
- Проверено, что оптимизатор запросов учитывает зависимости от всех частей составного оператора SELECT. Заявка #2640.
- Добавлен демонстрационный код, показывающий, как создать VFS для необработанного накопителя без файловой системы.
- В метод уровня VFS xGetTempname() добавлен параметр размера выходного буфера.
- Ошибки SQLITE_FULL или SQLITE_IOERR, зафиксированные в pager, сбрасываются при начале новой транзакции.
2007-09-04 (3.5.0) alpha
- Переработан уровень интерфейса ОС. Подробности см. в 34to35.html. *** Потенциально несовместимое изменение ***
- Интерфейсы sqlite3_release_memory(), sqlite3_soft_heap_limit() и sqlite3_enable_shared_cache() теперь работают во всех потоках процесса, а не только в том потоке, из которого они вызваны. *** Потенциально несовместимое изменение ***
- Добавлен интерфейс sqlite3_open_v2().
- Подсистема выделения памяти реализована заново и теперь может заменяться во время компиляции.
- Создана новая подсистема мьютексов, которую можно заменить во время компиляции.
- Теперь одно и то же соединение с базой данных можно одновременно использовать из разных потоков.
2007-08-13 (3.4.2)
- Исправлена ошибка, приводившая к повреждению базы данных, если команда ROLLBACK выполнялась в режиме auto-vacuum при очень низком значении sqlite3_soft_heap_limit. Заявка #2565.
- Добавлена возможность выполнять полный регрессионный тест при низком значении sqlite3_soft_heap_limit.
- Исправлены другие небольшие проблемы, связанные с использованием низких ограничений мягкого предела кучи.
- Обходной путь для ошибки GCC 32575.
- Улучшено обнаружение ошибок при неправильном использовании агрегатных функций.
- Улучшен сценарий создания амальгамации: теперь все символы имеют префикс SQLITE_PRIVATE или SQLITE_API.
2007-07-20 (3.4.1)
- Исправлена ошибка в VACUUM, которая могла привести к повреждению базы данных, если два процесса одновременно подключены к базе данных, один выполняет VACUUM, а другой после этого изменяет базу данных.
- При вычислении последовательности сортировки для выражения выражение "+column" теперь считается эквивалентным выражению "column".
- В языковом интерфейсе TCL "@variable" всегда связывается как BLOB, в отличие от "$variable".
- Добавлена PRAGMA freelist_count для определения текущего размера списка свободных страниц.
- Значение PRAGMA auto_vacuum=incremental теперь сохраняется.
- Для всех открытых файлов в Unix добавлен FD_CLOEXEC.
- Исправлена ошибка в оптимизации min()/max() при применении к индексам в порядке убывания.
- Проверено, что языковой интерфейс TCL правильно работает с 64-битными целыми числами на 64-битных машинах.
- В операторах SQL разрешён целочисленный литерал -9223372036854775808.
- Добавлена возможность использовать «скрытые» столбцы в виртуальных таблицах.
- Для всех внутренних функций в амальгамации используется макрос SQLITE_PRIVATE (по умолчанию равный "static").
- В FTS2 добавлены подключаемые токенизаторы и поддержка токенизации ICU.
- Другие небольшие исправления ошибок и улучшения документации
2007-06-18 (3.4.0)
- Исправлена ошибка, которая могла привести к повреждению базы данных, если ошибка SQLITE_BUSY возникала в ходе явной транзакции, а позже эта транзакция фиксировалась. Заявка #2409.
- Исправлена ошибка, которая могла привести к повреждению базы данных, если был включён режим autovacuum и после оператора CREATE TABLE или CREATE INDEX, который следовал за переполнением кэша внутри транзакции, происходил сбой malloc(). См. заявку #2418.
- Добавлены явные верхние пределы для размеров и количества объектов, которые может обрабатывать SQLite. Это изменение может вызвать проблемы совместимости в приложениях, использующих SQLite в экстремальных масштабах, поэтому текущая версия — 3.4.0, а не 3.3.18.
- Добавлена поддержка инкрементального ввода-вывода BLOB.
- Добавлены API sqlite3_bind_zeroblob() и функция SQL zeroblob().
- Добавлена поддержка инкрементального VACUUM.
- Добавлен параметр компиляции SQLITE_MIXED_ENDIAN_64BIT_FLOAT для поддержки процессоров ARM7 с необычным порядком байтов.
- Из основной библиотеки удалены все вызовы sprintf() и strcpy().
- В расширения полнотекстового поиска добавлена поддержка International Components for Unicode (ICU).
- В драйвере ОС Windows при неудачной попытке получить EXCLUSIVE-блокировку повторно запрашивается SHARED-блокировка. Заявка #2354
- Функция REPLACE() исправлена так, чтобы возвращать NULL, если второй аргумент — пустая строка. Заявка #2324.
- В документацию добавлены сведения об опасности преобразований типов в sqlite3_column_blob() и связанных API. Устранены ненужные преобразования типов. Заявка #2321.
- Функция TRIM() локализована. Заявка #2323
- При перемещении данных между потенциально перекрывающимися областями памяти используется memmove() вместо memcpy(). Заявка #2334
- Исправлена ошибка оптимизатора, связанная с подзапросами в составном SELECT, содержащем предложения ORDER BY и LIMIT. Заявка #2339.
- Исправлена ошибка: интерфейс sqlite3_snprintf() не обнуляет завершающий байт буфера, если размер буфера меньше 1. Заявка #2341
- Встроенная логика printf исправлена: для NaN с плавающей точкой выводится "NaN", а не "Inf". Заявка #2345
- При преобразовании BLOB в TEXT используется текстовая кодировка основной базы данных. Заявка #2349
- При приведении к NUMERIC сохраняется полная точность целых чисел (если это возможно). Заявка #2364
- Исправлена ошибка при обработке кодовой точки UTF16 0xE000
- При сопоставлении ограничений WHERE с индексами в оптимизаторе запросов учитываются явные предложения COLLATE. Заявка #2391
- Оптимизатор запросов исправлен для корректной обработки постоянных выражений в предложении ON оператора LEFT JOIN. Заявка #2403
- Оптимизатор запросов исправлен для корректной обработки сравнений rowid с NULL. Заявка #2404
- Исправлено множество потенциальных ошибок сегментации, которые могли вызываться вредоносными операторами SQL.
2007-04-25 (3.3.17)
- Если значение "write_version" в заголовке базы данных превышает поддерживаемое библиотекой, база данных открывается только для чтения, а не становится нечитаемой.
- Другие небольшие исправления ошибок
2007-04-18 (3.3.16)
- Исправлена ошибка, из-за которой VACUUM завершался с ошибкой, если в столбце UNIQUE встречались значения NULL.
- Возвращены улучшения производительности, добавленные в версии 3.3.14, но утратившие силу в версии 3.3.15.
- Исправлены проблемы с обработкой выражений ORDER BY в составных операторах SELECT внутри подзапросов.
- Исправлена потенциальная ошибка сегментации при уничтожении блокировок в WinCE в многопоточной среде.
- Обновлена документация.
2007-04-09 (3.3.15)
- Исправлена ошибка, появившаяся в версии 3.3.14: откат CREATE TEMP TABLE оставлял соединение с базой данных в нерабочем состоянии.
- Исправлена ошибка, из-за которой возвращалась лишняя строка NULL, если нисходящий запрос прерывался изменением базы данных.
- Предложение FOR EACH STATEMENT в триггере теперь вызывает синтаксическую ошибку. Раньше оно молча игнорировалось.
- Исправлена малозаметная и относительно безвредная проблема, которая могла приводить к утечке ресурсов после ошибки ввода-вывода.
- В набор тестов внесено множество улучшений. Покрытие тестами теперь превышает 98%.
2007-04-02 (3.3.14)
- Исправлена ошибка (заявка #2273), которая могла привести к ошибке сегментации, если оператор IN применялся к одному из столбцов двухстолбцового индекса, а правая часть оператора IN содержала NULL.
- Добавлен новый метод интерфейса ОС для определения размера сектора носителя: sqlite3OsSectorSize().
- Новый алгоритм для операторов вида INSERT INTO table1 SELECT * FROM table2 работает быстрее и уменьшает фрагментацию. VACUUM использует операторы этого вида, поэтому теперь выполняется быстрее и эффективнее устраняет фрагментацию.
- Повышена производительность за счёт сокращения операций ввода-вывода с диском:
- При удалении строки не считывается последняя страница цепочки переполнения — она просто добавляется в список свободных страниц.
- Удаляемые страницы не сохраняются в журнале отката.
- Содержимое страниц, извлечённых из списка свободных страниц, не считывается, поскольку оно не имеет значения.
- Кэш страниц не сбрасывается (что позволяет избежать повторного заполнения кэша), пока другой процесс не изменит базовый файл базы данных.
- При фиксации транзакции в режиме эксклюзивного доступа или при фиксации базы данных TEMP журнал отката усекается, а не удаляется.
- Добавлена поддержка режима эксклюзивного доступа с помощью "PRAGMA locking_mode=EXCLUSIVE"
- Для больших буферов в pager используется куча, а не стек — это полезно на встраиваемых платформах с ограниченным размером стека.
- Добавлена цель makefile "sqlite3.c", создающая амальгамацию с кодом библиотеки SQLite в одном файле.
- Обеспечена корректная работа библиотеки при компиляции с параметром GCC "-fstrict-aliasing".
- Удалена устаревшая ошибка SQLITE_PROTOCOL.
- Улучшено покрытие тестами, исправлены другие небольшие ошибки, устранены утечки памяти, в некоторых местах реорганизован и/или улучшен читаемость кода.
2007-02-13 (3.3.13)
- В вывод sqlite3_analyzer добавлен показатель «фрагментация».
- Добавлен оператор COLLATE, который позволяет явно задать последовательность сортировки для выражения. Эта возможность считается экспериментальной до проведения дополнительных тестов.
- В соединении теперь может участвовать до 64 таблиц — прежнее ограничение составляло 32.
- Добавлены две новые экспериментальные функции: randomblob() и hex(). Они предназначены для упрощения генерации UUID.
- Исправлена проблема, из-за которой PRAGMA count_changes возвращала неверные результаты для обновлений таблиц с триггерами
- Исправлена ошибка оптимизатора предложения ORDER BY в соединениях, где крайняя левая таблица ограничена индексом UNIQUE.
- Исправлена ошибка в методе "copy" интерфейса TCL.
- Исправлены ошибки в модулях fts1 и fts2.
2007-01-27 (3.3.12)
- Исправлена ещё одна ошибка в оптимизации IS NULL, добавленной в версии 3.3.9.
- Исправлена ошибка проверки утверждения, возникавшая во вложенных друг в друга представлениях.
- Ограничен объём вывода, генерируемого командой PRAGMA integrity_check.
- Внесены небольшие синтаксические изменения для поддержки большего числа компиляторов.
2007-01-22 (3.3.11)
- Исправлена ещё одна ошибка в реализации нового API sqlite3_prepare_v2(). Рано или поздно мы всё-таки добьёмся правильной работы...
- Исправлена ошибка в оптимизации IS NULL, добавленной в версии 3.3.9: она приводила к неверным результатам для некоторых LEFT JOIN, в предложении WHERE которых было ограничение IS NULL для правой таблицы LEFT JOIN.
- В WinCE AreFileApisANSI() сделан пустым макросом, поскольку WinCE не поддерживает эту функцию.
2007-01-09 (3.3.10)
- Исправлены ошибки в реализации нового API sqlite3_prepare_v2(), которые могли приводить к ошибкам сегментации.
- Исправлены ошибки округления на 1 секунду в функции strftime()
- Улучшен уровень ОС Windows: теперь он предоставляет подробные коды ошибок
- Добавлен обходной путь для проблемы в win2k, чтобы SQLite могла использовать имена файлов баз данных из одного символа
- Прагмы user_version и schema_version теперь правильно задают имена столбцов в результирующем наборе
- Обновлена документация
2007-01-04 (3.3.9)
- Исправлены ошибки в pager.c, которые могли привести к повреждению базы данных, если два процесса одновременно пытались восстановить горячий журнал
- Добавлен API sqlite3_prepare_v2().
- В командной оболочке исправлена команда ".dump": она снова выводит индексы, триггеры и представления.
- Изменена прагма table_info: если значение по умолчанию не задано, для него возвращается NULL
- Добавлена поддержка не-ASCII символов в именах файлов в win95
- Улучшения оптимизатора запросов:
- Оптимизатор лучше использует индексы для выполнения предложений ORDER BY, сортирующих по целочисленному первичному ключу
- Для оператора IS NULL в предложении WHERE используется индекс
- Исправлена ошибка, из-за которой оптимизатор упускал возможность оптимизации OR
- Оптимизатор получил больше свободы при перестановке таблиц в предложении FROM, в том числе при наличии LEFT JOIN.
- В WinCE добавлена поддержка загрузки расширений
- В определении таблицы разрешены имена ограничений для предложения DEFAULT
- В командную оболочку добавлена команда ".bail"
- Вывод CSV (значения, разделённые запятыми) из командной оболочки приведён в большее соответствие с общепринятой практикой
- Добавлен экспериментальный модуль FTS2
- Для устранения зависимостей от libc вместо strdup() используется sqlite3_mprintf()
- VACUUM использует временный файл в официальном каталоге TEMP, а не в том же каталоге, что и исходная база данных
- Префикс временных файлов в Windows изменён с "sqlite" на "etilqs".
2006-10-09 (3.3.8)
- Добавлена поддержка полнотекстового поиска с помощью модуля FTS1 (бета-версия)
- Добавлены исправления блокировок для Mac OS X (бета-версия — по умолчанию отключены)
- Добавлены расширенные коды ошибок и коды для различных типов ошибок ввода-вывода.
- Добавлена поддержка IF EXISTS в CREATE/DROP TRIGGER/VIEW
- Исправлен набор регрессионных тестов для работы с Tcl8.5
- Расширена функция sqlite3_set_authorizer(): теперь она уведомляет о вызовах функций SQL.
- Добавлен экспериментальный API: sqlite3_auto_extension()
- Различные небольшие исправления ошибок
2006-08-12 (3.3.7)
- Добавлена поддержка виртуальных таблиц (бета-версия)
- Добавлена поддержка динамически загружаемых расширений (бета-версия)
- Функцию sqlite3_interrupt() можно вызывать из другого потока
- Добавлен оператор MATCH.
- Теперь по умолчанию используется формат файла 1.
2006-06-06 (3.3.6)
- Повышена совместимость с антивирусными сканерами в Windows
- Ускорена работа баз данных :memory:
- Исправлена редкая ошибка сегментации при преобразовании UTF-8 в UTF-16
- Добавлен драйвер для OS/2
- Исправлены метаданные столбцов, возвращаемые для агрегатных запросов
- Улучшен вывод EXPLAIN QUERY PLAN
- Теперь LIMIT 0 работает для подзапросов
- Исправлены ошибки и повышена производительность оптимизатора запросов
- Обеспечена корректная обработка имён файлов NULL в ATTACH и DETACH
- Улучшены сообщения о синтаксических ошибках в анализаторе
- Исправлены правила приведения типов для оператора IN
2006-04-05 (3.3.5)
- В ограничениях CHECK правильно применяются алгоритмы разрешения конфликтов.
- Функция SUM() выдаёт ошибку при переполнении целого числа.
- Имена столбцов составного запроса выбираются из крайнего левого SELECT, а не из крайнего правого.
- Функция sqlite3_create_collation() учитывает флаг SQLITE_UTF16_ALIGNED.
- Параметр компиляции SQLITE_SECURE_DELETE заставляет при удалении перезаписывать старые данные нулями.
- В abs() обнаруживается переполнение целого числа.
- Функция random() возвращает 64 случайных бита вместо 32.
- Анализатор обнаруживает и сообщает о переполнении стека автомата.
- Функция round() изменена: теперь она возвращает REAL вместо TEXT.
- В предложения WHERE для левой таблицы LEFT OUTER JOIN разрешено включать агрегатные подзапросы.
- При преобразовании текста в число пропускаются начальные пробелы.
- Различные небольшие исправления ошибок и опечаток в документации, а также улучшения производительности.
2006-02-11 (3.3.4)
- Исправлена ошибка в реализации мьютексов Unix, которая могла привести к взаимной блокировке в многопоточных системах.
- Исправлена проблема выравнивания на 64-битных машинах
- Добавлена прагма fullfsync.
- Исправлена ошибка оптимизатора, из-за которой некоторые необычные LEFT OUTER JOIN могли возвращать неверные результаты.
- Функция SUM обнаруживает переполнение целого числа и переключается на накопление приблизительного результата с использованием чисел с плавающей точкой
- Для совместимости с SQL Server имена параметров узла могут начинаться с '@'.
- Другие исправления различных ошибок
2006-01-31 (3.3.3)
- Удалена поддержка предложения ON CONFLICT в CREATE INDEX: оно никогда не работало правильно, поэтому проблем обратной совместимости возникнуть не должно.
- Обратный вызов авторизатора теперь получает уведомления о командах ALTER TABLE ADD COLUMN
- После любых изменений схемы базы данных TEMP все подготовленные операторы становятся недействительными и должны быть созданы заново вызовом sqlite3_prepare()
- Другие небольшие исправления ошибок в рамках подготовки к первому стабильному выпуску версии 3.3
2006-01-24 (3.3.2 beta)
- Исправления ошибок и повышение скорости. Улучшено покрытие тестами.
- Изменён интерфейс уровня ОС: мьютексы теперь должны быть рекурсивными.
- Прекращено использование данных, специфичных для потока, при обработке исключений нехватки памяти
2006-01-16 (3.3.1 alpha)
- Исправлено бесчисленное множество ошибок
- Повышена скорость
- Теперь соединения с базами данных можно использовать в нескольких потоках, а не только в потоке, в котором они были созданы.
2006-01-11 (3.3.0 alpha)
- Ограничения CHECK
- Предложения IF EXISTS и IF NOT EXISTS в CREATE/DROP TABLE/INDEX.
- Индексы DESC
- Более эффективная кодировка логических значений, уменьшающая размер файлов баз данных
- Более агрессивная оптимизация SQLITE_OMIT_FLOATING_POINT
- Раздельные типы сродства INTEGER и REAL
- Добавлен виртуальный функциональный уровень для интерфейса ОС
- В интерфейс TCL добавлен метод "exists"
- Улучшена обработка ошибок нехватки памяти
- Кэш базы данных можно при необходимости совместно использовать между соединениями в одном потоке
- Необязательная изоляция READ UNCOMMITTED (вместо уровня изоляции SERIALIZABLE по умолчанию) и блокировка на уровне таблиц при совместном использовании общего кэша соединениями с базой данных.
2005-12-19 (3.2.8)
- Исправлена редкая ошибка, которая могла привести к повреждению базы данных при следующих необычных обстоятельствах: большой оператор INSERT или UPDATE, являющийся частью ещё более крупной транзакции, завершается ошибкой из-за ограничения уникальности, но содержащая его транзакция фиксируется.
2005-12-19 (2.8.17)
- Исправлена редкая ошибка, которая могла привести к повреждению базы данных при следующих необычных обстоятельствах: большой оператор INSERT или UPDATE, являющийся частью ещё более крупной транзакции, завершается ошибкой из-за ограничения уникальности, но содержащая его транзакция фиксируется.
2005-09-24 (3.2.7)
- В GROUP BY значения NULL снова считаются равными, как и должно быть
- Теперь выполняется компиляция в Solaris, OpenBSD и других вариантах Unix, где отсутствует функция fdatasync()
- Снова выполняется компиляция в MSVC++6
- Исправлены неинициализированные переменные, вызывавшие сбои в различных редких запросах
- Обеспечено правильное вычисление LEFT OUTER JOIN, ограниченного только по левой таблице
2005-09-17 (3.2.6)
- Исправлена ошибка, которая могла привести к повреждению базы данных, если VACUUM (или autovacuum) завершался сбоем и откатывался в базе данных размером более 1 ГиБ
- Оптимизация LIKE теперь работает для столбцов с COLLATE NOCASE
- Для ORDER BY и GROUP BY теперь используется ограниченный объём памяти
- Добавлена поддержка COUNT(DISTINCT expr)
- Изменена обработка значений NULL в SUM() для соответствия стандарту SQL
- Для небольшого ускорения фиксации транзакций там, где возможно, используется fdatasync() вместо fsync()
- Использование ключевого слова CROSS в соединении отключает оптимизацию перестановки таблиц
- Добавлена экспериментальная и недокументированная возможность EXPLAIN QUERY PLAN
- В Windows используется API Unicode
2005-08-27 (3.2.5)
- Исправлена ошибка, влиявшая на операторы DELETE и UPDATE, изменявшие более 40960 строк.
- Изменён makefile: теперь он не требует расширений GNUmake
- Исправлен параметр --enable-threadsafe в сценарии configure
- Исправлена ошибка генератора кода, возникавшая, когда левая часть оператора IN была константой, а правая — оператором SELECT
- Оператор PRAGMA synchronous=off теперь отключает синхронизацию главного файла журнала в дополнение к обычным журналам отката
2005-08-24 (3.2.4)
- Исправлена ошибка, появившаяся в предыдущем выпуске и способная вызвать ошибку сегментации при генерации кода для сложных предложений WHERE.
- Разрешено начинать или заканчивать литералы с плавающей точкой десятичной точкой.
2005-08-21 (3.2.3)
- Добавлена поддержка оператора CAST
- Интерфейс Tcl позволяет передавать значения BLOB пользовательским функциям
- В интерфейс Tcl добавлен метод "transaction"
- Разрешено использовать в качестве значения DEFAULT для столбца вызовы функций с константными операндами
- Добавлена команда ANALYZE для сбора статистики по индексам и использования этой статистики при выборе индекса оптимизатором
- Снято ограничение (ранее 100) на количество условий в предложении WHERE
- Правая часть оператора IN теперь может быть списком выражений, а не только списком констант
- Оптимизатор переработан, чтобы он мог эффективнее использовать индексы
- Порядок таблиц в соединении теперь автоматически корректируется для более эффективного использования индексов
- Оператор IN теперь может оптимизироваться, даже если его левая часть не является самым левым условием индекса. С одним индексом можно использовать несколько операторов IN.
- Выражения в предложении WHERE с операторами BETWEEN и OR теперь могут оптимизироваться
- Добавлена прагма "case_sensitive_like" и параметр компиляции SQLITE_CASE_SENSITIVE_LIKE, устанавливающий для нее значение по умолчанию "on".
- При включенной прагме case_sensitive_like для обработки выражений GLOB и LIKE также используются индексы
- Добавлена поддержка заключения идентификаторов в обратные кавычки для совместимости с MySQL
- Улучшено покрытие тестами
- Исправлены десятки мелких ошибок
2005-06-12 (3.2.2)
- Добавлен API sqlite3_db_handle()
- Добавлен API sqlite3_get_autocommit()
- В синтаксический анализатор добавлен оператор REGEXP. В стандартной сборке нет функции, реализующей этот оператор, но пользователи могут добавить собственную с помощью sqlite3_create_function()
- Повышена скорость и уменьшен размер библиотеки.
- Исправлены проблемы с выравниванием байтов в 64-разрядных архитектурах.
- Исправлено множество мелких ошибок и обновлена документация.
2005-03-29 (3.2.1)
- Исправлена ошибка выделения памяти в новом комментарии ADD COLUMN.
- Обновлена документация
2005-03-21 (3.2.0)
- Добавлена поддержка ALTER TABLE ADD COLUMN.
- Добавлена поддержка разделителя "T" в строках даты и времени ISO-8601.
- Улучшена поддержка Cygwin.
- Исправлено множество ошибок и обновлена документация.
2005-03-17 (3.1.6)
- Исправлена ошибка, которая могла привести к повреждению базы данных при добавлении записей в таблицы примерно со 125 столбцами.
- Теперь sqlite3_step() с большей вероятностью вызывает обработчик занятости и с меньшей вероятностью возвращает SQLITE_BUSY.
- Исправлены утечки памяти, возникавшие после сбоя malloc().
2005-03-11 (3.1.5)
- Для управления синхронизацией с диском в Mac OS X используется ioctl F_FULLFSYNC, а не F_FULLSYNC. В предыдущем выпуске использовался неверный вариант.
2005-03-11 (3.1.4)
- Исправлена ошибка в режиме autovacuum, которая могла привести к повреждению базы данных, если CREATE UNIQUE INDEX завершалась неудачей из-за нарушения ограничения. Эта проблема возникает только при включенной новой функции autovacuum, добавленной в версии 3.1.
- Вызов ioctl F_FULLSYNC (на данный момент поддерживается только в Mac OS X) отключается, если для прагмы synchronous установлено значение, отличное от "full".
- Добавлена дополнительная совместимость с будущим форматом файла базы данных версии 3.2.
- Исправлена ошибка в предложениях WHERE вида (rowid<'2')
- Добавлены новые параметры компиляции SQLITE_OMIT_...
- Обновлена справочная страница
- Из оболочки удалено использование strcasecmp()
- DLL для Windows экспортирует символы Tclsqlite_Init и Sqlite_Init
2005-02-19 (3.1.3)
- Исправлена проблема с VACUUM в базах данных, из которых были удалены таблицы с AUTOINCREMENT.
- Добавлена совместимость с будущим форматом файла базы данных версии 3.2.
- Обновлена документация
2005-02-15 (3.1.2)
- Исправлена ошибка, которая могла привести к повреждению базы данных при наличии двух открытых соединений с одной базой данных, если одно соединение выполняло VACUUM, а второе вносило изменения в базу данных.
- Разрешены параметры "?" в предложении LIMIT.
- Исправлена команда VACUUM, чтобы она работала с AUTOINCREMENT.
- Исправлена гонка данных в AUTOVACUUM, которая могла привести к повреждению баз данных
- В заголовочный файл sqlite3.h добавлен числовой номер версии.
- Исправлены другие мелкие ошибки и повышена производительность.
2005-02-15 (2.8.16)
- Исправлена ошибка, которая могла привести к повреждению базы данных при наличии двух открытых соединений с одной базой данных, если одно соединение выполняло VACUUM, а второе вносило изменения в базу данных.
- Обеспечена корректная обработка имен в кавычках в инструкциях CREATE INDEX.
- Устранен конфликт имен между sqlite.h и sqlite3.h.
- Снижено избыточное использование кучи при копировании выражений.
- Исправлены другие мелкие ошибки.
2005-02-01 (3.1.1 BETA)
- Автоматическое кеширование подготовленных инструкций в интерфейсе TCL
- Операции ATTACH и DETACH, а также некоторые другие операции приводят к истечению срока действия существующих подготовленных инструкций.
- Исправлено множество мелких ошибок
2005-01-21 (3.1.0 ALPHA)
- Добавлена поддержка autovacuum
- Добавлены CURRENT_TIME, CURRENT_DATE и CURRENT_TIMESTAMP
- Добавлена поддержка предложения EXISTS.
- Добавлена поддержка коррелированных подзапросов.
- Добавлено предложение ESCAPE для оператора LIKE.
- Добавлена поддержка ALTER TABLE ... RENAME TABLE ...
- Для INTEGER PRIMARY KEY поддерживается ключевое слово AUTOINCREMENT
- Добавлено множество макросов SQLITE_OMIT_ для исключения функций на этапе компиляции и уменьшения размера библиотеки.
- Добавлена команда REINDEX.
- Движок больше не обращается к основной таблице, если может получить всю необходимую информацию из индекса.
- Исправлено множество досадных ошибок.
2004-10-12 (3.0.8)
- Добавлена поддержка транзакций DEFERRED, IMMEDIATE и EXCLUSIVE.
- Разрешено создавать новые пользовательские функции, даже если уже существуют одна или несколько предварительно скомпилированных инструкций SQL.
- Исправлены проблемы переносимости для MinGW/MSYS.
- Исправлена проблема с выравниванием байтов на 64-разрядных машинах Sparc.
- Исправлена команда ".import" оболочки: теперь она игнорирует символы \r в конце строк.
- В режиме "csv" оболочки строки заключаются в двойные кавычки.
- Исправлены опечатки в документации.
- Константам массивов в коде назначен тип "const".
- Выполнены многочисленные оптимизации кода, особенно направленные на уменьшение его размера.
2004-09-18 (3.0.7)
- Модуль BTree выделяет большие буферы с помощью malloc(), а не в стеке, что улучшает работу на машинах с ограниченным размером стека.
- Устранены конфликты имен, чтобы версии 2.8 и 3.0 можно было компилировать и использовать совместно в одном исходном файле ANSI-C.
- Новый интерфейс: sqlite3_bind_parameter_index()
- Добавлена поддержка параметров-шаблонов вида "?nnn"
- Исправлены проблемы, обнаруженные в 64-разрядных системах.
- Файл encode.c (содержавший неиспользуемые процедуры) удален из дерева исходного кода версии 3.0.
- Обратные вызовы sqlite3_trace() выполняются перед исполнением каждой инструкции, а не при ее компиляции.
- Обновлены Makefile и исправлены различные ошибки.
2004-09-02 (3.0.6 beta)
- Улучшено обнаружение поврежденных файлов баз данных и обработка таких файлов.
- Интерфейс sqlite3_step() возвращает SQLITE_BUSY, если не может зафиксировать изменение из-за блокировки
- Реализации LIKE и GLOB объединены в одну подпрограмму сопоставления с шаблоном.
- Выполнены различные оптимизации размера кода и исправлены ошибки
2004-08-29 (3.0.5 beta)
- Добавлена поддержка имен параметров привязки вида ":AAA".
- Добавлен новый интерфейс sqlite3_bind_parameter_name().
- В привязках TCL добавлена поддержка имен переменных TCL, встроенных в инструкции SQL.
- Привязки TCL передают данные без обязательного преобразования в строку.
- База данных для временных таблиц TEMP создается только при необходимости.
- Добавлена возможность указывать альтернативный каталог для временных файлов с помощью глобальной переменной "sqlite_temp_directory".
- Параметр компиляции (SQLITE_BUSY_RESERVED_LOCK) приводит к вызову обработчика занятости при конкуренции за блокировку RESERVED.
- Исправлены различные ошибки и выполнены оптимизации
2004-08-09 (3.0.4 beta)
- CREATE TABLE и DROP TABLE теперь корректно работают как подготовленные инструкции.
- Исправлена ошибка в VACUUM и уникальных индексах.
- В командную оболочку добавлена команда ".import".
- Исправлена ошибка, которая могла привести к повреждению индекса при блокировке попытки удалить строки таблицы ожидающим запросом.
- Оптимизирован размер библиотеки.
- Исправлены другие мелкие ошибки.
2004-07-22 (2.8.15)
- Это только выпуск с исправлениями для сопровождения. Исправлены различные мелкие ошибки и добавлены некоторые улучшения переносимости.
2004-07-22 (3.0.3 beta)
- Второй бета-выпуск SQLite 3.0.
- Добавлена поддержка "PRAGMA page_size" для изменения размера страниц базы данных.
- Исправлены различные ошибки и обновлена документация.
2004-06-30 (3.0.2 beta)
- Первый бета-выпуск SQLite 3.0.
2004-06-22 (3.0.1 alpha)
- *** Альфа-выпуск — только для исследований и тестирования ***
- Исправлено множество ошибок.
2004-06-18 (3.0.0 alpha)
- *** Альфа-выпуск — только для исследований и тестирования ***
- Добавлена поддержка интернационализации, включая UTF-8, UTF-16 и пользовательские последовательности сортировки.
- Новый формат файла, который при обычном использовании на 25–35% меньше.
- Улучшена параллельная работа.
- Атомарная фиксация транзакций для баз данных, подключенных с помощью ATTACH.
- Из API удалены устаревшие элементы.
- Добавлена поддержка BLOB.
- 64-разрядные rowid.
- Подробнее.
2004-06-09 (2.8.14)
- Оптимизатор функций min() и max() исправлен: теперь он работает, если предложение FROM состоит из подзапроса.
- Оболочка игнорирует лишние пробелы в конце команд, начинающихся с ".".
- Функции sqlite_encode_binary() и sqlite_decode_binary() включены в библиотеку.
- Прагмы TEMP_STORE и DEFAULT_TEMP_STORE теперь работают.
- Код изменен для успешной компиляции с помощью OpenWatcom.
- Исправлены проблемы переполнения стека VDBE с триггерами INSTEAD OF и значениями NULL в операторах IN.
- Добавлена глобальная переменная sqlite_temp_directory, которая при задании определяет каталог для хранения временных файлов.
- sqlite_interrupt() корректно работает с VACUUM.
- Исправлены другие мелкие ошибки.
2004-03-08 (2.8.13)
- Переработаны части кода, чтобы уменьшить его размер. Код также стал немного быстрее.
- sqlite_exec() теперь реализована как оболочка над sqlite_compile() и sqlite_step().
- Встроенные функции min() и max() теперь учитывают различие между типами данных NUMERIC и TEXT. Ранее min() и max() всегда предполагали, что аргументы имеют тип NUMERIC.
- Для встроенных функций даты и времени добавлен новый модификатор HH:MM:SS.
- Добавлен экспериментальный API sqlite_last_statement_changes(). Исправлена функция last_insert_rowid(), чтобы она корректно работала с триггерами.
- Добавлены прототипы функций для API шифрования базы данных.
- Исправлено несколько досадных ошибок.
2004-02-08 (2.8.12)
- Исправлена ошибка, которая могла повредить журнал отката при отключении питания или остановке внешней программой во время выполнения COMMIT. Поврежденный журнал может привести к повреждению базы данных при откате.
- Уменьшен размер и повышена скорость различных модулей, особенно виртуальной машины.
- Разрешена запись "<expr> IN <table>" как сокращенной формы записи "<expr> IN (SELECT * FROM <table>".
- Оптимизирована процедура sqlite_mprintf().
- Обеспечена работа оптимизаций MIN() и MAX() внутри подзапросов.
2004-01-14 (2.8.11)
- Исправлена ошибка обработки NULL в подзапросах оператором IN. Ошибка появилась в предыдущем выпуске.
2004-01-14 (2.8.10)
- Исправлена проблема, которая могла привести к повреждению базы данных в Unix из-за того, что при закрытии файла вызовом close() снимаются все рекомендательные блокировки POSIX. В качестве обходного решения все вызовы close() откладываются, пока действуют блокировки.
- Повышена производительность в некоторых особых случаях COUNT(*).
- Обеспечена корректная обработка ошибок в модуле для работы в памяти при сбое malloc().
- Разрешен вызов sqlite_exec() из пользовательских функций SQL.
- Повышена точность преобразований чисел с плавающей точкой с использованием "long double".
- Исправлены ошибки в экспериментальных функциях даты и времени.
2004-01-06 (2.8.9)
- Исправлена проблема переполнения 32-разрядного целого числа, которая могла привести к повреждению индексов базы данных при вставке больших отрицательных чисел (меньше -2147483648) в индексированный числовой столбец.
- Исправлена проблема блокировок в многопоточных реализациях Linux.
- В качестве десятичного разделителя всегда используется "." вместо "," даже если локаль требует ",".
- В экспериментальные функции даты и времени добавлено преобразование времени UTC в местное время.
- Исправлены ошибки в функциях даты и времени.
2003-12-18 (2.8.8)
- Исправлена критическая ошибка, появившаяся в версии 2.8.0 и способная привести к повреждению базы данных.
- Исправлена проблема с трехсторонними соединениями без использования индексов
- Команда VACUUM теперь работает с API без обратных вызовов
- Улучшена команда "PRAGMA integrity_check"
2003-12-04 (2.8.7)
- Добавлены экспериментальные API sqlite_bind() и sqlite_reset().
- Если имя базы данных — пустая строка, новая база данных открывается во временном файле, который автоматически удаляется при закрытии базы данных.
- Повышена производительность синтаксического анализатора, сгенерированного с помощью Lemon
- Переработаны экспериментальные функции даты и времени.
- Запрещены временные индексы для постоянных таблиц.
- Обновлена документация и исправлены опечатки
- Добавлен экспериментальный API обратного вызова sqlite_progress_handler()
- Удалена поддержка синтаксиса внешнего соединения Oracle8.
- Операторы GLOB и LIKE разрешено использовать как функции.
- Внесены другие мелкие изменения в документацию и makefile, а также исправлены ошибки.
2003-08-22 (2.8.6)
- Репозиторий CVS перенесен на www.sqlite.org
- Обновлена документация по обработке NULL.
- Добавлены экспериментальные функции даты и времени.
- Исправлена ошибка: представление, основанное на другом представлении, вычисляется корректно и не вызывает ошибку сегментации.
- Исправлена ошибка: предотвращено повреждение базы данных при удалении триггера с тем же именем, что и у таблицы.
- Исправлена ошибка: VACUUM выполняется для пустой базы данных без ошибки сегментации после включения прагмы EMPTY_RESULT_CALLBACKS.
- Исправлена ошибка: если целочисленное значение не помещается в 32-разрядное целое число, оно сохраняется как число с плавающей точкой двойной точности.
- Исправлена ошибка: обеспечена фиксация записи каталога файла журнала на диске до записи файла базы данных.
2003-07-22 (2.8.5)
- Добавлена поддержка LIMIT для составных инструкций SELECT.
- Теперь LIMIT 0 не показывает строк. Используйте LIMIT -1, чтобы увидеть все строки.
- Обеспечена корректная обработка сравнений INTEGER PRIMARY KEY с числами с плавающей точкой.
- Исправлено несколько важных ошибок в новых командах ATTACH и DETACH.
- Обновлен документ об обработке NULL.
- Разрешены аргументы NULL в sqlite_compile() и sqlite_step().
- Исправлено множество мелких ошибок
2003-06-29 (2.8.4)
- Команда "PRAGMA integrity_check" дополнена проверкой индексов.
- Добавлены хуки авторизации для новых команд ATTACH и DETACH.
- Обновлена документация
- Исправлено множество мелких ошибок
2003-06-04 (2.8.3)
- Исправлена проблема, приводившая к повреждению индексов таблицы при выполнении INSERT OR REPLACE или UPDATE OR REPLACE для таблицы, содержащей INTEGER PRIMARY KEY и один или несколько индексов.
- Исправлена ошибка в коде блокировок Windows: блокировки корректно работают при одновременном доступе из систем Win95 и WinNT.
- Добавлена возможность обращаться к столбцам "rowid" (или "_rowid_", или "oid") в инструкциях INSERT и UPDATE.
- Исправлены другие важные ошибки
2003-05-17 (2.8.2)
- Исправлена проблема, приводившая к повреждению файла базы данных при удалении из основной базы данных таблицы с индексом TEMP.
2003-05-17 (2.8.1)
- Возвращена команда VACUUM, освобождающая неиспользуемое дисковое пространство в файле базы данных.
- Добавлены команды ATTACH и DETACH, позволяющие одновременно работать с несколькими файлами баз данных.
- Добавлена поддержка временных триггеров и индексов TEMP.
- Добавлена поддержка баз данных в памяти.
- Удалена экспериментальная функция sqlite_open_aux_file(). Ее функциональность включена в новую команду ATTACH.
- Изменен приоритет предложений ON CONFLICT: предложения ON CONFLICT в инструкциях BEGIN получили более высокий приоритет, чем предложения ON CONFLICT в ограничениях.
- Исправлено множество ошибок и улучшена совместимость.
2003-02-16 (2.8.0)
- Изменен формат файла журнала, чтобы повысить его устойчивость к повреждениям, возникающим после сбоя ОС или отключения питания.
- Добавлен новый API C/C++, не использующий обратный вызов для возврата данных.
2003-01-25 (2.7.6)
- Повышена производительность. Библиотека теперь работает значительно быстрее.
- Добавлен API sqlite_set_authorizer(). Официальная документация пока не написана — инструкции по использованию этой функции см. в комментариях исходного кода.
- Исправлена ошибка в операторе GLOB, из-за которой он не работал с буквами верхнего регистра.
- Исправлены различные мелкие ошибки.
2002-12-28 (2.7.5)
- Исправлена неинициализированная переменная в pager.c, которая могла (с вероятностью примерно 1 к 4 миллиардам) привести к повреждению базы данных.
2002-12-17 (2.7.4)
- Теперь размер файлов баз данных может достигать 2^41 байт. Ранее предел составлял 2^31 байт.
- Оптимизатор теперь сканирует таблицы в обратном порядке, если это позволяет выполнить предложение ORDER BY ... DESC.
- Полный путь к файлу базы данных теперь сохраняется, даже если в sqlite_open() передан относительный путь. Это позволяет библиотеке продолжать корректную работу после вызова chdir().
- Повышена скорость работы VDBE.
- Исправлено множество мелких ошибок.
2002-10-31 (2.7.3)
- Исправлены различные проблемы совместимости с компиляторами.
- Исправлена ошибка в операторе "expr IN ()".
- Разрешены имена столбцов в скобках.
- Исправлена проблема управления памятью строк в VDBE
- Исправлена ошибка в прагме "table_info"
- Функция API sqlite_function_type() экспортируется из DLL для Windows
- Исправлено поведение блокировок в Windows
- Исправлена ошибка в LEFT OUTER JOIN
2002-09-25 (2.7.2)
- Предотвращено переполнение файла журнала при выполнении больших транзакций.
- Исправлена утечка памяти, возникавшая при сбое sqlite_open().
- Учитываются предложения ORDER BY и LIMIT инструкции SELECT, даже если ее результирующий набор используется для INSERT.
- Для файла, используемого для хранения таблиц TEMP, не устанавливаются блокировки записи.
- Добавлена документация по SELECT DISTINCT и обработке NULL в SQLite.
- Исправлена проблема, вызывавшая низкую производительность при выполнении многих тысяч инструкций SQL одним вызовом sqlite_exec().
2002-08-31 (2.7.1)
- Исправлена ошибка в логике ORDER BY, появившаяся в версии 2.7.0
- Токенизатор теперь принимает комментарии в стиле C.
- INSERT выполняется немного быстрее, если источником служит инструкция SELECT.
2002-08-25 (2.7.0)
- При сортировке числовые и текстовые значения теперь различаются. Текстовые значения сортируются согласно memcmp(). Числовые значения сортируются в числовом порядке.
- В Windows разрешена одновременная работа нескольких читателей за счет имитации блокировок чтения/записи, отсутствующих в Win95/98/ME.
- При попытке начать транзакцию, если другая транзакция уже активна, теперь возвращается ошибка.
2002-08-13 (2.6.3)
- Добавлена возможность чтения баз данных с порядком байтов от младшего к старшему и от старшего к младшему. Поэтому базу данных, созданную в SunOS или Mac OS X, можно читать и изменять в Linux или Windows, и наоборот.
- Выполнен переход на новый веб-сайт: https://sqlite.org/
- Разрешено выполнение транзакций в нескольких потоках Linux
- Исправлена ошибка обработки предложения ORDER BY в запросах GROUP BY
2002-07-31 (2.6.2)
- Текстовые файлы, читаемые командой COPY, теперь могут использовать LF, CRLF или CR в качестве окончания строки.
- SQLITE_BUSY корректно обрабатывается, если эта ошибка возникает во время инициализации базы данных.
- Исправлена работа триггеров UPDATE для таблиц TEMP.
- Обновлена документация.
2002-07-19 (2.6.1)
- В библиотеку включена статическая строка, на которую реагирует команда RCS "ident" и которая содержит номер версии библиотеки.
- Исправлен сбой проверки утверждения, возникавший при удалении всех строк таблицы с включенной прагмой "count_changes".
- Улучшена диагностика ошибок, возникающих при автоматическом обновлении формата базы данных с версии 2.5.6 до 2.6.0.
2002-07-18 (2.6.0)
- Изменен формат индексов для исправления недостатка проектирования, существовавшего начиная с версии 2.1.0. *** Это несовместимое изменение формата файла *** При попытке открыть файл базы данных, созданный версией 2.5.6 или более ранней, библиотека версии 2.6.0 или новее автоматически и необратимо преобразует формат файла. Создайте резервные копии старых файлов баз данных, прежде чем открывать их библиотекой версии 2.6.0.
2002-07-07 (2.5.6)
- Исправлены дополнительные проблемы с откатом. Набор тестов расширен, чтобы тщательно проверять логику отката и предотвращать подобные проблемы в будущем.
2002-07-06 (2.5.5)
- Исправлена ошибка, которая могла привести к повреждению базы данных во время отката. Эта ошибка появилась в версии 2.4.0 из-за оптимизации freelist в checkin [410].
- Исправлена ошибка в агрегатных функциях для VIEW.
- Внесены другие мелкие изменения и улучшения.
2002-07-01 (2.5.4)
- Ключевое слово "AS" снова стало необязательным.
- Тип данных столбцов теперь передается в четвертом аргументе обратного вызова.
- Добавлен API sqlite_open_aux_file(), хотя он все еще почти не документирован и не протестирован.
- Добавлены дополнительные тесты и исправлены некоторые ошибки, обнаруженные этими тестами.
2002-06-25 (2.5.3)
- Исправлена ошибка: оптимизация, добавленная в версии 2.4.0 (check-in [410]), могла привести к повреждению базы данных. Теперь проблема должна быть устранена. Не рекомендуется использовать версии с 2.4.0 по 2.5.2 включительно.
2002-06-25 (2.5.2)
- Добавлена новая таблица SQLITE_TEMP_MASTER, которая хранит схему временных таблиц так же, как SQLITE_MASTER хранит схему постоянных таблиц.
- Добавлена оптимизация для UNION ALL
- Исправлена ошибка обработки LEFT OUTER JOIN
- Предложение LIMIT теперь работает с подзапросами
- ORDER BY работает с подзапросами
- Добавлена функция TypeOf(), позволяющая определить, является ли выражение числовым или текстовым.
- Автоинкремент теперь работает при выполнении INSERT из SELECT.
2002-06-19 (2.5.1)
- Оптимизатор запросов теперь пытается реализовать предложение ORDER BY с помощью индекса. Если подходящего индекса нет, по-прежнему используется сортировка.
2002-06-17 (2.5.0)
- Добавлена поддержка построчных триггеров.
- Добавлена совместимая с SQL-92 обработка NULL.
- Добавлена поддержка полного синтаксиса соединений SQL-92 и LEFT OUTER JOIN.
- Строки в двойных кавычках интерпретируются как имена столбцов, а не текстовые литералы.
- Внешние ключи разбираются, но не реализуются.
- Повышена производительность синтаксического анализатора, страничного менеджера и генератора кода для предложения WHERE.
- Предложение LIMIT теперь работает с подзапросами. (ORDER BY по-прежнему не работает.)
- В sqlite_*_printf() добавлено преобразование "%Q".
- Исправлено слишком много ошибок, чтобы перечислять их здесь (см. журнал изменений).
2002-05-10 (2.4.12)
- Добавлена логика обнаружения вызовов процедур API библиотеки в неправильном порядке.
2002-05-08 (2.4.11)
- Исправлена ошибка: в некоторых (достаточно сложных) VIEW неправильно формировались имена столбцов результирующего набора. При определенных обстоятельствах это могло привести к ошибке сегментации.
2002-05-03 (2.4.10)
- Исправлена ошибка: теперь корректно формируются заголовки столбцов, если в качестве подзапроса используется составная инструкция SELECT.
- В дерево исходного кода добавлены функции sqlite_encode_binary() и sqlite_decode_binary(). Однако они еще не включены в библиотеку.
- Обновлена документация.
- Функция sqlite_changes() экспортируется из DLL для Windows.
- Исправлена ошибка: оптимизация уплощения подзапроса не применяется к запросам без предложения FROM. Иначе это приводило к ошибке сегментации.
2002-04-22 (2.4.9)
- Исправлена ошибка, из-за которой предварительно скомпилированный двоичный файл SQLITE.EXE в Windows 98 сообщал "out of memory".
2002-04-20 (2.4.8)
- Обеспечено создание VIEW после соответствующих TABLE в выводе команды .dump оболочки.
- Повышена скорость: для таблиц TEMP не выполняются синхронные обновления.
- Оболочка получила множество улучшений и доработок.
- Операторы GLOB и LIKE реализованы как функции, которые программист может переопределить. Это позволяет, например, изменить оператор LIKE так, чтобы он учитывал регистр.
2002-04-12 (2.4.7)
- Добавлена возможность указывать TABLE.* в списке столбцов инструкции SELECT.
- Разрешены инструкции SELECT без предложения FROM.
- Добавлена функция SQL last_insert_rowid().
- Строки, для которых при разрешении конфликтов применяется IGNORE, не учитываются в количестве строк.
- Обеспечена корректная обработка выражений-функций в предложении VALUES инструкции INSERT.
- Добавлена функция API sqlite_changes(), возвращающая количество строк, измененных в ходе последней операции.
2002-04-02 (2.4.6)
- Исправлена ошибка: обеспечена корректная обработка условий в предложении WHERE соединения, не содержащих оператор сравнения.
2002-04-02 (2.4.5)
- Исправлена ошибка: обеспечена корректная обработка функций в предложении WHERE соединения.
- При включенной прагме PRAGMA vdbe_trace=ON значение операнда P3 корректно выводится, если он является указателем на структуру, а не указателем на строку.
- При явной вставке NULL в INTEGER PRIMARY KEY значение NULL автоматически преобразуется в уникальный ключ.
2002-03-30 (2.4.4)
- Разрешено использовать "VIEW" в качестве имени столбца
- Добавлена поддержка выражений CASE (исправление от Дэна Кеннеди)
- В поставку добавлены RPM (исправления от Дага Генри)
- Исправлены опечатки в документации
- Управление конфигурацией перенесено в новый репозиторий CVS с собственной системой отслеживания ошибок CVSTrac.
2002-03-23 (2.4.3)
- Исправлена ошибка в SELECT, возникающая, когда составная инструкция SELECT используется как подзапрос в предложении FROM другой инструкции SELECT.
- Функция sqlite_get_table() теперь возвращает ошибку, если ей переданы две или более инструкции SELECT, возвращающие разное количество столбцов.
2002-03-20 (2.4.2)
- Исправлена ошибка: устранен сбой проверки утверждения, возникавший, когда ROWID был столбцом инструкции SELECT для представления.
- Исправлена ошибка: в VDBE устранена неинициализированная переменная, которая могла привести к сбою проверки утверждения.
- Повышена надежность заголовочного файла os.h при определении того, выполняется ли компиляция для Windows или Unix.
2002-03-13 (2.4.1)
- Использование безымянного подзапроса в предложении FROM приводило к ошибке сегментации.
- Синтаксический анализатор теперь требует наличия точки с запятой или конца входных данных перед выполнением инструкции. Это предотвращает случайные сбои, если ключевое слово WHERE написано с ошибкой в инструкции UPDATE или DELETE.
2002-03-11 (2.4.0)
- Переименовать PRAGMA sanity_check в integrity_check и сделать его доступным во всех сборках.
- Вызов SELECT min() или max() для индексированного столбца без предложений WHERE или GROUP BY обрабатывается как особый случай, позволяющий избежать полного сканирования таблицы.
- Автоматически генерируемые ROWID теперь идут последовательно.
- Не разрешать выполнять точечные команды командной оболочки в середине настоящей команды SQL.
- В генератор парсеров Lemon внесены изменения, благодаря которым таблицы парсера стали в 4 раза меньше.
- Добавлена поддержка определяемых пользователем функций, реализованных на C.
- Добавлена поддержка новых функций: coalesce(), lower(), upper() и random()
- Добавлена поддержка представлений (VIEW).
- Добавлен оптимизатор, выполняющий преобразование подзапросов.
- Модули B-Tree и Pager изменены так, чтобы дисковые страницы, не содержащие реальных данных (свободные страницы), не записывались в журнал и не сохранялись обратно на диск при изменении. Это не влияет на целостность базы данных, поскольку эти страницы не содержат реальных данных, но ускоряет крупные операции INSERT примерно в 2,5 раза, а крупные операции DELETE — примерно в 5 раз.
- Настройка CACHE_SIZE теперь сохраняется
- Добавлена настройка SYNCHRONOUS
- Исправлена ошибка, из-за которой обновления не выполнялись внутри транзакций, если база данных содержала временную таблицу.
2002-02-19 (2.3.3)
- Разрешено заключать идентификаторы в квадратные скобки для совместимости с MS-Access.
- Добавлена поддержка подзапросов в предложении FROM команды SELECT.
- Более эффективная реализация sqliteFileExists() в Windows. (Автор — Joel Luscy)
- Предложение VALUES команды INSERT теперь может содержать выражения, включая скалярные предложения SELECT.
- Добавлена поддержка CREATE TABLE AS SELECT
- Исправлена ошибка: создание и удаление таблицы в рамках одной транзакции не работало.
2002-02-14 (2.3.2)
- Исправлена ошибка: в pager.c находился неверный вызов assert(). Основной код был полностью корректен (насколько известно), поэтому при компиляции с -DNDEBUG=1 всё должно работать нормально. Если проверки assert не отключены, возможен сбой.
2002-02-13 (2.3.1)
- Исправлена ошибка: срабатывало утверждение, если было задано "PRAGMA full_column_names=ON;" и выполнялся запрос с использованием rowid, например: "SELECT rowid, * FROM ...".
2002-02-03 (2.3.0)
- Исправлена серьезная ошибка в команде INSERT, из-за которой данные помещались не в те столбцы, если источником данных был SELECT, а в предложениях INSERT столбцы указывались не в порядке по умолчанию.
- Добавлена возможность разрешать конфликты ограничений способами, отличными от прерывания и отката. Подробности см. в документации по предложению "ON CONFLICT".
- Временные файлы теперь автоматически удаляются операционной системой при закрытии. После аварийного завершения программы больше не остаются временные файлы. (Если аварийно завершится ОС, то в Unix файл удалит fsck после перезагрузки. Не знаю, что происходит в Windows.)
- Ограничения NOT NULL теперь соблюдаются.
- Команда COPY записывает NULL в столбцы, данные которых равны '\N'.
- В команде COPY обратную косую черту теперь можно использовать для экранирования символа новой строки.
- Добавлена настройка SANITY_CHECK.
2002-01-28 (2.2.5)
- Важное исправление ошибки: оператор IN не работал, если левая или правая часть выражения была получена из INTEGER PRIMARY KEY.
- Не экранировать символ обратной косой черты '\' в выводе программы командной строки sqlite.
2002-01-22 (2.2.4)
- Метка справа от AS в списке столбцов SELECT теперь может использоваться как часть выражения в предложениях WHERE, ORDER BY, GROUP BY и/или HAVING.
- Исправлена ошибка в параметре командной строки -separator команды sqlite.
- Исправлена проблема с порядком сортировки при сравнении строк в верхнем регистре с символами, большими 'Z', но меньшими 'a'.
- Выводить сообщение об ошибке, если выражение ORDER BY или GROUP BY является константой.
2002-01-16 (2.2.3)
- Исправлены предупреждающие сообщения в VC++ 7.0. (Патчи от nicolas352001)
- Сделать библиотеку потокобезопасной. (Соответствующий код добавлен и, похоже, работает, но еще не прошел нагрузочное тестирование.)
- Добавлена новая функция API sqlite_last_insert_rowid().
2002-01-14 (2.2.2)
- Исправлена ошибка: срабатывало утверждение, если временная таблица с индексом имела то же имя, что и постоянная таблица, созданная отдельным процессом.
- Исправлена ошибка: обновление таблиц, содержащих INTEGER PRIMARY KEY и индекс, могло завершиться неудачно.
2002-01-09 (2.2.1)
- Исправлена ошибка: попытка удалить одну строку таблицы с предложением WHERE "ROWID=x", если строки с таким rowid не существовало, приводила к ошибке.
- Исправлена ошибка: передача NULL в качестве третьего параметра в sqlite_open() иногда приводила к аварийному завершению программы.
- Исправлена ошибка: DROP TABLE с последующей CREATE TABLE с тем же именем в рамках одной транзакции приводила к аварийному завершению программы.
- Обновления Makefile от A. Rottmann
2001-12-22 (2.2.0)
- Столбцы типа INTEGER PRIMARY KEY теперь фактически используются в качестве первичного ключа в базовом B-Tree-представлении таблицы.
- При реализации изменения, описанного в предыдущем пункте, обнаружено и исправлено несколько малозаметных несвязанных ошибок.
- Добавлена возможность указывать "*" как часть более длинного списка столбцов в разделе результатов оператора SELECT. Например:
"SELECT rowid, * FROM table1;" . - Обновлены комментарии и документация.
2001-12-15 (2.1.7)
- Исправлена ошибка в CREATE TEMPORARY TABLE, из-за которой таблица изначально размещалась в основном файле базы данных, а не в отдельном временном файле. Эта ошибка могла привести к срабатыванию утверждения в библиотеке и к «утечкам страниц» в основном файле базы данных.
- Исправлена ошибка в подсистеме b-tree, из-за которой при сканировании базы данных первая строка таблицы иногда повторялась.
2001-12-14 (2.1.6)
- В очередной раз исправлен механизм блокировок, чтобы предотвратить необоснованный возврат SQLITE_PROTOCOL функцией sqlite_exec(). На этот раз ошибка была вызвана состоянием гонки в коде блокировок. Это изменение затрагивает пользователей POSIX и Windows.
2001-12-06 (2.1.5)
- Исправлена еще одна проблема (не связанная с исправленной в версии 2.1.4), из-за которой функция sqlite_exec() иногда необоснованно возвращала SQLITE_PROTOCOL. На этот раз ошибка была в коде блокировок POSIX и не должна затрагивать пользователей Windows.
2001-12-05 (2.1.4)
- Иногда функция sqlite_exec() возвращала SQLITE_PROTOCOL вместо SQLITE_BUSY.
- Исправление предыдущей ошибки выявило взаимную блокировку, которая также была устранена.
- Добавлена возможность поместить одну команду .command во второй аргумент оболочки sqlite
- Обновлен раздел FAQ
2001-11-24 (2.1.3)
- Исправлена работа операторов сравнения (например, "<", "==" и т. д.), чтобы она соответствовала порядку записей в индексе.
- Исправлена обработка целых чисел в выражениях SQL, значения которых превышают диапазон машинного целого числа.
2001-11-23 (2.1.2)
- Внесены изменения для поддержки 64-разрядных архитектур.
- Исправлена ошибка в протоколе блокировок.
- Исправлена ошибка, которая в редких случаях могла сделать базу данных нечитаемой после DROP TABLE из-за повреждения таблицы SQLITE_MASTER.
- Изменен код, чтобы базы данных версии 2.1.1, ставшие нечитаемыми из-за описанной выше ошибки, можно было читать этой версией библиотеки, несмотря на (незначительное) повреждение таблицы SQLITE_MASTER.
2001-11-13 (2.1.1)
- Исправлена ошибка: иногда в функцию обратного вызова передавались произвольные строки, когда фактическое значение столбца было NULL.
2001-11-12 (2.1.0)
- Изменен формат записей данных, чтобы можно было хранить записи размером до 16 МБ.
- Изменен формат индексов для улучшения оптимизации запросов.
- Реализовано предложение "LIMIT ... OFFSET ..." в операторах SELECT.
2001-11-03 (2.0.8)
- Некоторые параметры функций API объявлены как const. Это изменение должно быть полностью обратно совместимым.
- Обновлена документация
- Упрощена архитектура VDBE: количество сортировщиков и списков ограничено одним. На практике никогда не использовалось больше одного сортировщика и одного списка.
2001-10-22 (2.0.7)
- В идентификаторах можно использовать любые символы UTF-8 или ISO8859.
- Добавлены патчи от Christian Werner для улучшения совместимости с ODBC и исправления ошибки в функции round().
- Устранены некоторые утечки памяти, возникавшие при сбое malloc(). Пока malloc() работает, утечек памяти не было и нет.
- Изменены некоторые тестовые сценарии, чтобы они работали не только в Unix, но и в Windows.
2001-10-19 (2.0.6)
- Добавлена настройка EMPTY_RESULT_CALLBACKS
- Добавлена поддержка символов UTF-8 и ISO8859 в именах столбцов и таблиц.
- Исправлена ошибка: при включенной настройке FULL_COLUMN_NAMES теперь правильно вычисляются имена таблиц.
2001-10-15 (2.0.5)
- Добавлена настройка COUNT_CHANGES.
- Изменена настройка FULL_COLUMN_NAMES для поддержки драйвера ODBC.
- Исправлена ошибка: "SELECT count(*)" возвращал NULL для пустых таблиц. Теперь он возвращает 0.
2001-10-13 (2.0.4)
- Исправлена ошибка: малозаметная и относительно безвредная ошибка приводила к сбою одного из тестов при включенной оптимизации gcc. В этом выпуске проблема устранена.
2001-10-13 (2.0.3)
- Исправлена ошибка: функция sqlite_busy_timeout() ожидала перед завершением в 1000 раз дольше, чем требовалось.
- Исправлена ошибка: утверждение срабатывало, если диск с файлом базы данных заполнялся или по другой причине переставал принимать записи. Добавлены новые тесты для выявления подобных проблем в будущем.
- Добавлены новые операторы: & (побитовое И), | (побитовое ИЛИ), ~ (побитовое дополнение до единицы), << (сдвиг влево), >> (сдвиг вправо).
- Добавлены новые функции: round() и abs().
2001-10-09 (2.0.2)
- Исправлены две ошибки в протоколе блокировок. (Одна маскировала другую.)
- Удалены некоторые неиспользуемые директивы "#include
", вызывавшие проблемы в VC++. - Исправлен sqlite.h, чтобы его можно было использовать из C++
- Добавлена настройка FULL_COLUMN_NAMES. При значении "ON" имена столбцов возвращаются в виде TABLE.COLUMN, а не просто COLUMN.
- Добавлены настройки TABLE_INFO() и INDEX_INFO() для поддержки интерфейса ODBC.
- Добавлена поддержка временных таблиц и индексов.
2001-10-02 (2.0.1)
- Удалены комментарии в стиле C++ из btree.c, чтобы файл компилировался компиляторами, отличными от gcc.
- Вывод ".dump" в оболочке не работает, если где-либо в данных есть встроенные символы новой строки. Это старая ошибка, унаследованная от версии 1.0. Для ее исправления в выводе ".dump" больше не используется команда COPY. Вместо нее генерируются операторы INSERT.
- Расширен синтаксис выражений: теперь поддерживается "expr NOT NULL" (с пробелом между "NOT" и "NULL") наряду с "expr NOTNULL" (без пробела).
2001-09-28 (2.0.0)
- Настроена автоматическая сборка двоичных файлов для Linux и Windows и их публикация на веб-сайте.
2001-09-28 (2.0-alpha-4)
- Внесены патчи Makefile от A. Rottmann для использования LIBTOOL
2001-09-27 (2.0-alpha-3)
- SQLite теперь учитывает ключевое слово UNIQUE в CREATE UNIQUE INDEX. Первичные ключи должны быть уникальными.
- Формат файла возвращен к варианту alpha-1
- Исправлено поведение отката и блокировок
2001-09-20 (2.0-alpha-2)
- Первый выпуск версии 2.0. От идеи переименовать библиотеку в "SQLus" отказались, решив сохранить название "SQLite" и увеличить номер основной версии.
- Подсистемы pager и btree возвращены. Теперь это единственные доступные серверные модули.
- Абстракция Dbbe и драйверы GDBM и memory удалены.
- Отказ от авторских прав на весь код. Библиотека теперь находится в общественном достоянии.
2001-07-23 (1.0.32)
- Подсистемы pager и btree удалены. Они будут использоваться в последующей библиотеке SQL-сервера под названием "SQLus".
- Добавлена возможность использовать строки в кавычках в качестве имен таблиц и столбцов в выражениях.
2001-04-15 (1.0.31)
- Добавлена подсистема pager, но пока она не используется.
- Улучшена обработка ошибок нехватки памяти.
- В набор тестов добавлены новые проверки.
2001-04-06 (1.0.30)
- Удалена переменная TCL sqlite_encoding, добавленная в предыдущей версии.
- В команду TCL sqlite добавлены параметры -encoding и -tcl-uses-utf.
- Добавлены тесты, проверяющие, что tclsqlite скомпилирован с подходящими друг к другу заголовочными файлами и библиотеками Tcl.
2001-04-05 (1.0.29)
- Теперь библиотека предполагает, что данные хранятся в UTF-8, если при запуске configure указан параметр --enable-utf8. По умолчанию предполагается кодировка iso8859-x, как и раньше. Это влияет только на операторы LIKE и GLOB, а также функции LENGTH и SUBSTR.
- Если библиотека не настроена для UTF-8, а библиотека Tcl относится к новым версиям, использующим UTF-8 внутри, то в интерфейсе TCL выполняется преобразование из UTF-8 в iso8859 и обратно.
2001-04-04 (1.0.28)
- Добавлена ограниченная поддержка транзакций. На данном этапе транзакции блокируют таблицы в серверном модуле GDBM. Откат и атомарная фиксация пока не поддерживаются.
- Добавлены специальные имена столбцов ROWID, OID и _ROWID_, обозначающие уникальный случайный целочисленный ключ, связанный с каждой строкой каждой таблицы.
- В набор регрессионных тестов добавлены дополнительные проверки новой функции ROWID и упомянутых ниже ошибок интерфейса TCL.
- В генератор парсеров Lemon внесены изменения, улучшающие его работу при компиляции с помощью MSVC.
- Исправлены ошибки интерфейса TCL, обнаруженные Oleg Oleinick.
2001-03-20 (1.0.27)
- Раньше при выполнении DELETE и UPDATE номера записей, которые нужно удалить или обновить, записывались библиотекой во временный файл. Теперь номера записей хранятся в памяти.
- Команда DELETE без предложения WHILE просто удаляет файлы базы данных с диска, вместо того чтобы удалять записи по одной.
2001-03-20 (1.0.26)
- В Windows исправлена серьезная ошибка. Пользователям Windows следует обновиться. На Unix это не влияет.
2001-03-15 (1.0.25)
- Изменены тестовые сценарии: теперь они выявляют тесты, зависящие от нагрузки на систему и скорости процессора, и предупреждают пользователя, что сбой одного из таких (редких) тестов не обязательно означает неисправность библиотеки. Код не изменялся.
2001-03-14 (1.0.24)
- Исправлена ошибка, из-за которой команда UPDATE завершалась сбоем в системах, где "malloc(0)" возвращает NULL. Эта проблема не возникает в Windows, Linux или HPUX, но приводит к сбою библиотеки в QNX.
2001-02-20 (1.0.23)
- Исправлена несвязанная с остальными (и незначительная) ошибка, обнаруженная Mark Muranwski. Алгоритм определения места для временных файлов базы данных "memory:" работал не совсем корректно.
2001-02-19 (1.0.22)
- Предыдущее исправление было не совсем верным. Это исправление, похоже, работает лучше.
2001-02-19 (1.0.21)
- Оператор UPDATE не работал, если предложение WHERE содержало одни условия, которые можно было проверить с помощью индексов, и другие, которые нельзя было проверить таким образом. Исправлено.
2001-02-11 (1.0.20)
- Изменения, внесенные в ходе разработки, объединены с основной веткой. Дальнейшая работа над использованием файловой структуры BTree будет вестись в отдельном исходном дереве CVS. Это дерево CVS продолжит поддерживать только версию SQLite с GDBM.
2001-02-06 (1.0.19)
- Исправлено необычное (но допустимое) объявление C, вызывавшее проблемы в QNX. Логика не изменена.
2001-01-04 (1.0.18)
- При возникновении ошибки выводить проблемный оператор SQL.
- В операторах CREATE TABLE запятые между ограничениями больше не обязательны.
- В оболочку добавлен параметр "-echo".
- Изменены комментарии.
2000-12-10 (1.0.17)
- Функция sqlite_complete() переписана для повышения скорости.
- В другой код внесены небольшие изменения, чтобы он работал немного быстрее.
- Добавлены новые тесты для sqlite_complete() и проверки утечек памяти.
2000-11-28 (1.0.16)
- Обновлена документация. В основном исправлены опечатки и орфографические ошибки.
2000-10-23 (1.0.15)
- Обновлена документация
- Некоторые проверки корректности удалены из внутреннего цикла vdbe.c, чтобы библиотека работала немного быстрее. Код удаляется только при компиляции с -DNDEBUG.
2000-10-19 (1.0.14)
- Добавлен серверный драйвер "memory:", который хранит базу данных в хеш-таблице в оперативной памяти.
2000-10-19 (1.0.13)
- Драйвер GDBM вынесен в отдельный файл в рамках подготовки к добавлению новых драйверов.
- Добавлена возможность указывать тип драйвера в начале имени базы данных. Пока доступен только тип драйвера "gdbm:".
2000-10-17 (1.0.12)
- Исправлена ошибка на единицу, из-за которой происходил аварийный сбой в директиве формата '%q' новых процедур sqlite_..._printf().
- Добавлен интерфейс sqlite_interrupt().
- В оболочке sqlite_interrupt() вызывается, когда пользователь нажимает Control-C
- Исправлены некоторые случаи, когда sqlite_exec() возвращал неправильный код ошибки.
2000-10-11 (1.0.10)
- Добавлены инструкции по компиляции для Windows95/98.
- Удалено несколько неиспользуемых переменных и внесены другие мелкие изменения.
2000-10-09 (1.0.9)
- Добавлены интерфейсные процедуры sqlite_..._printf().
- Программа-оболочка sqlite изменена для использования новых интерфейсных процедур.
- Программа-оболочка sqlite изменена: теперь по явному запросу она выводит схему встроенной таблицы SQLITE_MASTER.
2000-09-30 (1.0.8)
- Начата работа над документацией по интерфейсу TCL.
2000-09-29 (не выпущена)
- Изменен метод "eval" в tclsqlite: если сценарий обратного вызова не указан, метод возвращает список результатов.
- В tclsqlite.c добавлено использование интерфейса Tcl_Obj
- tclsqlite.c добавлен в библиотеку libsqlite.a
2000-09-21 (не выпущена)
- Изменен метод "eval" в tclsqlite: если сценарий обратного вызова не указан, метод возвращает список результатов.
- В tclsqlite.c добавлено использование интерфейса Tcl_Obj
- tclsqlite.c добавлен в библиотеку libsqlite.a
2000-09-14 (1.0.5)
- Формат вывода значений с плавающей точкой изменен с "%g" на "%.15g".
- Изменена функция сравнения, чтобы числа в экспоненциальной записи (например, 1.234e+05) сортировались в числовом порядке.
2000-08-28 (1.0.4)
- Добавлены функции length() и substr().
- Исправлена ошибка в программе-оболочке sqlite, из-за которой происходил аварийный сбой, если режим вывода был "column", а первая строка данных содержала NULL.
2000-08-22 (1.0.3)
- В оболочке sqlite сообщение "Database opened READ ONLY" теперь выводится в stderr, а не в stdout.
- В оболочке sqlite при запуске теперь выводится номер версии.
- В библиотеку добавлена строковая константа sqlite_version[]
- Обновлен Makefile
- Исправлена ошибка: в следующем случае генерировался некорректный код VDBE: запрос к индексированной таблице содержал предложение WHERE с оператором IN, справа от которого находился подзапрос.
2000-08-18 (1.0.1)
- Исправлена ошибка в сценарии configure.
- Внесены небольшие изменения на веб-сайте.
2000-08-17 (1.0)
- Изменена программа sqlite, чтобы она могла читать базы данных, для которых у нее нет разрешения на запись. (Раньше она отказывала в любом доступе, если не могла выполнять запись.)
2000-08-09
- Возвраты каретки считаются пробельными символами.
2000-08-08
- В команду ".table" командной оболочки "sqlite" добавлено сопоставление с шаблоном.
2000-08-04
- Обновлена документация
- В интерфейс Tcl добавлены методы "busy" и "timeout"
2000-08-03
- Номер версии формата файла несколько раз сохранялся в sqlite_master.tcl. Это было безвредно, но излишне. Теперь проблема исправлена.
2000-08-02
- Формат файлов индексов немного изменен для устранения неэффективности, которая иногда возникает в GDBM при наличии больших индексов с множеством записей, имеющих одинаковый ключ. ** Несовместимое изменение **
2000-08-01
- Стек парсера переполнялся при очень длинном операторе UPDATE. Теперь это исправлено.
2000-07-31
- Завершено создание руководства по VDBE.
- Добавлена документация по компиляции для WinNT.
- Исправлена программа настройки для WinNT.
- Исправлена проблема конфигурации для HPUX.
2000-07-29
- Улучшены подписи имен столбцов в результатах.
2000-07-28
- Добавлен интерфейс sqlite_busy_handler() и sqlite_busy_timeout().
2000-06-23
- Начата работа над руководством по VDBE.
2000-06-21
- Упорядочены комментарии и имена переменных. Изменена документация. Функциональность кода не изменилась.
2000-06-19
- Имена столбцов в операторах UPDATE учитывали регистр. Эта ошибка исправлена.
2000-06-18
- Добавлен оператор конкатенации строк (||)
2000-06-12
- В интерпретатор SQL добавлена функция fcnt(). Функция fcnt() возвращает количество выполненных операций "Fetch" базы данных. Эта функция предназначена для использования в тестовых сценариях, чтобы проверять эффективность запросов и корректность их оптимизации. Насколько мне известно, у fcnt() нет другого полезного назначения.
- Добавлено множество тестов, использующих новую функцию fcnt(). Новые тесты не выявили дополнительных проблем.
2000-06-08
- Добавлено множество новых тестов
- Исправлено несколько ошибок, обнаруженных при добавлении тестов
- Начата работа над большим объемом новой документации
2000-06-06
- Добавлены операторы составных запросов: UNION, UNION ALL, INTERSECT и EXCEPT
- Добавлена поддержка использования (SELECT ...) внутри выражений
- Добавлена поддержка операторов IN и BETWEEN
- Добавлена поддержка GROUP BY и HAVING
- Теперь значения NULL передаются функции обратного вызова как указатель NULL, а не как пустая строка.
2000-06-03
- Добавлена поддержка значений по умолчанию для столбцов таблицы.
- Расширено покрытие тестами. Исправлено несколько малозаметных ошибок, обнаруженных новыми тестами.
2000-06-02
- Теперь все файлы базы данных, которые будут изменены командами UPDATE, INSERT или DELETE, блокируются до внесения каких-либо изменений в файлы. Это позволяет безопасно (как мне кажется) обращаться к одной и той же базе данных одновременно из нескольких процессов.
- Код выглядит стабильным, поэтому теперь мы называем его «бета-версией».
2000-06-01
- Улучшена поддержка блокировок файлов, чтобы два или более процесса (или потока) могли одновременно обращаться к одной базе данных. Однако эту часть еще предстоит доработать.
2000-05-31
- Добавлена поддержка агрегатных функций (например, COUNT(*), MIN(...)) в операторе SELECT.
- Добавлена поддержка SELECT DISTINCT ...
2000-05-30
- Добавлен оператор LIKE.
- Добавлен оператор GLOB: он похож на LIKE, но использует подстановочные символы glob командной оболочки Unix вместо символов '%' и '_' в SQL.
- Добавлена команда COPY по образцу PostgreSQL, благодаря чему SQLite теперь может читать вывод утилиты выгрузки базы данных pg_dump из PostgreSQL.
- Добавлена команда VACUUM, вызывающая функцию gdbm_reorganize() для базовых файлов базы данных.
- И множество других исправлений ошибок...
2000-05-29
- Первый публичный выпуск альфа-версии
SQLite is in the Public Domain.
https://sqlite.org/changes.html