fpta: выпуск v0.3.19

Стабильная версия с исправлением замеченных ошибок и недочетов.

Исправления и доработки в libfpta:
==================================

 - Доработка CMake-скриптов для возможности подключения/использования
   через под-директорию, а не виде отдельного проекта или под-проекта.

 - Доработки тестов:
     - Расширение теста асинхронного/конкурентного изменения схемы БД для проверки сценариев обработки и возврата ощибки `FPTA_BAD_DBI`.
     - Костыль для подавления ошибочных предупреждений Coverity.
     - Устранение проблемы сборки на новых версиях STL из-за упущенного `#include <iomanip>`.

   - Обновление libmdbx с `0.12.8` на `0.12.10`.

Исправления и доработки в libmdbx:
==================================

 - Устранение унаследованной от LMDB ошибки приводящей к повреждению БД при использовании `MDBX_DUPFIXED`.
   Проблема была выявлена при расширении тестов сценариями с длинными мульти-значениями в режиме `MDBX_DUPFIXED`.
   Сообщений о проявлении этой ошибки в эксплуатационных/продуктовых средах не поступало.

 - Исправление ложной ошибки `MDBX_CORRUPTED (-30796)` в сценарии работы
   в режиме `MDBX_DUPFIXED` и нечетной длиной мульти-значений.

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

 - Доработка `rebalance()` ради уменьшения WAF. Новый функционал, включая
   контролируемую пользователем опцию `enum MDBX_option_t`, будет доступен
   в выпусках ветки `0.13.x`, а в этом выпуске доработка сводится к тактике
   не-вовленичения чистой страницы при нехватке запаса страниц в ходе обновления GC,
   за счет ухудшения баланса дерева страниц.

 - Устранение упущения приводящего к нелогичной ситуации
   `me_dxb_mmap.curren > me_dxb_mmap.limit` при "дребезге" размера БД.
   В текущем понимании, последствий кроме срабатывания assert-проверки нет, а
   вероятность проявления близка к нулю.

 - Исправление в функционале обхода дерева, используемого утилитой
   `mdbx_chk`, подсчета места затраченного на выравнивание на вложенной
   под-странице, в случае нечетного количества dupfixed-элементов нечетного
   размера.
   Сообщений о проявлении этой ошибки в эксплуатационных/продуктовых средах не поступало.

 - Исправление assert-проверки внутри `check_txn()` для случая завершенных транзакций в режиме `MDBX_NO_TLS`.
   Последствий ошибки, кроме срабатывания assert-проверки в отладочных сборках, нет.

 - Устранение ошибки при открытии БД на файловой системе только-для-чтения.

 - Удалены излишне строгие проверки в утилите `mdbx_chk`, которые
   приводили к ложно-позитивным ошибкам при проверке БД после серии
   последних доработок. Подробности см в комментариях к коммитам [781b3f64d52b73cbaeb00a55811d1247c25624a8](https://gitflic.ru/project/erthink/libmdbx/commit/781b3f64d52b73cbaeb00a55811d1247c25624a8)
   и [0741c81cfd8dc0864fcf55e04192b2207c8f68f7](https://gitflic.ru/project/erthink/libmdbx/commit/0741c81cfd8dc0864fcf55e04192b2207c8f68f7).

 - Ликвидация зависимости от ранее удаленной опции `MDBX_ENABLE_PREFAULT`, из-за
   чего опция `MDBX_ENABLE_MINCORE` не включалась автоматически, что приводило
   к не-активации соответствующего улучшения и не-достижению  декларируемого уровня
   производительности в сценариях использования в режиме `MDBX_WRITEMAP`.

 - Исправление авто-установки `MDBX_ENV_CHECKPID` при отключении использования
   функционала `madvise()` посредством опции сборки `MDBX_ENABLE_MADVISE=0`.
   Из-за чего при поддержке системой `madvise(MADV_DONTFORK)` не включался контроль pid.

 - Добавлена проверка переданного ключа на `NULL` при обработке `MDBX_GET_MULTIPLE`.

 - Добавлена проверка номеров корневых страниц в `coherency_check()`.

 - Обеспечен `const` для начала и конца диапазона в аргументах `mdbx_estimate_range()`.

 - Из разрабатываемой версии перенесены не-нарушающие совместимости доработки C++ API:

     - добавлен тип `mdbx::cursor::estimation_result`, а поведение методов
      `cursor::estimate()` унифицировано с `cursor::move()`;
     - для предотвращения незаметного неверного использования API, для инициализации
       возвращаемых по ссылке срезов, вместо пустых срезов задействован `slice::invalid()`;
     - добавлены дополнительные C++ операторы преобразования к типам C API;
     - для совместимости со старыми стандартами C++ и старыми версиями STL перенесены
       в public классы `buffer::move_assign_alloc` и `buffer::copy_assign_alloc`;
     - добавлен тип `mdbx::default_buffer`;
     - для срезов и буферов добавлены методы `hex_decode()`, `base64_decode()`, `base58_decode()`;
     - добавлен тип `mdbx::comparator` и функций `mdbx::default_comparator()`;
     - добавлены статические методы `buffer::hex()`, `base64()`, `base58()`;
     - для транзакций и курсоров добавлены методы `get_/set_context`;
     - добавлен метод `cursor::clone()`;

 - Поддержка base58 приведена в соответствии с черновиком RFC.

 - Переработка/исправление `to_hex()` и `from_hex()`.

 - Уменьшение `MDBX_opt_rp_augment_limit` по умолчанию до 1/3 от текущего количества страниц в БД.

   Более полная информация в [списке изменений libmdbx](https://gitflic.ru/project/erthink/libmdbx/blob?file=ChangeLog.md&branch=stable).

---

28 files changed, 2037 insertions(+), 1049 deletions(-)
Signed-off-by: Леонид Юрьев (Leonid Yuriev) <leo@yuriev.ru>
Этот тег не содержит заметок к релизу