v0.13.2 "Прошлогодний Снег" (Last Year's Snow).

Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов
в день рождения и в память об [Алекса́ндре Миха́йловиче Тата́рском](https://ru.wikipedia.org/wiki/Татарский,_Александр_Михайлович),
российском режиссёре-мультипликаторе, создавшем такие знаменитые мультфильмы как "Падал прошлогодний снег",
"Пластилиновая ворона", заставку "Спокойной ночи, малыши!" и многие другие шедевры нашего детства.

За перечнем доработок и изменений обращайтесь к [ChangeLog](https://libmdbx.dqdkfa.ru/md__change_log.html).

git diff' stat: 151 files changed, 10647 insertions(+), 14952 deletions(-)
Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>

!!! ПОЖАЛУЙСТА НЕ ИСПОЛЬЗУЙТЕ ПОЛОМАННЫЕ АВТОМАТИЧЕСКИЕ СОЗДАВАЕМЫЕ "АКТИВЫ" !!!

Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов в день рождения и в память об Алекса́ндре Миха́йловиче Тата́рском, российском режиссёре-мультипликаторе, создавшем такие знаменитые мультфильмы как "Падал прошлогодний снег", "Пластилиновая ворона", заставку "Спокойной ночи, малыши!" и многие другие шедевры нашего детства.

For translation to other languages please try Yandex or liar Google.

git diff' stat: 151 files changed, 10647 insertions(+), 14952 deletions(-)

Новое:

  • Ускорено обновление GC при возврате/помещении списков страниц в сложных сценариях. Был доработан и активирован ранее отключенный экспериментальный режим корректирующей обратной связи. Этим принципиально улучшилась сходимость (сократилось количество повторных попыток), а также устранен дефект приводящий к "зацикливанию" при фиксации транзакций (с возвратом ошибки MDBX_PROBLEM) в редких специфических условиях. Подробности см. в описании коммита 6c56ed97bbd8ca46abac61886a113ba31e5f1291.
  • Включен стандарт C23 в CMake-скриптах сборки.
  • Добавлены T-макросы для парных char/wchar_t функций.
  • Поддержка вложенных пишущих транзакций в C++ API.
  • Переход на "Semantic Versioning 2" и экспорт информации о версии в VERSION.json.
  • Добавлена поддержка переменной среды SOURCE_DATE_EPOCH для воспроизводимости сборок. Прежний способ посредством MDBX_BUILD_TIMESTAMP также работает и имеет приоритет.
  • Добавлена возможность указывать дополнительную информацию о сборке libmdbx через опцию MDBX_BUILD_METADATA. Сейчас задаваемая информация просто включается внутрь библиотеки в качестве значения mdbx_build.metadata, а в дальнейшем также будет использоваться при формировании пакетов и т.п.
  • Добавлено логирование ошибок возвращаемых из API. Теперь для этого достаточно задать уровень логирования MDBX_LOG_DEBUG (для логирования ошибок за вычетом MDBX_NOTFOUND) или MDBX_LOG_TRACE (для логирования всех ошибок, а также MDBX_RESULT_TRUE).
  • Поддержка сборки посредством Conan.

Изменение поведения:

  • Добавлен метод mdbx::cursor::get_multiple_samelength() и переименован mdbx::txn::put_multiple_samelength().
  • Для единообразия C++ API при выполнении операции MDBX_GET_MULTIPLE теперь также возвращается значение самого ключа.
  • Для размерных констант mdbx::env::geometry базовый тип изменен с беззнакового size_t на знаковый intptr_t.
  • Теперь выбор в пользу использования ntdll вместо CRT делается только при явном отключении C++ API.
  • Теперь выполняется освобождение памяти сброшенных/прерванных читающих транзакций передаваемых в mdbx_txn_commit(). Соглашение по API требует чтобы такие транзакции освобождались посредством mdbx_txn_abort(), из-за чего функция mdbx_txn_commit() возвращала ошибку в таких случаях, не разрушая сами транзакции. Это приводило к утечкам памяти из-за ошибок в приложениях, что побудило изменить поведение.
  • Использование макроса __deprecated_enum если он определен.
  • При сборке посредством CMake выбор стандарта языка C теперь выполняется с учётом CMAKE_C_STANDARD.
  • Изменения в опциях сборки:
    • опция MDBX_OSX_SPEED_INSTEADOF_DURABILITY переименована в MDBX_APPLE_SPEED_INSTEADOF_DURABILITY, так как актуальна для всех "Яблочных" платформ;
    • опция MDBX_MMAP_USE_MS_ASYNC переименована в MDBX_MMAP_NEEDS_JOLT, для более точного соответствия своей семантики;
    • в CMake добавлена поддержка опции MDBX_USE_MINCORE;
    • использование madvise() и родственных системных вызовов теперь всегда включено, а опция MDBX_ENABLE_MADVISE удалена;
    • удалены неиспользуемая опция MDBX_USE_SYNCFILERANGE и неиспользуемый режим MDBX_LOCKING_BENAPHORE.

Исправления:

  • Устранен регресс возврата неверной информации из функций mdbx_env_stat_ex() и mdbx_env_stat(). При рефакторинге до выпуска v0.13.1 была допущена ошибка, из-за которой выполнялось суммирование значений без очистки переданного пользователем буфера для результата. Таким образом, возвращаемая информация была верной, только если память используемая для размещения результата содержала нули на момент вызова функции.
  • Функция mdbx_close_dbi() доработана для возврата ошибки MDBX_DANGLING_DBI при попытке закрыть dbi-дескриптор таблицы, созданной и/или измененной в ещё выполняющейся транзакции. Такое преждевременное закрытие дескриптора является неверным использованием API и нарушением контракта/предусловий сформулированных в описании mdbx_close_dbi(). Однако, вместо возврата ошибки выполнялось некорректное закрытие дескриптора, что могло приводить к созданию таблицы с пустым именем, утечки страниц БД и/или нарушению структуры b-tree (неверной ссылкой на корень таблицы).
  • Исправлено открытие таблицы с пустым/нулевым именем, в том числе устранена возможность SIGSEGV при закрытии её дескриптора.
  • Добавлены упущенные inline-реализации mdbx::cursor::upper_bound() и mdbx::cursor::upper_bound_multivalue().
  • Продолжена корректировка описания С++ API для использования термина "таблица" вместо "sub-database".
  • Исправлено проверяемое условие внутри assert() в пути обработки MDBX_GET/NEXT/PREV_MULTIPLE.
  • На 32-битных платформах разрешено использовать 4-байтное выравнивание при получении 64-битных значений посредством MDBX_MULTIPLE.
  • Добавлен костыль для устранения проблем из-за некорректной обработки [[gnu::pure]] в Apple Clang и MSVC.
  • Поправлено определение MDBX_DEPRECATED_ENUM для старых компиляторов при включении С++11.
  • Доработано использование std::experimental::filesystem для решения проблем со сборкой в старых компиляторах.
  • Исправлена обработка MDBX_GET_MULTIPLE в специальных случаях и одного значения у ключа в позиции курсора.
  • Исправление сборки при включении профилирования GC и MDBX_ENABLE_DBI_SPARSE=OFF.

Загрузки:


За информацией о предыдущих версиях обращайтесь к тегам git и ChangeLog.