Spec-Zone.ru › SQLite

Сериализация базы данных

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API