From 1e08690886b6f814a3894af1c6da2ac5bb570b49 Mon Sep 17 00:00:00 2001 From: pavel-zotov Date: Thu, 12 Sep 2024 12:31:24 +0300 Subject: [PATCH] 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 --- tests/bugs/core_5118_test.py | 55 +++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/tests/bugs/core_5118_test.py b/tests/bugs/core_5118_test.py index baff0af6..d23cd9de 100644 --- a/tests/bugs/core_5118_test.py +++ b/tests/bugs/core_5118_test.py @@ -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 IN '. + 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 ". + 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