From 2306a0564863ad028110d0dea3b5e36d68b46cb1 Mon Sep 17 00:00:00 2001 From: pavel-zotov Date: Sun, 26 Nov 2023 01:08:34 +0300 Subject: [PATCH] Added/Updated tests\bugs\core_2920_test.py: Writing code requires more care since 6.0.0.150: ISQL does not allow specifying duplicate delimiters without any statements between them (two semicolon, two carets etc). --- tests/bugs/core_2920_test.py | 70 +++++++++++++++++------------------- 1 file changed, 32 insertions(+), 38 deletions(-) diff --git a/tests/bugs/core_2920_test.py b/tests/bugs/core_2920_test.py index 7df2035f..f1ce3dd2 100644 --- a/tests/bugs/core_2920_test.py +++ b/tests/bugs/core_2920_test.py @@ -7,62 +7,56 @@ TITLE: Incorrect execution of volatile SQL statements inside EXECUTE STATE DESCRIPTION: JIRA: CORE-2920 FBTEST: bugs.core_2920 +NOTES: + [25.11.2023] pzotov + Writing code requires more care since 6.0.0.150: ISQL does not allow specifying duplicate delimiters without any statements between them (two semicolon, two carets etc). """ import pytest from firebird.qa import * -init_script = """create table bugtest (id int); -insert into bugtest (id) values (123); -set term !!; -create procedure p_bugtest (in_id int) - returns (cnt int) -as - declare predicate varchar(1000); -begin - if (:in_id is null) then - predicate = ' ? is null'; - else - predicate = ' id = ?'; +init_script = """ + create table bugtest (id int); + insert into bugtest (id) values (123); + set term ^; + create procedure p_bugtest (in_id int) + returns (cnt int) + as + declare predicate varchar(1000); + begin + if (:in_id is null) then + predicate = ' ? is null'; + else + predicate = ' id = ?'; - execute statement ('select count(*) from bugtest where' || predicate) (:in_id) - into :cnt; -end!! -set term !!; -commit;""" + execute statement ('select count(*) from bugtest where' || predicate) (:in_id) + into :cnt; + end + ^ + set term ;^ + commit; +""" db = db_factory(charset='UTF8', init=init_script) -test_script = """execute procedure p_bugtest (123); --- cnt = 1 -execute procedure p_bugtest (null); --- cnt = 1 -execute procedure p_bugtest (123); --- cnt = 1 +test_script = """ + set list on; + execute procedure p_bugtest (123); + execute procedure p_bugtest (null); + execute procedure p_bugtest (123); """ act = isql_act('db', test_script) expected_stdout = """ - CNT -============ - 1 - - - CNT -============ - 1 - - - CNT -============ - 1 - + CNT 1 + CNT 1 + CNT 1 """ @pytest.mark.version('>=3.0') def test_1(act: Action): act.expected_stdout = expected_stdout - act.execute() + act.execute(combine_output = True) assert act.clean_stdout == act.clean_expected_stdout