6
0
mirror of https://github.com/FirebirdSQL/firebird-qa.git synced 2025-01-22 13:33:07 +01:00

Added/Updated tests\bugs\core_5118_test.py: Replaced test query so that it does not use index navigation ('plan order') but still checks indexed access. Requested by dimitr, letters with subj 'core_5118_test', since 11.09.2024 17:26. Checked on 6.0.0.452, 5.0.2.1493, 4.0.5.3136, 3.0.13.33789

This commit is contained in:
pavel-zotov 2024-09-12 12:31:24 +03:00
parent 9afb73b053
commit 1e08690886

View File

@ -7,6 +7,17 @@ TITLE: Indices on computed fields are broken after restore (all keys are N
DESCRIPTION:
JIRA: CORE-5118
FBTEST: bugs.core_5118
NOTES:
[12.09.2024] pzotov
Replaced test query so that it does not use index navigation ('plan order') but still checks indexed access.
Three separate queries with 'PLAN ... INDEX' are used instead of one with 'where <comp_field> IN <literals_list>'.
This is because of optimizer changed in 5.x and issues plan with only *one* occurrence of 'INDEX' for such cases.
See: https://github.com/FirebirdSQL/firebird/pull/7707 - "Better processing and optimization if IN <list>".
Commit: https://github.com/FirebirdSQL/firebird/commit/0493422c9f729e27be0112ab60f77e753fabcb5b, 04-sep-2023.
Requested by dimitr, letters with subj 'core_5118_test', since 11.09.2024 17:26.
Checked on 6.0.0.452, 5.0.2.1493, 4.0.5.3136, 3.0.13.33789
"""
import pytest
@ -32,40 +43,40 @@ init_script = """
commit;
"""
db = db_factory(init=init_script)
db = db_factory(init = init_script)
act = python_act('db')
act = python_act('db', substitutions = [ ('[ \t]+',' ') ])
expected_stdout = """
PLAN (TEST ORDER TEST_CONCAT_TEXT)
PLAN (TEST INDEX (TEST_CONCAT_TEXT))
CONCAT_TEXT nom1 prenom1
Records affected: 1
ID 1
X nom1
Y prenom1
CONCAT_TEXT nom1 prenom1
PLAN (TEST INDEX (TEST_CONCAT_TEXT))
CONCAT_TEXT nom2 prenom2
Records affected: 1
ID 2
X nom2
Y prenom2
CONCAT_TEXT nom2 prenom2
PLAN (TEST INDEX (TEST_CONCAT_TEXT))
CONCAT_TEXT nom3 prenom3
Records affected: 1
"""
ID 3
X nom3
Y prenom3
CONCAT_TEXT nom3 prenom3
Records affected: 3
test_sql = """
set list on;
set plan on;
set count on;
select concat_text from test where concat_text = 'nom1 prenom1';
select concat_text from test where concat_text = 'nom2 prenom2';
select concat_text from test where concat_text = 'nom3 prenom3';
"""
@pytest.mark.version('>=3.0')
def test_1(act: Action):
with act.connect_server() as srv:
backup = BytesIO()
srv.database.local_backup(database=act.db.db_path, backup_stream=backup)
srv.database.local_backup(database = act.db.db_path, backup_stream = backup)
backup.seek(0)
srv.database.local_restore(database=act.db.db_path, backup_stream=backup,
flags=SrvRestoreFlag.REPLACE)
srv.database.local_restore(database = act.db.db_path, backup_stream=backup, flags = SrvRestoreFlag.REPLACE)
act.expected_stdout = expected_stdout
act.isql(switches=['-q'],
input='set list on; set plan on; set count on; select * from test order by concat_text;')
act.isql(switches=['-q'], input = test_sql, combine_output = True)
assert act.clean_stdout == act.clean_expected_stdout