*** DRAFT ***

SQLite Requirement Matrix Details
blob_open.html

Index Summary Markup Original


R-37639-55938-19671-37883-10811-32762-31289-05215 tcl slt th3 src

This interfaces opens a handle to the BLOB located in row iRow, column zColumn, table zTable in database zDb; in other words, the same BLOB that would be selected by:

SELECT zColumn FROM zDb.zTable WHERE rowid = iRow;

tcl/e_blobopen.test:73   th3/req1/blob01.test:43

/* IMP: R-37639-55938 */
# EVIDENCE-OF: R-37639-55938 This interfaces opens a handle to the BLOB
# located in row iRow, column zColumn, table zTable in database zDb; in
# other words, the same BLOB that would be selected by: SELECT zColumn
# FROM zDb.zTable WHERE rowid = iRow;

R-27234-05761-29027-01683-12712-48347-06174-19243 tcl slt th3 src

Parameter zDb is not the filename that contains the database, but rather the symbolic name of the database. For attached databases, this is the name that appears after the AS keyword in the ATTACH statement. For the main database file, the database name is "main". For TEMP tables, the database name is "temp".

tcl/e_blobopen.test:108

/* IMP: R-27234-05761 */
# EVIDENCE-OF: R-27234-05761 Parameter zDb is not the filename that
# contains the database, but rather the symbolic name of the database.
# For attached databases, this is the name that appears after the AS
# keyword in the ATTACH statement. For the main database file, the
# database name is "main". For TEMP tables, the database name is "temp".

R-50854-53979-53797-24039-01336-17260-53892-24252 tcl slt th3 src

If the flags parameter is non-zero, then the BLOB is opened for read and write access.

tcl/e_blobopen.test:127   th3/cov1/vdbeblob01.test:80

/* IMP: R-50854-53979 */
# EVIDENCE-OF: R-50854-53979 If the flags parameter is non-zero, then
# the BLOB is opened for read and write access.

R-03922-41160-10406-40879-23599-49045-53405-25401 tcl slt th3 src

If the flags parameter is zero, the BLOB is opened for read-only access.

tcl/e_blobopen.test:130   th3/cov1/vdbeblob01.test:192

/* IMP: R-03922-41160 */
# EVIDENCE-OF: R-03922-41160 If the flags parameter is zero, the BLOB is
# opened for read-only access.

R-31086-35521-56938-30140-08121-54172-49179-57363 tcl slt th3 src

On success, SQLITE_OK is returned and the new BLOB handle is stored in *ppBlob. Otherwise an error code is returned and, unless the error code is SQLITE_MISUSE, *ppBlob is set to NULL.

tcl/e_blobopen.test:224

/* IMP: R-31086-35521 */
# EVIDENCE-OF: R-31086-35521 On success, SQLITE_OK is returned and the
# new BLOB handle is stored in *ppBlob. Otherwise an error code is
# returned and, unless the error code is SQLITE_MISUSE, *ppBlob is set
# to NULL.

R-63421-15521-37250-06535-51349-22995-65191-63992 tcl slt th3 src

This means that, provided the API is not misused, it is always safe to call sqlite3_blob_close() on *ppBlob after this function it returns.

tcl/e_blobopen.test:233

/* IMP: R-63421-15521 */
# EVIDENCE-OF: R-63421-15521 This means that, provided the API is not
# misused, it is always safe to call sqlite3_blob_close() on *ppBlob
# after this function it returns.

R-31204-44780-48490-01818-36589-33853-37932-09648 tcl slt th3 src

Database zDb does not exist

tcl/e_blobopen.test:241

/* IMP: R-31204-44780 */
# EVIDENCE-OF: R-31204-44780 Database zDb does not exist

R-28676-08005-24857-51856-29072-62693-32404-21796 tcl slt th3 src

Table zTable does not exist within database zDb

tcl/e_blobopen.test:244

/* IMP: R-28676-08005 */
# EVIDENCE-OF: R-28676-08005 Table zTable does not exist within database
# zDb

R-40134-30296-44811-22193-40834-03348-00642-51152 tcl slt th3 src

Table zTable is a WITHOUT ROWID table

tcl/e_blobopen.test:247   tcl/without_rowid5.test:277   th3/cov1/vdbeblob01.test:341

/* IMP: R-40134-30296 */
# EVIDENCE-OF: R-40134-30296 Table zTable is a WITHOUT ROWID table

R-56376-21261-47968-49600-56386-05495-27914-63410 tcl slt th3 src

Column zColumn does not exist

tcl/e_blobopen.test:251

/* IMP: R-56376-21261 */
# EVIDENCE-OF: R-56376-21261 Column zColumn does not exist

R-28258-23166-61617-36220-57922-46020-57990-00363 tcl slt th3 src

Row iRow is not present in the table

tcl/e_blobopen.test:254

/* IMP: R-28258-23166 */
# EVIDENCE-OF: R-28258-23166 Row iRow is not present in the table

