From 1f025b3f30f64cf98dc4920301c58de2503375ec Mon Sep 17 00:00:00 2001 From: pavel-zotov Date: Wed, 13 Dec 2023 13:42:27 +0300 Subject: [PATCH] Added/Updated tests\bugs\core_5726_test.py: Added 'SQLSTATE' in substitutions: runtime error must not be suppressed. Added 'combine_output = True' in order to see SQLSTATE if any error occurs. --- tests/bugs/core_5726_test.py | 75 ++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 41 deletions(-) diff --git a/tests/bugs/core_5726_test.py b/tests/bugs/core_5726_test.py index e5652daf..018447f7 100644 --- a/tests/bugs/core_5726_test.py +++ b/tests/bugs/core_5726_test.py @@ -5,74 +5,67 @@ ID: issue-5992 ISSUE: 5992 TITLE: Unclear error message when inserting value exceeding max of dec_fixed decimal DESCRIPTION: - FB40SS, build 4.0.0.1008: OK, 1.641s. - Previously used: - create table extdecimal( dec34_34 decimal(34, 34) ); - insert into extdecimal values(1); - -- and this raised following exception: - SQLCODE: -901 - Decimal float invalid operation. An indeterminant error occurred during an operation. - numeric value is out of range - ================================== - Since 30.10.2019 DDL was changed: - create table test(n numeric(38,38) ); - insert into test values( 1.70141183460469231731687303715884105727 ); -- must PASS - insert into test values( 1.70141183460469231731687303715884105727001 ); -- must FAIL. - Explanation: - 1.70141183460469231731687303715884105727 represents - 2^127-1 // 170141183460469231731687303715884105728-1 + FB40SS, build 4.0.0.1008: OK, 1.641s. + Previously used: + create table extdecimal( dec34_34 decimal(34, 34) ); + insert into extdecimal values(1); + -- and this raised following exception: + SQLCODE: -901 + Decimal float invalid operation. An indeterminant error occurred during an operation. + numeric value is out of range + ================================== + Since 30.10.2019 DDL was changed: + create table test(n numeric(38,38) ); + insert into test values( 1.70141183460469231731687303715884105727 ); -- must PASS + insert into test values( 1.70141183460469231731687303715884105727001 ); -- must FAIL. + Explanation: + 1.70141183460469231731687303715884105727 represents + 2^127-1 // 170141183460469231731687303715884105728-1 - Checked on: 4.0.0.1635 -NOTES: -[25.06.2020] - 4.0.0.2076: changed types in SQLDA from numeric to int128 // after discuss with Alex about CORE-6342. + Checked on: 4.0.0.1635 JIRA: CORE-5726 FBTEST: bugs.core_5726 +NOTES: + [25.06.2020] pzotov + 4.0.0.2076: type in SQLDA was changed from numeric to int128 + (adjusted output after discussion with Alex about CORE-6342). + [13.12.2023] pzotov + Added 'SQLSTATE' in substitutions: runtime error must not be filtered out by '?!(...)' pattern + ("negative lookahead assertion", see https://docs.python.org/3/library/re.html#regular-expression-syntax). + Added 'combine_output = True' in order to see SQLSTATE if any error occurs. """ import pytest from firebird.qa import * -init_script = """ - -- insert into test(n) values( - -- 1.70141183460469231731687303715); - -- insert into test(n) values(1.7014118346046923173168730371588410572700); +db = db_factory() +test_script = """ + set list on; recreate table test ( id integer generated always as identity primary key, n numeric(38,38) ); commit; -""" - -db = db_factory(sql_dialect=3, init=init_script) - -test_script = """ - set list on; insert into test(n) values( 1.70141183460469231731687303715884105727 ); insert into test(n) values( 1.70141183460469231731687303715884105727001 ); set sqlda_display on; select n as "max_precise_number" from test; """ -act = isql_act('db', test_script, substitutions=[('^((?!(sqltype|max_precise_number)).)*$', ''), - ('[ \t]+', ' '), ('.*alias.*', '')]) +act = isql_act('db', test_script, substitutions = [ ('^((?!(SQLSTATE|sqltype|max_precise_number)).)*$', ''), ('[ \t]+', ' '), ('.*alias.*', '') ] ) expected_stdout = """ - 01: sqltype: 32752 INT128 Nullable scale: -38 subtype: 1 len: 16 - max_precise_number 1.70141183460469231731687303715884105727 -""" - -expected_stderr = """ Statement failed, SQLSTATE = 22003 arithmetic exception, numeric overflow, or string truncation -numeric value is out of range + + 01: sqltype: 32752 INT128 Nullable scale: -38 subtype: 1 len: 16 + max_precise_number 1.70141183460469231731687303715884105727 """ @pytest.mark.version('>=4.0') def test_1(act: Action): act.expected_stdout = expected_stdout - act.expected_stderr = expected_stderr - act.execute() - assert (act.clean_stderr == act.clean_expected_stderr and - act.clean_stdout == act.clean_expected_stdout) + act.execute(combine_output = True) + assert act.clean_stdout == act.clean_expected_stdout