A memory vfs implementation for SQLite

Есть проект в интернете на гитхабе , называется spmemvfs. Демонстрирует реализацию собственной виртуальной файловой системы (vfs) в оперативной памяти.

Файловая система предназначена для хранения файлов и каталогов. В случае с sqlite у нас один всего файл, в котором и хранится вся база данных sqlite. Ну возможно ещё файл кэша или отката. Так зачем нужна целая файловая система?...

Будем разбираться...У sqlite стандартно существуют vfs для ОС unix и windows. Также вы можете реализовпть свою vfs, как в примере spmemvfs. Складывается впечатление, что это просто обёртка (набор функций, интерфейс) для реализации однотипного поведения (работы) с одним единственным файлом базы данных.

И действительно оказывается, что vfs предназначен для стандартизации обращения с файлом в разных операционных системах. Vfs также называют OS interface.

От файла базы данных нам например не плохо бы иметь информацию о его блокировках в ОС.

Конечно надо знать размер файла и уметь читать его содержимое и записывать обратно в файл.

В информации на сайте sqlite.org также сказано, что одновременно могут использоваться несколько vfs.

В интерфейсе vfs есть часть, связанная с управлением файлами базы данных и файла кэша. То есть ваша vfs обязана реализовать ответы на запросы в функции sqlite3_file_control.

sqlite3_file_control принимает на входе индитификатор запроса (SQLITE_FCNTL_XXXXX), и должна ответить по стандарту sqlite.

В документации sqlite часто упоминается, что sqlite3_file_control не должна вызываться напрямую из приложения.

Можно сделать лог вызываемых команд в sqlite3_file_control и многое станет более понятным.

Если попробовать связать шифрование базы через sqleet с spmemvfs, то придется поломать голову, почему без правильной  реализации sqlite3_file_control происходят ошибки.spmemvfs и sqleet на Sqlite 3.31