Сериализация базы данных
unsigned char *sqlite3_serialize( sqlite3 *db, /* The database connection */ const char *zSchema, /* Which DB to serialize. ex: "main", "temp", ... */ sqlite3_int64 *piSize, /* Write size of the DB here, if not NULL */ unsigned int mFlags /* Zero or more SQLITE_SERIALIZE_* flags */ );
Интерфейс sqlite3_serialize(D,S,P,F) возвращает указатель на область памяти, содержащую сериализованную базу данных S из подключения к базе данных D. Если S — указатель NULL, используется главная база данных. Если P не является указателем NULL, размер базы данных в байтах записывается в *P.
Для обычного файла базы данных на диске сериализация представляет собой просто копию файла. Для базы данных в памяти или базы данных "TEMP" сериализация представляет собой ту же последовательность байтов, которая была бы записана на диск, если бы эта база данных была скопирована на диск.
Обычно sqlite3_serialize() копирует сериализованную базу данных в память, полученную с помощью sqlite3_malloc64(), и возвращает указатель на эту память. Вызывающая сторона отвечает за освобождение возвращенного значения, чтобы избежать утечки памяти. Однако, если аргумент F содержит бит SQLITE_SERIALIZE_NOCOPY, выделение памяти не выполняется, а функция sqlite3_serialize() возвращает указатель на непрерывное представление базы данных в памяти, которое SQLite использует в данный момент для этой базы данных, либо NULL, если такого непрерывного представления базы данных не существует. Непрерывное представление базы данных в памяти обычно существует только в том случае, если ранее был вызван sqlite3_deserialize(D,S,...) с теми же значениями D и S. Размер базы данных записывается в *P, даже если установлен бит SQLITE_SERIALIZE_NOCOPY, но непрерывная копия базы данных отсутствует.
После вызова, если бит SQLITE_SERIALIZE_NOCOPY был установлен, содержимое возвращенного буфера останется доступным и неизменным до следующей операции записи в подключении или до закрытия подключения, и приложения не должны изменять буфер. Если бит не был установлен, SQLite не будет обращаться к возвращенному буферу после вызова.
Вызов sqlite3_serialize(D,S,P,F) может вернуть NULL, даже если бит SQLITE_SERIALIZE_NOCOPY отсутствует в аргументе F, в случае ошибки выделения памяти.
Этот интерфейс отсутствует, если SQLite скомпилирована с параметром SQLITE_OMIT_DESERIALIZE.
См. также списки объектов, констант и функций.
SQLite is in the Public Domain.
https://sqlite.org/c3ref/serialize.html