Firebird is a relational database offering many ANSI SQL standard features that runs on Linux, Windows, and a variety of Unix platforms. Firebird offers excellent concurrency, high performance, and powerful language support for stored procedures and triggers.
Firebird is a fully featured and powerful RDBMS. It can handle databases from just a few KB to many Gigabytes with good performance and almost free of maintenance!
Below is a list of some of the Firebird's major features:
- Full support of Stored Procedures and Triggers
- Full ACID compliant transactions
- Referential Integrity
- Multi Generational Architecture
- Very small footprint
- Fully featured internal language for Stored Procedures and Triggers (PSQL)
- Support for External Functions (UDFs)
- Little or no need for specialized DBAs
- Almost no configuration needed
- Large user community
- Optional single file embedded version
- Dozens of third party tools
- Careful writes - fast recovery, no need for transaction logs!
- Many ways to access your database
- Native support for all major operating systems
- Incremental Backups
- 64bits builds available
- Full cursor implementation in PSQL
- Monitoring tables
- Connection and Transaction Triggers
- Temporary Tables
- IMPROVEMENT: The statement CREATE OR ALTER USER SYSDBA PASSWORD <password> can now be used to initialize an empty securityN.fdb security
- 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.
* Bug Fixex:
# 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 execution.
- 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.
- 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 <collation> clause of a CREATE DOMAIN statement when <collation> 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.
- A database located on a raw device could not be unlocked from an nBackup-locked state.
- Databases created during the process of the Windows builds were owned by a Windows administrator, not SYSDBA.
- Firebird failed to build with USE_VALGRIND
- A segfault could occur when op_que_events was used on a port that was not prepared for events processing.
- A segfault could occur if an attachment was closed while requests were still open.
- Incorrect use of the system call readlink().