Я хочу, чтобы в памяти работала база данных sqlite.
Я могу загрузить базу данных на основе файлов в базу данных в памяти, я могу сделать резервную копию базы данных на основе файлов, но что не удается, так это резервное копирование базы данных в памяти в файл.
Я проверил оба примера, представленные здесь: https://www.sqlite.org/backup.html.
Я имею в виду, я использовал эти примеры. Результат всегда SQLITE_OK для всех вызовов функций sqlite, за исключением 101 для
sqlite3_backup_step
во 2-м примере. Чтобы убедиться, что нет ошибки, я проверил базу данных памяти, содержащую таблицы и данные. В этом случае. Кроме того, использование той же функции резервного копирования очень хорошо работает для файловой базы данных.
Пока я мог исследовать эту линию
nSrcPage = (int)sqlite3BtreeLastPage(p->pSrc);
в функции
sqlite3_backup_step (sqlite3.c)
всегда возвращает 0. Таким образом, в базе данных нет «страниц».
В этот момент база данных на основе файлов возвращает 35.
Таким образом, похоже, что нет никакой копии, потому что для моей базы данных памяти не указаны «страницы»; но в этой базе данных mem определенно есть таблицы и данные.
/// failing backup
bool backup_test_sqlite_mem2(void)
{
/// create a file db
sqlite3* file_db =create_db("filedb.db",true);
if(file_db != nullptr)
sqlite3_close(file_db);
/// we now have a database file
/// create an empty mem db
sqlite3* mem_db=create_db(":memory:",false);
/// attached prior created file to mem db
attach_db_test_sqlite_mem(mem_db,"filedb.db");
/// check we have content in mem db
do_select(mem_db, "SELECT count(*) FROM stock","rows in backup_test_sqlite_mem2");
/// finally back memdb
int ibackup= backupDb(mem_db,"memdb_from_attached_backup.db",nullptr);
/// the above backup is empty
return (ibackup == SQLITE_OK ? true : false);
}