Spec-Zone.ru › SQLite

Открытие BLOB для инкрементального ввода/вывода

int sqlite3_blob_open(
  sqlite3*,
  const char *zDb,
  const char *zTable,
  const char *zColumn,
  sqlite3_int64 iRow,
  int flags,
  sqlite3_blob **ppBlob
);

Этот интерфейс открывает дескриптор BLOB, расположенного в строке iRow, столбце zColumn, таблице zTable в базе данных zDb; другими словами, тот же самый BLOB, который был бы выбран следующим образом:

SELECT zColumn FROM zDb.zTable WHERE rowid = iRow;

Параметр zDb — это не имя файла, содержащий базу данных, а символическое имя базы данных. Для присоединённых баз данных это имя, которое отображается после ключевого слова AS в операторе ATTACH. Для основного файла базы данных имя базы данных — "main". Для временных таблиц имя базы данных — "temp".

Если параметр flags не равен нулю, то BLOB открывается для чтения и записи. Если параметр flags равен нулю, то BLOB открывается только для чтения.

При успешном выполнении возвращается SQLITE_OK, и новый дескриптор BLOB сохраняется в *ppBlob. В противном случае возвращается код ошибки, и, за исключением случая ошибки SQLITE_MISUSE, *ppBlob устанавливается в значение NULL. Это означает, что, при условии корректного использования API, всегда безопасно вызывать sqlite3_blob_close() для *ppBlob после возвращения этой функции.

Эта функция завершается с ошибкой SQLITE_ERROR, если выполняется любое из следующих условий:

  • База данных zDb не существует,
  • Таблица zTable не существует в базе данных zDb,
  • Таблица zTable является таблицей WITHOUT ROWID,
  • Столбец zColumn не существует,
  • Строка iRow отсутствует в таблице,
  • Указанный столбец строки iRow содержит значение, которое не является значением типа TEXT или BLOB,
  • Столбец zColumn является частью индекса, PRIMARY KEY или UNIQUE ограничения, и BLOB открывается для чтения/записи,
  • Ограничения внешнего ключа включены, столбец zColumn является частью определения ключа-потомка, и BLOB открывается для чтения/записи.

Если функция не возвращает SQLITE_MISUSE, она устанавливает код ошибки и сообщение об ошибке соединения с базой данных, доступные через sqlite3_errcode() и sqlite3_errmsg() и связанные функции.

BLOB, на который ссылается функция sqlite3_blob_open(), может быть прочитан с помощью интерфейса sqlite3_blob_read() и изменён с помощью интерфейса sqlite3_blob_write(). Дескриптор BLOB может быть перемещён в другую строку той же таблицы с помощью интерфейса sqlite3_blob_reopen(). Однако столбец, таблица или база данных дескриптора BLOB не могут быть изменены после открытия дескриптора BLOB.

Если строка, на которую указывает дескриптор BLOB, изменяется с помощью UPDATE, DELETE или с помощью ON CONFLICT побочных эффектов, то дескриптор BLOB помечается как "просроченный". Это верно, если изменяется любой столбец строки, даже столбец, отличный от того, на котором открыт дескриптор BLOB. Вызовы sqlite3_blob_read() и sqlite3_blob_write() для просроченного дескриптора BLOB завершаются ошибкой с кодом возврата SQLITE_ABORT. Изменения, внесённые в BLOB до истечения срока действия BLOB, не отменяются истечением срока действия BLOB. Такие изменения в конечном итоге будут сохранены, если транзакция завершится успешно.

Используйте интерфейс sqlite3_blob_bytes() для определения размера открытого BLOB. Размер BLOB не может быть изменён с помощью этого интерфейса. Используйте оператор SQL UPDATE для изменения размера BLOB.

Интерфейсы sqlite3_bind_zeroblob() и sqlite3_result_zeroblob(), а также встроенная функция SQL zeroblob могут быть использованы для создания заполненного нулями BLOB для чтения или записи с помощью интерфейса инкрементального BLOB.

Для предотвращения утечки ресурсов каждый открытый дескриптор BLOB должен быть закрыт вызовом sqlite3_blob_close().

См. также: sqlite3_blob_close(), sqlite3_blob_reopen(), sqlite3_blob_read(), sqlite3_blob_bytes(), sqlite3_blob_write().

См. также списки Объектов, Констант и Функций.

SQLite is in the Public Domain.
https://sqlite.org/c3ref/blob_open.html

Spec-Zone.ru

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