Compatability issues

<< Installation notes | Firebird 2.5.3 Release Notes | Platform ports >>

Compatability issues

Dmitry Yemanov

For migrating v.2.0.x or v.2.1.x databases to Firebird 2.5, a number of incompatibilities that are likely to affect existing databases or existing applications should be noted. It is not recommended that you begin a migration until you have resolved these.

Incompatibility with older clients: To enable the 32-bit tools to work correctly with new structures that enable statistics routines to work properly with a 64-bit server, it was necessary to introduce some new internal API functions (struct perf64 and perf64_xxx) and change isql and qli to use them. This means that the isql and qli programs in v.2.5 are not compatible with older Firebird clients.

For more information, see the topic Statistics now work properly with 64-bit values in the Engine chapter.

Effects of Unicode metadata

If you have not previously updated text objects within the metadata of your databases to be in character set UTF8, restoring a database until v.2.5 will fail with "malformed string" errors. To resolve this it is necessary to pay attention to the files in the /misc/upgrade/metadata directory of your installation and to use the new -fix_fss_data and -fix_fss_metadata switches in the gbak command line.

Configuration parameters removed

The deprecated configuration parameters OldParameterOrdering and CreateInternalWindow are no longer supported and have been removed from firebird.conf.

Two parameters that allowed tuning of the Lock Manager in previous versions are not required with the new Lock Manager implementation and have been removed. They are LockSemCount and LockSignal.

The parameter MaxFileSystemCache has been renamed to FileSystemCacheThreshold.

back to top of page

SQL language changes

It will be necessary to pay attention to some changes in the SQL language implementation.

Reserved words

While some new reserved keywords are introduced, generally the overall list of reserved words has been reduced dramatically by making Firebird's parser grammar allow most of the previously reserved non-standard keywords as non-reserved. The list of those still reserved, and of SQL standard keywords newly reserved, is available in the chapter Reserved words and changes.

Execution results

Some changes will now cause exceptions during run-time execution of queries, including those that are run during the execution of the gbak utility code (backups and restores).

Malformed string errors

Well-formedness checks are now performed on UNICODE_FSS strings and text blobs. If new or existing UNICODE_FSS is malformed, it will now cause exceptions at execution time.

Logic change in SET clause

Previously, when the SET clause of the UPDATE statement assigned new values to columns, the new value replaced the old value immediately. If the same column was assigned or assigned to more than once, the current value would be that of the assignment most recently done. In other words, previously, assignment order mattered.

To bring Firebird in line with the standard, from this version forward, only the original value of a column is accessible to any assignment in the SET clause.

For a period, it is possible to revert to the legacy behavior by setting the temporary parameter OldSetClauseSemantics in firebird.conf. This parameter will be deprecated and removed in future releases.

back to top of page


Be on the watch for the effects of the following changes to the Firebird command-line utilities.


Because v.2.5 maintains separate lock structures for each database on the server, fb_lock_print now requires a database path name in order to print the lock table. Include the new switch -d <path name> in the command line to specify the file system path to the database you wish to analyse.

Deprecated features with future impact: In anticipation of the dropping of the intrinsic function isc_ddl from the Firebird 3 code base, certain features currently available in the gdef and gpre tools are deprecated - meaning that, whilst they may work in v.2.5, they will fail in Firebird 3.

  • gdef will no longer be supported at all. Instead, isql should be used, with regular DDL commands.
  • For gpre pre-processing, replace all DDL operations with
         EXEC SQL 
         EXECUTE IMMEDIATE "..." 
  • In all custom applications, calls to isc_ddl must be replaced with SQL DDL statement requests.

back to top of page

API changes

Notice the following changes to the application programming interface (API) that is implemented in the client libraries.

Rejection of inconsistent TPB options

The API functions isc_start_transaction() and isc_start_multiple() will now reject combinations of transaction parameter buffer (TPB) items that do not "belong together".

For example, a non-zero wait timeout is inconsistent with the no wait option; and no record version is inconsistent with any transaction isolation mode other than ReadCommitted. Now, instead of making some arbitrary (and possibly incorrect) assumption about the inherent ambiguities, the engine will reject such combinations as invalid.

For more information, see the topic Transaction Diagnostics in the chapter Changes in the Firebird Engine.

Addition of SQL_NULL constant

New SQL_NULL constant was introduced to enable the predication OR ? IS NULL to be recognised and processed with the expected outcome and without engendering the Data type unknown exception. This affects how the XSQLVAR structures are populated for such queries. For information, refer to the topic SOME_COL = ? OR ? IS NULL predication in the DML chapter.

back to top of page

Security hardening

The following changes should be noted.

No SYSDBA auto-mapping (Windows)

In v.2.1, members of administrative Windows groups were mapped to SYSDBA by default. From v.2.5 forward, SYSDBA mapping is controlled on per-database basis using the new SQL command


For more details, refer to the chapter on Security.

Default authentication method (Windows)

In v.2.1, where support for Windows trusted authentication was introduced, the default authentication method applied was mixed, i.e., the DPB or SPB would accept either native Firebird logins or trusted user logins. Thus, the Authentication parameter in firebird.conf showed mixed as the default.

From v.2.5 forward, the default is native. To have mixed or trusted, it is now necessary to configure this parameter specifically.

Tracker reference CORE-2376.

back to top of page

Access path for services

In some previous Firebird versions, if a full server path was supplied as the database name argument for remote access to a service, it would appear to be valid if the SYSDBA password was the same on both the client and the server. Under these conditions, no exception would be thrown and access would succeed.

For example, the following syntax for a remote call to gbak would appear valid if the remote client was running a Firebird server that had the same SYSDBA password as the remote server:

 gbak -b -se dbhost:service_mgr dbhost:dbalias
   /var2/backups/mydb.fbk -user SYSDBA -password masterke

This anomaly was a bug that, unfortunately, some developers have long regarded as an undocumented feature. In v.2.5, this syntax will except under any condition. The correct syntax should be:

 gbak -b -se dbhost:service_mgr dbalias
   /var2/backups/mydb.fbk -user SYSDBA -password masterke

 gbak -b -se dbhost:service_mgr d:\databases\mydb.fdb
   x:\backups\mydb.fbk -user SYSDBA -password masterke

back to top of page

Known platform issues

Engine and other changes may have some platform-specific effects other than those noted generally. Known issues are listed below.


To make the new engine work properly under multi-threaded conditions we had to use Grand Central Dispatch, which was first released in MacOSX 10.6 (Snow Leopard). Thus, MacOSX users should be aware that Firebird 2.5 will run only on MacOSX 10.6 or higher versions.

Note: If you want to use an earlier version of OSX you will need to use earlier versions of Firebird.

back to top of page
<< Installation notes | Firebird 2.5.3 Release Notes | Platform ports >>