Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
QFirebirdResultPrivate Class Reference

#include <qsql_firebird_result_p.h>

Inheritance diagram for QFirebirdResultPrivate:
Collaboration diagram for QFirebirdResultPrivate:

Public Types

using BlobWriter = std::function<bool(ISC_QUAD &, const QByteArray &)>
Public Types inherited from QSqlResultPrivate
using IndexMap = QHash<QString, QList<int>>
using QHolderVector = QList<QHolder>

Public Member Functions

 ~QFirebirdResultPrivate ()
void cleanup ()
void closeCursor ()
Firebird::IMaster * master () const
Firebird::IStatus * status () const
Firebird::IAttachment * att () const
Firebird::ITransaction * activeTransaction () const
Firebird::ITransaction * ensureTransaction ()
bool buildInputMessage (QString &errorText)
bool fillInputBuffer (const QList< QVariant > &vals, QString &errorText, BlobWriter blobWriter={})
bool encodeScaledNumeric (char *data, int fbType, int scale, const QVariant &val, QString &errorText)
void writeInlineBlob (ISC_QUAD &blobId, const QByteArray &blobData)
void adoptReplacementTransaction (Firebird::ITransaction *executedTr, Firebird::ITransaction *newTr)
bool ensureCachedRow (int index)
QString formatFbError (const QString &ctx)
 QSqlResultPrivate (QSqlResult *q, const QSqlDriver *drv)
Public Member Functions inherited from QSqlResultPrivate
 QSqlResultPrivate (QSqlResult *q, const QSqlDriver *drv)
virtual ~QSqlResultPrivate ()=default
void clearValues ()
void resetBindCount ()
void clearIndex ()
void clear ()
virtual QString fieldSerial (qsizetype) const
QString positionalToNamedBinding (const QString &query) const
QString namedToPositionalBinding (const QString &query)
QString holderAt (int index) const

Public Attributes

bool driverAlive = true
Firebird::IStatement * stmt = nullptr
Firebird::IResultSet * cursor = nullptr
Firebird::ITransaction * autoTrans = nullptr
Firebird::IMessageMetadata * outMeta = nullptr
Firebird::IMessageMetadata * inMeta = nullptr
QList< ColumnInfocols
QList< ColumnInfoinCols
QByteArray outBuffer
QByteArray inBuffer
ArrayDescCache arrayDescCache
int affectedRows = -1
bool isSelect = false
bool isProcExec = false
bool procRowFetched = false
TxnOp txnOp = TxnOp::None
bool useRowCache = false
bool cacheComplete = false
QList< QByteArrayrowCache
QSqlRecord cachedRecord
bool recordCached = false
Public Attributes inherited from QSqlResultPrivate
QSqlResultq_ptr = nullptr
QPointer< QSqlDriversqldriver
QString sql
QSqlError error
QString executedQuery
QHash< int, QSql::ParamType > types
QList< QVariantvalues
IndexMap indexes
QHolderVector holders
QSqlResult::BindingSyntax binds = QSqlResult::PositionalBinding
QSql::NumericalPrecisionPolicy precisionPolicy = QSql::LowPrecisionDouble
int idx = QSql::BeforeFirstRow
int bindCount = 0
bool active = false
bool isSel = false
bool forwardOnly = false
bool positionalBindingEnabled = true

Static Public Attributes

static constexpr int AffectedPending = -2

Additional Inherited Members

Static Public Member Functions inherited from QSqlResultPrivate
static bool isVariantNull (const QVariant &variant)

Detailed Description

Definition at line 109 of file qsql_firebird_result_p.h.

Member Typedef Documentation

◆ BlobWriter

using QFirebirdResultPrivate::BlobWriter = std::function<bool(ISC_QUAD &, const QByteArray &)>

Core helper: fill inBuffer from a flat list of values (one per parameter, metadata taken from the inCols cache). blobWriter, when set, is called for SQL_BLOB parameters instead of using att->createBlob(). Signature: bool(ISC_QUAD &blobId, const QByteArray &data). Returns false on error.

Definition at line 167 of file qsql_firebird_result_p.h.

Constructor & Destructor Documentation

◆ ~QFirebirdResultPrivate()

QFirebirdResultPrivate::~QFirebirdResultPrivate ( )
inline

Definition at line 116 of file qsql_firebird_result_p.h.

References cleanup(), and driverAlive.

Here is the call graph for this function:

Member Function Documentation

◆ activeTransaction()

