Firebird Changelog

What's new in Firebird 5.0.0.1306-0

Jan 12, 2024
  • Firebird 5.0 introduces many improvements without any changes in architecture or operation, the most important are:
  • Parallel (multi-threaded) operation for backup/restore, sweep and index creation
  • Partial indices
  • SKIP LOCKED clause for SELECT WITH LOCK, UPDATE and DELETE statements
  • Inline minor ODS upgrade
  • Compiled statement cache
  • PSQL and SQL profiler
  • Support for WHEN NOT MATCHED BY SOURCE for MERGE statement
  • Support multiple rows for DML RETURNING
  • New built-in functions and packages
  • Denser record-level compression
  • Network support for scrollable cursors

New in Firebird 5.0.0.1304 RC 2 (Dec 28, 2023)

  • New features and improvements:
  • Allow to configure Firebird in POSIX using relative directories with options --with-fb* (#7918)
  • Add backward compatibility option that disables joins transformation (#7910)
  • Performance issue with time zones (#7854)
  • Difficulty returning the product version with the legacy connection (#7819)
  • Extend RDB$GET_CONTEXT('SYSTEM', '***') with other info from MON$ATTACHMENTS (#7818)
  • Don't update database-level statistics on every page cache operation (#7814)
  • Improve SKIP LOCKED implementation (#7810)
  • Update Windows distribution with new zlib version 1.3 (released 2023-08-18) (#7755)

New in Firebird 4.0.4.3010-0 (Nov 9, 2023)

  • Improvements:
  • RDB$GET/SET_CONTEXT(): quoting the missing namespace/variable makes output more readable (#7539)
  • Update Windows distribution with new zlib version 1.3 (released 2023-08-18) (#7755 )

New in Firebird 5.0.0.1227 RC 1 (Sep 27, 2023)

  • New features and improvements:
  • Use ParallelWorkers setting from firebird.conf as default for all parallelised operations (#7682)
  • Make Android port (client / embedded) work inside apps (#7469)
  • Add support for QUARTER to EXTRACT, FIRST_DAY and LAST_DAY (#5959)
  • Better processing and optimization if IN <list> predicates (#7707)
  • Make trace config parser resolve symlinks in database file path in trace configuration (#7692)
  • Getting the current DECFLOAT ROUND/TRAPS settings (#7642)
  • Allow nested parenthesized joined table (#7576)
  • Optimize creation of expression and partial indices (#7559)
  • Add ability to query current value of parallel workers for an attachment (#7536)
  • Add COMPILE trace events for procedures/functions/triggers (#7466)
  • Add REPLICA MODE to the output of the isql SHOW DATABASE command (#7425)
  • Surface internal optimization modes (all rows vs first rows) at the SQL and configuration levels (#7405)
  • Make ability to add comment to mapping (COMMENT ON MAPPING ... IS ...) (#7046)

New in Firebird 4.0.3.975-0 (Aug 5, 2023)

  • Improvements:
  • RDB$GET/SET_CONTEXT(): quoting the missing namespace/variable makes output more readable (#7539)
  • Avoid non necessary index reads (#7494)
  • Add switch to control in guardian timeout before killing Firebird server process (#7468)
  • Update zlib to version 1.2.13 (released 2022-10-13) (#7437)
  • Add REPLICA MODE to the output of the isql SHOW DATABASE command (#7425)
  • Improve reliability of plugin manager (#7418)
  • Allow FB-known macros in replication.conf (#7294)
  • Remove TcpLoopbackFastPath and use of SIO_LOOPBACK_FAST_PATH (#7259)
  • Nbackup RDB$BACKUP_HISTORY cleanup (#7186)

New in Firebird 4.0.2.2816-0 (Aug 12, 2022)

  • V.4.0.2 Improvements:
  • 6983 — New built-in function BLOB_APPEND
  • 7208 — Trace: provide performance statistics for DDL statement
  • 7194 — Make it possible to avoid fbclient dependency in Pascal programs using firebird.pas
  • 7168 — Ignore missing UDR libraries during restore
  • 7161 — Update zlib to version 1.2.12
  • 7093 — Improve indexed lookup speed of strings when the last keys characters are part of collated contractions
  • 7092 — Improve performance of CURRENT_TIME
  • 7042 — ON DISCONNECT triggers are not executed during forced attachment shutdown
  • 7041 — Firebird port for Apple M1 architecture
  • 7038 — Improve performance of STARTING WITH with insensitive collations
  • 6730 — Trace: provide ability to see STATEMENT RESTART events (or their count)

New in Firebird 4.0.1.2692-0 (Dec 22, 2021)

  • Improvements:
  • 6910 — Add way to retrieve statement BLR with Statement::getInfo() and ISQL’s SET EXEC_PATH_DISPLAY BLR.
  • 6959 — Add getInfo() method to the Batch interface in the API.
  • 6954 — Add fb_info_protocol_version information request to Attachment::getInfo().
  • 6929 — Add support of PKCS v.1.5 padding to RSA functions, needed for backward compatibility with old systems.
  • 6915 — Allow attribute DISABLE-COMPRESSIONS in UNICODE collations.
  • 6903 — Make it possible to create ICU-based collations with locales keywords.
  • 6872 — Faster indexed STARTING WITH execution with UNICODE collations.
  • 6810 — Use precise limit of salt length when signing messages and verifying the sign.
  • 6809 — Integer hex-literal support for INT128.
  • Bug Fixes:
  • Core Engine:
  • 7070 — Error "BLOB is not found" while replication converts INSERT into UPDATE for a conflicting record.
  • 7064 — Linear regression functions aren’t implemented correctly.
  • 7062 — Creation of expression index does not release its statement correctly.
  • 7057 — Client-side positioned updates work wrongly with scrollable cursors.
  • 7056 — Fetching from a scrollable cursor may overwrite user-specified buffer and corrupt memory.
  • 7052 — Races between transactions on the primary side may cause update conflicts while applying journals to the replica.
  • 7048 — Incorrect releasing of user savepoint (older savepoints become inaccessible).
  • 7043 — Wrong message when user has no access to /tmp/firebird.
  • 7033 — Replicator is missing sanity checks for user-supplied blocks.
  • 6998 — Problems with access to RDB$CONFIG table for non-privileged user when he has grant on execution of stored procedure which has necessary access rights (created by SYSDBA with SQL DEFINER clause).
  • 6995 — "String truncation error" is raised while restoring the database from a v2.5 backup.
  • 6989 — Invalid message in replication.log (and possibly crash in the case of synchronous replication) when the target DB has no "replica" flag set.
  • 6976 — Lack of proper clean up after failure to initialize shared memory.
  • 6963 — The REFERENCES permission does not work.
  • 6955 — fb_info_creation_timestamp_tz returns a corrupted buffer.
  • 6935 — SQL SECURITY DEFINER has inconsistent behaviour if the object owner is non-privileged.
  • 6935 — SQL SECURITY DEFINER does not affect the ownership of created DDL objects.
  • 6907 — Failed DDL commands can be replicated.
  • 6900 — IBatch::add() method fails silently when a memory limit is exceeded.
  • 6893 — Problem with replication of BLOB segments longer than 32KB.
  • 6887 — Invalid SIMILAR TO patterns may lead memory read beyond string limits.
  • 6886 — Differerent interfaces behaviour depending upon source of interface.
  • 6887 — Significant performance regression of SIMILAR TO and SUBSTRING(SIMILAR) when pattern is taken from a variable.
  • 6874 — Literal 65536 (interpreted as int) cannot be multiplied by itself without cast if result is more than 2^63-1.
  • 6860 — Create user statement fails with SQLSTATE = HY000 when using DataTypeCompatibility setting.
  • 6856 — Permission error after replication of DDL commands.
  • 6853 — Asynchronous replication leaks file handles.
  • 6850 — Database-level and DDL triggers are executed at the replica side.
  • 6849 — Conflicting INSERT propagated into a read-write replica may cause duplicate records to appear (and PK/UK violation to happen).
  • 6848 — Generator values may not replicate after commit.
  • 6845 — Result type of AVG over BIGINT column results in type INT128.
  • 6838 — Deleting multiple rows from a view with triggers may cause triggers to fire just once.
  • 6801 — Error recompiling a package with some combination of nested functions.
  • Server Crashes/Hang-ups
  • 7067 — Deadlock when using not initialized security database.
  • 7060 — Deadlock when execute test for CORE-4337.
  • 7034 — Server crashes while fetching from a scrollable cursor in PSQL.
  • 7018 — Crashes or incorrect results for some windows frames.
  • 7015 — Replication applier code may crash if the specified block contains no savepoint operations.
  • 6985 — Application could hang when using new Batch API with blobs over XNET.
  • 6975 — Crash or hang while shutting down the replica database if segments are being applied.
  • 6945 — Segfault in the batch interface when gbak restores a database with many blobs over the wire.
  • 6930 — Segfault when calling cryptographic functions.
  • 6913 — Buffer overflows in getInfo() APIs.
  • 6909 — Some updates may crash Firebird server on the replica side.
  • 6832 — Segfault when using COMMIT RETAINING with Global Temporary Tables.
  • API/Remote Interface:
  • 7068 — Errors in the ChaCha plugin are displayed incorrectly.
  • 7066 — Server may send incorrect specific data to client when establishing encrypted connection.
  • 7065 — Connection hangs after delivery of 256GB of data.
  • Windows Only:
  • 6968 — On Windows, engine may hang when works with corrupted database and read after the end of file.
  • Builds:
  • 7037 — Build problem when using both --with-builtin-tommath and --with-builtin-tomcrypt.
  • 6978 — Firebird 4 fails to build on big-endian platforms.
  • Installation Issues:
  • 6979 — Windows x64 server installer installs an incomplete x86 client.
  • 6943 — Windows client install is missing some DLLs.
  • 6917 — Firebird 4 installer asks for SYSDBA password when doing client installation.

New in Firebird 4.0.0.2496-0 (Jun 1, 2021)

  • Complete In Firebird 4.0 Final Release:
  • Renamed functions RSA_SIGN and RSA_VERIFY:
  • Functions priorly introduced as RSA_SIGN and RSA_VERIFY have been renamed to RSA_SIGN_HASH and RSA_VERIFY_HASH respectively.
  • Session time zone is available via the system context:
  • The SYSTEM namespace of the built-in function RDB$GET_CONTEXT has been extended with the SESSION_TIMEZONE parameter that returns the time zone of the current session.
  • More efficient implementation of SUBSTRING for UTF-8 character set:
  • Built-in function SUBSTRING has been improved to provide better performance when called with UTF-8 input strings.
  • Allow replication plugins to refuse the current attachment:
  • The replication plugin API has been extended to allow the plugin to validate the attachment and return an error if it refuses to replicate its changes.
  • Immediate execution of DSQL_drop and DSQL_unprepare commands:
  • Delayed execution of DSQL_drop and DSQL_unprepare options of the dsql_free_statement() operation has been replaced with an immediate execution in order to release resource locks faster.
  • Provide time zone ID constants in public headers:
  • Time zone IDs used by the Firebird engine have been made available in the header files of the public API.
  • Make RDB$GET_TRANSACTION_CN working the same way in Super and Classic:
  • Built-in function GET_TRANSACTION_CN has been fixed to return the same result (proper commit number) for the given transaction number in all architectures. Priorly it might return NULL in Classic Server.

New in Firebird 3.0.7.33374_0 (Oct 21, 2020)

  • Improvements:
  • (CORE-6413)Removed PIDFile/-pidfile option from Super(Server/Classic) systemd unit.Implemented by A. Peshkov
  • (CORE-6362)Added better diagnostic for the 'Missing security context' error.Implemented by A. Peshkov
  • (CORE-6339)Server was modified to disconnect from the security database when missing plugin data structures cause an error Implemented by A. Peshkov

New in Firebird 3.0.6.33328_0 (Jun 28, 2020)

  • Improvements:
  • (CORE-6334) Added missing relocation support to MacOS builds.
  • Implemented by A. Peshkov
  • (CORE-6274) Increased parsing speed of long queries.
  • Implemented by A. dos Santos Fernandes
  • (CORE-6237) Improved performance when using SRP plugin.
  • Implemented by A. Peshkov
  • (CORE-4933) Added better transaction control to ISQL.
  • Implemented by V. Khorsun

New in Firebird 4.0.0.1963-0 Beta 2 (May 15, 2020)

  • This Beta release arrives with features and improvements already implemented by the Firebird development team, as well as with countless bugfixes. Details of this release can be found here: http://web.firebirdsql.org/downloads/prerelease/v40beta2/Firebird-4.0.0-Beta2-ReleaseNotes.pdf

New in Firebird 3.0.5.33220_0 / 4.0.0.716-0 Alpha 1 (Jan 12, 2020)

  • Improved the engine providers compatibility across Firebird versions.
  • Added a configuration switch to disable the "TCP Loopback Fast Path" option (Windows only).
  • Improved the WIN_SSPI plugin to produce keys for the WireCrypt plugin.
  • Made it possible for the AuthClient plugin to access the authentication block from DPB.
  • Added ability to use "install.sh -path /opt/my_path" without a need to install Firebird first in the default folder.
  • Implemented option to restore compressed .nbk files without explicitly decompressing them.

New in Firebird 3.0.4.33054_0 (Oct 5, 2018)

  • Context variables WIRE_COMPRESSED and WIRE_ENCRYPTED were added to the SYSTEM namespace to report compression and encryption status, respectively, of the current connection. See Context Variables: v.3.0.4 for details.
  • Enhanced reporting of errors when a dynamic library fails to load. For more information, see Better Reporting on Dynamic Library Loading Errors.
  • When an external function (UDF) causes an error of the type "Arithmetic exception, numeric overflow, or string truncation", the error message will now include the name of the function.
  • The API now supports passing the DPB/spb item ***_auth_plugin_list from an application to the client interface. More details.
  • Two new context variables LOCALTIME and LOCALTIMESTAMP that are synonyms for CURRENT_TIME and CURRENT_TIMESTAMP, respectively. They can be used in Firebird 3.0.4 and later, for forward-compatibility with Firebird 4. See Context Variables: v.3.0.4 for details.
  • The read-only restriction for system tables was relaxed to permit CREATE, ALTER and DROP operations on their indexes.

New in Firebird 3.0.3.32900_0 (Feb 2, 2018)

  • Improvements:
  • Engine response has been improved on cancel/shutdown signals when scanning a long list of pointer pages.
  • The name of the encryption key is not top secret information. It can be read using the gstat utility or service, for example. However, for working with that name from a program it was desirable to access the key name using the API call Attachment::getInfo(). Hence, this facility is now provided via the information item fb_info_crypt_key.
  • Some clauses of the ALTER DATABASE statement require updating of the single row in RDB$DATABASE: SET DEFAULT CHARACTER SET, SET LINGER, DROP LINGER. Others, such as BEGIN|END BACKUP, ENCRYPT, DECRYPT, et al., do not need to touch that record.
  • In previous versions, to prevent concurrent instances of ALTER DATABASE running in parallel transactions, the engine would run an update on the RDB$DATABASE record regardless of the nature of clauses specified by the user. Hence, any other transaction that read the RDB$DATABASE record in READ COMMITTED NO RECORD VERSION mode would be blocked briefly, even by a “dummy update” that in fact did not update the record.
  • In some cases, such as with an ALTER DATABASE END BACKUP the blockage could last 10 minutes or more. A user would seem to be unable to connect to the database with isql, for example, while ALTER DATABASE END BACKUP was running. In fact, isql would connect successfully, but it would read RDB$DATABASE immediately after attaching, using a READ COMMITTED NO RECORD VERSION WAIT transaction and then just wait until the work of ALTER DATABASE END BACKUP was committed.
  • From this sub-release forward, the update of the RDB$DATABASE record is avoided when possible and an implicit lock is placed to prevent concurrent runs of the ALTER DATABASE statement.
  • All queries that are semantically the same should have the same plan. However, until now, the optimizer understood only an explicit reference inside an ORDER BY clause and would ignore sorts derived from equivalent expressions. Now, it will consider equivalence classes for index navigation. Refer to the Tracker ticket for an example.
  • Common Table Expressions are now allowed to be left unused.
  • Flushing a large number of dirty pages has been made faster.
  • Measures have been taken to avoid serialization of isc_attach_database calls issued by EXECUTE STATEMENT.
  • Output from gstat now includes the date and time of analysis.
  • The merge stage of a physical backup stage could run too long, especially with huge page cache. Changes have been made to reduce it.
  • Message “Error during sweep: connection shutdown” now provides information about the database that was being swept.
  • Improvement in performance of ALTER DOMAIN when the domain has many dependencies.
  • Compression details and encryption status of the connection (fb_info_conn_flags) have been added to the getInfo() API call.
  • Restoring a pre ODS 11.1 database now correctly populates RDB$RELATION_TYPE field in the metadata.
  • Speed of backup with nBackup when directed to NAS over SMB protocol has been improved.
  • The optimizer can now estimate the actual record compression ratio.

New in Firebird 4.0.0.716-0 Alpha 1 (Aug 24, 2017)

  • Bugs fixed:
  • (CORE-5545) Using the POSITION parameter with the [RE]CREATE TRIGGER syntax would cause an “unknown token” error if POSITION was written in the logically correct place, i.e., after the main clauses of the statement.
  • (CORE-5454) Inserting into an updatable view without an explicit column list would fail.
  • (CORE-5408) The result of a Boolean expression could not be concatenated with a string literal
  • (CORE-5404) Inconsistent column and line references were being returned in error messages for faulty PSQL definitions
  • (CORE-5237) Processing of the include clause in configuration files was mishandling dot (.) and asterisk (*) characters in the file name and path of the included file
  • (CORE-5223) Double dots in file names for databases were prohibited if the DatabaseAccess configuration parameter was set to restrict access to a list of directories
  • (CORE-5141) Field definition would allow multiple NOT NULL clauses
  • (CORE-4985) A non-privileged user could implicitly count records in a restricted table
  • (CORE-4701) Garbage collection for indexes and BLOBs was not taking data in the Undo log into account
  • (CORE-4483) In PSQL, data changed by executing a procedure was not visible to the WHEN handler if the exception occurred in the called procedure.
  • (CORE-4424) In PSQL, execution flow would roll back to the wrong savepoint if multiple exception handlers were executed at the same level
  • Summary of New Features:
  • Physical standby solution
  • Extend length of metadata identifiers
  • Configurable time-outs
  • Extended precision for numerics
  • Enhanced system privileges
  • Extended window functions
  • GRANT ROLE TO ROLE
  • User groups

New in Firebird 3.0.2.32703_0 (Mar 22, 2017)

  • NEW FEATURE:
  • (CORE-4563) Support was added for fast/low-latency “TCP Loopback Fast Path” functionality introduced in Windows 8 and Server 2012. This feature is said to improve the performance of the TCP stack for local loopback connections, by short-circuiting the TCP stack for local calls.
  • IMPROVEMENTS:
  • IMPROVEMENT: It is now possible to filter out info and warnings from the trace log.
  • IMPROVEMENT: Enhanced control capability when sharing the database crypt key between Superserver attachments.
  • IMPROVEMENT: The physical numbers of frequently used data pages are now cached to reduce the number of fetches of pointer pages.
  • IMPROVEMENT: A read-only transaction will no longer force write the HeaderTIP page content to disk immediately after a change. This improvement gives a significant performance gain where there are numerous light read-only transactions. At this stage, it affects only servers in SS mode. For CS and SC it is more complex to implement and should appear in Firebird 4.0.
  • IMPROVEMENT: The database name was made available to an encryption plug-in.
  • IMPROVEMENT: libfbclient.so was compiled for Android (x86/x86-64/arm64).
  • IMPROVEMENT: Nesting of keys in a plug-in configuration was enabled.
  • IMPROVEMENT: The Linux code is now built with --enable-binreloc and an option was included in the installer script to install in locations other than /opt/firebird.
  • IMPROVEMENT: For Trace, a filter has been provided to INCLUDE / EXCLUDE errors by their mnemonical names.
  • IMPROVEMENT: Android port (arm32).
  • IMPROVEMENT: A port was done and tested for Linux on the ancient Motorola 680000 CPU platform to satisfy some requirement from Debian.
  • IMPROVEMENT: Support has been added to enable SELECT expressions to be valid operands for the BETWEEN predicate.

New in Firebird 3.0.1.32609_0 (Sep 27, 2016)

  • Improvements in Sub-release V.3.0.1:
  • IMPROVEMENT: The statement CREATE OR ALTER USER SYSDBA PASSWORD can now be used to initialize an empty securityN.fdb security database.
  • IMPROVEMENT: Nesting of keys in a plug-in configuration was enabled.
  • IMPROVEMENT: For URL-like connection strings on Windows, restriction of lookup to IPv4 only was enabled.
  • IMPROVEMENT: Line and column numbers (location context) are now provided for runtime errors raised inside EXECUTE BLOCK.
  • IMPROVEMENT: A switch was added to build POSIX binaries with a built-in libtommath library.
  • IMPROVEMENT: gbak now returns a non-zero result code when restore fails on creating and activating a deferred user index.
  • IMPROVEMENT: Implicit conversion between Boolean and string is now done automatically when a string for 'true' or 'false' is used as a value in an expression. Case-insensitive. Not valid when used with a Boolean operator—IS, NOT, AND or OR; not available for UNKNOWN.
  • Firebird 3.0.1 Release: Bug Fixes:
  • Core Engine:
  • XpbBuilder was failing to create a new TPB.
  • LEFT JOIN would incorrectly push a UDF into the inner stream, causing wrong results.
  • A user-defined collation failed to work with BLOBs.
  • An assertion could occur in createDatabase() when doing the overwrite check.
  • A subquery in the insert list expression was ignoring changes made earlier in the same executable block.
  • A database could suffer partial corruption in the “use all space” (no-reserve) mode.
  • BUGCHECK 165 (cannot find tip page)
  • Cascade deletion in a self-referencing table could raise the error “no current record for fetch operation”.
  • A “Data type unknown” error was occurring with the LIST operation.
  • Random “invalid transaction handle” errors were being returned from the engine.
  • ON UPDATE CASCADE was failing for a self-referencing Foreign Key.
  • REGRESSION: Performance was degraded when bulk inserting into a table with indices.
  • Trying to encrypt a database in the absence of the the appropriate key could corrupt it.
  • A small memory leak could occur when an empty result set was returned.
  • Granting of privileges to views was broken.
  • Parameters with multi-byte character sets were being allowed to exceed the length limit for VARCHAR fields.
  • Expression index could become inconsistent if CREATE INDEX was interrupted after b-tree creation but before committing.
  • Nested OR conditions could lead to incorrest results.
  • Consistency between roles and privileges in GRANT syntax needed improving in accordance with the SQL standard.
  • An attempt to execute a SELECT statement using isc_dsql_execute_immediate() would produce the wrong error message.
  • Affected rows were not being counted for some update operations with views.
  • IN/ANY/ALL predicates could cause sub-optimal execution (late filtering) of joins.
  • Unaligned memory access in MET_format() would cause segfault on big-endian machines.
  • 32-bit locks on big-endian systems would lead to deadlock.
  • EXECUTE STATEMENT would throw a BLR error if the number of output parameters exceeded 256.
  • An incorrect result set (missing records) could be returned by an ORDER plan query navigating on a descending index.
  • Authentication was ending with first plug-in that had the user but would fail there, instead of continuing with the next plug-in.
  • SELECT WITH LOCK could raise unexpected update conflict errors under concurrent load.
  • A database could get decrypted after changing a couple of bytes in the database header without 'agreement' from the crypt plug-in.
  • POST_EVENT was not working with the Fb 3.0 server and client.
  • The operator IS exhibited a precedence problem.
  • REGRESSION: line/column numbering in error messages were being garbled if alias.name syntax was used in the offending statement.
  • The error “no current record to fetch” was thrown if some record was to be deleted both by the statement itself and by some trigger fired during statement
  • An expression index could be created while inserts into the table were in progress.
  • Server Crashes:
  • Access violation from certain UDFs would cause the server to crash.
  • API/Remote Interface:
  • Race conditions could arise when initializing wire compression.
  • A network protocol error was exhibited when performing a callback to a client for the database crypt key.
  • Some SPB parameters were failing in FB 3.0.
  • Transaction id tags for the Services API did not support new 48-bit transaction ids.
  • The Services API would not work with non-ASCII database names.
  • Utilities:
  • fbsvcmgr was not producing any error when it attempted to shut down a database without a specified timeout (prp_force_shutdown N).
  • Restore could hang if the database contained more than 4 billion records.
  • Validation could read after the end-of-file when operating on a multi-file database.
  • The BLOBVIEW command was causing isql to hang.
  • isql would leak memory when SHOW GRANTS was used on a new, empty database.
  • isql -[e]X[tract_metadata] output was omitting double quotes for the COLLATE clause of a CREATE DOMAIN statement when was for any non-ascii character set.
  • isql -[e]X[tract_metadata] was not exporting explicitly defined names for NOT NULL constraints for Dialect 3 databases.
  • isql -[e]X[tract_metadata] could crash while exporting an exception with message text length longer than 127 bytes.
  • isql -[e]X[tract_metadata] could generate invalid GRANT USAGE statements for domains.
  • Monitoring and Trace:
  • A string truncation error would occur while selecting from the MON$ tables if some user-defined context variable was longer than 255 bytes.
  • A trace session could fully utilize a single CPU core.
  • nBackup:
  • A database located on a raw device could not be unlocked from an nBackup-locked state.
  • Builds:
  • Databases created during the process of the Windows builds were owned by a Windows administrator, not SYSDBA.
  • Firebird failed to build with USE_VALGRIND

New in Firebird 3.0.0.32483_2 (Apr 19, 2016)

  • The primary goals for Firebird 3.0 were to unify the server architecture and to improve support for SMP and multiple-core hardware platforms. Parallel objectives were to improve threading of engine processes and the options for sharing page cache across thread and connection boundaries.
  • Alongside these aims came new strategies to improve performance, query optimization, monitoring and scalability and to address the demand for more security options. A number of popular features were introduced into the SQL language, including the long-awaited support for the Boolean data type and the associated logical predications.
  • BUGS FIXED:
  • Core Engine:
  • An assertion would occur in the cloop dispatcher when trying to save exception information in the status interface.
  • Failure to find a record on re-fetch would produce inconsistent effects on subsequent statement execution.
  • Unique key violation on a BOOLEAN column was returning an erroneous message.
  • HAVING COUNT(*) NOT IN ( ) would erroneously exclude a record from the outer result set. ( represents a result set without nulls)
  • It was possible to create a unique index on non-unique data.
  • Regression: the engine could throw transliteration errors when running from a non-ASCII system path.
  • The server could go into an infinite loop when data was being sent from a client to the server in small packets.
  • Regression: LEFT JOIN was incorrectly pushing COALESCE into the inner stream, causing wrong results.
  • CREATE TRIGGER was failing with the error "Ambiguous field name between table B and table A".
  • Join order was sub-optimal if one table had a selective predicate and MIN was calculated for the other one.
  • Deadlock could occur when a database was being encrypted or decrypted under high parallel load.
  • ALTER SEQUENCE RESTART WITH was failing to change the initial value.
  • Minor regression: wrong error message was being returned on an attempt to compile a view with both a subquery and the WITH CHECK OPTION clause in its definition—an illegal combination.
  • The optimizer could avoid using an expression index if the query was running in a different connection character set to the one that was in effect when the index was created.
  • Internal Firebird consistency check (cannot find tip page (165), file: tra.cpp line: 2375) would occur if too many transactions were created for one connection to a read-only database. This was a very old bug, dating back to InterBase 6.
  • Server Crashes:
  • Regression: The server would crash when aggregate functions were used together with the NOT IN predicate.
  • Utilities:
  • gbak: gbak restore could fail when there was some SQL function accessing a table while the switch -O(NE_AT_A_TIME) was in use.
  • gfix: An attempt to set the number of page buffers to a non-supported value would return the wrong error message.
  • isql: An invalid COMPUTED BY definition was being generated by the 'extract metadata' operation.
  • Monitoring: Database-level statistics (MON$STAT_GROUP = 0) could contain multiple rows under concurrent load.
  • User Management: The codes of operation for user management plug-ins were missing from the public API.
  • User Management: Users with the same name can co-exist in the security database if they are created by different plug-ins. However, tags or attributes for a user created using one plug-in were being displayed in the SEC$ virtual tables for the same-name user created by the other plug-in.
  • User Management: [CREATE OR] ALTER USER statement would fail if the PASSWORD parameter was present and was not specified immediately after the USER parameter.
  • Builds:
  • The build would fail if HAVE_MMAP was not defined.
  • Root rights were unnecessarily required to build a Linux package.
  • The samples of dbcrypt-related plug-ins contained references to internal files.

New in Firebird 2.5.5.26952-0 (Nov 19, 2015)

  • Bug fixes:
  • IMPROVEMENT: Improve validation and fixup of lost data pages
  • Casting DATE to string would break in Dialect 1 in the presence a domain with a CHECK constraint
  • A view or subquery with UNION would not use a computed index
  • IIF function was preventing the condition from being pushed into the union for better optimization
  • Predicate IS [NOT] DISTINCT FROM was not being pushed into unions/aggregates, resulting in sub-optimal plans
  • ALTER DOMAIN ... TO would allows the to be specified in the same pattern as domains generated by the system, i.e., matching to 'RDB$[[:DIGIT:]]*'
  • MERGE / HASH JOINs would produce incorrect results when VARCHAR join keys differed only by trailing spaces
  • The server could hang on simultaneous connection to the Services API and a database
  • An invalid internal BLR filter conversion was detected
  • Index corruption could occur while inserting data into a long-key-indexed field
  • Preparing a query with a PLAN clause in a CTE could crash the server
  • A memory leak was detected in Superserver
  • MERGE JOIN could be used for expressions involving RDB$DB_KEY
  • MERGE JOIN was not being used for more than two streams if they were joined via USING/NATURAL clauses
  • Timestamps could be cast to strings that were beyond the valid range for VARCHAR
  • The full text of the problem value was not being returned in the message “Problematic key value (attempting to insert duplicate in PK/UK)” when the length of the offending key was 127 characters or longer
  • ON CONNECT triggers would sometimes fail to execute
  • A request synchronization error could occur while building an expression index
  • Bugcheck 167 (invalid SEND request) could occur while working with a GTT from several attachments, using EXECUTE STATEMENT ... ON EXTERNAL and different roles
  • EXECUTE STATEMENT using BLOB parameters could result in an “Invalid BLOB ID” error
  • The error “invalid BLOB ID” could occur when retrieving MON$STATEMENTS.MON$SQL_TEXT using EXECUTE STATEMENT against an EXTERNAL DATA SOURCE and the argument db_connect was not specified
  • Deadlock could occur during attachment
  • The server could hang while chasing dead record versions.
  • CREATE TABLE would throw an error if a column was being defined with the character set DOS775
  • COUNT(DISTINCT ...) was too slow
  • Windows-Specific:
  • Online validation on Windows would fail if the dbname argument contained forward slash ('/') and a concurrent attachment existed that also used '/'
  • Embedded server on Windows could hang due to a synchronization problem involving artifact child processes that were not detectable by Firebird
  • The Control Panel applet Firebird2Control.cpl would crash in Windows 8

New in Firebird 3.0.0.31896-0 Beta 2 (Jul 31, 2015)

  • Unification of the Firebird executable is complete:
  • With the completion of true SMP support for Superserver, the Firebird core is now a unified library that supports a single ODS, loadable either as an embedded engine or by the “network listener” executable. Choice of server model is determined by settings for two new configuration parameters defining the locking
  • and cache models, respectively: SharedDatabase and SharedCache. They can be specified at either global level (in firebird.conf ) or "per database" (in databases.conf). By default, SharedDatabase = false and SharedCache = true, thus meaning SuperServer.
  • True SMP support for SuperServer:
  • In Superserver mode, the engine now makes use of multiple CPUs and cores when spawning connections
  • New, object-oriented C++ APIs:
  • Object-oriented C++ APIs enable external code routines to plug in and run safely inside Firebird engine space, including (but not limited to):
  • Encryption schemes for data
  • User authentication schemes, including secure key exchange
  • Eventually, plug-in support for stored procedures, triggers and functions written in Java, C++, Object-Pascal, etc.
  • Per-Database” Configuration:
  • Custom configuration at database level can now be achieved with formal entries in databases.conf formerly aliases.conf.
  • Multiple Security Databases:
  • Firebird now supports user access control via more than one security database on the server. Each database can be configured using the parameter SecurityDatabase in databases.conf to use a specific database other than the default security3.fdb. The user structures may even be defined within the user database itself.
  • Several New SQL Commands to Manage Users and Access:
  • Changes in architecture, stiffening of rules for security and data integrity, along with feature requests, have given rise to a raft of new SQL commands for managing users and their access to objects.
  • New Data Type Support:
  • A true BOOLEAN type (True/False/Unknown), complete with support for logical predicates, e.g UPDATE ATABLE. SET MYBOOL = (COLUMN1 IS DISTINCT FROM COLUMN2). IDENTITY type, spawning unique identifiers for the defined column from an internal generator
  • Support for SQL Packages
  • DDL Triggers:
  • Now, triggers can be written to execute when database objects are modified or deleted. A typical use is to block unauthorised users from performing these tasks.
  • Window' functions in DML:
  • A whole new series of analytical functions to work with multiple subsets in DML.
  • Statistical functions:
  • A suite of statistical functions returning values for a variety of variance, standard deviation and linear re-gression formulae.
  • Scrollable Cursors:
  • The query engine now supports bi-directional (“scrollable”) cursors, enabling both forward and backward navigation in PSQL and in DSQL with support from the API.
  • SQL:2008-Compliant OFFSET and FETCH Clauses:
  • Support implemented for SQL-2008-compliant OFFSET and FETCH clauses as an alternative for {FIRST and SKIP} or {ROWS and TO} clauses.
  • IPv6 Support:
  • Firebird 3 can use IPv6 connections on both client and server sides.
  • Validation Whilst Database is On-line:
  • On-line validation, first implemented in Firebird 2.5.4, has been ported forward to Firebird 3.0.

New in Firebird 2.5.4.26856-0 (Jul 31, 2015)

  • This sub-release of Firebird 2.5 adds one useful new feature and an improvement in the management of internal BLOBs:
  • From this sub-release forward, it is now possible to perform table and index validation whilst the database is on-line
  • (CORE-4671) : Internal BLOBs are released earlier, to free up memory and disk space

New in Firebird 2.5.3.26778-0 (Dec 5, 2014)

  • New context variables have been added to the SYSTEM namespace to retrieve more information about the current connection and current transaction.
  • The added variables: SYSTEM::CLIENT_PID and SYSTEM::CLIENT_PROCESS for the current connection, SYSTEM::LOCK_TIMEOUT and SYSTEM::READ_ONLY for the current transaction.
  • Some limits have increased:
  • The maximum number of connections on Windows for Superserver and Superclassic has been raised from 1024 to 2048 connections.
  • The maximum number of input parameters for external functions (UDFs) has increased to 15.
  • Error reporting improvements, including:
  • More details are now reported for “object in use” errors.
  • The relation name is now added to the text of validation constraint error messages, to help identify the error context.
  • Error reporting for index and constraint violations has been extended to include the problematic key value.
  • Physical backup (using ALTER DATABASE BEGIN/END BACKUP or the nBackup utility) was improved to speed up extension of the main database file when backup state changes from stalled to merge.
  • Contention for the allocation table lock while a database is in the stalled physical backup state has been reduced.
  • Faster file growth has been enabled on Linux systems that support fallocate().
  • Attachments no longer block others when the allocation table is being read for the first time.
  • Execution of a SET STATISTICS INDEX statement no longer blocks or slows down concurrent attachments.
  • The scan for limbo transactions at the end of a sweep has been improved.
  • Support for the UPDATE OR INSERT statement and the RETURNING clause have been implemented for Embedded SQL (ESQL).
  • Bug fixes:
  • Core Engine:
  • Expressions containing some built-in functions might not have been optimized well.
  • The engine could hang and block all attachments in an out-of-disk-space condition during physical backup.
  • Writes to nBackup's delta file were ignoring the Forced Writes database setting.
  • The global read/write lock (GlobalRWLock) could not downgrade EX lock to SH if readers were present.
  • Deadlock was possible when two data pages contained record fragments pointing to each other.
  • Sorting records were unnecessarily large.
  • Lookup (or scan) in a descending index could be very inefficient for some keys.
  • Error “Inappropriate self-reference of column” when using WITH CHECK OPTION with the EXTRACT() function.
  • “Resource temporarily unavailable” errors while registering events simultaneously.
  • The Guardian service could write garbage after the end of the message in the Event Log.
  • An access violation could occur in the Guardian at process shutdown.
  • Memory leak with TRIGGER ON TRANSACTION COMMIT.
  • A global temporary table (GTT) could refer to a permanent relation, which it should not be able to do.
  • The embedded engine could hang for 5 seconds while closing, with errors about timeout in shutdown process and invalid mutex placed in firebird.log.
  • An incorrect “token unknown” error was raised when an SQL string ended with a hex number literal.
  • Memory would leak during preparation of an EXECUTE BLOCK that used domains.
  • The error “context already in use (BLR error)” was raised when preparing a query with UNION.
  • Memory was leaking in fbembed.dll.
  • The error “invalid stream” could be raised in some cases while matching a computed index.
  • Sweep was blocking establishment of concurrent attachments in Superserver.
  • Race conditions could arise when auto-sweep was started.
  • An expression index might not be used for derived fields or view fields.
  • A COMPUTED BY field was being evaluated as NULL if used as an exception parameter directly.
  • EXECUTE BLOCK prepare was failing.
  • Optimization of OR predicates was poor when applied to unions.
  • Invalid “I/O error during write operation” entries would appear in the firebird.log when no such database error existed.
  • Automatic sweep could be run when there was no need for it.
  • Full outer join in derived table with COALESCE (or IIF) was not returning NULLs correctly.
  • Remote stack buffer overflow in the server
  • SQL Dialect was not being set in internal connections to the security database.
  • Memory was leaked when sorting records larger than 32 KB.
  • Optimization for stored DBKEYs was broken.
  • Bugcheck or database corruption could occur when attempting to store long, incompressible data into a table.
  • A failing recursive CTE would return the wrong error message.
  • Sometimes long-running operations could not be interrupted by asynchronous shutdown / cancellation requests.
  • The error message “index unexpectedly deleted” could appear in a database trigger ON COMMIT TRANSACTION.
  • Bad performance or slow response were exhibited when many concurrent sorts were being executed.
  • Predicate checking was sub-optimal while selecting from a view.
  • Invalid transaction counters could be reported in firebird.log during a sweep.
  • I/O error during GetFileSize operation for file XXXX
  • Bugcheck 291 (cannot find record back version) if a global temporary table (GTT) was modified concurrently with at least one read-committed read-only transaction.
  • Error “record disappeared (186), file: vio.cpp line: 408”, in company with CPU at 100 per cent (when bugcheckabort=1 and sweep starts at gap ~21000).
  • A false validation error could occur for large tables, viz., “Index x is corrupt (missing entries) in table ...”
  • Derived fields might not be optimized by use of an index.
  • Computed column was appearing in non-existent rows of a left-joined set.
  • Forced database shutdown did not work if a non-zero delay was specified.
  • UPDATE ... RETURNING ... would raise error -551 (no permission to update) for a column present only in the RETURNING clause.
  • “BLOB not found” error was being raised after creating or altering an invalid trigger.
  • “lock conversion denied” or “lock denied” error was being raised when contention was relatively high.
  • Writes to nBackup's delta file were ignoring the Forced Writes database setting.
  • An unnecessary index read could occur when using a strict inequality condition.
  • An error would be raised at database creation if the user had a non-ascii name.
  • A database which had active attachments could not be replaced from a gbak backup file even after the database was shut down.
  • Queries with DB_KEY were poorly optimized.
  • Improvements:
  • Physical backup (using ALTER DATABASE BEGIN/END BACKUP or the nBackup utility) was improved to speed up extension of the main database file when backup state changes from stalled to merge.
  • Fast file growth has been enabled on Linux systems that support fallocate().
  • Attachments no longer block others when the allocation table is being read for the first time.
  • Contention for the allocation table lock while a database is in the stalled physical backup state has been reduced.
  • More details are now reported for “object in use” errors.
  • The relation name is now added to the text of validation contraint error messages, to help identify the error context.
  • Execution of a SET STATISTICS INDEX statement no longer blocks or slows down concurrent attachments.
  • The scan for limbo transactions scan at the end of a sweep has been improved.
  • Error reporting for index and constraint violations has been extended to include the problematic key value.
  • New context variables have been added to the SYSTEM namespace to retrieve more information about the current connection and current transaction. The added variables: SYSTEM::CLIENT_PID and SYSTEM::CLIENT_PROCESS for the current connection, SYSTEM::LOCK_TIMEOUT and SYSTEM::READ_ONLY for the current transaction.
  • Support for the UPDATE OR INSERT statement has been implemented for Embedded SQL (ESQL).
  • Support for the RETURNING clause has been implemented for Embedded SQL (ESQL).
  • The maximum number of input parameters for external functions (UDFs) has been increased to 15.
  • Server Crashes:
  • The engine could crash when the trace config contained the line “connection_id=NN” and an attempt was made to connect to a non-existent database/alias.
  • The server would terminate abnormally when iscDatabaseInfo() was called with buffer size = 0.
  • The server could crash while sweeping a database.
  • Dropping a foreign key constraint on a global temporary table (GTT) would crash the server.
  • When encountering an oversized key, the server would crash instead of reporting the error “key size exceeds implementation restriction”.
  • The server could crash when executing a stored procedure called by a trigger that converts string to uppercase.
  • A segmentation fault could occur when the engine was shutting down inside a BLOB GET/PUT function that was invoked from a UDF.
  • The server would crash while converting an overscaled numeric to a string.
  • The server could crash during database shutdown.
  • Firebird would crash when trying to create a database in a restricted path.
  • The server could terminate or crash while shutting down a database with in-progress attachments.
  • The engine could crash when trace or audit was active.
  • The server could crash while unwinding changes in an autonomous transaction.
  • The server would crash when running a script that deleted attachments and moved the database offline.
  • The engine could leak memory and crash when a large number of autonomous transactions had been started and finished.
  • Stored Procedure/Trigger Language (PSQL):
  • DELETE WHERE CURRENT OF {cursor} was failing for tables with newly added fields.
  • Problem with creating a procedure that entailed concatenating text in the DOS864 character set.
  • In PSQL modules with declared cursors, the engine could assign a value to the wrong variable.
  • Comments for output parameters were not being preserved after altering procedures.
  • An error would be raised when compiling a procedure containing the statement IF (x = (SELECT ...))
  • User role was not being passed through the external EXECUTE STATEMENT call.
  • Parameterized EXECUTE STATEMENT calls could fail.
  • High memory usage was exhibited when PSQL code selected from a stored procedure that had modified some data.
  • International Language Support:
  • The Sharp-S character was treated incorrectly in the UNICODE_CI_AI collation.
  • Using COLLATE UNICODE_CI_AI in a non-indexed WHERE clause was extremely slow.
  • UNICODE collations would not work with ICU 49.
  • An exception would be raised when uppercasing a string containing lowercase y trema (code 0xFF in ISO8859_1).
  • Command-line Utilities:
  • gfix would crash when the description of a limbo transaction in RDB$TRANSACTIONS had a size larger than 1KB.
  • fbsvcmgr was failing to recognise sts_record_versions and other sts switches.
  • Memory would leak when doing a lot of iterations of fbsvcmgr with action_trace_start, _list and _stop.
  • gbak was unable to commit an index or primary key containing characters with the German umlaut. Switches -V and -Y were partially broken in V.2.5.2.
  • Using gsec, one could create but not delete a user with user name containing double quotes.
  • Error in qli when copying NULL blobs between databases.
  • isql was returning erroneous metadata from -extract. Specifically, it would omit the space between the data type and character set arguments of a PSQL variable definition, thus causing a syntax error in the output script.
  • Database Monitoring/Administration:
  • Fetch could not be subsequently interrupted via DELETE FROM MON$STATEMENTS.
  • DELETE FROM MON$STATEMENTS would not interrupt a statement that was engaged in a fairly long fetch.
  • Could not connect to database via TCP/IP after DELETE FROM MON$ATTACHMENTS had been issued on a different database on the same machine.
  • Trace/Audit:
  • The server could crash when attempting to trace activity on a database having a database-level trigger.
  • Wrong parameter order was exhibited in trace output.
  • Services Manager:
  • Race conditions could arise during destruction of a service.
  • Database replace through the Services API was failing.
  • Some issues with error messages were evident when restoring from a gbak backup using the Services API.
  • Windows-specific:
  • CURRENT_USER and MON$USER would raise an error for trusted authentication.
  • fbembed.dll would not load icuin30.dll from the same folder as itself.
  • The maximum number of connections on Windows for Superserver and Superclassic has been raised from 1024 to 2048 connections.

New in Firebird 2.5.2.26539-0 (Apr 10, 2013)

  • An important change was made to the implementation of the GEN_UUID() function to make it comply properly with the requirements of RFC-4122. For more information, refer to this topic.
  • A bug was corrected that caused faulty byte or character order in the results of the functions CHAR_TO_UUID and UUID_TO_CHAR on big-Endian platforms. This correction will impact code that called those functions on big-Endian hosts in Firebird 2.5 or 2.5.1.
  • Databases being upgraded from older Firebird versions (ODS 11.1 and lower) or v.2.5.0 are not affected by this regression.
  • As well as many more bug fixes accumulated over the months since v.2.5.1, this sub-release provides a few minor improvements, particularly of help to administrators. In summary:
  • Some welcome improvements were made to the Trace services, viz.,
  • Sessions can now be configured to log user and automatic sweep activity. Documentation for this option can be found on the Tracker ticket CORE-3656.
  • TRACE now produces statistics of actions that happen after a transaction has finished. See Tracker ticket CORE-3598.
  • TRACE now provides the ability to log errors that occur in runtime (lock conflicts, key violations, et al.). See Tracker ticket CORE-3539.
  • It is now possible to use the API to do a remote backup/restore.
  • See Back Up to or Restore from a Remote Backup File.
  • A note is now written into firebird.log when an automatic sweep is started.
  • Support was added for C preprocessor flags in the Firebird build system.

New in Firebird 2.5.1.26349-0 RC1 (Sep 12, 2011)

  • The SQLSTATE code has been made available as a PSQL context variable, for use in WHEN .. exception blocks, in the same manner as GDSCODE and SQLCODE
  • Now it is possible to write to global temporary tables in a read-only database
  • Diagnostics for internal trace errors were improved
  • The fbtracemgr utility will now do a periodic flush to output
  • Performance of gbak restore at the data insertion stages has improved
  • Conversions between BLOBs and other data types can now be effected in the API functions
  • The Services API now supports the “metadata-only” restore
  • A “silent install” switch has been implemented for make install on POSIX
  • The unused bytes of VARCHAR values in the message buffer are now set to zero
  • The actual record compression ratio is now estimated in the optimizer
  • The MON$STATEMENT_ID value now stays constant among monitoring snapshots
  • The SO_KEEPALIVE option on the client TCP socket will now be set, as a measure to guard against aggressive timing out of sockets by newer Windows systems
  • Lock Manager can now cancel waits that become interminable
  • A platform port of v.2.5.1 for HPPA has been done for both Linux and Alpha

New in Firebird 2.1.2.18118-0 (Apr 6, 2009)

  • Firebird 2.1.2 is a patch release addressing a large collection of bugs that have surfaced since the original v.2.1 a year ago and the v.2.1.1 sub-release of Summer 2008. This release contains no new functionality but particular attention should be paid to a change in the availability of several parameters in the database parameter buffer (DPB) to ordinary users. It will cause authority errors in applications where, in the past, ordinary users were wrongly given access to operations that must be restricted to SYSDBA and the database owner.
  • For Windows users, another important change helps to reduce the hassles involved in making access to the Microsoft C and C++ runtimes available to servers and clients. Documentation of the Windows installation (in the Installation and Migration document) has been updated and reorganised in an attempt to make it better applicable to later versions of Vista, XP and Server2003 with SP3 installed, and Server2008.