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;
The following list summarises the features and changes, with links to the chapters and topics where more detailed information can be found.
--with-fb
#7918 by Adriano dos Santos Fernandes
#7910 by Dmitry Yemanov
For more details, see [rnfb50-config-outer-join-conversion].
#7854 by Adriano dos Santos Fernandes, Vlad Khorsun
#7819 by Vlad Khorsun
RDB$GET_CONTEXT('SYSTEM', '*')
with other info from MON$ATTACHMENTS
#7818 by Vlad Khorsun
#7814 by Vlad Khorsun
SKIP LOCKED
implementation#7810 by Vlad Khorsun
For more details, see [rnfb50-dml-skip-locked].
#7755 by Vlad Khorsun
PLG$PROF_RECORD_SOURCES
table to 255 characters#7752 by Adriano dos Santos Fernandes
#7720 by Adriano dos Santos Fernandes
IN <list>
predicates#7707 by Dmitry Yemanov
For more details, see [rnfb50-dml-in].
#7692 by Vlad Khorsun
Allow tracing database events even if the trace/audit is configured using a symbolic link instead of a real database file path.
#7688 by Adriano dos Santos Fernandes
LEVEL
column to PLG$PROF_RECORD_SOURCES
and PLG$PROF_RECORD_SOURCE_STATS_VIEW
#7687 by Adriano dos Santos Fernandes
Column LEVEL
is added to the profiler record source tables/views.
It returns the actual indentation level that allows proper reconstruction of multi-line access path nodes.
FbVarChar::set
function for non null-terminated string#7685 by Adriano dos Santos Fernandes
#7682 by Vlad Khorsun
This allows utilities started via the Service Manager to use the server-side ParallelWorkers setting without a need to specify the number of workers explicitly.
#7680 by Vlad Khorsun
#7652 by Adriano dos Santos Fernandes
Make the profiler data aggregated at the statement level by default (with REQUEST_ID = 0
), thus making the flushing faster.
A detailed (non-aggregated) data may be requested explicitly by specifying the 'DETAILED_REQUESTS' value in the PLUGIN_OPTIONS
parameter of the RDB$PROFILER.START_SESSION
function.
DECFLOAT ROUND/TRAPS
settings#7642 by Alexander Peshkov
New context variables DECFLOAT_ROUND
and DECFLOAT_TRAPS
are added to the SYSTEM
namespace of the RDB$GET_CONTEXT
function.
They return the current settings of the corresponding session options.
-a
#7637 by Vlad Khorsun
Command-line switch -a
is no longer required on Windows to start the Firebird server as an application.
#7634 by Vlad Khorsun
Some modern CPUs may contain two sets of cores - Efficient (E) and Performance (P). By default Firebird runs on all available cores and that may cause performance degradation in CPU-bound tasks. Now, E-cores are excluded from the default affinity mask. If the AffinityMask configuration setting is used explicitly, please pay attention which types of cores are specified to be enabled.
#7576 by Mark Rotteveel
#7559 by Dmitry Yemanov
-parallel
in combination with gfix -icu
#7550 by Vlad Khorsun
gfix -icu
rebuilds indexes and thus can benefit from parallelization.
Now it’s allowed to use the -icu
and -parallel
switches together, to override the ParallelWorkers setting used by default.
#7542 by Vlad Khorsun
RDB$GET/SET_CONTEXT()
— enclosing in apostrophes or double quotes of a missed namespace/variable will make output more readable#7539 by Vlad Khorsun
#7536 by Vlad Khorsun
New column MON$PARALLEL_WORKERS INTEGER
was added into MON$ATTACHMENTS
table.
New variable PARALLEL_WORKERS
is now available in the SYSTEM
context of the RDB$GET_CONTEXT
function.
New tag fb_info_parallel_workers (value 149) is available in IAttachment::getInfo()
and isc_database_info()
API calls.
SHOW GRANTS
command#7506 by Artyom Ivanov
#7494 by Vlad Khorsun
Index scan algorithm has been improved to avoid unnecessary record reads for partial lookups in compound indices.
SHOW SYSTEM
command: provide list of functions belonging to system packages#7475 by Alexander Peshkov
#7469 by Adriano dos Santos Fernandes
#7466 by Dmitry Yemanov
Allows to trace parse/compile events for the stored modules, corresponding elapsed time and also plans for queries inside those PSQL modules.
SHOW DATABASE
command#7425 by Dmitry Yemanov
#7405 by Dmitry Yemanov
For more details, see [rnfb50-config-optimize-mode], [rnfb50-dml-select-optimize], and [rnfb50-msql-optimize-set].
#7213 by Vlad Khorsun
This improvement allows to synchronize Firebird processes across different Windows sessions.
COMMENT ON MAPPING … IS …
)#7046 by Alexander Peshkov
For more details, see [rnfb50-ddl-comment-mapping].
#7001 by Dmitry Yemanov
QUARTER
to EXTRACT
, FIRST_DAY
and LAST_DAY
functions#5959 by Adriano dos Santos Fernandes
For more details, see [rnfb50-dml-quarter].
#1783, #3374, #7447 by Vlad Khorsun
Such operations as logical backup/restore, sweeping and CREATE INDEX
statement execution can be executed in parallel by multiple threads, thus decreasing the total operation time.
See chapters [rnfb50-engine-parallel], [rnfb50-utils-gbak-parallel] and [rnfb50-utils-gfix-parallel] for more details.
#7257 by Dmitry Yemanov
The CREATE INDEX
DDL statement has been extended to support partial indices, i.e. an index may now declare a condition that defines the subset of records to be indexed.
SKIP LOCKED
clause#7350 by Adriano dos Santos Fernandes
New clause SKIP LOCKED
was introduced for statements SELECT WITH LOCK
, UPDATE
and DELETE
.
It allows to skip the already locked records while reading the table.
#7397 by Dmitry Yemanov
An ability to upgrade the database to the latest minor ODS version has been introduced, it does not require a backup/restore cycle.
#7144 by Adriano dos Santos Fernandes
A per-attachment cache of compiled SQL statements has been implemented.
#7086 by Adriano dos Santos Fernandes
A built-in ability to profile SQL and PSQL statements has been added, making it possible to measure execution time at different levels.
WHEN NOT MATCHED BY SOURCE
in the MERGE
statement#6681 by Adriano dos Santos Fernandes
The MERGE
statement has been extended to support the WHEN NOT MATCHED BY SOURCE
clause.
UNICODE_CHAR
and UNICODE_VAL
#6798 by Adriano dos Santos Fernandes
New built-in functions UNICODE_CHAR
and UNICODE_VAL
have been added to allow conversion between Unicode code point and character.
RDB$BLOB_UTIL
new system package#281 by Adriano dos Santos Fernandes
New system package RDB$BLOB_UTIL
has been added to allow various operations with BLOBs in the PSQL modules.
RETURNING
clause#6815 by Adriano dos Santos Fernandes
The RETURNING
clause, if used in DSQL queries, now allows multiple rows to be returned.
#4723 by Dmitry Yemanov
The built-in compression algorithm has been improved to allow denser compression of records.
#7441 by Dmitry Yemanov
Execution plan now contains more information about cursors.
Other improvements are briefly listed below, please follow the tracker references for more information.
#7411 by Alexander Peshkov
System procedures and packages are now shown by SHOW SYSTEM
.
#7399 by Adriano dos Santos Fernandes
#7382 by Adriano dos Santos Fernandes
#7331 by Dmitry Yemanov
#7293 by Adriano dos Santos Fernandes
#7284 by Adriano dos Santos Fernandes
#7169 by Adriano dos Santos Fernandes
#7165 by Alexander Peshkov
For more details, see [rnfb50-security-trace-ctx].
ResultSet.getInfo()
new API method#7083 by Dmitry Yemanov
#7051 by Dmitry Yemanov
MON$COMPILED_STATEMENTS
and also column MON$COMPILED_STATEMENT_ID
to both MON$STATEMENTS
and MON$CALL_STACK
tables#7050 by Adriano dos Santos Fernandes
SMALLINT
/ INT
/ BIGINT
/ INT128
) when argument is minimum value for this type#7025 by Alexander Peshkov
#6992 by Dmitry Yemanov
Statement.getInfo()
and ISQL's SET EXEC_PATH_DISPLAY BLR
#6910 by Adriano dos Santos Fernandes
For isql, see [rnfb50-utils-exec-path-blr].
SIMILAR TO
should use index when pattern starts with non-wildcard character (as LIKE
does)#6873 by Adriano dos Santos Fernandes
MON$SESSION_TIMEZONE
to the table MON$ATTACHMENTS
#6794 by Adriano dos Santos Fernandes
#6740 by Adriano dos Santos Fernandes
For more details, see [rnfb50-dml-parens-query].
#6713 by Adriano dos Santos Fernandes
#5589 by Adriano dos Santos Fernandes
For more details, see [rnfb50-dml-literals-char].
#5588 by Adriano dos Santos Fernandes
For more details, see [rnfb50-dml-literals-binary].
#4769 by Adriano dos Santos Fernandes
For more details, see [rnfb50-psql-subroutine-param-access].
WHERE
clause always evaluates to FALSE
#1708 by Dmitry Yemanov