Bugs Found

Strange error with text concatention UTF8+win1250

GitHub Issue: 8435 Affected versions: 3.0.12, 4.0.5, 5.0.1, 6.0 Initial

Bugs Fixed

Plan/Performance regression when using special construct for IN in FB5.x compared to FB3.x

GitHub Issue: 8109 Affected versions: 5.0.1, 6.0 Initial Fixed for: 5.0.2, 6.0 Alpha 1

The following query results in full table scan instead of using the dedicated indexes on the two fields in the IN clause

SELECT e.*
FROM Employees e
WHERE :SomeID IN (e.LeaderID, e.DispEmpID)

which as expected leads to big degradation in the performance compared to FB3.x. If we modify the query syntax to use:

e.LeaderID = :SomeID OR e.DispEmpID = :SomeID

the plan changes to:

PLAN (E INDEX (EMPLOYEESBYLEADERID, EMPLOYEESBYDISPEMPID))

and expectedly the performance is great in both versions of Firebird.

Here is а snippet of the table definition:

CREATE TABLE Employees(
EmpID BIGINT NOT NULL,

LeaderID BIGINT,
DispEmpID BIGINT,
....
CONSTRAINT PK_EmpID PRIMARY KEY (EmpID)
);

....
CREATE INDEX EmployeesByLeaderID ON Employees(LeaderID);
CREATE INDEX EmployeesByDispEmpID ON Employees(DispEmpID);
....

Fix incorrect maximum size when reading dbb parameter values in SHOW DATABASE

Pull Request: 8413 Affected versions: 3.0.11, 4.0.5, 5.0.1, 6.0 Initial Fixed for: 5.0.2, 6.0 Alpha 1

Incorrect maximum size occurs for isc_info_oldest_transaction, isc_info_oldest_active, isc_info_oldest_snapshot, isc_info_next_transaction and isc_info_limbo. This leads to an error if the value is greater than int. Also change maximum size for all parameter values, so we don't get the same error in future.

This bug also occurs in v3.0, v4.0 and v5.0. In v4.0 and v5.0 it can be easily cherry picked, but in v3.0 TraNumber is a signed type, so printf has to be changed.

Unstable error messages in services with trace enabled

GitHub Issue: 8430 Affected versions: 4.0.5, 5.0.2, 6.0 Initial Fixed for: 4.0.6, 5.0.3, 6.0 Alpha 1

Sometimes it reproduced with the following case:

fbsvcmgr service_mgr -user SYSDBA -action_backup -dbname employee -bkp_file /a/test_db_backup.fbk

Usually, only one error message appears (cannot open backup file in this case), but with trace enabled, a second error sometimes appears (-Exiting before completion due to errors in this case).

Do not allow run concurrent sweep instances

Pull Request: 8320 Fixed for: 5.0.3, 6.0 Alpha 1

Old code has a bug where if we already have a sweep instance running, and some one call sweep once more, allowSweepRun() will return false and we are gonna call clearSweepFlags(), that will reset sweep flags and release a sweep lock. This will open an opportunity to run a second sweep instance for both Super and Classic server.

Segfault when already destroyed callback interface is used

GitHub Issue: 8429 Affected versions: 4.0.5, 5.0.1, 6.0 Initial Fixed for: 4.0.6, 5.0.2, 6.0 Alpha 1

Segfault may be reproduced with multiple levels of EXECUTE STATEMENT calls with ExtConnPoolSize != 0.

Wrong result for MINVALUE/MAXVALUE with string arguments

GitHub Issue: 8429 Affected versions: 4.0.5, 5.0.2, 6.0 Initial Fixed for: 4.0.6, 5.0.3, 6.0 Alpha 1

Segmentation fault when running query with partition by and subquery

GitHub Issue: 8437 Affected versions: 4.0.5, 5.0.2, 6.0 Initial Fixed for: 4.0.6, 5.0.3, 6.0 Alpha 1

Windows installer for v5.0.2 has incorrect Readme.txt

GitHub Issue: 8448 Affected versions: 5.0.2 Fixed for: 5.0.3

Races when server is closed during forced database shutdown

GitHub Issue: 8449 Affected versions: 3.0.12, 4.0.5, 5.0.2, 6.0 Initial Fixed for: 3.0.13, 4.0.6, 5.0.3, 6.0 Alpha 1

Changes

New features/improvements

Send small blobs inline

Pull Request: 8318 Apply to: 5.0.3, 6.0 Alpha 1

The feature allows to send small blob contents in the same data stream as main resultset. This lowers number of roundtrips required to get blob data and significantly improves performance on high latency networks.

The blob metadata and data is send using new type of packet op_inline_blob and new structure P_INLINE_BLOB. The op_inline_blob packet is send before corresponding op_sql_response (in case of answer on op_execute2 or op_exec_immediate2), or op_fetch_response (answer on op_fetch). There could be as much op_inline_blob packets as number of blob fields in output format. NULL blobs and too big blobs are not sent. The blob send as a whole, i.e. current implementation doesn't support sending of part of blob. The reasons - attempt to not over-complicate the code and the fact that seek is not implemented for segmented blobs.

Current, initial, implementation send all blobs that total size is not greater than 16KB.

The open questions is what API changes is required to allow user to customize this process:

  • allow to enable and disable inline blob sending
  • allow to set inline blob size limit
  • decide on what level should be applicable settings above: per-attachment, per-statement, etc
  • decide default and maximum values for inline blob size limit.

Also, will good to have but not required:

  • allow to set BPB in advance
  • allow to enable blob in-lining on per-field basis, if output format contains many blob fields.

Improve code of class BePlusTree

Pull Request: 8433 Apply to: 4.0.6, 5.0.3, 6.0 Alpha 1

Maked it usable with debugger, removed a lot of casts and a few other misc improvements.

"alter domain" supporting collation change

GitHub Issue: 1627 Apply to: 6.0 Alpha 1

Avoid index scan for lower/upper bounds containing NULL keys

Pull Request: 8447 Apply to: 5.0.3, 6.0 Alpha 1

New feature/improvement requests

Like this post? Share on: TwitterFacebookEmail


Related Articles


Author

IBPhoenix

Published

Category

News

Tags