R-11683-62380-30736-32552-21398-51660-49111-11348 tcl slt th3 src

The specified column of row iRow contains a value that is not a TEXT or BLOB value

tcl/e_blobopen.test:257

/* IMP: R-11683-62380 */
# EVIDENCE-OF: R-11683-62380 The specified column of row iRow contains a
# value that is not a TEXT or BLOB value

R-34146-30782-53907-40582-61923-47415-21722-12527 tcl slt th3 src

Column zColumn is part of an index, PRIMARY KEY or UNIQUE constraint and the blob is being opened for read/write access

tcl/e_blobopen.test:263   th3/cov1/vdbeblob01.test:320

/* IMP: R-34146-30782 */
# EVIDENCE-OF: R-34146-30782 Column zColumn is part of an index, PRIMARY
# KEY or UNIQUE constraint and the blob is being opened for read/write
# access

R-50117-55204-45597-46380-14331-21746-62351-54085 tcl slt th3 src

Foreign key constraints are enabled, column zColumn is part of a child key definition and the blob is being opened for read/write access

tcl/e_blobopen.test:287   th3/cov1/vdbeblob06.test:17

/* IMP: R-50117-55204 */
# EVIDENCE-OF: R-50117-55204 Foreign key constraints are enabled, column
# zColumn is part of a child key definition and the blob is being opened
# for read/write access

R-08940-21305-30374-23280-00035-42277-55348-10248 tcl slt th3 src

Unless it returns SQLITE_MISUSE, this function sets the database connection error code and message accessible via sqlite3_errcode() and sqlite3_errmsg() and related functions.

tcl/e_blobopen.test:207   tcl/e_blobopen.test:304

/* IMP: R-08940-21305 */
# EVIDENCE-OF: R-08940-21305 Unless it returns SQLITE_MISUSE, this
# function sets the database connection error code and message
# accessible via sqlite3_errcode() and sqlite3_errmsg() and related
# functions.

R-50542-62589-12148-25496-57313-35082-62636-01906 tcl slt th3 src

If the row that a BLOB handle points to is modified by an UPDATE, DELETE, or by ON CONFLICT side-effects then the BLOB handle is marked as "expired". This is true if any column of the row is changed, even a column other than the one the BLOB handle is open on.

tcl/e_blobopen.test:336

/* IMP: R-50542-62589 */
# EVIDENCE-OF: R-50542-62589 If the row that a BLOB handle points to is
# modified by an UPDATE, DELETE, or by ON CONFLICT side-effects then the
# BLOB handle is marked as "expired". This is true if any column of the
# row is changed, even a column other than the one the BLOB handle is
# open on.

R-48367-20048-50643-18297-54370-57109-07198-62808 tcl slt th3 src

Calls to sqlite3_blob_read() and sqlite3_blob_write() for an expired BLOB handle fail with a return code of SQLITE_ABORT.

tcl/e_blobopen.test:342

/* IMP: R-48367-20048 */
# EVIDENCE-OF: R-48367-20048 Calls to sqlite3_blob_read() and
# sqlite3_blob_write() for an expired BLOB handle fail with a return
# code of SQLITE_ABORT.

R-45408-40694-64054-48639-23979-33510-40886-26968 tcl slt th3 src

Changes written into a BLOB prior to the BLOB expiring are not rolled back by the expiration of the BLOB. Such changes will eventually commit if the transaction continues to completion.

tcl/e_blobopen.test:474

/* IMP: R-45408-40694 */
# EVIDENCE-OF: R-45408-40694 Changes written into a BLOB prior to the
# BLOB expiring are not rolled back by the expiration of the BLOB. Such
# changes will eventually commit if the transaction continues to
# completion.

R-37688-43700-53103-62151-49236-10303-34051-45197 tcl slt th3 src

Use the sqlite3_blob_bytes() interface to determine the size of the opened blob.

th3/cov1/vdbeblob01.test:62

/* IMP: R-37688-43700 */
# EVIDENCE-OF: R-37688-43700 Use the sqlite3_blob_bytes() interface to
# determine the size of the opened blob.

R-31812-49659-31326-36358-44931-00819-19755-27412 tcl slt th3 src

The size of a blob may not be changed by this interface.

th3/cov1/vdbeblob01.test:124

/* IMP: R-31812-49659 */
# EVIDENCE-OF: R-31812-49659 The size of a blob may not be changed by
# this interface.

R-58813-55036-01417-02412-42813-08467-49473-05345 tcl slt th3 src

The sqlite3_bind_zeroblob() and sqlite3_result_zeroblob() interfaces and the built-in zeroblob SQL function may be used to create a zero-filled blob to read or write using the incremental-blob interface.

tcl/e_blobopen.test:504

/* IMP: R-58813-55036 */
# EVIDENCE-OF: R-58813-55036 The sqlite3_bind_zeroblob() and
# sqlite3_result_zeroblob() interfaces and the built-in zeroblob SQL
# function may be used to create a zero-filled blob to read or write
# using the incremental-blob interface.