История выпусков
Эта страница содержит краткое описание изменений в SQLite. Более подробную информацию см. в журналах Fossil checkin по адресам https://www.sqlite.org/src/timeline и https://www.sqlite.org/src/timeline?t=release. См. хронологию для краткого списка выпусков.
2024-10-21 (3.47.0)
- Разрешить произвольные выражения во втором аргументе функции RAISE.
- Если правая часть оператора ->> отрицательна, то элементы массива доступны, считая справа.
- Исправлена проблема с откатными файлами журнала в малоиспользуемом unix-dotfile VFS.
- Теперь таблицы FTS5 могут быть удалены, даже если они используют нестандартный токенизатор, который не был зарегистрирован.
- Исправлена агрегатная функция group_concat(), чтобы она возвращала пустую строку, а не NULL, если она получает единственное входное значение — пустую строку.
- Расширена функция-таблица generate_series(), чтобы она могла распознавать и использовать ограничения на выходное значение.
- Обработчики preupdate теперь распознают, когда столбец, добавленный оператором ALTER TABLE ADD COLUMN, имеет ненулевое значение по умолчанию.
- Оптимизации производительности:
- Улучшена повторная переиспользование подзапросов, связанных с оператором IN, особенно когда оператор IN был дублирован из-за сжатия предиката.
- Используйте Bloom-фильтр для подзапросов в правой части оператора IN в случаях, когда это, вероятно, улучшит производительность.
- Убедитесь, что запросы, такие как "
SELECT func(a) FROM tab GROUP BY 1", вызывают функцию func() только один раз на строку. - Не делается попыток создать автоматические индексы для столбца, который, как известно, является неселективным из-за использования в других индексах, которые были проанализированы.
- Корректировки планировщика запросов, чтобы он генерировал лучшие планы для звездных запросов с большим количеством таблиц измерений.
- Добавлена оптимизация "order-by-subquery", которая стремится отключить операции сортировки во внешних запросах, если нужный порядок естественным образом достигается за счёт операторов ORDER BY в подзапросах.
- Оптимизация "indexed-subtype-expr" стремится использовать выражения, которые являются частью индекса, а не пересчитывать выражение на основе значений таблицы, если планировщик запросов может доказать, что подтип выражения никогда не будет использован.
- Различные улучшения кода для ускорения времени выполнения.
- Улучшения программ командной строки, связанных с SQLite:
- Добавлена экспериментальная программа sqlite3_rsync.
- Добавлены функции расширения median(), percentile(), percentile_cont() и percentile_disc() в CLI.
- Добавлена команда .www в CLI.
- Утилита sqlite3_analyzer теперь предоставляет статистику для таблиц БЕЗ ROWID.
- Утилита sqldiff не создаёт пустую базу данных, если второй аргумент не существует.
- Улучшена функция-таблица sqlite_dbpage, чтобы INSERT мог увеличить или уменьшить размер файла базы данных.
- SQLite больше не использует тип данных "long double", поскольку поддержка 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(), чтобы она возвращала пустую строку, если имеет одно или несколько пустых входных строк.
- В режиме безопасного удаления 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.
- Улучшения функций даты и времени:
- Функция strftime() теперь поддерживает %G, %g, %U и %V.
- Новые модификаторы 'ceiling' и 'floor' контролируют алгоритм разрешения неопределённых дат при сдвиге даты на целое число месяцев и/или лет.
- Модификаторы 'utc' и 'localtime' теперь являются бесполезными операциями, если SQLite знает, что время уже в UTC или в местном времени, соответственно.
- Добавлена поддержка нижнего подчёркивания ("_") между цифрами в числовых литералах.
- Добавлена функция json_pretty().
- Улучшения планировщика запросов:
- Оптимизация "VALUES-as-coroutine" позволяет операторам INSERT с тысячами строк в операторе VALUES парсить и запускать примерно в два раза быстрее и используя примерно в два раза меньше памяти.
- Разрешить использование индекса для запросов, таких как "SELECT count(DISTINCT col) FROM ...", даже если записи индекса не меньше, чем записи таблицы.
- Улучшено распознавание случаев, когда значение SQL-функции является константой, потому что все ее аргументы являются константами.
- Улучшена оптимизация сжатия WHERE-оператор, чтобы она могла сжимать условия WHERE, содержащие некоррелированные подзапросы.
- Выделение дополнительной памяти из кучи для стека синтаксического анализатора SQL, если этот стек переполняется, а не вывод ошибки "переполнение стека синтаксического анализатора".
- Изменения JSON:
- Разрешение ASCII-управляющих символов в строковых литералах JSON5.
- Исправление операторов -> и ->>, чтобы при правом операнде строка, похожая на целое число, всё ещё обрабатывалась как строка, потому что именно так это делает PostgreSQL.
- Разрешение использования больших шестнадцатеричных литералов в качестве значения по умолчанию столбца таблицы.
Хэши:
- 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)
- Восстановить ошибку JSON BLOB input и обещать поддерживать аномалию в последующих выпусках для обратной совместимости.
- Исправить команду PRAGMA integrity_check, чтобы она работала с только для чтения базами данных, содержащими таблицы FTS3 и FTS5. Это исправляет проблему, появившуюся в версии 3.44.0, но обнаруженную только после релиза 3.45.0.
- Исправление проблем, связанных с обработкой повреждённых JSONB входных данных:
- Предотвратить экспоненциальное время выполнения при преобразовании повреждённого JSONB в текст.
- Исправить возможный считывание одного байта за границу JSONB blob при преобразовании повреждённого JSONB в текст.
- Улучшенные тесты с использованием jfuzz для предотвращения будущих проблем с JSONB, таких как описанные выше.
- Исправление давней ошибки, в которой при доступе к умышленно повреждённой базе данных с использованием базы данных с отображением в память могло произойти считывание нескольких байтов за границей сегмента отображения в память.
- Исправление давней ошибки, в которой могла произойти попытка обращение к NULL указателю в движке байткода из-за некорректного сгенерированного байткода для класса SQL-запросов, специально разработанных для тестирования планировщика запросов, но в остальном бесполезных.
Хэши:
- SQLITE_SOURCE_ID: 2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257cc467a
- SHA3-256 для sqlite3.c: 0474604df9e1b69a5544295dd046aad954749279780d557da80f44b958100295
2024-01-15 (3.45.0)
- Добавлено свойство SQLITE_RESULT_SUBTYPE для функций SQL, определённых приложением. Все функции SQL, определённые приложением, которые вызывают sqlite3_result_subtype(), должны быть зарегистрированы с этим новым свойством. Отсутствие регистрации может привести к тому, что вызов sqlite3_result_subtype() будет работать как ничто. Компилируйте с -DSQLITE_STRICT_SUBTYPE=1, чтобы вызвать SQL-ошибку, если функция, которая не является SQLITE_RESULT_SUBTYPE, пытается вызвать sqlite3_result_subtype(). Использование -DSQLITE_STRICT_SUBTYPE=1 — рекомендуемый параметр компиляции для каждого приложения, использующего типы данных.
- Улучшения функций JSON SQL:
- Все функции JSON переписаны для использования нового внутреннего формата синтаксического дерева, называемого JSONB. Новый формат синтаксического дерева сериализуем и, следовательно, может быть сохранён в базе данных, чтобы избежать ненужного повторного разбора при использовании значения JSON.
- Новые версии функций генерации JSON генерируют двоичный JSONB вместо текста JSON.
- Функция json_valid() добавляет необязательный второй аргумент, который определяет, что означает «хорошо сформированность» первого аргумента.
- Добавить параметр FTS5 tokendata для виртуальной таблицы FTS5.
- Оптимизация 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, обнаруженной во время внутренних тестов fuzzing всего через несколько минут после теггирования выпуска 3.44.1.
- Исправление неполных инструкций assert(), которые fuzzer обнаружил на следующий день после предыдущего выпуска.
- Исправление нескольких безобидных предупреждений компилятора, появившихся в отладочных сборках с GCC 16.
Хэши:
- SQLITE_SOURCE_ID: 2023-11-24 11:41:44 ebead0e7230cd33bcec9f95d2183069565b9e709bf745c9b5db65cc0cbf92c0f
- SHA3-256 для sqlite3.c: bd70b012e2d1b3efa132d905224cd0ab476a69b892f8c6b21135756ec7ffbb13
2023-11-22 (3.44.1)
- Изменение командной строки (CLI), чтобы она использовала UTF-16 для ввода-вывода консоли в Windows. Это обеспечивает правильное отображение текста Юникода на старых машинах с 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.
- Новые символы преобразования в функции strftime() SQL: %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 для ввода и вывода на платформах, которые это поддерживают. Доступен параметр --no-utf8 для отключения поддержки UTF8.
Хэши:
- SQLITE_SOURCE_ID: 2023-11-01 11:23:50 17129ba1ff7f0daf37100ee82d507aef7827cf38de1866e2633096ae6ad8130
- SHA3-256 для sqlite3.c: d9e6530096136067644b1cb2057b3b0fa51070df99ec61971f73c9ba6aa9a36e
2023-10-10 (3.43.2)
- Исправить несколько неочевидных ошибок UAF и утечку памяти.
- Исключить использование функции sprintf() из стандартной библиотеки в CLI, так как это теперь генерирует предупреждения на некоторых платформах.
- Избегать преобразования 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().
- Исправить оптимизацию omit-unused-subquery-columns (введённую в версии 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. - Добавлена функция timediff().
- Добавлено новых модификаторов сдвига времени в формате
- Добавлена функция octet_length(X).
- Добавлена API sqlite3_stmt_explain().
- Улучшения планировщика запросов:
- Обобщена оптимизация уменьшения силы LEFT JOIN, чтобы она работала и для RIGHT и FULL JOIN. Переименована в оптимизацию уменьшения силы OUTER JOIN.
- Улучшен теоретико-доказательный аппарат в оптимизации уменьшения силы OUTER JOIN, чтобы уменьшить количество ложных срабатываний.
- Улучшения расширения десятичных чисел:
- Новая функция decimal_pow2(N) возвращает N-ю степень 2 для целого N от -20000 до +20000.
- Новая функция decimal_exp(X) работает как decimal(X), но возвращает результат в экспоненциальной форме — с "e+NN" в конце.
- Если X — значение с плавающей точкой, функция decimal(X) теперь выполняет полное разложение этого значения в его точный десятичный эквивалент.
- Повышение производительности обработки JSON привело к двукратному улучшению производительности для некоторых видов обработки больших JSON-строк.
- Новая цель makefile "verify-source" проверяет отсутствие непреднамеренных изменений в дереве исходного кода. (Работает только для канонического исходного кода, а не для скомпилированных архивов amalgamation.)
- Добавлена опция компиляции SQLITE_USE_SEH, которая включает обработку структурных исключений (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)
- Добавлена команда FTS5 secure-delete. Эта опция удаляет все следы в инвертированном индексе FTS5 при удалении содержимого.
- Улучшены функции JSON SQL для поддержки расширений JSON5.
- Вызовы SQLITE_CONFIG_LOG и SQLITE_CONFIG_PCACHE_HDRSZ к sqlite3_config() теперь разрешены после sqlite3_initialize().
- Новые опции sqlite3_db_config(): SQLITE_DBCONFIG_STMT_SCANSTATUS и SQLITE_DBCONFIG_REVERSE_SCANORDER.
- Улучшения планировщика запросов:
- Оптимизация «подсчёта просмотров» включена по умолчанию.
- Избегание вычисления неиспользуемых столбцов в подзапросах.
- Улучшена оптимизация переноса условия WHERE.
- Улучшения командной строки:
- Добавлена опция командной строки --unsafe-testing. Без неё некоторые команды типа dot-команд (например, ".testctrl") теперь отключены, поскольку они предназначены только для тестирования и могут вызвать сбои при неправильном использовании.
- Разрешены команды ".log on" и ".log off", даже в режиме --safe.
- "--" в качестве аргумента командной строки означает, что все последующие аргументы, начинающиеся с "-", интерпретируются как обычные не-опциональные аргументы.
- Магические параметры ":inf" и ":nan" привязаны к литералам с плавающей точкой Бесконечность и NaN соответственно.
- Опция командной строки --utf8 исключает преобразование в или из MBCS в консоли Windows для интерактивных сеансов и устанавливает кодовую страницу консоли для ввода-вывода UTF-8 во время таких сеансов. Опция --utf8 является бесполезной на всех остальных платформах.
- Добавлена возможность для определяемых пользователем функций SQL иметь то же имя, что и ключевые слова объединения: CROSS, FULL, INNER, LEFT, NATURAL, OUTER или RIGHT.
- Улучшения PRAGMA integrity_check:
- Обнаружение и выдача ошибки при хранении значения NaN в столбце NOT NULL.
- Улучшенное сообщение об ошибке указывает корневую страницу дерева B-дерева, когда ошибка обнаружена внутри B-дерева.
- Разрешена настройка расширения сеансов для захвата изменений из таблиц, у которых отсутствует явный ROWID.
- Добавлено модификатор подсекунд к функциям даты и времени.
- Отрицательные значения, переданные в 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)
- Многочисленные исправления ошибок чтения за пределами буфера памяти (NB: чтения, а не записи) в следующих обстоятельствах:
- При обработке повреждённого файла базы данных с помощью нестандартной опции компиляции 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".
- Добавлен параметр SQLITE_FCNTL_RESET_CACHE для API sqlite3_file_control().
- Улучшения Makefile:
- Новая цель makefile "sqlite3r.c" строит ассоциацию, которая включает расширение восстановления.
- Новые цели makefile "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 в агрегирующем запросе.
- Добавлен новый тип данных sqlite3_filename для представления имени файла базы данных. Различные интерфейсы изменены для использования нового типа вместо "char*". Это изменение интерфейса должно быть полностью совместимо со старыми версиями, хотя может вызвать (безвредные) предупреждения компилятора при пересборке некоторых устаревших приложений.
- Добавлен интерфейс sqlite3_value_encoding().
- Усиление безопасности: SQLITE_DBCONFIG_DEFENSIVE расширен, чтобы запретить изменение schema_version. schema_version становится только для чтения в защитном режиме.
- Усовершенствования команды PRAGMA integrity_check:
- Столбцы в таблицах без STRICT-режима с типом TEXT не должны содержать числовые значения.
- Столбцы в таблицах без STRICT-режима с типом NUMERIC не должны содержать текстовые значения, которые могут быть преобразованы в числа.
- Проверка того, что строки таблицы WITHOUT ROWID находятся в правильном порядке.
- Усовершенствование команды VACUUM INTO, так что она учитывает настройку PRAGMA synchronous.
- Усовершенствование API sqlite3_strglob() и sqlite3_strlike(), чтобы они могли принимать указатели NULL для своих строковых параметров и всё равно генерировать осмысленный результат.
- Предоставлен новый параметр компиляции SQLITE_MAX_ALLOCATION_SIZE для ограничения размера выделения памяти.
- Изменён алгоритм, используемый встроенным псевдослучайным генератором чисел (PRNG) SQLite с RC4 на Chacha20.
- Разрешение двух или более индексов с одинаковым именем, при условии что они находятся в разных схемах.
- Различные оптимизации производительности приводят к примерно на 1% меньшему использованию процессора на типичных рабочих нагрузках.
Хэши:
- 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
- Исправлена давняя проблема в балансировщике B-дерева, которая в редких случаях могла привести к повреждению базы данных, если приложение использует приложением определённый кэш страниц.
- Улучшен 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-байтового кодирования UTF8.
- Улучшить виртуальную таблицу 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.
- Добавить новый код возврата (значение "3") из интерфейса sqlite3_vtab_distinct(), указывающий на запрос, содержащий одновременно предложения DISTINCT и ORDER BY.
- Добавить интерфейс sqlite3_db_name().
- Интерфейс операционной системы Unix разрешает все символические ссылки в именах файлов базы данных, чтобы создать каноническое имя для базы данных перед открытием файла. Если флаг SQLITE_OPEN_NOFOLLOW используется с sqlite3_open_v2() или аналогичным, открытие завершится ошибкой, если любой элемент пути является символической ссылкой.
- Отложить материализацию представлений до фактической необходимости материализации, тем самым избегая ненужной работы, если материализация так и не будет использована.
- Предложение HAVING в операторе SELECT теперь разрешено для любого агрегирующего запроса, даже для запросов, не имеющих предложения GROUP BY.
- Многие микрооптимизации в совокупности сокращают циклы ЦП примерно на 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 функций даты и времени, чтобы он сохранял дробные секунды.
- Исправить функцию 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 теперь являются встроенными. Больше не нужно использовать опцию времени компиляции -DSQLITE_ENABLE_JSON1 для включения поддержки JSON. JSON включен по умолчанию. Отключить интерфейс JSON с помощью новой опции времени компиляции -DSQLITE_OMIT_JSON.
- Улучшения функций даты и времени:
- Добавлена функция unixepoch().
- Добавлены модификатор auto и модификатор julianday.
- Переименована функция printf() SQL на format() для лучшей совместимости. Исходное имя printf() сохранено как псевдоним для обратной совместимости.
- Добавлена функция sqlite3_error_offset(), которая иногда помогает локализовать ошибку SQL до конкретного символа в тексте входного 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), которая может привести к повреждению базы данных, если SAVEPOINT откатывается в режиме PRAGMA temp_store=MEMORY, а затем выполняются другие изменения, и затем происходит подтверждение внешней транзакции. Запись в журнал 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-запросов, что потенциально может привести к ошибке обращения к указателю NULL.
- Исправить ошибку чтения за границами массива (OOB), которая может возникнуть в 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 tables предоставляют предписанный стиль управления типами данных для разработчиков, предпочитающих такой подход.
- При добавлении столбцов, содержащих ограничение CHECK или сгенерированный столбец, содержащий ограничение NOT NULL, ALTER TABLE ADD COLUMN теперь проверяет новые ограничения по существующим строкам в базе данных и продолжит только если ограничения не нарушены.
- Добавлена команда PRAGMA table_list.
- Улучшения CLI:
- Добавлена команда .connection, позволяющая CLI поддерживать несколько подключений к базам данных одновременно.
- Добавлена команда-флаг --safe командной строки, отключающая dot-команды и SQL-запросы, которые могут вызвать побочные эффекты, выходящие за пределы одного файла базы данных, указанного в командной строке.
- Улучшения производительности при чтении SQL-запросов, занимающих много строк.
- Добавлена функция sqlite3_autovacuum_pages().
- Функция sqlite3_deserialize() не работала и никогда не работала для временной базы данных. Это ограничение теперь указано в документации.
- Планировщик запросов теперь опускает предложения ORDER BY в подзапросах и представлениях, если удаление этих предложений не меняет семантику запроса.
- Расширение функции создания последовательности generate_series изменено так, что первый параметр ("START") теперь обязателен. Это сделано для демонстрации написания функций с обязательными параметрами. Старое поведение доступно при использовании опции компиляции -DZERO_ARGUMENT_GENERATE_SERIES.
- Добавлены новые функции sqlite3_changes64() и sqlite3_total_changes64().
- Добавлена опция флага SQLITE_OPEN_EXRESCODE к sqlite3_open_v2().
- Использование меньше памяти для хранения схемы базы данных.
Хэши:
- 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, но теперь оно изменено на MATERIALIZED для CTE, которые используются более одного раза.
- Настройки 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, так как это помогает сделать запросы к графам проще для написания и быстрее для выполнения.
- Улучшены сообщения об ошибках при ошибках проверки ограничений.
- Улучшения CLI:
- Команда .read теперь принимает конвейер помимо файла.
- Добавить параметры --data-only и --nosys к команде .dump.
- Добавить параметр --nosys к команде .schema.
- Правильное обращение с именами таблиц в кавычках для команды .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, так что он может выборочно проверить только одну таблицу и её индексы, а не весь файл базы данных.
- Добавлено расширение десятичных чисел для выполнения арифметики с произвольной точностью десятичных чисел.
- Улучшения расширения ieee754 для работы с числами IEEE 754 binary64.
- Улучшения CLI:
- Добавлено четыре новых режима вывода: "box", "json", "markdown" и "table".
- Режим вывода "column" автоматически расширяет столбцы до наибольшей длины строки вывода и автоматически включает ".header", если он не был ранее установлен.
- Режим вывода "quote" учитывает ".separator"
- Расширение десятичных чисел и расширение ieee754 встроенны в CLI.
- Улучшения планировщика запросов:
- Добавлена возможность найти план запроса с полным сканированием индекса для запросов с использованием INDEXED BY, которые ранее завершались с ошибкой "нет решения для запроса".
- Лучше обнаруживать отсутствующие, неполные и/или сомнительные данные 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 с контрольными суммами в набор загружаемых во время выполнения расширений, включенных в исходный код.
- Добавлена 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 в отладочных сборках
- Добавлена опция --bom к командам .excel, .output и .once.
- Улучшена команда .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.
- Улучшен pragma function_list для отображения количества аргументов каждой функции, типа функции (скалярная, агрегирующая, оконная) и флагов свойств функции SQLITE_DETERMINISTIC, SQLITE_DIRECTONLY, SQLITE_INNOCUOUS и/или SQLITE_SUBTYPE.
- Добавлена функция агрегирования в виртуальную таблицу DBSTAT.
- Добавлена опция SQLITE_OPEN_NOFOLLOW для sqlite3_open_v2(), которая предотвращает открытие SQLite символических ссылок.
- Добавлен символ "#-N" для аргументов пути JSON-функции.
- Добавлена настройка соединения SQLITE_DBCONFIG_TRUSTED_SCHEMA, которая также управляема новым pragma 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, одновременно уменьшая использование памяти кучи до 48 КБ на подключение, с 120 КБ.
- Предикат 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)
- Исправление ошибки в уплотняющем запросе, которая может привести к сбою сегментации для вложенных запросов, использующих новый фильтр в агрегатных функциях. Задача 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 в CLAUSE 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.
- Добавить опцию SQLITE_DBCONFIG_ENABLE_VIEW для sqlite3_db_config().
- Добавить метод config в интерфейс TCL для возможности отключения SQLITE_DBCONFIG_ENABLE_VIEW, а также для управления другими опциями sqlite3_db_config() из TCL.
- Добавлена флага SQLITE_DIRECTONLY для определённых пользователем функций SQL, чтобы предотвратить использование этих функций внутри триггеров и представлений.
- Легальная опция компиляции SQLITE_ENABLE_STAT3 теперь является бесполезной.
Хеши:
- SQLITE_SOURCE_ID: 2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f
- SHA3-256 для sqlite3.c: f04393dd47205a4ee2b98ff737dc51a3fdbcc14c055b88d58f5b27d0672158f5
2019-07-10 (3.29.0)
- Добавление действий SQLITE_DBCONFIG_DQS_DML и SQLITE_DBCONFIG_DQS_DDL в sqlite3_db_config() для активации и деактивации ошибочной опции двойных кавычек в строковых литералах. По умолчанию оба включены для совместимости со старыми версиями, но разработчикам рекомендуется отключить их, возможно, с помощью опции компиляции -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)
- Улучшение функций окон:
- Добавлена поддержка CLAUSE EXCLUDE.
- Добавлена поддержка цепочки окон.
- Добавлена поддержка фреймов GROUPS.
- Добавлена поддержка границ "<выражение> PRECEDING" и "<выражение> FOLLOWING" в фреймах RANGE frames.
- Добавление нового интерфейса sqlite3_stmt_isexplain(S) для определения, является ли подготовленный запрос EXPLAIN.
- Улучшение VACUUM INTO для работы с базами данных только для чтения.
- Новые оптимизации запросов:
- Включена оптимизация LIKE для случаев, когда присутствует ключевое слово ESCAPE и PRAGMA case_sensitive_like включено.
- В запросах, управляемых частичным индексом, избегайте ненужных проверок ограничения, указанного в предложении WHERE частичного индекса, так как мы знаем, что это ограничение всегда истинно.
- Улучшения TCL-интерфейса:
- Добавлена опция -returntype к методу function.
- Добавление нового метода bind_fallback.
- Улучшения CLI:
- Добавлена поддержка связанных параметров и команды .parameter.
- Исправление функции readfile(), чтобы она возвращала пустой BLOB вместо ошибки недостатка памяти при чтении пустого файла.
- Исправление функции writefile(), чтобы при создании новых каталогов по пути к новому файлу она назначала им права маски umask, а не такие же, как у файла.
- Изменение опции --update в команде .archive для пропуска файлов, которые уже есть в архиве и не изменены. Добавлена новая опция --insert, которая работает так же, как раньше --update.
- Добавлено расширение fossildelta.c, которое может создавать, применять и деконструировать формат дельты файлов Fossil DVCS, используемый расширением RBU.
- Добавлена команда SQLITE_DBCONFIG_WRITABLE_SCHEMA для интерфейса sqlite3_db_config(), выполняющая ту же работу, что и 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), если второй аргумент — связанный параметр.
- Повышение устойчивости к повреждённым файлам базы данных.
- Различные улучшения производительности.
- Установлен Git-зеркало официального дерева исходного кода SQLite. Канонические исходники 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_prepare_v3() с SQLITE_PREPARE_NORMALIZE для использования sqlite3_normalized_sql().
- Добавлен параметр remove_diacritics=2 для FTS3 и FTS5.
- Добавлен параметр SQLITE_PREPARE_NO_VTAB для sqlite3_prepare_v3(). Используйте этот параметр для предотвращения циклических ссылок на таблицы-тени, которые могут вызывать утечки ресурсов.
- Улучшения интерфейса 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".
- Улучшения командной строки, в основном для поддержки тестирования и отладки самой библиотеки SQLite:
- Добавлена поддержка ".open --hexdb". Утилита "dbtotxt" для генерации текста для "hexdb" добавлена в дерево исходных кодов.
- Добавлена поддержка параметра "--maxsize N" в ".open --deserialize".
- Добавлен параметр командной строки "--memtrace" для отображения всех операций выделения и освобождения памяти.
- Добавлен параметр ".eqp trace" в сборках с SQLITE_DEBUG для включения вывода байткода с отступами и PRAGMA vdbe_trace в одном шаге.
- Добавлена команда ".progress" для доступа к интерфейсу sqlite3_progress_handler().
- Добавлен параметр "--async" к команде ".backup".
- Добавлены параметры "--expanded", "--normalized", "--plain", "--profile", "--row", "--stmt" и "--close" к команде ".trace".
- Повышена устойчивость к вредоносному SQL, выполняемому на базе данных с повреждением.
Исправления ошибок:
- Не использовать частичный индекс для сканирования таблицы в операторе IN. Заявка 1d958d90596593a774.
- Исправлен сглаживатель запросов, чтобы он работал с запросами, содержащими подзапросы, использующие окна функций. Заявка 709fcd17810f65f717
- Обеспечить, чтобы ALTER TABLE изменял имена таблиц и столбцов, вложенных в предложения WITH, которые являются частью представлений и триггеров.
- Исправлена ошибка парсера, которая препятствовала использованию скобок вокруг функций с таблицами значений.
- Исправлена проблема с оптимизацией OR на индексах по выражениям. Заявка d96eba87698a428c1d.
- Исправлена проблема с оптимизацией снижения силы LEFT JOIN, в которой оптимизация применялась некорректно из-за оператора IS NOT NULL. Заявка 5948e09b8c415bc45d.
- Исправлена команда REPLACE, чтобы она больше не могла просовывать значение NULL в столбец NOT 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.
- Улучшены триггеры, чтобы они могли использовать функции с таблицами значений, существующие в схемах, отличных от схемы, в которой определен триггер.
- Улучшения командной строки:
- Улучшения команды ".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 и ранее: ссылки на переименованную таблицу внутри тел триггеров и представлений не обновляются. Эта новая команда PRAGMA предоставляет обходной путь для совместимости со старыми программами, которые ожидали более старого, некорректного поведения ALTER TABLE RENAME.
- Исправлена проблема с новой реализацией функций окон, которая приводила к сбоям при использовании сложных выражений, включающих функции окон, внутри представления.
- Исправления различных других предупреждений компилятора и мелких проблем, связанных с необычными конфигурациями.
Хэши:
- SQLITE_SOURCE_ID: "2018-09-25 19:08:10 fb90e7189ae6d62e77ba3a308ca5d683f90bbe633cf681865365b8e92792d1c7"
- SHA3-256 для sqlite3.c: 34c23ff91631ae10354f8c9d62fd7d65732b3d7f3acfd0bbae31ff4a62fe28af
2018-09-18 (3.25.1)
- Дополнительная проверка корректности, добавленная в релизе 3.25.0 для команды ALTER TABLE, иногда вызывает ложноположительный результат, когда изменяемая таблица имеет триггер, обновляющий виртуальную таблицу. Ложноположительный результат приводил к откат команды ALTER TABLE, оставляя схему неизменной. Билет b41031ea2b537237.
- Исправление в релизе 3.25.0 для бесконечного цикла в байткоде, связанном с оптимизацией ORDER BY LIMIT, не работало для некоторых запросов, включающих оконные функции. Требуется дополнительное исправление. Билет 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-early-out: При выполнении поиска по многостолбцовому индексу и использовании оператора IN для столбца, отличного от левого крайнего, если строки не соответствуют первому значению IN, проверьте, существуют ли строки, соответствующие столбцам справа, прежде чем продолжить с последующими значениями IN.
- Используйте свойство транзитивности для распространения константных значений внутри условия WHERE. Например, преобразуйте "a=99 AND b=a" в "a=99 AND b=99".
- Использование отдельного мьютекса для каждого узла inode в unix VFS вместо одного мьютекса, общего для всех, для лучшей конкуретности в многопоточных средах.
- Улучшение команды PRAGMA integrity_check для улучшенного обнаружения проблем на свободном списке страниц.
- Вывод бесконечности как 1e999 в команде ".dump" командной оболочки.
- Добавлена файловая управляющая команда 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.
- Добавление функций C-языка для определения SQL-ключевых слов, используемых SQLite: sqlite3_keyword_count(), sqlite3_keyword_name() и sqlite3_keyword_check().
- Добавление функций C-языка для динамических строк на основе объекта sqlite3_str.
- Улучшение ALTER TABLE, чтобы он распознавал "true" и "false" как допустимые аргументы для DEFAULT.
- Добавлена оптимизация сортировки-ссылок как опция компиляции. Доступна только при компиляции с SQLITE_ENABLE_SORTER_REFERENCES.
- Улучшение формата исходного кода EXPLAIN QUERY PLAN, чтобы он давал более подробную информацию о плане запроса и о взаимосвязях между различными компонентами плана.
- Добавлена опция SQLITE_DBCONFIG_RESET_DATABASE в API sqlite3_db_config().
Улучшения командной строки:
- Автоматическое перехват исходного кода EXPLAIN QUERY PLAN и его форматирование в графическом виде ASCII.
- Строки, начинающиеся с "#" и не находящиеся посередине SQL-выражения, интерпретируются как комментарии.
- Добавлена опция --append к команде ".backup".
- Добавлена команда ".dbconfig".
Производительность:
- UPDATE избегает ненужных низкоуровневых операций записи на диск, когда содержимое файла базы данных фактически не изменяется. Например, "UPDATE t1 SET x=25 WHERE y=?" не генерирует дополнительных операций ввода-вывода на диск, если значение в столбце x уже равно 25. Аналогично, при выполнении UPDATE для записей, охватывающих несколько страниц, на диск записывается только подмножество страниц, которые фактически изменяются. Это оптимизация производительности низкого уровня и не влияет на поведение триггеров или других структур SQL высокого уровня.
- Запросы, использующие ORDER BY и LIMIT, теперь пытаются избежать вычисления строк, которые не могут попасть под LIMIT. Это может значительно улучшить производительность запросов ORDER BY LIMIT, особенно когда LIMIT невелик по отношению к количеству строк вывода без ограничений.
- Оптимизация OR разрешена даже в том случае, если выражение OR также было преобразовано в выражение IN. Использование оптимизации OR теперь также более ясно показано в выводе EXPLAIN QUERY PLAN.
- Планировщик запросов более активно использует автоматические индексы для представлений и подзапросов, для которых невозможно создать постоянный индекс.
- Используйте однопроходные планы запросов UPDATE и DELETE в расширении R-Tree, где это уместно.
- Улучшения производительности в парсере, сгенерированном 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.
- Исправление неправильного поведения метода FTS5 xBestIndex. Билет 2b8aed9f7c9e61e8.
- Исправление безобидной ссылки на неинициализированный регистр виртуальной машины. Билет 093420fc0eb7cba7.
- Исправление CLI, чтобы он компилировался с -DSQLITE_UNTESTABLE
- Исправление расширения eval.c, чтобы оно работало с PRAGMA empty_result_callbacks=ON.
- Исправление виртуальной таблицы generate_series, чтобы она правильно возвращала 0 строк, если какое-либо из ограничений равно 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.
- Добавлена опция SQLITE_DBSTATUS_CACHE_SPILL к sqlite3_db_status() для отчётности о количестве сбросов кэша.
- Флаг "alternate-form-2" ("!") в реализации встроенной функции printf теперь заставляет подстановки строк измерять ширину и точность в символах вместо байтов.
- Если метод xColumn в реализации виртуальной таблицы виртуальной таблицы возвращает сообщение об ошибке с помощью sqlite3_result_error(), то отдавайте предпочтение этому сообщению перед внутренне сгенерированными.
- Добавлена командная строка опция -A к CLI для упрощения управления файлами SQLite Archive.
- Добавлена поддержка INSERT OR REPLACE, INSERT OR IGNORE и UPDATE OR REPLACE в виртуальной таблице Zipfile.
- Улучшен интерфейс sqlite3changeset_apply() для повышения его устойчивости к атакам с использованием преднамеренно повреждённых объектов изменений.
- Добавлена функция расширения sqlite3_normalize().
- Улучшения оптимизатора запросов:
- Улучшена оптимизация omit-left-join так, чтобы она работала в случаях, когда правая таблица является UNIQUE, но необязательно NOT NULL.
- Улучшена оптимизация push-down так, чтобы она работала для множества LEFT JOIN.
- Добавлена оптимизация LEFT JOIN strength reduction, которая преобразует LEFT JOIN в обычный JOIN, если в предложении WHERE существуют условия, предотвращающие появление дополнительной строки all-NULL в результирующем наборе LEFT JOIN.
- Избегание ненужных записей в таблицу sqlite_sequence, когда таблица с AUTOINCREMENT обновляется с rowid, меньшим максимального значения.
- Исправление ошибок:
- Исправлен парсер для принятия корректного синтаксиса row value. Заявка 7310e2fb3d046a5
- Исправлен планировщик запросов, чтобы он учитывал зависимости в аргументах функций таблиц в подвыражениях в предложении WHERE. Заявка 80177f0c226ff54
- Исправлен некорректный результат при сложных WHERE и STAT4, связанных OR. Заявка ec32177c99ccac2
- Исправлено потенциальное повреждение в индексах на выражениях из-за автоматических преобразований типов данных. Заявка 343634942dd54ab
- Сбой утверждения в FTS4. Заявка d6ec09eccf68cfc
- Некорректный результат оператора меньше в значениях строк. Заявка f484b65f3d62305
- Всегда интерпретировать ненулевые значения с плавающей точкой как TRUE, даже если целая часть равна нулю. Заявка 36fae083b450e3a
- Исправлена проблема в функции таблиц с оценкой fsdir(PATH) в расширении fileio.c, которая вызывала segfault, если таблица fsdir() использовалась как внутренняя таблица соединения. Проблема была сообщена на почтовой рассылке, исправлена с помощью коммита 7ce4e71c1b7251be
- Выдавать ошибку вместо сбою утверждения или сбою указателя на null при повреждении таблицы sqlite_master, чтобы корневая страница таблицы sqlite_sequence действительно была страницей индекса b-дерева. Коммит 525deb7a67fbd647
- Исправлена команда ANALYZE так, чтобы она вычисляла статистику для таблиц, имена которых начинаются с "sqlite". Коммит 0249d9aecf69948d
- Дополнительные исправления ошибок, обнаруженные OSSFuzz:
- Исправление возможной бесконечной петли при VACUUM для повреждённых файлов базы данных. Коммит 27754b74ddf64
- Запрет параметров в предложении WITH для триггеров и представлений. Коммит b918d4b4e546d
- Исправление потенциальной утечки памяти при обработке значений строк. Коммит 2df6bbf1b8ca8
- Улучшение производительности функции SQL replace() в случаях с множеством подстановок в строках размером в мегабайты, чтобы избежать таймаутов OSSFuzz во время тестирования. Коммит fab2c2b07b5d3
- Предоставление соответствующего сообщения об ошибке, когда таблица sqlite_master содержит оператор CREATE TABLE AS. Раньше это приводило к сбою утверждения или сбою указателя на null. Проблема была обнаружена OSSFuzz в проекте GDAL. Коммит d75e67654aa96
- Удалено некорректное утверждение assert(). Коммит 823779d31eb09cda.
- Исправление проблемы с использованием оптимизации LIKE для 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) table-valued function для перечисления файлов в директории.
- Виртуальная таблица sqlite_btreeinfo для интроспекции и оценки размеров B-деревьев в базе данных.
- Append VFS — это VFS shim, который позволяет добавить SQLite базу данных к другому файлу. Это позволяет (например), добавить базу данных к исполняемому файлу, который затем откроет и прочитает базу данных.
- Улучшения планировщика запросов:
- Оптимизация, использующая индекс для быстрого вычисления агрегатных min() или max(), расширена для работы с индексами на выражениях.
- Решение о том, реализовывать подзапрос FROM-строки как сопроцедуру или использовать сглаживание запросов, теперь учитывает, является ли результат внешнего запроса «сложным» (если он содержит функции или подзапросы выражений). Сложный результат наклоняет решение в сторону использования сопроцедур.
- Планировщик избегает планов запросов, использующих индексы с неизвестными функциями сортировки.
- Планировщик пропускает неиспользуемые LEFT JOIN'ы, даже если они не являются правыми самыми соединениями запроса.
- Другие оптимизации производительности:
- Более компактная и быстрая реализация подпрограммы преобразования текста в числа с плавающей точкой: sqlite3AtoF().
- Генератор парсера Lemon создаёт более быстрый парсер.
- Использование функции strcspn() из стандартной библиотеки C для ускорения операторов LIKE и GLOB.
- Улучшения командной оболочки:
- Команда ".schema" показывает структуру виртуальных таблиц.
- Добавлена поддержка чтения и записи файлов SQLite Archive с помощью команды .archive.
- Добавлена экспериментальная команда .expert
- Добавлена разновидность команды ".eqp" — ".eqp trigger"
- Улучшена команда ".lint fkey-indexes" для работы с таблицами WITHOUT ROWID.
- Если аргументом имени файла для оболочки является ZIP-архив, а не SQLite база данных, оболочка автоматически открывает этот ZIP-архив с помощью виртуальной таблицы Zipfile.
- Добавлена SQL-функция edit().
- Добавлена команда .excel для упрощения экспорта содержимого базы данных в электронную таблицу.
- Базы данных открываются с помощью Append VFS, когда используется флаг --append в командной строке или с командой .open.
- Улучшен параметр компиляции SQLITE_ENABLE_UPDATE_DELETE_LIMIT для работы с таблицами WITHOUT ROWID.
- Предоставлена SQL-функция sqlite_offset(X), возвращающая байтовый смещение в файле базы данных до начала записи, содержащей значение X, при компиляции с -DSQLITE_ENABLE_OFFSET_SQL_FUNC.
- Исправления ошибок:
- Бесконечный цикл при 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
24 октября 2017 года (3.21.0)
- Воспользуйтесь возможностями атомной записи в файловой системе F2FS, если она доступна, для значительного уменьшения накладных расходов на транзакции. В настоящее время это требует опции компиляции SQLITE_ENABLE_BATCH_ATOMIC_WRITE.
- Разрешить команды ATTACH и DETACH внутри транзакции.
- Разрешить виртуальным таблицам WITHOUT ROWID быть доступными для записи, если первичный ключ содержит ровно один столбец.
- "fsync()", выполняемый после записи заголовка при сбросе WAL, теперь использует настройки синхронизации для контрольных точек. Это означает, что на компьютерах Mac будет использоваться "fullfsync", если PRAGMA checkpoint_fullfsync установлен.
- Функция sqlite3_sourceid() пытается определить, была ли исходный код изменен с момента его коммита в систему контроля версий, и если есть изменения, последние четыре символа хэша версии отображаются как "alt1" или "alt2". Цель состоит в обнаружении случайных и/или неосторожных изменений. Мошенник может обойти эту функцию.
- Улучшена обработка снятия кавычек из названий столбцов для инструкций CREATE TABLE AS с агрегатной функцией в правой части.
- Уменьшено количество системных вызовов "stat()" в unix VFS.
- Улучшен оптимизатор 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 подсказку о том, что следует избегать больших выделений памяти, когда это возможно.
- Добавлена виртуальная таблица swarm к расширению виртуальной таблицы union.
- Добавлена виртуальная таблица sqlite_dbpage для прямого доступа к страницам файла базы данных. Исходный код включён в амальгамированный пакет и активируется с помощью опции компиляции -DSQLITE_ENABLE_DBPAGE_VTAB.
- Добавление нового типа виртуальной таблицы fts5vocab — "instance" — для прямого доступа к полному тексту индекса FTS5 на самом низком уровне.
- Удален вызов rand_s() в Windows VFS, поскольку он вызывал проблемы в 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.
- Исправление потенциальной ошибки чтения за пределами границ при запросе к повреждённому файлу базы данных, проблема, обнаруженная Natalie Silvanovich из 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 → требует sqlite3_bind_pointer() для поиска указателя fts5_api.
- carray(PTR,N) → требует sqlite3_bind_pointer() для установки параметра PTR.
- remember(V,PTR) → требует sqlite3_bind_pointer() для установки параметра PTR.
- Добавлено расширение виртуальной таблицы SQLITE_STMT.
- Добавлено расширение COMPLETION - предназначенное для предложения автозаполнения для интерактивных пользовательских интерфейсов. Находится в стадии разработки. Ожидаются дальнейшие улучшения в будущих выпусках.
- Добавлено расширение виртуальной таблицы UNION.
- Встроенные функции даты и времени были улучшены, чтобы их можно было использовать в ограничениях CHECK, в индексах по выражениям и в операторах WHERE частичных индексов, при условии, что они не используют ключевые слова 'now', 'localtime' или 'utc'. Подробнее.
- Добавлены интерфейсы sqlite3_prepare_v3() и sqlite3_prepare16_v3() с дополнительными параметрами "prepFlags".
- Предоставлен флаг SQLITE_PREPARE_PERSISTENT для sqlite3_prepare_v3(), и используется для ограничения злоупотребления кешируемой памятью FTS3, FTS5 и расширением R-Tree.
- Добавлена команда PRAGMA secure_delete=FAST. Когда secure_delete установлен в FAST, старое содержимое перезаписывается нулями, если это не увеличивает объем ввода-вывода. Удаленное содержимое может всё ещё сохраняться в списке свободных страниц, но будет удалено со всех страниц B-дерева.
- Улучшения командной строки:
- Добавлена поддержка автозаполнения с использованием расширения COMPLETION для readline и linenoise.
- Добавлена команда ".cd".
- Улучшена команда ".schema" для отображения схемы всех подключённых баз данных.
- Улучшена команда ".tables", так что она показывает имена схем для всех подключенных, если имя отличается от "main".
- Команда ".import" игнорирует начальный BOM UTF-8.
- Добавлена опция "--newlines" к команде ".dump" для вывода символов 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.
- Добавление опции -withoutnulls к методу TCL интерфейса eval.
- Улучшение утилиты 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 обработчик обратного вызова вызывается один раз с именем столбца, которое является пустой строкой для каждой таблицы, на которую ссылается запрос, из которого не извлекаются никакие столбцы.
- При использовании индекса по выражению, попробуйте использовать значения выражения, уже доступные в индексе, а не загружать исходные столбцы и пересчитывать выражение.
- Улучшите оптимизацию выравнивания, чтобы она могла выравнивать представления в правой части левого соединения.
- Используйте replace() вместо char() для экранирования символов новой строки и возврата каретки, вставленных в строки в выводе .dump из оболочки командной строки.
- Избегайте ненужной обработки внешних ключей в операторах 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() и C API sqlite3_sourceid(), а также присутствующий в макросе SQLITE_SOURCE_ID, теперь представляет собой 64-значный хэш SHA3-256, а не 40-значный хэш SHA1.
- Добавлена SQL-функция json_patch() для расширения JSON1.
- Улучшена оптимизация 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.
- Исправление ошибки в модификаторах 'начало ...' для функций даты и времени. Тикет 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)
- Приблизительно на 25% лучше производительность от расширения R-Tree.
- Использует встроенные функции компилятора (например: __builtin_bswap32() или _byteswap_ulong()) для перестановки байтов, если они доступны.
- Использует объект доступа к ключу/значению sqlite3_blob вместо SQL для извлечения содержимого из узлов R-Tree
- Другие различные улучшения, такие как развертывание циклов.
- Добавлен параметр компиляции 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, чтобы он мог хранить объект парсера в переменной стека, а не выделять память из кучи, и использование этого улучшения в amalgamation.
- Другие улучшения производительности. Использует примерно на 6,5% меньше циклов процессора.
- Выбрасывается ошибка, если предложение ON левого соединения ссылается на таблицы справа от предложения ON. Это поведение такое же, как в PostgreSQL. Раньше SQLite безмолвно преобразовывал левое соединение в внутреннее соединение. Исправление для тикета 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. Это давняя проблема, обнаруженная после выпуска 3.16.1 компанией OSS-Fuzz
- Исправить генератор байткода, чтобы он обрабатывал подзапрос в операторе 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.
- Добавлен параметр SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE для sqlite3_db_config().
- Улучшение функций даты и времени, чтобы модификатор '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 dot-команда в оболочку командной строки.
- Добавлена функция remember(V,PTR) SQL в качестве загружаемого расширения.
- Переименован 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.
- Исправление ссылок на NULL-указатель в 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), когда термины, соединённые оператором OR в операторе ON левого соединения, могли приводить к неверным результатам. Запрос 34a579141b2c5ac.
- Исправление случая, когда использование значений строк в операторе ON левого соединения могло приводить к неверным результатам. Запрос fef4bb4bd9185ec8f.
Хеши:
- SQLITE_SOURCE_ID: "2016-11-04 12:08:49 1136863c76576110e710dd5d69ab6bf347c65e36"
- SHA1 для sqlite3.c: e7c26a7be3e431dd06898f8d262c4ef240c07366
2016-10-14 (3.15.0)
- Добавлена поддержка значений строк.
- Разрешение детерминированных SQL функций в операторе WHERE частичного индекса.
- Добавлен параметр "modeof=filename" URI для unix VFS.
- Добавлена поддержка SQLITE_DBCONFIG_MAINDBNAME.
- Добавлена возможность очистки подключённой базы данных.
- Улучшения в оболочке командной строки:
- Добавлены ".testcase" и ".check" dot-команды.
- Добавлен параметр --new к ".open" dot-команде, который очищает все предыдущее содержимое базы данных перед открытием.
- Улучшение виртуальной таблицы fts5vocab для эффективной обработки "ORDER BY term".
- Различные микрооптимизации уменьшают использование ЦП более чем на 7% в обычных рабочих нагрузках. Большая часть оптимизации в этом релизе была на переднем плане (sqlite3_prepare_v2()).
Исправления ошибок:
- Оператор умножения теперь правильно обнаруживает переполнение 64-битных целых чисел и повышает тип к плавающей точке во всех крайних случаях. Исправление для запроса 1ec41379c9c1e400.
- Правильная обработка столбцов с избыточными уникальными индексами, когда эти столбцы используются в левой части оператора IN. Исправление для запроса 0eab1ac759.
- Пропуск NULL-записей в запросах диапазонов в индексах по выражениям. Исправление для запроса 4baa46491212947.
- Обеспечение инициализации счётчиков AUTOINCREMENT в таблице sqlite_sequence при выполнении "Xfer Optimization" для операторов "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(), чтобы он отключался, если аргументы обратного вызова или маски равны нулю, в соответствии с документацией.
- Исправление ошибок в комментариях и улучшение комментариев, сгенерированных в списках EXPLAIN, когда используется опция времени компиляции -DSQLITE_ENABLE_EXPLAIN_COMMENTS.
- Исправление команды ".read" в оболочке командной строки, чтобы она понимала, что её вход не интерактивный.
- Исправление вычислений аффинитета для 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", аналогичный "unix-none", который работает как стандартный "win32" VFS, за исключением того, что он игнорирует все блокировки файлов.
- Планировщик запросов использует полный сканирование частичного индекса вместо полного сканирования основной таблицы в тех случаях, когда это имеет смысл.
- Разрешить функциям табличного значения появляться в правой части оператора IN.
- Создана командная утилита dbhash.exe.
- Добавлены два новых интерфейса языка C: sqlite3_expanded_sql() и sqlite3_trace_v2(). Эти новые интерфейсы заменяют функции sqlite3_trace() и sqlite3_profile(), которые теперь устарели.
- Добавлена SQL-функция json_quote() к расширению json1.
- Отключить обращение к обработчику авторизации во время повторной обработки схемы.
- Добавлен параметр компиляции SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION и включен по умолчанию при построении командной оболочки.
Исправления ошибок:
- Исправлена команда ALTER TABLE, чтобы она не повреждала убывающие индексы при добавлении столбца в базу данных старого формата. Тикет f68bf68513a1c15f
- Исправлена ошибка обращения к указателю NULL/сбой, которая могла возникнуть, когда транзитивное условие 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)
- Отложить ввод-вывод, связанный с временными файлами, как можно дольше, надеясь, что его можно будет полностью избежать.
- Объединение расширения сеанса в trunk.
- Добавлена команда ".auth ON|OFF" в командную оболочку.
- Добавлен параметр "--indent" к командам ".schema" и ".fullschema" командной оболочки для включения красивой печати.
- Добавлен параметр ".eqp full" в командную оболочку, который выполняет как EXPLAIN, так и EXPLAIN QUERY PLAN для каждого оцениваемого оператора.
- Улучшена обработка имен файлов с использованием Unicode в командной оболочке в Windows.
- Увеличена устойчивость к нелогичным решениям планировщика запросов, вызванным неполными или неправильными изменениями приложения в таблице sqlite_stat1.
- Добавлен интерфейс sqlite3_db_config(db,SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION), который позволяет включить sqlite3_load_extension() C-API, сохраняя при этом SQL-функцию load_extension() отключённой для повышения безопасности.
- Изменён алгоритм поиска временной директории на Unix, чтобы разрешить директории с разрешениями на запись и выполнение, но без разрешения на чтение, как временные. Это же правило применимо к папке по умолчанию ".".
Исправления ошибок:
- Исправлена проблема с оптимизацией DELETE для нескольких строк в одном проходе, которая приводила к неправильным результатам с самоссылочным подзапросом в условии WHERE. Исправление для тикета dc6ebeda9396087
- Исправлена возможная ошибка segfault при DELETE для таблицы с ROWID и INTEGER PRIMARY KEY, где условие WHERE содержит OR, а таблица имеет один или несколько индексов, которые могут использовать оптимизацию OR, но ни один из индексов не ссылается на какие-либо столбцы таблицы, кроме INTEGER PRIMARY KEY. Тикет 16c9801ceba49.
- При проверке оптимизации WHERE-clause push-down убедитесь, что все члены составного внутреннего 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 нет.
29 марта 2016 г. (3.12.0)
- Значение SQLITE_DEFAULT_PAGE_SIZE увеличено с 1024 до 4096. Значение SQLITE_DEFAULT_CACHE_SIZE изменено с 2000 на -2000, чтобы по умолчанию использовалось то же количество кэш-памяти. Дополнительную информацию см. в примечании к применению на странице изменения размера страницы в версии 3.12.0.
Улучшения производительности:
- Улучшения генератора парсера Lemon, благодаря которым парсер SQL стал меньше и быстрее.
- Файлы журналов главного журнала (master journal) создаются только в том случае, если два или более присоединённых баз данных были изменены, PRAGMA synchronous не установлено в значение OFF, и journal_mode не установлено в значение OFF, MEMORY или WAL.
- Файлы журналов операторов (statement journal) создаются только при превышении размера порога. В противном случае журнал хранится в памяти, и не происходит операций ввода-вывода. Порог можно настроить во время компиляции с помощью SQLITE_STMTJRNL_SPILL или во время запуска с помощью sqlite3_config(SQLITE_CONFIG_STMTJRNL_SPILL).
- Планировщик запросов может оптимизировать операторы IN для виртуальных таблиц, даже если метод xBestIndex не устанавливает флаг sqlite3_index_constraint_usage.omit столбца виртуальной таблицы слева от оператора IN.
- Планировщик запросов теперь лучше оптимизирует доступ к виртуальным таблицам в соединениях со тремя или более таблицами, где ограничения на виртуальную таблицу разделены между двумя или более другими таблицами в соединении.
- Более эффективная обработка определяемых пользователем функций SQL, особенно в случаях, когда приложение определяет сотни или тысячи пользовательских функций.
- Планировщик запросов учитывает оператор LIMIT при оценке стоимости ORDER BY.
- Сценарий конфигурации (в Unix) автоматически обнаруживает pread() и pwrite() и устанавливает параметры компиляции для использования этих интерфейсов ОС, если они доступны.
- Уменьшение памяти, необходимой для хранения схемы.
- Различные микрооптимизации для повышения производительности и снижения использования памяти.
Новые возможности:
- Добавлен параметр SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER для sqlite3_db_config(), который позволяет включить или отключить двухаргументную версию функции SQL fts3_tokenizer() во время выполнения.
- Добавлен интерфейс sqlite3rbu_bp_progress() к расширению RBU.
- Выражение 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
Возможные существенные изменения:
3 марта 2016 г. (3.11.1)
- Улучшения файлов Make и скриптов сборки, используемых VisualStudio.
- Исправлена проблема с FTS5, из-за которой команда «optimize» могла привести к повреждению индекса.
- Исправлена ошибка чтения вне границ буфера, которая могла возникнуть при использовании FTS5 для запроса поврежденного файла базы данных.
- Увеличено максимальное значение «scope» для расширения spellfix1 с 6 до 30.
- SQLITE_SOURCE_ID: "2016-03-03 16:17:53 f047920ce16971e573bc6ec9a48b118c9de2b3a7"
- SHA1 для sqlite3.c: 3da832fd2af36eaedb05d61a8f4c2bb9f3d54265
15 февраля 2016 г. (3.11.0)
- Улучшен режим WAL, чтобы он эффективно работал с транзакциями, размер которых превышает cache_size.
- Добавлен параметр детализации FTS5.
- Добавлен параметр «EXTRA» к PRAGMA synchronous, выполняющий синхронизацию содержащейся директории, когда журнал отката разрывается в режиме DELETE, для улучшения долговечности. Параметр компиляции SQLITE_EXTRA_DURABLE включает PRAGMA synchronous=EXTRA по умолчанию.
- Улучшен планировщик запросов, чтобы он мог использовать индекс покрытия в рамках оптимизации OR.
- Избегайте повторного вычисления NOT NULL и CHECK ограничений для неизмененных столбцов в операторе UPDATE.
- Многочисленные микрооптимизации, что привело к более быстрому исполнению библиотеки по сравнению с предыдущей версией.
Улучшения консольного интерфейса:
- По умолчанию оболочка теперь находится в режиме «авто-объяснение». Вывод команд EXPLAIN автоматически форматируется.
- Добавлена команда ".vfslist".
- Параметр компиляции SQLITE_ENABLE_EXPLAIN_COMMENTS включён по умолчанию в стандартных сборках.
Улучшения TCL-интерфейса:
- Если подключение к базе данных открыто с параметром «-uri 1», то файлы URI обрабатываются командами «backup» и «restore».
- Добавлен параметр «-sourceid» к команде «sqlite3».
Улучшения Makefiles:
- Улучшено обнаружение pthreads в скриптах конфигурации.
- Добавлена возможность построения сборок MSVC Windows из слиянного файла.
Исправления ошибок
- Исправлена проблема с неправильным совместным использованием временных регистров VDBE между корутинами, которая могла привести к неправильным результатам запросов в редких случаях. Запрос d06a25c84454a.
- Исправлена проблема в интерфейсе sqlite3_result_subtype(), которая могла вызвать проблемы для расширения json1 в редких случаях. Исправление для запроса f45ac567eaa9f9.
- Экранирование управляющих символов в JSON-строках. Исправление для запроса ad2559db380abf8.
- Восстановление методов xCurrentTime и xGetLastError в встроенных файловых системах 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
Общие улучшения:
20 января 2016 г. (3.10.2)
- В версии 3.10.0 была обнаружена ошибка в операторе LIKE с учётом регистра, которая исправлена в этом выпуске. Запрос 80369eddd5c94.
Прочие исправления ошибок:
- Исправлена ошибка использования памяти после освобождения, которая может произойти при компиляции SQLite с -DSQLITE_HAS_CODEC.
- Исправлена сборка, чтобы она работала с -DSQLITE_OMIT_WAL.
- Исправлен сценарий конфигурации для слияния, чтобы опция --readline снова работала на Raspberry Pi.
Хеши:
- SQLITE_SOURCE_ID: "2016-01-20 15:27:19 17efb4209f97fb4971656086b138599a91a75ff9"
- SHA1 для sqlite3.c: f7088b19d97cd7a1c805ee95c696abd54f01de4f
Критическая ошибка:
14 января 2016 г. (3.10.1)
- Добавлен файловый контроль SQLITE_FCNTL_JOURNAL_POINTER.
Исправление ошибки:
- Исправлена ошибка в планировщике запросов, которая могла привести к некорректным результатам, когда подзапрос скалярного типа пытался использовать оптимизацию блочной сортировки. Запрос cb3aa0641d9a4.
Хеши:
- SQLITE_SOURCE_ID: "2016-01-13 21:41:56 254419c36766225ca542ae873ed38255e3fb8588"
- SHA1 для sqlite3.c: 1398ba8e4043550a533cdd0834bfdad1c9eab0f4
Новая функция:
6 января 2016 г. (3.10.0)
- Добавлена поддержка операторов LIKE, GLOB и REGEXP для виртуальных таблиц.
- Добавлено поле colUsed в sqlite3_index_info для использования методом sqlite3_module.xBestIndex.
- Улучшено утверждение PRAGMA cache_spill для принятия 32-битного целочисленного параметра, который определяет порог, ниже которого запрещено использование кэширования.
- В Unix, если открывается символическая ссылка на файл базы данных, соответствующие файлы журнала базируются на фактическом имени файла, а не на имени символической ссылки.
- Добавлен параметр "--transaction" к sqldiff.
- Добавлен интерфейс sqlite3_db_cacheflush().
- Добавлен интерфейс sqlite3_strlike().
- При использовании отображения памяти файл базы данных отображается только для чтения, чтобы случайные указатели и/или переполнения массивов в приложении не могли случайно изменить файл базы данных.
- Добавлены экспериментальные интерфейсы sqlite3_snapshot_get(), sqlite3_snapshot_open() и sqlite3_snapshot_free(). Они могут быть изменены или удалены в последующих версиях.
- Улучшен модификатор ''utc'' в функциях даты и времени, так что он является бесполезным, если известно, что дата/время уже в UTC. (Это не нарушение совместимости, так как поведение в этом случае давно документировано как "неопределенное".)
- Добавлены SQL-функции json_group_array() и json_group_object() в расширении json.
- Добавлен параметр компиляции SQLITE_LIKE_DOESNT_MATCH_BLOBS.
- Многочисленные небольшие оптимизации производительности.
Улучшения переносимости:
- Обход ошибки расширения знака в оптимизаторе компилятора HP C на HP/UX. (подробности)
Улучшения командной оболочки:
- Добавлены ".changes ON|OFF" и ".vfsinfo" команды.
- Перевод между MBCS и UTF8 при работе в cmd.exe на Windows.
Улучшения файлов make:
- Добавлены опции --enable-editline и --enable-static-shell в различные сгенерированные autoconf-скрипты конфигурации.
- Исключить все использование "awk" в файлах make для упрощения сборки для пользователей 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.
- Добавлена поддержка именных виртуальных таблиц.
- Теперь представление может ссылаться на неопределенные таблицы и функции при первоначальном создании. Отсутствующие таблицы и функции будут сообщены при использовании представления в запросе.
- Добавлены интерфейсы 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-запрос push-down не применяется к условиям, происходящим из оператора ON или USING левого соединения. Исправление для заявки 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 'b' к функции matchinfo() в FTS3.
- Улучшено fuzz-тестирование файлов базы данных с исправлениями найденных проблем.
- Добавлена программа тестирования fuzzcheck и автоматическое её выполнение с использованием как SQL, так и тестовых случаев базы данных в "make test".
- Добавлен статический мьютекс SQLITE_MUTEX_STATIC_VFS1 и его использование в Windows VFS.
- Обратный вызов 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, чтобы не оставлять пустые записи в таблице sqlite_master, если оператор SELECT справа прерывается с ошибкой. Билет 873cae2b6e25b
- Исправление оптимизации skip-scan, чтобы она работала правильно, когда используется оптимизация 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 'y' к функции matchinfo() в FTS3.
- Улучшения производительности для ORDER BY, VACUUM, CREATE INDEX, PRAGMA integrity_check и PRAGMA quick_check.
- Исправлены многие скрытые проблемы, обнаруженные во время SQL fuzzing.
- Идентификация всех методов для важных объектов в документации интерфейса. (пример)
- Фьюзер 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 левого соединения.
- Добавлена возможность подключения к библиотеке редактирования командной строки "linenoise" в Unix-версиях командной оболочки.
- 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, которая позволяет определить, был ли файл базы данных изменён другим процессом.
- Добавлен параметр SQLITE_CHECKPOINT_TRUNCATE к интерфейсу sqlite3_wal_checkpoint_v2(), с соответствующими улучшениями для 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.
- Добавлена опция SQLITE_CONFIG_PCACHE_HDRSZ для sqlite3_config(), что облегчает приложениям определение необходимого объёма памяти для использования с SQLITE_CONFIG_PAGECACHE.
- Количество строк в VALUES-оператор больше не ограничено параметром SQLITE_LIMIT_COMPOUND_SELECT.
- Добавлен eval.c загружаемый модуль расширения, реализующий SQL-функцию eval(), которая рекурсивно вычисляет SQL-запросы.
Улучшения производительности:
- Уменьшено число операций memcpy() при балансировке B-дерева, что обеспечивает повышение производительности на 3.2%.
- Улучшены оценки затрат для оптимизации skip-сканирования.
- Оптимизация автоматического индексирования теперь может генерировать частичный индекс, если это целесообразно.
Исправления ошибок:
- Обеспечение долговечности после отключения питания с "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.
Другие изменения:
- Отключение использования функции strchrnul() стандартной библиотеки C, если она не включена явно с помощью опции компиляции -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 с rowid в предложении WHERE.
- 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() и его вариантов.
- Добавлена опция SQLITE_LIMIT_WORKER_THREADS к sqlite3_limit() и команде PRAGMA threads для настройки количества доступных рабочих потоков.
- Расширение spellfix1 позволяет приложению необязательно указывать rowid для каждого INSERT.
- Добавлено расширение аутентификации пользователей.
Исправление ошибок:
- Исправлена ошибка в реализации частичного индекса, которая могла приводить к некорректному результату, если частичный индекс используется в подзапросе или в представлении. Заявка 98d973b8f5.
- Исправлена ошибка планировщика запросов, которая могла привести к сканированию таблицы в неправильном направлении (тем самым меняя порядок вывода), когда индекс DESC использовался для реализации предложения ORDER BY в запросе с идентичным предложением GROUP BY. Заявка ba7cbfaedc7e6.
- Исправлена ошибка в sqlite3_trace(), которая иногда не позволяла распечатать SQL-запрос, если этот запрос нужно было переподготовить. Заявка 11d5aa455e0d98f3c1e6a08
- Исправлена ошибка утверждения assert(). Заявка 369d57fb8e5ccdff06f1
Изменения в тестировании, отладке и анализе:
- Отображение диаграмм абстрактного синтаксического дерева в ASCII-искусстве с помощью команд ".selecttrace" и ".wheretrace" в консоли командной строки при компиляции с SQLITE_DEBUG, SQLITE_ENABLE_SELECTTRACE и SQLITE_ENABLE_WHERETRACE. Также предоставлены точки входа 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, которая позволяла создавать уникальный индекс для не-уникального столбца 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 по отношению к другим индексам.
- Улучшения в команде автослияния FTS4, для лучшего контроля размера индекса полнотекстового индекса, который подвергается большому количеству обновлений.
- Добавлен интерфейс sqlite3_rtree_query_callback() к расширению R-Tree.
- Добавлены новые параметры запроса URI "nolock" и "immutable".
- Использование меньшего объёма памяти, не запоминая ограничений CHECK на подключениях к чтению-только базам данных.
- Включить оптимизацию OR для таблиц WITHOUT ROWID.
- Представление выражений вида "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
- Функция group_concat(x,'') SQL возвращает NULL вместо пустой строки, когда все входные данные являются пустыми строками. Заявка 55746f9e65
- Исправлена ошибка в генераторе кода VDBE, которая приводила к сбою при выполнении INSERT INTO ... SELECT, где количество вставляемых столбцов больше количества столбцов в целевой таблице. Заявка e9654505cfd
- Исправлена проблема импорта CSV в оболочке командной строки, где, если самый левый столбец первой строки в файле CSV был размером нулевого байта и не был заключён в кавычки, данные не импортировались.
- Исправлена проблема в FTS4, где левый столбец, содержащий имя неиндексированного столбца в качестве префикса, не индексировался вместо столбца, чьё имя точно соответствовало.
- Исправлен интерфейс sqlite3_db_readonly(), чтобы он возвращал true, если база данных является read-only из-за того, что номер версии записи формата файла слишком большой.
- 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.
- При вычислении стоимости оптимизации skip-scan учитывать необходимость выполнения нескольких поисков.
- 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 в условии WHERE и также термин OR в условии WHERE, скомпилированные с SQLITE_ENABLE_STAT4. Заявка [4c86b126f2]
- Исправление ошибки: Убедитесь, что столбцы "rowid" правильно разрешаются в соединениях между обычными таблицами и таблицами WITHOUT ROWID. Заявка [c34d0557f7]
- Исправление ошибки: Убедитесь, что одинаковые временные регистры не используются в одновременных сопроцедурах, используемых для реализации составных запросов SELECT, содержащих предложения ORDER BY, так как такое использование может привести к неправильным ответам. Заявка [8c63ff0eca]
- Исправление ошибки: Убедиться, что предложения "ORDER BY random()" не оптимизируются. Заявка [65bdeb9739]
- Исправление ошибки: Исправление ошибки разрешения имён, которая может возникнуть в подзапросах, вложенных в триггеры. Заявка [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 как необязательный бит в четвёртом аргументе функций sqlite3_create_function() и родственных интерфейсов, предоставляя приложениям возможность создавать новые функции, которые можно вынести из внутренних циклов, когда у них есть постоянные аргументы.
- Добавлен код ошибки SQLITE_READONLY_DBMOVED, возвращаемый в начале транзакции, чтобы указать, что базовый файл базы данных был переименован или перемещен из-под SQLite.
- Разрешены произвольные выражения, включая вызовы функций и подзапросы, в аргументе имени файла для ATTACH.
- Разрешено использовать предложение VALUES там, где допустимо использовать оператор SELECT.
- Перезапуск генератора псевдослучайных чисел, используемого функцией sqlite3_randomness(N,P) при вызове с N==0. Автоматический перезапуск после fork() на Unix.
- Улучшена виртуальная таблица spellfix1, чтобы она могла эффективно искать по rowid.
- Улучшения производительности.
- Улучшения комментариев в отображении байт-кода VDBE при выполнении EXPLAIN.
- Добавлена директива "%token_class" к генератору синтаксического анализа Lemon и используется для упрощения грамматики.
- Изменён исходный код Lemon, чтобы избежать вызовов функций C-библиотеки, которые OpenBSD считает небезопасными (например, sprintf).
- Исправление ошибки: в функции импорта CSV в оболочке командной строки, не завершать поле, когда экранированная двойная кавычка появляется в конце строки CRLF.
- 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-дерева для использования расширенного интерфейса виртуальных таблиц.
- Добавлена опция компиляции 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, которые не могут быть использованы с индексами, всё равно, вероятно, сокращают количество выходных строк.
- Оцениваются размеры строк таблиц и индексов, и используется наименьшее подходящее B-дерево для полных сканирований и операций "count(*)".
- Добавлен pragma soft_heap_limit.
- Добавлена поддержка SQLITE_ENABLE_STAT4.
- Добавлена поддержка параметров "sz=NNN" в конце полей sqlite_stat1.stat для задания среднего размера в байтах для строк таблиц и индексов.
- Избегайте выполнения проверок ограничений внешнего ключа при UPDATE, если ни один из изменённых столбцов не связан с внешними ключами.
- Добавлена опция компиляции SQLITE_MINIMUM_FILE_DESCRIPTOR.
- Добавлен VFS win32-longpath для Windows, позволяющий имена файлов длиной до 32К символов.
- Функции Даты и времени улучшены, чтобы текущее время (например, julianday('now')) всегда было одинаковым для нескольких вызовов функции в рамках одного вызова sqlite3_step().
- Добавлено расширение "totype.c", реализующее SQL-функции tointeger() и toreal().
- Запросы FTS4 лучше используют ограничения docid<$limit для ограничения количества операций ввода-вывода.
- Добавлен скрытый столбец fts4aux languageid в виртуальную таблицу fts4aux.
- Команда VACUUM сжимает базу данных примерно на 1%.
- Программа утилиты sqlite3_analyzer обновлена для лучшего описания и более точной оценки "Непоследовательных страниц".
- Рефакторинг реализации операторов 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)
- Добавлена поддержка частичных индексов.
- Переход к планировщику запросов следующего поколения (NGQP) для более быстрых и лучших планов запросов.
- Вывод EXPLAIN QUERY PLAN больше не показывает оценку количества строк, генерируемых каждым циклом в объединении.
- Добавлена опция FTS4 notindexed, позволяющая использовать неиндексированные столбцы в таблице FTS4.
- Добавлена опция SQLITE_STMTSTATUS_VM_STEP для sqlite3_stmt_status().
- Добавлен pragma cache_spill.
- Добавлен pragma query_only.
- Добавлен pragma 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_WARNING_AUTOINDEX на SQLITE_CONFIG_LOG всякий раз, когда планировщик запросов использует автоматический индекс.
- Добавлена опция компиляции SQLITE_FTS3_MAX_EXPR_DEPTH.
- В расширение SQL-функции next_char() добавлен необязательный пятый параметр, определяющий сортировочную последовательность.
- Расширенный код ошибки SQLITE_BUSY_SNAPSHOT возвращается в режиме WAL, когда транзакция чтения не может быть обновлена в транзакцию записи, потому что чтение происходит по более старому снимку.
- Улучшения в программе утилиты 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 table).
- Добавлена виртуальная таблица fts3tokenize в логику полнотекстового поиска.
- Улучшение планировщика запросов: использовать транзитивное свойство ограничений для перемещения ограничений во внешние циклы соединения, когда это возможно, тем самым уменьшая объем работы, которая должна выполняться во внутренних циклах.
- Прекратить использование posix_fallocate() на Unix, так как оно не работает на всех файловых системах.
- Улучшены средства отладки и трассировки в VFS Windows.
- Исправление ошибки: исправить потенциальную ошибку повреждения базы данных в режиме обменного кэша, когда одно соединение с базой данных закрывается, в то время как другое находится в середине транзакции записи. Билет e636a050b7
- Исправление ошибки: рассматривать имена AS из набора результатов только как кандидатов для разрешения идентификаторов в предложении WHERE, если нет других совпадений. В предложении ORDER BY имена AS имеют приоритет перед любыми именами столбцов. Билет 2500cdb9be05
- Исправление ошибки: не разрешать виртуальной таблице отменять предложение ORDER BY, если все внешние циклы гарантированно возвращают не более одного результата строки. Билет ba82a4a41eac1.
- Исправление ошибки: не подавлять предложение ORDER BY в запросе виртуальной таблицы, если используется ограничение IN. Билет f69b96e3076e.
- Исправление ошибки: командная строка оболочки возвращает код завершения 0 при завершении с помощью команды ".quit".
- Исправление ошибки: убедиться, что инструкции PRAGMA отображаются в выводе sqlite3_trace().
- Исправление ошибки: при составном запросе compound query, использующем предложение ORDER BY с оператором COLLATE, убедиться, что сортировка выполняется в соответствии с указанным сортированием и что сравнения, связанные с составным запросом, используют родное сортирование. Билет 6709574d2a8d8.
- Исправление ошибки: убедиться, что обработчик авторизатора получает действительный указатель на строку "ROWID" для параметра имени столбца при выполнении обновления UPDATE, изменяющего 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, особенно в случаях, когда количество свободных страниц больше, чем помещается на одной странице-стержне freelist.
- Улучшение оптимизации запросов, содержащих агрегатные функции min() или max().
- Улучшение виртуальных таблиц, чтобы они потенциально могли использовать индекс, когда предложение WHERE содержит оператор IN.
- Разрешение использования индексов для сортировки, даже если предыдущие элементы индекса ограничены операторами IN в предложении WHERE.
- Улучшение команды PRAGMA table_info, чтобы столбец "pk" был возрастающим целым числом, отображающим порядок столбцов в первичном ключе.
- Улучшение оптимизатора запросов для использования транзитивных ограничений соединения.
- Улучшение производительности оптимизатора запросов.
- Разрешение сообщения об ошибке от PRAGMA integrity_check длиной более 20000 байт.
- Улучшение разрешения имен для глубоко вложенных запросов.
- Добавлен модуль test_regexp.c в качестве демонстрации реализации оператора REGEXP.
- Улучшение сообщений об ошибках в расширении RTREE.
- Улучшение командной строки оболочки, чтобы ненулевой аргумент команды ".exit" приводил к немедленному выходу оболочки без корректного закрытия соединения с базой данных.
- Улучшение сообщений об ошибках для неверных логических аргументов команд точек в командной строке оболочки.
- Улучшение сообщений об ошибках для "несоответствия внешнего ключа", отображающего имена двух задействованных таблиц.
- Удаление всех использований umask() в Unix VFS.
- Добавлены команды PRAGMA vdbe_addoptrace и PRAGMA vdbe_debug.
- Переход к использованию strncmp() или эквивалента вместо memcmp() при сравнении строк без нулевого завершения.
- Обновление интерфейсов cygwin, чтобы исключить устаревшие API-вызовы.
- Улучшение расширения spellfix1, чтобы таблица стоимости редактирования могла быть изменена во время выполнения путем вставки строки типа 'edit_cost_table=TABLE' в поле "command".
- Исправление ошибки: устранение давней проблемы, которая могла привести к неправильным результатам запроса в соединении 3-х или более путей, сравнивающем поля INTEGER с полями TEXT в двух или более местах. Билет fc7bd6358f
- Исправление ошибки: вывести сообщение об ошибке, если 16-битный счетчик ссылок представления переполняется из-за слишком сложного запроса.
- Исправление ошибки: предотвращение утечки памяти в предложениях LIMIT и OFFSET в глубоко вложенных запросах UNION ALL.
- Исправление ошибки: убедиться, что схема обновлена перед выполнением команд pragmas 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 исключается из оптимизации трёхоперационного соединения, когда 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, которая приводит к сбою программы (segfault), если имя 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 используются одновременно.
- Исправление ошибки: SQL-функции, созданные с использованием интерфейса TCL, учитывают настройку "nullvalue".
- Исправление ошибки: Исправление проблемы переполнения 32-битных значений в CREATE INDEX для баз данных, превышающих 16 ГБ.
- Исправление ошибки: Избежать сбоя программы (segfault) при использовании оператора COLLATE внутри ограничения CHECK или представления в режиме совместного кэша.
- SQLITE_SOURCE_ID: "2012-12-12 13:36:53 cd0b37c52658bfdf992b1e3dc467bae1835a94ae"
- SHA1 для sqlite3.c: 2b413611f5e3e3b6ef5f618f2a9209cdf25cbcff"
2012-10-04 (3.7.14.1)
- Исправление ошибки (запрос [d02e1406a58ea02d]]), которая приводит к сбою программы (segfault) в LEFT JOIN, включающем оператор OR в предложении ON.
- Работа вокруг ошибки в оптимизаторе в компиляторе VisualStudio-2012, которая приводит к генерации некорректного кода при компиляции SQLite на ARM.
- Исправление интерфейса TCL, чтобы настройка "nullvalue" учитывалась для TCL-реализаций SQL-функций.
- 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().
- Добавление интерфейсов sqlite3_quota_ferror() и sqlite3_quota_file_available() в модуль test_quota.c.
- Интерфейсы 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, которая может привести к сбою программы (segfault) для определённых редких вложенных агрегатных запросов.
- Исправление различных других незначительных проблем в сценариях тестирования.
- 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" является "|".
- Использовать OVERLAPPED в Windows VFS для избежания некоторых системных вызовов и достижения повышения производительности.
- Более агрессивная оптимизация оператора 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, имеющий те же условия, что и индекс UNIQUE, если эти условия также не являются NULL. Запрос 2a5629202f.
- SQLITE_SOURCE_ID: "2012-05-14 01:41:23 8654aa9540fe9fd210899d83d17f3f407096c004"
- SHA1 для sqlite3.c: 57e2104a0f7b3f528e7f6b7a8e553e2357ccd2e1
2012-03-20 (3.7.11)
- Улучшите синтаксис ВСТАВКИ, чтобы разрешить вставку нескольких строк через предложение VALUES.
- Улучшите команду СОЗДАТЬ ВИРТУАЛЬНУЮ ТАБЛИЦУ, чтобы она поддерживала предложение IF NOT EXISTS.
- Добавлен интерфейс sqlite3_stricmp() как аналог sqlite3_strnicmp().
- Добавлен интерфейс sqlite3_db_readonly().
- Добавлен файловый контроль SQLITE_FCNTL_PRAGMA, предоставляющий реализациям VFS возможность добавлять новые предложения PRAGMA или переопределять встроенные PRAGMA.
- Запросы вида: "SELECT max(x), y FROM table" возвращают значение y в той же строке, что и максимальное значение x.
- Добавлена поддержка опции FTS4 languageid.
- Документирована поддержка опции FTS4 content. Эта функция фактически присутствовала в коде с версии 3.7.9, но только сейчас считается официально поддерживаемой.
- Ожидающие операторы больше не блокируют ROLLBACK. Вместо этого, ожидающий оператор вернёт SQLITE_ABORT при следующем доступе после ROLLBACK.
- Улучшена обработка 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). Также это означает, что индексы в порядке убывания включены по умолчанию.
- Структура 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 байтов памяти для кэша страниц, независимо от размера страницы.
- Улучшен по умолчанию выделения памяти для использования _msize() в Windows, malloc_size() на Mac и malloc_usable_size() на Linux.
- Улучшен планировщик запросов для поддержки запросов индексов с ограничениями на диапазон rowid.
- Улучшен планировщик запросов для логики выравнивания, чтобы разрешить объединение UNION ALL повышаться для замены простого обертки SELECT, даже если объединения являются JOIN.
- Улучшен планировщик запросов, чтобы оптимизация xfer могла использоваться с INTEGER PRIMARY KEY ON CONFLICT, пока целевая таблица изначально пустая.
- Улучшен VFS для Windows, чтобы все системные вызовы могли быть переопределены с помощью интерфейса xSetSystemCall.
- Обновлён VFS "unix-dotfile" для использования защищённых каталогов с mkdir() и rmdir() вместо блокировки файлов с open() и unlink().
- Улучшения расширения test_quota.c для поддержки интерфейсов типа stdio с квотами.
- Изменён unix VFS для переносимости вызовов read(), возвращающих меньше, чем запрошенное количество байтов.
- Изменены как unix, так и windows VFS для отчётливости размера сектора в 4096 байт вместо старого значения по умолчанию в 512.
- В TCL Interface добавлен параметр -uri для команды "sqlite3" TCL, используемой для создания новых объектов соединения с базой данных.
- Добавлена опция SQLITE_TESTCTRL_EXPLAIN_STMT с опцией компиляции SQLITE_ENABLE_TREE_EXPLAIN для отображения дерева разбора SQL-операторов в оболочке командной строки для отладки и анализа.
- Исправление ошибки: Добавлена дополнительная xSync при перезапуске WAL, чтобы предотвратить чрезвычайно маловероятную, но теоретически возможную порчу базы данных после отключения питания. ТИКЕТ 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 начинается с "^", то этот маркер должен быть первым в своём поле документа. ** Возможно несовместимое изменение **
- Добавлены опции SQLITE_DBSTATUS_CACHE_HIT и SQLITE_DBSTATUS_CACHE_MISS к интерфейсу sqlite3_db_status().
- Удалена поддержка SQLITE_ENABLE_STAT2, заменена более эффективной опцией SQLITE_ENABLE_STAT3.
- Улучшения утилиты sqlite3_analyzer, включая опции --pageinfo и --stats, и поддержка множественных баз данных.
- Улучшен интерфейс sqlite3_data_count(), чтобы он мог определять, был ли получен SQLITE_DONE на подготовленном операторе.
- Добавлен файловый контроль SQLITE_FCNTL_OVERWRITE, позволяющий ядру SQLite указать VFS, что текущая транзакция перезапишет весь файл базы данных.
- Увеличен размер выделения по умолчанию для кэширования памяти с 100 до 128 байт.
- Улучшен планировщик запросов, чтобы он мог учитывать и исключать термины из выражений OR в предложении WHERE для поиска лучших индексов.
- Добавлена опция компиляции SQLITE_DIRECT_OVERFLOW_READ, позволяющая читать страницы переполнения непосредственно из файла базы данных, минуя кэш страниц.
- Убраны ограничения на величину precision и width в спецификаторах формата в семействе функций sqlite3_mprintf() для форматирования строк.
- Исправлена ошибка, препятствующая работе ALTER TABLE ... RENAME на некоторых виртуальных таблицах в базе данных с кодировкой UTF16.
- Исправлена ошибка в преобразовании ASCII в float, которая вызывала медленную работу и неправильные результаты при преобразовании чисел с чрезвычайно большими показателями степени.
- Исправлена ошибка, которая приводила к неправильным результатам в агрегатных запросах, использующих несколько агрегатных функций, аргументы которых содержат сложные выражения, отличающиеся только регистром строковых литералов внутри этих выражений.
- Исправлена ошибка, которая препятствовала правильной работе pragmas 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.
- Увеличен размер линии кэша lookahead с 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 prefix и опции FTS4 order.
- Разрешить открытие баз данных в режиме 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() и улучшен прагма wal_checkpoint для поддержки блокирующих чекпоинтов.
- Улучшения планировщика запросов, чтобы он делал более точные оценки стоимости планов, и тем самым лучше выбирал правильный план, особенно при использовании SQLITE_ENABLE_STAT2.
- Исправлена ошибка, которая мешала принудительному выполнению отложенных внешних ключей, когда sqlite3_finalize() не вызывался одной инструкцией с ошибкой внешнего ключа перед выполнением другой инструкции с внешними ключами.
- Арифметические операции с целыми числами, которые могли привести к переполнению, теперь выполняются с использованием чисел с плавающей точкой.
- Увеличен номер версии объекта VFS до 3 и добавлены новые методы xSetSysCall, xGetSysCall и xNextSysCall, используемые для тестирования с полным покрытием.
- Увеличено максимальное значение SQLITE_MAX_ATTACHED с 30 до 62 (хотя значение по умолчанию остается 10).
- Улучшения FTS4:
- Добавлена таблица fts4aux
- Добавлена поддержка сжатых данных FTS4
- Улучшена команда ANALYZE для поддержки имени индекса в качестве аргумента, чтобы проанализировать только этот индекс.
- Добавлен встроенный VFS "unix-excl" на Unix и Unix-подобных платформах.
- 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 вызывает SQLITE_FCNTL_SYNC_OMITTED системный вызов VFS вместо вызова xSync, если в базе данных установлено PRAGMA synchronous значение OFF.
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.
- Добавлен опция SQLITE_FCNTL_FILE_POINTER к sqlite3_file_control().
- Добавлена поддержка FTS4 и улучшения функции matchinfo() FTS.
- Добавлен модуль test_superlock.c, предоставляющий пример кода для получения эксклюзивной блокировки базы данных с откатном или режиме WAL.
- Добавлен модуль test_multiplex.c, предоставляющий пример VFS, который обеспечивает мультиплексирование (фрагментацию) базы данных, разделив её на несколько файлов фиксированного размера.
- Исправлена очень специфическая ошибка, связанная с оптимизацией or.
2010-10-08 (3.7.3)
- Добавлен интерфейс sqlite3_create_function_v2() с обратным вызовом деструктора.
- Добавлена поддержка запросов пользовательских r-trees с помощью функций обратного вызова для определения границ области запроса.
- Кэш страниц стремится активнее избегать использования памяти, выходящей за рамки выделенной 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-деревьев, так что VDBE предоставляет подсказки слою B-деревьев, позволяя ему знать, когда безопасно использовать хеширование вместо B-деревьев для временных таблиц.
- Различные улучшения документации.
2010-08-24 (3.7.2)
- Исправлена старая и очень специфическая ошибка, которая может привести к повреждению списка свободных страниц базы данных free-page list при использовании incremental_vacuum.
2010-08-23 (3.7.1)
- Добавлены новые команды SQLITE_DBSTATUS_SCHEMA_USED и SQLITE_DBSTATUS_STMT_USED в интерфейс sqlite3_db_status() для отображения используемой памяти для схемы и подготовленных инструкций соединения.
- Увеличен максимальный размер страниц базы данных с 32KiB до 64KiB.
- Использование оптимизации LIKE даже если строка в правой части не содержит символов подстановки.
- Добавлен системный вызов SQLITE_FCNTL_CHUNK_SIZE в интерфейс sqlite3_file_control() для Unix и Windows, чтобы файлы базы данных росли большими блоками, что уменьшит фрагментацию диска.
- Исправлена ошибка в планировщике запросов, которая приводила к снижению производительности по сравнению с 3.6.23.1 при некоторых сложных объединениях.
- Исправлена опечатка в бэкенде OS/2.
- Рефакторинг модуля пейджера.
- Опция компиляции 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, которое обеспечивает правильный порядок вывода.
- Добавлена функция SQLITE_DBSTATUS_CACHE_USED для sqlite3_db_status().
- Размер логической базы данных теперь хранится в заголовке базы данных, чтобы байты можно было добавлять в конец файла базы данных без повреждения и чтобы SQLite работал правильно на системах, не поддерживающих ftruncate().
2010-03-26 (3.6.23.1)
- Исправление ошибки в функции offsets() FTS3
- Исправлен недостающий «синхронизацию», отсутствие которой могло привести к повреждению базы данных, если произошло отключение питания или сбой ОС в момент завершения операции ROLLBACK.
2010-03-09 (3.6.23)
- Добавлена pragma secure_delete.
- Добавлены интерфейсы sqlite3_compileoption_used() и sqlite3_compileoption_get(), а также pragma compile_options, и SQL-функции sqlite_compileoption_used() и sqlite_compileoption_get().
- Добавлен интерфейс sqlite3_log() вместе с функцией SQLITE_CONFIG_LOG к sqlite3_config(). Команда ".log" добавлена в интерфейс командной строки.
- Улучшения в FTS3.
- Улучшения и исправления ошибок в поддержке SQLITE_OMIT_FLOATING_POINT.
- Пragma integrity_check улучшена для обнаружения rowids в неправильном порядке.
- Оператор ".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 опция компиляции исправлена, чтобы гарантировать удаление содержимого даже при применении оптимизации обрезки.
- Улучшения обработки команд «точка» в интерфейсе командной строки.
- Другие незначительные исправления ошибок и улучшения документации.
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)
- Добавлена поддержка ограничений внешних ключей. Ограничения внешних ключей по умолчанию отключены. Используйте pragma foreign_keys для их включения.
- Обобщены операторы IS и IS NOT для принятия произвольных выражений в правой части.
- Интерфейс TCL улучшен для использования интерфейса нерекурсивного движка (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. Эта функция включена только при включенных рекурсивных триггерах.
- Добавлены флаги SQLITE_OPEN_SHAREDCACHE и SQLITE_OPEN_PRIVATECACHE для sqlite3_open_v2(), которые используются для переопределения глобальных настроек режима совместного кэша для отдельных подключений к базе данных.
- Добавлены улучшенные функции идентификации версии: макрос препроцессора 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.
- Исправление ошибки производительности в кэше страниц, билет #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, где в выражении DEFAULT присутствует функция. Билет #3791.
- Исправление проблем выравнивания структуры данных на Sparc. Билет #3777.
- Прочие незначительные исправления ошибок.
2009-03-31 (3.6.12)
END_OF_DOCUMENT_MARKER- Исправлена ошибка, которая приводила к повреждению базы данных при отмене операции incremental_vacuum в базе данных оперативной памяти. Заявка #3761.
- Добавлен интерфейс sqlite3_unlock_notify().
- Добавлен pragma reverse_unordered_selects.
- Размер страницы по умолчанию в Windows автоматически настраивается для соответствия возможностям файловой системы.
- Добавлена новая команда ".genfkey" в CLI для генерации триггеров для реализации ограничений внешнего ключа.
- Улучшения производительности запросов "count(*)".
- Сокращение использования оперативной памяти, особенно триггерами.
2009-02-18 (3.6.11)
- Добавлен интерфейс hot-backup.
- Добавлены новые команды ".backup" и ".restore" в CLI.
- Добавлены новые методы backup и restore в интерфейс TCL.
- Улучшения схем синтаксиса
- Различные незначительные исправления ошибок
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
- Добавлена поддержка "Proxy Locking" на Mac OS X.
- Изменён прототип интерфейса sqlite3_auto_extension() таким образом, что обратная совместимость сохранена, но это может вызвать предупреждения в новых сборках приложений, использующих этот интерфейс.
- Изменена сигнатура метода xDlSym объекта sqlite3_vfs таким образом, что обратная совместимость сохранена, но это может вызвать предупреждения компилятора.
- Добавлены излишние приведения типов и инициализации переменных для подавления ненужных предупреждений компилятора.
- Исправления различных мелких ошибок.
2008-11-26 (3.6.6.2)
- Исправлена ошибка в алгоритме удаления b-дерева, которая, похоже, может привести к повреждению базы данных. Ошибка была впервые введена в версии 3.6.6 в ходе коммита [5899] 13 ноября 2008 года.
- Исправлена утечка памяти, которая может произойти после ошибки ввода-вывода на диске.
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)
- Добавлена опция MEMORY к pragma journal_mode.
- Добавлен интерфейс sqlite3_db_mutex().
- Добавлена опция компиляции SQLITE_OMIT_TRUNCATE_OPTIMIZATION.
- Исправлен оптимизация усечения таким образом, что интерфейсы sqlite3_changes() и sqlite3_total_changes(), а также pragma count_changes возвращают правильные значения.
- Добавлен интерфейс sqlite3_extended_errcode().
- Команда COMMIT теперь выполняется успешно, даже если существуют ожидающие запросы. Возвращает SQLITE_BUSY, если есть ожидающие запросы инкрементального ввода-вывода BLOB.
- Код ошибки изменён на SQLITE_BUSY (вместо SQLITE_ERROR) при попытке ROLLBACK в то время, когда один или несколько запросов всё ещё ожидают.
- Полностью исключена поддержка экспериментальных менеджеров памяти 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
- Добавлена опция TRUNCATE к PRAGMA journal_mode
- Улучшения производительности логики балансировки деревьев в слое B-дерева.
- Добавлен исходный код и документацию для программы genfkey для автоматической генерации триггеров для принудительного выполнения ограничений внешнего ключа.
- Добавлена опция компиляции SQLITE_OMIT_TRUNCATE_OPTIMIZATION.
- Документация языка SQL переведена на использование схем синтаксиса вместо BNF.
- Другие незначительные исправления ошибок
2008-09-22 (3.6.3)
- Исправление ошибки в логике SELECT DISTINCT, введённой в предыдущей версии.
- Другие незначительные исправления ошибок
2008-08-30 (3.6.2)
- Разделение подсистемы пейджера на отдельные подсистемы пейджера и pcache.
- Выделение процедур разрешения идентификаторов в отдельные файлы.
- Исправления ошибок
2008-08-06 (3.6.1)
- Добавлен lookaside менеджер памяти для повышения скорости более чем на 15% в некоторых задачах. (Результат может отличаться.)
- Добавлен глагол SQLITE_CONFIG_LOOKASIDE в sqlite3_config() для управления настройками lookaside по умолчанию.
- Добавлены глаголы SQLITE_STATUS_PAGECACHE_SIZE и SQLITE_STATUS_SCRATCH_SIZE к интерфейсу sqlite3_status().
- Изменены 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().
- Опция SQLITE_OPEN_NOMUTEX была добавлена в sqlite3_open_v2().
- Добавлена команда PRAGMA page_count.
- Добавлен интерфейс sqlite3_next_stmt().
- Добавлена новая виртуальная таблица R*Tree
2008-05-14 (3.5.9)
- Добавлена экспериментальная поддержка для journal_mode PRAGMA и постоянного журнала.
- Режим журнала PERSIST — это поведение по умолчанию в режиме эксклюзивной блокировки.
- Исправлена проблема с производительностью в LEFT JOIN (см. билет #3015), которая была ошибочно введена в версии 3.5.8.
- Улучшение производительности: переработан внутренние процедуры, используемые для интерпретации и отображения целых чисел переменной длины.
- Исправлена проблема переполнения буфера в sqlite3_mprintf(), которая возникает, когда строка без нуль-терминатора передается в "%.*s".
- Всегда преобразуйте значения IEEE плавающей точки NaN в NULL во время обработки. (Билет #3060)
- Убедитесь, что при блокировке соединения на зарезервированной блокировке оно может продолжить работу после освобождения блокировки. (Билет #3093)
- Сценарии «configure» теперь автоматически конфигурируют системы Unix для поддержки больших файлов. Улучшены сообщения об ошибках в случае обнаружения больших файлов и отключенной поддержки больших файлов.
- Предотвращение утечек страниц кэша после ошибок заполнения диска или ошибок ввода-вывода
- И множество других мелких исправлений ошибок и улучшений производительности....
16 апреля 2008 г. (3.5.8)
- Доступ к внутренней псевдослучайной генерации чисел (PRNG) SQLite через интерфейс 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 перед каждым выпуском.
- Другие различные улучшения производительности.
- Другие различные мелкие исправления ошибок.
17 марта 2008 г. (3.5.7)
- Исправление ошибки (билет #2927) в распределении регистров для составных запросов — введенное новым кодом виртуальной машины в версии 3.5.5.
- ALTER TABLE использует двойные кавычки вместо одинарных для указания имён файлов.
- Использование условия WHERE для уменьшения размера материализованного представления в операторе UPDATE или DELETE. (Оптимизация)
- Не применять оптимизацию сглаживания, если внешний запрос является агрегатным, а внутренний запрос содержит ORDER BY. (Билет #2943)
- Дополнительные обновления OS/2
- Добавлен экспериментальный алгоритм распределения памяти по степеням двойки, первый вариант.
- Удаление всех экземпляров sprintf() из кода
- Принятие "Z" как часового пояса zulu в конце строк дат
- Исправление ошибки в оптимизаторе LIKE, которая возникает, когда последний символ перед первым символом подстановки — заглавная буква "Z".
- Добавлен объект «bitvec» для отслеживания страниц, которые были записаны в журнал. Улучшает скорость и сокращает использование памяти, особенно для больших файлов базы данных.
- Восстановление работы макроса SQLITE_ENABLE_LOCKING_STYLE в Mac OS X.
- Сохранение журнала заявлений в временной директории вместо сопоставления с файлом базы данных.
- Многие улучшения и доработки сценария configure
6 февраля 2008 г. (3.5.6)
- Исправление ошибки (билет #2913), которая мешала работе виртуальных таблиц в LEFT JOIN. Проблема была введена незадолго до выпуска 3.5.5.
- Обновление портирующего слоя OS/2.
- Добавление нового API sqlite3_result_error_code() и использование его в реализации ATTACH, чтобы при сбоях ATTACH возвращались правильные коды ошибок.
31 января 2008 г. (3.5.5)
- Преобразование подлежащей виртуальной машины в регистровую машину вместо стековой. Единственное видимое изменение для пользователя — в выводе EXPLAIN.
- Добавление встроенной последовательности сортировки RTRIM.
14 декабря 2007 г. (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 значительно более эффективен.
- Увеличение ограничения длины SQL-запроса в CLI, чтобы вывод ".dump" баз данных с очень большими BLOB-объектами и строками мог быть воспроизведён для повторного создания базы данных.
- Другие небольшие исправления ошибок и оптимизации.
27 ноября 2007 г. (3.5.3)
- Перенос файлов сайта и документации из дерева исходного кода в отдельную систему управления версиями CM system.
- Исправление долгой ошибки в операторах INSERT INTO ... SELECT ... , где SELECT является составным.
- Исправление долгой ошибки в RAISE(IGNORE), используемой в триггерах BEFORE.
- Исправлен порядок приоритетов оператора ~.
- В Win32 не возвращать ошибку при попытке удалить несуществующий файл.
- Разрешение указания имён последовательностей сортировки в кавычках.
- Модификация интерфейса TCL для использования sqlite3_prepare_v2().
- Исправление нескольких ошибок, которые могут возникнуть после сбоя malloc().
- sqlite3_step() возвращает SQLITE_MISUSE вместо аварийного завершения при вызове с параметром NULL.
- FTS3 теперь использует исключительно алгоритм распределения памяти SQLite. FTS3 amalgamation теперь может быть добавлен к SQLite amalgamation для генерации супер-amalgamation, содержащей оба.
- Ключевое слово DISTINCT теперь может использовать INDEX, если подходящий index доступен, и оптимизатор считает, что его использование может быть выгодно.
5 ноября 2007 г. (3.5.2)
- Отказ от поддержки опции компиляции SQLITE_OMIT_MEMORY_ALLOCATION.
- Всегда открывать файлы с использованием FILE_FLAG_RANDOM_ACCESS в Windows.
- Третий параметр встроенной функции SUBSTR() теперь необязателен.
- Исправление ошибки: не вызывать авторизатор при повторном разборе схемы после изменения схемы.
- Добавление экспериментального алгоритма распределения памяти malloc-free в mem3.c.
- Виртуальная машина хранит 64-битные целые числа и константы с плавающей точкой в двоичном формате вместо текстового для повышения производительности.
- Исправление гонки в test_async.c.
- Добавление команды «.timer» в CLI
4 октября 2007 г. (3.5.1)
- Обратите внимание: В этом выпуске мы не используем термины «альфа» или «бета», потому что код стабилен и потому что, если мы будем использовать эти термины, никто не обновится. Однако мы сохраняем за собой право вносить несовместимые изменения в новый интерфейс VFS в будущих выпусках.
- Исправление ошибки в обработке ошибок SQLITE_FULL, которые могли привести к повреждению базы данных. Билет #2686.
- Тестовый драйвер test_async.c теперь выполняет полную блокировку файла и работает корректно, когда используется одновременно несколькими процессами на одной базе данных.
- CLI игнорирует пробелы (включая комментарии) в конце строк
- Убедитесь, что оптимизатор запросов проверяет зависимости от всех членов составного оператора SELECT. Билет #2640.
- Добавление демонстрационного кода, показывающего, как создать VFS для необработанного дискового пространства без файловой системы.
- Добавление параметра размера буфера вывода к методу xGetTempname() уровня VFS.
- Прилипающие ошибки SQLITE_FULL или SQLITE_IOERR в странице очищаются при запуске новой транзакции.
4 сентября 2007 г. (3.5.0) альфа
- Редизайн слоя интерфейса ОС. Подробнее см. 34to35.html. *** Возможно несовместимое изменение ***
- Интерфейсы sqlite3_release_memory(), sqlite3_soft_heap_limit() и sqlite3_enable_shared_cache() теперь работают по всем потокам в процессе, а не только в единственном потоке, в котором они вызваны. *** Возможно несовместимое изменение ***
- Добавление интерфейса sqlite3_open_v2().
- Реализация подсистемы распределения памяти и возможность её замены во время компиляции.
- Создание новой подсистемы взаимных исключений (mutex) и возможность её замены во время компиляции.
- Теперь одно и то же соединение с базой данных может использоваться одновременно различными потоками.
13 августа 2007 г. (3.4.2)
- Исправление ошибки повреждения базы данных, которая может произойти, если команда ROLLBACK выполняется в режиме автоматического вакуума и установлен очень малый sqlite3_soft_heap_limit. Билет #2565.
- Добавление возможности запуска полного регрессионного теста с небольшим sqlite3_soft_heap_limit.
- Исправление других незначительных проблем при использовании малых пределов мягкой кучи.
- Решение проблемы ошибки GCC 32575.
- Улучшение обнаружения ошибок использования агрегатных функций.
- Улучшения сценария генерации amalgamation, так что все символы имеют префиксы SQLITE_PRIVATE или SQLITE_API.
20 июля 2007 г. (3.4.1)
- Исправить ошибку в VACUUM, которая может привести к повреждению базы данных, если два процесса подключены к базе данных одновременно, и один выполняет VACUUM, а другой затем изменяет базу данных.
- Выражение "+столбец" теперь рассматривается как эквивалентное "столбец" при вычислении используемой сортировки для выражения.
- В интерфейсе языка TCL "@переменная" вместо "$переменная" всегда связывается как BLOB.
- Добавлен PRAGMA freelist_count для определения текущего размера свободного списка.
- Настройка PRAGMA auto_vacuum=incremental теперь сохраняется.
- Добавить FD_CLOEXEC ко всем открытым файлам под Unix.
- Исправить ошибку в оптимизации min()/max() при применении к нисходящим индексам.
- Обеспечить корректную работу интерфейса языка TCL с 64-битными целыми числами на 64-битных машинах.
- Разрешить значение -9223372036854775808 в качестве целочисленной литеральной константы в SQL-запросах.
- Добавить возможность «скрытых» столбцов в виртуальных таблицах.
- Использовать макрос SQLITE_PRIVATE (по умолчанию "static") для всех внутренних функций в объединённой библиотеке.
- Добавить подключаемые токенизаторы и поддержку токенизации ICU для FTS2
- Другие незначительные исправления ошибок и улучшения документации
2007-06-18 (3.4.0)
- Исправление ошибки, которая может привести к повреждению базы данных, если ошибка SQLITE_BUSY возникает в середине явного транзакции, и эта транзакция позднее подтверждается. Заявка № 2409.
- Исправление ошибки, которая может привести к повреждению базы данных, если режим авто-вакуума включён, и за ним следует ошибка malloc() после операторов CREATE TABLE или CREATE INDEX, которые сами следуют за переполнением кэша внутри транзакции. См. заявку № 2418.
- Добавлены явные верхние границы по размерам и количествам обрабатываемых SQLite данных. Это изменение может вызвать проблемы совместимости для приложений, которые используют SQLite в крайних случаях, поэтому текущая версия 3.4.0, а не 3.3.18.
- Добавлена поддержка постепенного ввода-вывода BLOB.
- Добавлен API sqlite3_bind_zeroblob() и SQL-функция zeroblob().
- Добавлена поддержка постепенного вакуума.
- Добавлен параметр компиляции SQLITE_MIXED_ENDIAN_64BIT_FLOAT для поддержки процессоров ARM7 с нестандартным порядком байтов.
- Удалены все случаи использования sprintf() и strcpy() из ядра библиотеки.
- Добавлена поддержка International Components for Unicode (ICU) для расширений полнотекстового поиска.
- В драйвере операционной системы Windows повторно приобретается блокировка 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», а не «Inf», для чисел с плавающей точкой NaN. Заявка № 2345
- При преобразовании BLOB в TEXT используется кодировка текста основной базы данных. Заявка № 2349
- Сохранение полной точности целых чисел (если возможно) при приведении к типу NUMERIC. Заявка № 2364
- Исправление ошибки в обработке кода UTF16 0xE000
- Учёт явных предложений сортировки при сопоставлении ограничений WHERE с индексами в оптимизаторе запросов. Заявка № 2391
- Исправление оптимизатора запросов для корректной обработки константных выражений в предложении ON левого соединения. Заявка № 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 использует операторы этого вида, поэтому работает быстрее и лучше дефрагментирует.
- Улучшения производительности за счёт сокращения ввода-вывода на диск:
- Не читать последнюю страницу цепочки переполнения при удалении строки — просто добавить эту страницу в свободный список.
- Не сохранять удаляемые страницы в журнале отката.
- Не читать (бессмысленное) содержимое страниц, извлечённых из свободного списка.
- Не выполнять сброс кэш-памяти страниц (и тем самым избегать повторной загрузки кэша), если другой процесс не изменил файл базы данных.
- Обрезать, а не удалять журнал отката при подтверждении транзакции в режиме эксклюзивного доступа или при подтверждении временной базы данных.
- Добавлена поддержка режима эксклюзивного доступа с помощью "PRAGMA locking_mode=EXCLUSIVE"
- Использование кучевой памяти вместо стековой для больших буферов в пейджере — полезно на встроенных платформах с ограниченной стековой памятью.
- Добавление цели 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 для соединений, где левая таблица в соединении ограничена уникальным индексом.
- Исправление ошибки в методе «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 — ошибка приводила к некорректным результатам в некоторых левых соединениях, которые включали в предложении WHERE ограничение IS NULL для правой таблицы левого соединения.
- Преобразование AreFileApisANSI() в макрос no-op в WinCE, так как WinCE не поддерживает эту функцию.
2007-01-09 (3.3.10)
- Исправление ошибок в реализации нового API sqlite3_prepare_v2(), которые могут привести к ошибкам сегментации.
- Исправление ошибок округления в функции strftime() (1 секунда)
- Улучшение уровня операционной системы Windows для предоставления подробных кодов ошибок
- Обход проблемы win2k, чтобы SQLite мог использовать имена файлов базы данных из одного символа
- Команды user_version и schema_version правильно задают свои имена столбцов в наборе результатов
- Обновления документации
2007-01-04 (3.3.9)
- Исправлены ошибки в pager.c, которые могли привести к повреждению базы данных, если два процесса пытались одновременно восстановить горячий журнал
- Добавлен API sqlite3_prepare_v2().
- Исправлена команда ".dump" в командной оболочке для повторного отображения индексов, триггеров и представлений.
- Изменено pragma table_info, чтобы оно возвращало NULL для значения по умолчанию, если такого значения нет
- Поддержка не-ASCII символов в именах файлов win95
- Улучшения оптимизатора запросов:
- Оптимизатор лучше использует индексы для удовлетворения операторов ORDER BY, сортирующих по целочисленному первичному ключу
- Использование индекса для удовлетворения оператора IS NULL в условии WHERE
- Исправлена ошибка, которая мешала оптимизатору использовать возможность оптимизации OR
- Оптимизатор имеет больше свободы для переупорядочивания таблиц в операторе FROM, даже если присутствуют левые соединения.
- Поддержка загрузки расширений добавлена в WinCE
- Поддержка имен ограничений в операторе DEFAULT в определении таблицы
- Добавлена команда ".bail" в командную оболочку
- Формат CSV (значения, разделённые запятыми) вывода из командной оболочки более точно соответствует принятой практике
- Добавлен экспериментальный модуль FTS2
- Использование sqlite3_mprintf() вместо strdup() для избежания зависимостей от libc
- 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:
- Исправлена неочевидная ошибка segfault при преобразованиях UTF-8 в UTF-16
- Добавлен драйвер для OS/2
- Исправлена информация о метаданных столбцов, возвращаемая для агрегированных запросов
- Улучшен вывод EXPLAIN QUERY PLAN
- LIMIT 0 теперь работает с подзапросами
- Исправления ошибок и улучшения производительности в оптимизаторе запросов
- Правильная обработка нулевых имён файлов в 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-разрядных машинах
- Добавлен pragma fullfsync.
- Исправлена ошибка оптимизатора, которая могла вызвать некорректные результаты для некоторых необычных LEFT OUTER JOIN.
- Функция SUM обнаруживает переполнение целых чисел и переходит к накоплению приблизительного результата с использованием чисел с плавающей точкой
- Имена параметров хоста могут начинаться с '@' для совместимости с SQL Server.
- Разные другие исправления ошибок
2006-01-31 (3.3.3)
- Удалена поддержка ON CONFLICT в CREATE INDEX — она никогда не работала корректно, поэтому это не должно создать проблем со совместимостью.
- Функция обратного вызова Authorizer теперь уведомляется о командах 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
- Добавлен виртуальный слой функций для интерфейса операционной системы
- Метод "exists" добавлен в интерфейс TCL
- Улучшенная реакция на ошибки недостатка памяти
- Кэш базы данных может быть по желанию общим для подключений в одном потоке
- Необязательная изоляция 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)
- Изменено поведение SUM() при обработке NULL значений, чтобы соответствовать стандарту SQL
- Использование fdatasync() вместо fsync() где возможно, для небольшого ускорения фиксации
- Использование ключевого слова CROSS в соединении отключает оптимизацию переупорядочения таблиц
- Добавлена экспериментальная и недокументированная возможность EXPLAIN QUERY PLAN
- Использование API для работы с Unicode в Windows
2005-08-27 (3.2.5)
- Исправление ошибки, влияющей на операторы DELETE и UPDATE, изменяющие более 40960 строк.
- Изменение файла make, чтобы он больше не требовал расширений GNUmake
- Исправление опции --enable-threadsafe в скрипте configure
- Исправление ошибки генератора кода, которая возникает, когда левая часть оператора IN является константой, а правая — SELECT-запрос
- Оператор PRAGMA synchronous=off теперь отключает синхронизацию файла основного журнала, помимо обычных журналов отмены
2005-08-24 (3.2.4)
- Исправление ошибки, внесенной в предыдущей версии, которая может привести к segfault при генерации кода для сложных условий WHERE.
- Разрешение десятичных литералов с плавающей точкой, начинающихся или заканчивающихся десятичной точкой.
2005-08-21 (3.2.3)
- Добавлена поддержка оператора CAST
- Интерфейс Tcl позволяет передавать значения BLOB в пользовательские функции
- Добавлен метод "transaction" в интерфейс Tcl
- Разрешение значения DEFAULT столбца для вызова функций, имеющих константные операнды
- Добавлена команда ANALYZE для сбора статистики по индексам и использования этой статистики при выборе индекса в оптимизаторе
- Удалено ограничение (ранее 100) на количество терминов в операторе WHERE
- Правая часть оператора IN теперь может быть списком выражений вместо просто списка констант
- Переработка оптимизатора, чтобы он мог лучше использовать индексы
- Порядок таблиц в соединении автоматически корректируется, чтобы лучше использовать индексы
- Оператор IN теперь является кандидатом для оптимизации, даже если левая часть не является левым самым термином индекса. Можно использовать несколько операторов IN с одним индексом.
- Выражения в операторе WHERE с использованием BETWEEN и OR теперь являются кандидатами для оптимизации
- Добавлен pragma "case_sensitive_like" и опция компиляции SQLITE_CASE_SENSITIVE_LIKE для установки его значения по умолчанию в "включено".
- Использование индексов для помощи в выражениях GLOB и LIKE, когда включено pragma case_sensitive_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)
- Функция ioctl в Mac OS X для управления синхронизацией с диском — F_FULLFSYNC, а не F_FULLSYNC. В предыдущей версии она была указана неправильно.
2005-03-11 (3.1.4)
- Исправлена ошибка в autovacuum, которая могла привести к повреждению базы данных, если CREATE UNIQUE INDEX завершается неудачей из-за нарушения ограничения. Эта проблема возникает только в том случае, если включена новая функция autovacuum, представленная в версии 3.1.
- Функция ioctl F_FULLSYNC (в настоящее время поддерживается только в Mac OS X) отключена, если параметр синхронизации установлен на значение, отличное от "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 ...
- Ключевое слово AUTOINCREMENT поддерживается для INTEGER PRIMARY KEY
- Множество макросов 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, встроенных в SQL-запросы в TCL-связях.
- TCL-связи передают данные без необходимости преобразования в строку.
- База данных для временных таблиц создаётся только при необходимости.
- Добавлена возможность указать альтернативную временную директорию для файлов с помощью глобальной переменной "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% меньше для типичного использования.
- Улучшенная конкурентность.
- Атомарные коммиты для подключённых баз данных.
- Удаление избыточных элементов из API.
- Поддержка BLOB.
- 64-битные идентификаторы строк.
- Дополнительная информация.
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)
- Исправлена ошибка в обработке оператора IN с NULL в подзапросах. Ошибка была внесена предыдущим релизом.
2004-01-14 (2.8.10)
- Исправление потенциальной проблемы повреждения базы данных в Unix, вызванной тем, что все консультативные блокировки POSIX очищаются при каждом закрытии файла close(). Решение - запретить все вызовы 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.
- Добавлена возможность для операторов INSERT и UPDATE ссылаться на столбцы «rowid» (или «_rowid_» или «oid»).
- Другие важные исправления ошибок
2003-05-17 (2.8.2)
- Исправление проблемы, которая может повредить файл базы данных, если вы удалите таблицу из основной базы данных, которая имеет временный индекс.
2003-05-17 (2.8.1)
- Возвращена команда VACUUM для освобождения неиспользуемого дискового пространства в файле базы данных.
- Добавлены команды ATTACH и DETACH для одновременной работы с несколькими файлами баз данных.
- Добавлена поддержка временных триггеров и индексов.
- Добавлена поддержка баз данных в оперативной памяти.
- Удалена экспериментальная функция sqlite_open_aux_file(). Ее функция включена в новую команду ATTACH.
- Порядок приоритетов для предложений ON CONFLICT был изменён таким образом, что предложения ON CONFLICT в предложениях BEGIN имеют более высокий приоритет, чем предложения ON CONFLICT в ограничениях.
- Многочисленные исправления ошибок и улучшения совместимости.
2003-02-16 (2.8.0)
- Изменён формат файла журнала для повышения устойчивости к повреждениям, которые могут возникнуть после сбоя ОС или отключения электропитания.
- Добавлен новый C/C++ API, который не использует обратный вызов для возврата данных.
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() в Windows DLL
- Исправление поведения блокировки в Windows
- Исправление ошибки в LEFT OUTER JOIN
2002-09-25 (2.7.2)
- Предотвращение переполнения файла журнала при больших транзакциях.
- Исправление утечки памяти, которая возникала при неудачном выполнении sqlite_open().
- Учёт предложения ORDER BY и LIMIT в запросе SELECT, даже если результат используется для INSERT.
- Не накладывать блокировки записи на файл, используемый для хранения временных таблиц.
- Добавление документации по 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)
- Добавлена возможность чтения баз данных как в формате little-endian, так и в формате big-endian. Таким образом, база данных, созданная в SunOS или Mac OS X, может быть прочитана и записана в Linux или Windows, и наоборот.
- Переход на новый сайт: https://www.sqlite.org/
- Разрешение транзакциям охватывать Linux-потоки
- Исправление ошибки в обработке предложения ORDER BY для запросов GROUP BY
2002-07-31 (2.6.2)
- Текстовые файлы, считанные командой COPY, теперь могут иметь разделители строк LF, CRLF или CR.
- SQLITE_BUSY обрабатывается правильно, если встречено во время инициализации базы данных.
- Исправление для триггеров UPDATE на временных таблицах.
- Обновления документации.
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 в коммите [410].
- Исправление ошибки в агрегатных функциях для представлений.
- Другие незначительные изменения и улучшения.
2002-07-01 (2.5.4)
- Ключевое слово «AS» снова сделано необязательным.
- Тип данных столбцов теперь отображается в четвёртом аргументе обратного вызова.
- Добавлен API sqlite_open_aux_file(), хотя он всё ещё в основном не документирован и не протестирован.
- Добавлены дополнительные тестовые случаи и исправлены несколько ошибок, которые эти тестовые случаи нашли.
2002-06-25 (2.5.3)
- Исправление ошибки: повреждение базы данных может произойти из-за оптимизации, внесённой в версию 2.4.0 (коммит [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)
- Добавлена поддержка триггеров строк.
- Добавлена обработка NULL в соответствии со стандартом SQL-92.
- Добавлена поддержка полного синтаксиса объединения SQL-92 и LEFT OUTER JOIN.
- Строки в двойных кавычках интерпретируются как имена столбцов, а не текстовые литералы.
- Анализ (но не реализация) внешних ключей.
- Улучшена производительность парсера, пейджера и генератора кода для предложения WHERE.
- Оператор LIMIT теперь работает с подзапросами. (ORDER BY всё ещё не работает.)
- Добавлена расширение "%Q" в sqlite_*_printf().
- Исправлено множество ошибок (см. журнал изменений).
2002-05-10 (2.4.12)
- Добавлена логика для обнаружения случаев вызова функций API библиотеки в неправильной последовательности.
2002-05-08 (2.4.11)
- Исправление ошибки: Имена столбцов в наборе результатов не генерировались правильно для некоторых (довольно сложных) представлений. В некоторых ситуациях это могло привести к ошибке segfault.
2002-05-03 (2.4.10)
- Исправление ошибки: Генерация правильных заголовков столбцов при использовании составного SELECT в качестве подзапроса.
- Добавлены функции sqlite_encode_binary() и sqlite_decode_binary() в исходный код. Но они ещё не подключены к библиотеке.
- Обновления документации.
- Экспорт функции sqlite_changes() из DLL-библиотек Windows.
- Исправление ошибки: Не пытаться выполнить оптимизацию сглаживания подзапросов для запросов, у которых нет предложения FROM. Это приводило к ошибке segfault.
2002-04-22 (2.4.9)
- Исправлена ошибка, которая вызывала сообщение "недостаточно памяти" в прекомпилированном двоичном файле SQLITE.EXE под Windows 98.
2002-04-20 (2.4.8)
- Убедитесь, что представления создаются после соответствующих таблиц в выводе команды .dump в оболочке.
- Улучшения скорости: Не выполнять синхронизированные обновления для временных таблиц.
- Многие улучшения и расширения оболочки.
- Преобразование операторов 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 (патч от Дана Кеннеди).
- Добавлены RPMS для распространения (патчи от Дуга Генри).
- Исправлены опечатки в документации.
- Переход на систему управления конфигурацией нового репозитория 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 приводило к ошибке segfault.
- Парсер теперь требует наличия точки с запятой или конца входных данных перед выполнением оператора. Это предотвращает случайные катастрофы, если ключевое слово 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-дерева и пейджера, так что страницы диска, не содержащие реальных данных (свободные страницы), не регистрируются в журнале и не записываются из памяти на диск при изменении. Это не влияет на целостность базы данных, так как страницы не содержат реальных данных, но ускоряет большие операции INSERT примерно в 2,5 раза и большие операции DELETE примерно в 5 раз.
- Сделано параметр CACHE_SIZE сохраняющимся.
- Добавлен параметр SYNCHRONOUS.
- Исправлена ошибка, которая приводила к сбоям обновлений внутри транзакций, когда база данных содержала временную таблицу.
2002-02-19 (2.3.3)
- Разрешение идентификаторов в квадратных скобках для совместимости с MS-Access.
- Добавлена поддержка подзапросов в предложении FROM оператора SELECT.
- Более эффективная реализация sqliteFileExists() под Windows (Джоэл Ласси).
- Предложение 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)
- Исправление ошибки: Утверждение assert() давало сбой, если был установлен «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)
- Исправление ошибки: Утверждение assert() давало сбой при наличии временной таблицы с индексом, имеющей то же имя, что и постоянная таблица, созданная другим процессом.
- Исправление ошибки: Обновления таблиц, содержащих INTEGER PRIMARY KEY и индекс, могли завершиться неудачей.
2002-01-09 (2.2.1)
- Исправление ошибки: Попытка удалить отдельную строку таблицы с предложением WHERE "ROWID=x", когда такой rowid не существует, приводила к ошибке.
- Исправление ошибки: Передача NULL в качестве третьего параметра в sqlite_open() иногда приводила к coredump.
- Исправление ошибки: DROP TABLE, за которым следует CREATE TABLE с тем же именем, в рамках одной транзакции приводило к coredump.
- Обновления Makefile от A. Rottmann
2001-12-22 (2.2.0)
- Столбцы типа INTEGER PRIMARY KEY фактически используются в качестве первичного ключа в базовом представлении таблицы в виде B-дерева.
- Найдено и исправлено несколько скрытых, не связанных ошибок при реализации изменения первичного ключа целого типа в предыдущем пункте.
- Добавлена возможность указать «*» в качестве части большего списка столбцов в разделе результата оператора SELECT. Например:
"SELECT rowid, * FROM table1;" . - Обновления комментариев и документации.
2001-12-15 (2.1.7)
- Исправлена ошибка в CREATE TEMPORARY TABLE, из-за которой таблица первоначально выделялась в основном файле базы данных, а не в отдельном временном файле. Эта ошибка могла привести к ошибке утверждения в библиотеке и к «утечкам страниц» в основном файле базы данных.
- Исправлена ошибка в подсистеме b-дерева, которая иногда могла приводить к повторению первой строки таблицы во время сканирования базы данных.
2001-12-14 (2.1.6)
- Ещё раз исправлен механизм блокировки, чтобы предотвратить ненужное возвращение sqlite_exec() значения SQLITE_PROTOCOL. На этот раз ошибка была связана с гонкой в коде блокировки. Это изменение влияет как на пользователей 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 путем ограничения количества сортировщиков и списков до 1. На практике использовался не более один сортировщик и один список.
2001-10-22 (2.0.7)
- Любой символ UTF-8 или ISO8859 может быть использован как часть идентификатора.
- Исправления от Кристиана Вернера для повышения совместимости с ODBC и исправления ошибки в функции round()
- Устранены утечки памяти, которые могли возникать, если malloc() терпел неудачу. Мы были и остаемся свободными от утечек памяти, пока malloc() работает.
- Изменения в некоторых тестовых сценариях, чтобы они работали в Windows в дополнение к Unix.
2001-10-19 (2.0.6)
- Добавлен pragma EMPTY_RESULT_CALLBACKS
- Поддержка UTF-8 и ISO8859 символов в именах столбцов и таблиц.
- Исправление ошибки: вычисляются правильные имена таблиц с включенным pragma FULL_COLUMN_NAMES.
2001-10-15 (2.0.5)
- Добавлен pragma COUNT_CHANGES.
- Изменения в pragma 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++
- Добавлен pragma FULL_COLUMN_NAMES. При установке в «ВКЛ», имена столбцов сообщаются как TABLE.COLUMN вместо только COLUMN.
- Добавлены pragmas 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 от А. Роттманна для использования 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) и b-дерева (btree) добавлены обратно. Теперь они являются единственным доступным бэкендом.
- Абстракция Dbbe и драйверы GDBM и памяти были удалены.
- Авторские права на весь код были отменены. Библиотека теперь находится в общественном достоянии.
2001-07-23 (1.0.32)
- Подсистемы страниц и b-дерева удалены. Они будут использоваться в последующей библиотеке SQL-сервера с именем «SQLus».
- Добавлена возможность использования заключённых в кавычки строк в качестве имён таблиц и столбцов в выражениях.
2001-04-15 (1.0.31)
- Подсистема страниц добавлена, но пока не используется.
- Более надёжная обработка ошибок недостатка памяти.
- Добавлены новые тесты в набор тестов.
2001-04-06 (1.0.30)
- Удалена переменная TCL sqlite_encoding, которая была введена в предыдущей версии.
- Добавлены опции -encoding и -tcl-uses-utf к команде TCL sqlite.
- Добавлены тесты для проверки, что tclsqlite был скомпилирован с использованием файлов заголовков и библиотек Tcl, которые соответствуют.
2001-04-05 (1.0.29)
- Библиотека теперь предполагает, что данные хранятся в формате UTF-8, если опция --enable-utf8 указана при конфигурации. По умолчанию используется предположение iso8859-x, как и всегда. Это имеет значение только для операторов LIKE и GLOB, а также для функций LENGTH и SUBSTR.
- Если библиотека не настроена на UTF-8, а библиотека Tcl — одна из новых, которые используют UTF-8 внутри, то преобразование из UTF-8 в iso8859 и обратно выполняется внутри интерфейса TCL.
2001-04-04 (1.0.28)
- Добавлена ограниченная поддержка транзакций. На данный момент транзакции будут производить блокировку таблиц на бэкенде GDBM. Поддержка отката или атомной фиксации (пока) отсутствует.
- Добавлены специальные имена столбцов ROWID, OID и _ROWID_, которые ссылаются на уникальный случайный целочисленный ключ, связанный с каждой строкой каждой таблицы.
- В набор регрессионных тестов добавлены дополнительные тесты для проверки новой функции ROWID и ошибок интерфейса TCL, упомянутых ниже.
- Изменения в генераторе синтаксического анализатора Lemon для улучшения его работы при компиляции с помощью MSVC.
- Исправлены ошибки в интерфейсе TCL, выявленные Олегом Олейником.
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)
- Исправлена не связанная (и незначительная) ошибка от Марка Муранвски. Алгоритм определения места расположения временных файлов для базы данных «memory:» работал не совсем правильно.
2001-02-19 (1.0.22)
- Предыдущее исправление было не совсем верным. Это кажется более эффективным.
2001-02-19 (1.0.21)
- Оператор UPDATE не работал, когда условие WHERE содержало некоторые члены, которые могли быть удовлетворены с помощью индексов, и другие члены, которые не могли. Исправлено.
2001-02-11 (1.0.20)
- Слияние изменений из ветки разработки в основной ствол. Будущая работа по использованию структуры файлов BTree будет использовать отдельный дерево CVS. Это дерево CVS будет продолжать поддерживать версию GDBM SQLite.
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)
- Исправлена ошибка смещения на 1, которая приводила к сбою программы при использовании формата '%q' в новых функциях sqlite_..._printf().
- Добавлен интерфейс sqlite_interrupt().
- В оболочке sqlite_interrupt() вызывается при нажатии пользователем Ctrl+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 (Не выпущено)
- Добавлен API sqlite_get_table()
- Обновлена документация в связи с вышеизложенным изменением.
- Изменена оболочка sqlite для использования нового API sqlite_get_table() для вывода списка таблиц в несколько столбцов, аналогично тому, как "ls" выводит имена файлов.
- Изменена оболочка sqlite для вывода точки с запятой в конце каждой инструкции CREATE в выводе команды ".schema".
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, которая вызывала сбой при режиме вывода "столбец" и первой строке данных содержавшей NULL.
2000-08-22 (1.0.3)
- В оболочке sqlite сообщение "База данных открыта только для чтения" выводится в stderr, а не stdout.
- В оболочке sqlite теперь выводится номер версии при запуске.
- Добавление строковой константы sqlite_version[] в библиотеку.
- Обновления Makefile.
- Исправление ошибки: неправильный код VDBE генерировался для следующего случая: запрос к индексированной таблице с оператором WHERE и оператором IN, содержащим подзапрос в правой части.
2000-08-18 (1.0.1)
- Исправление ошибки в скрипте конфигурации.
- Незначительные изменения на веб-сайте.
2000-08-17 (1.0)
- Изменено программу sqlite, чтобы она могла читать базы данных, для которых у нее нет прав на запись. (Раньше она отказывала во всем доступе, если не могла писать.)
2000-08-09
- Обработка символов возврата каретки как пробелов.
2000-08-08
- Добавление шаблонов сопоставления к команде ".table" в оболочке команд sqlite.
2000-08-04
- Обновления документации
- Добавлены методы "busy" и "timeout" в интерфейс TCL
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
- Добавлена функция fcnt() в интерпретатор SQL. Функция 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, но использует символы подстановки оболочки 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