Firebird::ITransaction * QFirebirdResultPrivate::activeTransaction ( ) const
inline

Definition at line 151 of file qsql_firebird_result_p.h.

◆ adoptReplacementTransaction()

void QFirebirdResultPrivate::adoptReplacementTransaction ( Firebird::ITransaction * executedTr,
Firebird::ITransaction * newTr )

Adopt a transaction handle that IStatement::execute() returned in place of the one it was given, releasing the replaced handle exactly once.

Definition at line 430 of file qsql_firebird_result.cpp.

◆ att()

Firebird::IAttachment * QFirebirdResultPrivate::att ( ) const
inline

Definition at line 150 of file qsql_firebird_result_p.h.

◆ buildInputMessage()

bool QFirebirdResultPrivate::buildInputMessage ( QString & errorText)

Definition at line 322 of file qsql_firebird_result.cpp.

◆ cleanup()

void QFirebirdResultPrivate::cleanup ( )

Definition at line 83 of file qsql_firebird_result.cpp.

References affectedRows, cacheComplete, isProcExec, isSelect, procRowFetched, recordCached, txnOp, and useRowCache.

Referenced by ~QFirebirdResultPrivate().

Here is the caller graph for this function:

◆ closeCursor()

void QFirebirdResultPrivate::closeCursor ( )

Close the open cursor (if any), releasing the handle if the close throws. Assumes the attachment is alive — only exec()/execBatch() call it, and only while executing. cleanup() handles the detached case inline.

Definition at line 144 of file qsql_firebird_result.cpp.

◆ encodeScaledNumeric()

bool QFirebirdResultPrivate::encodeScaledNumeric ( char * data,
int fbType,
int scale,
const QVariant & val,
QString & errorText )

Per-value encoders, factored out of fillInputBuffer so it stays focused on parameter iteration and NULL handling. Both may throw FbException, which exec()/execBatch translate into a QSqlError. encodeScaledNumeric returns false (with errorText set) for values that cannot be represented exactly in the column's range.

Definition at line 330 of file qsql_firebird_result.cpp.

References fbBaseType().

Here is the call graph for this function:

◆ ensureCachedRow()

bool QFirebirdResultPrivate::ensureCachedRow ( int index)

Pull rows from the server cursor (sequential fetchNext, which benefits from fbclient read-ahead) into rowCache until it holds at least index+1 rows or the cursor is exhausted. Returns true if rowCache[index] exists. May throw FbException (callers wrap in try/catch as elsewhere).

Definition at line 157 of file qsql_firebird_result.cpp.

References cacheComplete.

◆ ensureTransaction()

ITransaction * QFirebirdResultPrivate::ensureTransaction ( )

Definition at line 181 of file qsql_firebird_result.cpp.

◆ fillInputBuffer()

bool QFirebirdResultPrivate::fillInputBuffer ( const QList< QVariant > & vals,
QString & errorText,
BlobWriter blobWriter = {} )

Definition at line 449 of file qsql_firebird_result.cpp.

References fbBaseType(), ColumnInfo::fbType, ColumnInfo::length, and ColumnInfo::scale.

Here is the call graph for this function:

◆ formatFbError()

QString QFirebirdResultPrivate::formatFbError ( const QString & ctx)

Definition at line 174 of file qsql_firebird_result.cpp.

◆ master()

Firebird::IMaster * QFirebirdResultPrivate::master ( ) const
inline

Returns the driver's master/status/attachment/transaction without copying them. These are const accessors that hand back mutable Firebird interface pointers by design: the Firebird OO API has no const-qualified interfaces, and result fetching (e.g. data() const reading a BLOB) is inherently a mutating server operation, so logical const cannot propagate here.

Definition at line 148 of file qsql_firebird_result_p.h.

◆ QSqlResultPrivate()

Definition at line 46 of file qsqlresult_p.h.

◆ status()

Firebird::IStatus * QFirebirdResultPrivate::status ( ) const
inline

Definition at line 149 of file qsql_firebird_result_p.h.

◆ writeInlineBlob()

void QFirebirdResultPrivate::writeInlineBlob ( ISC_QUAD & blobId,
const QByteArray & blobData )

Definition at line 408 of file qsql_firebird_result.cpp.

Member Data Documentation

◆ AffectedPending

int QFirebirdResultPrivate::AffectedPending = -2
staticconstexpr

getAffectedRecords() costs a statement-info round trip, so exec() only marks the count as pending and numRowsAffected() resolves it on demand (QIBASE defers the same way). -1 = unknown/none.

