Jaybird 3.0.6 released

We are happy to announce the release of Jaybird 3.0.6.

This release is largely a bugfix release, but contains additional support for Firebird 4.

Jaybird 3.0.6 contains the following fixes and changes:

  • Fixed: Exceptions during fetch of cached result sets (holdable over commit, scrollable and metadata) prevented prepared statement reuse/re-execute with error “Statement state CURSOR_OPEN only allows next states [CLOSING, PREPARED, ERROR], received EXECUTING” (JDBC-531)
  • Improvement: Added FBManager.setDefaultCharacterSet to set default database character set during database creation (JDBC-541)
  • New feature: Support for Firebird 3 case sensitive user names (JDBC-549)
  • Fixed: Savepoints did not work in connection dialect 1 as savepoint names were always quoted (JDBC-556)
  • Changed: The DatabaseMetaData statement cache introduced in Jaybird 3 was unlimited, it is now limited to 12 prepared statements; the least recently used statement will be closed and removed when a new statement is added (JDBC-557)
  • Fixed: UPDATE OR INSERT with existing RETURNING clause handled incorrectly for generated keys (JDBC-566)
  • Fixed: Exceptions during initialization of result sets would not properly close the database cursor leading to error “Current statement state (CURSOR_OPEN) does not allow call to prepare” on reuse of the statement (or errors similar to described for JDBC-531 above). (JDBC-571)
  • New feature: boolean connection property ignoreProcedureType to disable usage of metadata for stored procedure types in CallableStatement When set to true>, call escapes and EXECUTE PROCEDURE will default to use EXECUTE PROCEDURE and not switch to SELECT for selectable stored procedures. (JDBC-576)
  • New feature: connection properties timeZoneBind and sessionTimeZone for limited support for Firebird 4 TIME(STAMP) WITH TIME ZONE types, and decfloatBind for limited support for Firebird 4 DECFLOAT types. (JDBC-538)
  • Fixed: Connection property defaultIsolation/isolation did not work through DriverManager, but only on DataSource implementations. (JDBC-584)

Jaybird 3.0 supports Firebird 2.0 and higher, on Java 7, 8 and 9 and higher. Basic Java 9 and higher compatibility is provided through the Java 8 version of the driver.

See also:

Jaybird 4.0.0-beta-1 available for testing

The first beta for Jaybird 4 is available for testing.

We’d really appreciate it if you take the time to test this version of Jaybird with your applications. Bug reports about undocumented changes in behavior are appreciated. Feedback can be sent to the Firebird-java mailing list or reported on the issue tracker http://tracker.firebirdsql.org/browse/JDBC.

Jaybird 4 is – compared to Jaybird 3 – an incremental release that builds on the foundations of Jaybird 3. The focus of this release has been on further improving JDBC support and adding support for the new data types and features of Firebird 4.

The main new features are:

  • Wire encryption support (backported to Jaybird 3.0.4)
  • Database encryption support (backported to Jaybird 3.0.4)
  • Authentication plugin improvements
  • Firebird 4 DECFLOAT support
  • Firebird 4 extended numeric precision support
  • Firebird 4 time zone support
  • JDBC RowId support
  • JDBC DatabaseMetaData.getPseudoColumns implemented
  • JDBC DatabaseMetaData.getVersionColumns implemented
  • Improved JDBC function escape support
  • New JDBC protocol prefix jdbc:firebird:
  • Generated keys support improvements

Jaybird 4.0.0-beta-1 is for testing purposes only, and not intended for production use.

See also:

How to track deadlocks in firebird

As you probably know, Firebird Conference 2019 will include the practical workshops, and the article “How to track deadlocks in Firebird” is one of the sneaks peeks of the workshop “All About Transactions”, which will be done by Vlad Khorsun, Firebird core developer, and Alexey Kovyazin from IBSurgeon.

To help developers investigate the update conflicts (deadlocks), Firebird puts into error messages the reference to the concurrent transaction – i.e., the transaction where the concurrent update is not yet committed. Together with Trace API, it gives us the ability to track both conflicting operations.

Let’s consider the practical steps on how to do it: read the article “How to track deadlocks in Firebird“.