FlameRobin 26.6.17
FlameRobin 26.6.17 Release Notes
This release addresses critical connection and runtime bugs, including a crash under Firebird 3.x and an alignment crash on GCC/Linux when handling high-precision NUMERIC fields.
Fixes & Enhancements
-
128-bit Integer GCC/Linux Alignment Crash (Issue #596):
- Root Cause: When executing queries containing aggregate functions (e.g.
SUM()) over millions of rows on fields stored as 128-bit integers (INT128/NUMERIC(18,4)), FlameRobin crashed on GCC/Linux with a fatal exception / segmentation fault. The compiler generated aligned vector SSE instructions (movaps/movdqa) for operations on native__int128types, which faulted when accessing the unalignedi128field inside the packedDOUBLE_DABBLE_UNIONstructure (at offset 20). - Fix: Migrated direct operations on the unaligned union member to safe
std::memcpycalls and implemented safe native 64-bit integer arithmetic onlowPart/highPartcomponents for negation and decrement operations. This completely avoids unaligned 128-bit CPU instructions on Linux.
- Root Cause: When executing queries containing aggregate functions (e.g.
-
Database Connection Stability for Firebird 3.x (Issue #618):
- Root Cause: An uninitialized integer variable
odsMinside theDatabaseInfoclass occasionally contained garbage memory values of 13 or higher. This led FlameRobin to assume the target database supported Firebird 4.0+ features and query Firebird 4-specific system columns (such asrdb$sql_securityinrdb$database) prior to reading the database version from the server. Connecting to a Firebird 3.x database (which does not contain this column) subsequently failed with an SQL metadata error. - Fix:
- All primitive member variables inside the
DatabaseInfoclass in database.h have been properly initialized inline to safe default values (0andfalse). - The execution order in
Database::connectin database.cpp was corrected to ensuredatabaseInfoM.load()is executed to retrieve the actual ODS version from the Firebird server before callingloadDatabaseInfo()to fetch database properties.
- All primitive member variables inside the
- Root Cause: An uninitialized integer variable
All 16 unit tests have run and passed successfully.