Definition at line 215 of file qsql_firebird_result_p.h.

◆ affectedRows

int QFirebirdResultPrivate::affectedRows = -1

Definition at line 216 of file qsql_firebird_result_p.h.

Referenced by cleanup().

◆ arrayDescCache

ArrayDescCache QFirebirdResultPrivate::arrayDescCache
mutable

Array descriptors resolved by cachedArrayDesc, keyed by relation/field. Valid while the statement lives; cleared in cleanup(). mutable: data() reads through a const private pointer and only populates the cache.

Definition at line 208 of file qsql_firebird_result_p.h.

◆ autoTrans

Firebird::ITransaction* QFirebirdResultPrivate::autoTrans = nullptr

Definition at line 191 of file qsql_firebird_result_p.h.

◆ cacheComplete

bool QFirebirdResultPrivate::cacheComplete = false

Definition at line 231 of file qsql_firebird_result_p.h.

Referenced by cleanup(), and ensureCachedRow().

◆ cachedRecord

QSqlRecord QFirebirdResultPrivate::cachedRecord
mutable

QSqlRecord is derived solely from the (immutable-after-prepare) column metadata, so build it once and hand back copies — see record().

Definition at line 246 of file qsql_firebird_result_p.h.

◆ cols

QList<ColumnInfo> QFirebirdResultPrivate::cols

Definition at line 196 of file qsql_firebird_result_p.h.

◆ cursor

Firebird::IResultSet* QFirebirdResultPrivate::cursor = nullptr

Definition at line 190 of file qsql_firebird_result_p.h.

◆ driverAlive

bool QFirebirdResultPrivate::driverAlive = true

Set to false by ~QFirebirdDriver if the driver object is destroyed while this result is still alive. Once false, cleanup() must not dereference the (now-freed) driver private.

Definition at line 139 of file qsql_firebird_result_p.h.

Referenced by ~QFirebirdResultPrivate().

◆ inBuffer

QByteArray QFirebirdResultPrivate::inBuffer

Definition at line 201 of file qsql_firebird_result_p.h.

◆ inCols

QList<ColumnInfo> QFirebirdResultPrivate::inCols

Definition at line 197 of file qsql_firebird_result_p.h.

◆ inMeta

Firebird::IMessageMetadata* QFirebirdResultPrivate::inMeta = nullptr

Definition at line 194 of file qsql_firebird_result_p.h.

◆ isProcExec

bool QFirebirdResultPrivate::isProcExec = false

Definition at line 218 of file qsql_firebird_result_p.h.

Referenced by cleanup().

◆ isSelect

bool QFirebirdResultPrivate::isSelect = false

Definition at line 217 of file qsql_firebird_result_p.h.

Referenced by cleanup().

◆ outBuffer

QByteArray QFirebirdResultPrivate::outBuffer

Definition at line 200 of file qsql_firebird_result_p.h.

◆ outMeta

Firebird::IMessageMetadata* QFirebirdResultPrivate::outMeta = nullptr

Definition at line 193 of file qsql_firebird_result_p.h.

◆ procRowFetched

bool QFirebirdResultPrivate::procRowFetched = false

Definition at line 219 of file qsql_firebird_result_p.h.

Referenced by cleanup().

◆ recordCached

bool QFirebirdResultPrivate::recordCached = false
mutable

Definition at line 247 of file qsql_firebird_result_p.h.

Referenced by cleanup().

◆ rowCache

QList<QByteArray> QFirebirdResultPrivate::rowCache

Definition at line 232 of file qsql_firebird_result_p.h.

◆ stmt

Firebird::IStatement* QFirebirdResultPrivate::stmt = nullptr

Definition at line 189 of file qsql_firebird_result_p.h.

◆ txnOp

TxnOp QFirebirdResultPrivate::txnOp = TxnOp::None

Definition at line 221 of file qsql_firebird_result_p.h.

Referenced by cleanup().

◆ useRowCache

bool QFirebirdResultPrivate::useRowCache = false

-— Opt-in client-side row cache (FB_SCROLLABLE_CACHE) -— Enabled in exec() for scrollable SELECTs when the driver flag is set. rowCache holds a raw snapshot of outBuffer per absolute row index; on a cached fetch the snapshot is copied back into outBuffer so data() works unchanged (BLOB/array columns cache their blob id, valid for the txn).

Definition at line 230 of file qsql_firebird_result_p.h.

Referenced by cleanup().


The documentation for this class was generated from the following files: