Name Description Size Coverage
CMakeLists.txt 781 -
firebird.json 28 -
main.cpp 781 -
qsql_firebird.cpp The driver uses the Firebird 4.0 object-oriented C++ API. Configure-time detection (FindFirebird.cmake with Firebird_MINIMUM_API_VERSION) already disables the sql-firebird feature for older clients; this static_assert is a backstop for out-of-tree builds that bypass configure. 30931 -
qsql_firebird_array.cpp Run a metadata SELECT with relName/fldName bound as the two text parameters — identifiers may legally contain quotes or non-ASCII, so they are never spliced into the SQL text. rowFn(buf, meta) is invoked for each fetched row until it returns false or the cursor is exhausted. The statement, metadata and cursor handles are freed by FbGuard on every path (close on the happy path, release on a throw) — no manual unwinding needed. 27429 -
qsql_firebird_array_p.h 2288 -
qsql_firebird_driver_p.h ! \internal Guards the iAtt lifecycle (published in open(), withdrawn in close()) against cancelQuery(), which reads and uses the attachment from a foreign thread. All other iAtt access is owner-thread-only. 3314 -
qsql_firebird_helpers.cpp ! \internal Convert a Firebird status vector into a QSqlError. `type` is the context in which the error occurred, supplied by the caller (open() -> ConnectionError, prepare()/exec() -> StatementError, begin/commit/rollback -> TransactionError); QSqlError::ErrorType categorises errors by that context, not by the underlying Firebird cause. The SQLCODE is carried through as the native error code. 18471 -
qsql_firebird_helpers_p.h ! \internal RAII guard for Firebird OO-API handles The Firebird OO API splits cleanup across two families: reference-counted interfaces freed with release() (IStatement, IResultSet, IBlob, …) and IDisposable ones freed with dispose() (IXpbBuilder, IBatchCompletionState). FbGuard centralises the "free on every error path" bookkeeping so it is not repeated at every call site. FbGuard owns one handle and frees it on scope exit with the action supplied at construction, unless it has been dismissed. closeWith() performs the type-specific graceful shutdown (IResultSet::close, IStatement::free, ITransaction::commit, …) which itself consumes the interface reference on success — so on success the guard is dismissed (no extra free), and only on a failed close does the destructor release the handle. This mirrors exactly the "close on the happy path, release on the error path" idiom used throughout. 9634 -
qsql_firebird_p.h 2481 -
qsql_firebird_result.cpp ! \internal Read a BLOB into QByteArray. Uses ThrowStatusWrapper so a read error throws FbException (caught by QFirebirdResult::data) instead of being swallowed and returning a silently truncated buffer. 55011 -
qsql_firebird_result_p.h ! \internal Transaction-control statement kind (bare COMMIT/ROLLBACK), handled via the ITransaction API rather than executed as DSQL. 9379 -