mirror of
https://github.com/FirebirdSQL/firebird-qa.git
synced 2025-01-22 13:33:07 +01:00
Added/Updated tests\bugs\core_6280_test.py: re-implemented using ISQL-launch. Removed old commented code. Confirmed crash on 3.0.6.33283. No problem on 3.0.6.33285. Checked on 6.0.0.195, 5.0.0.1305, 4.0.5.3049.
This commit is contained in:
parent
b05ba82808
commit
699b326682
@ -2,27 +2,32 @@
|
||||
|
||||
"""
|
||||
ID: issue-6522
|
||||
ISSUE: 6522
|
||||
TITLE: MERGE statement loses parameters in WHEN (NOT) MATCHED clause that will never
|
||||
be matched, crashes server in some situations
|
||||
ISSUE: https://github.com/FirebirdSQL/firebird/issues/6522
|
||||
TITLE: MERGE statement loses parameters in WHEN (NOT) MATCHED clause that will never be matched, crashes server in some situations
|
||||
DESCRIPTION:
|
||||
Confirmed crash on WI-V3.0.5.33220, WI-T4.0.0.1871 - but only when run MERGE statements with parameters from Python. NO crash when run it from ISQL.
|
||||
No crash on 4.0.0.1881, but message "No SQLDA for input values provided" will raise for any number of input parameters: 2 or 3.
|
||||
NOTES:
|
||||
[14.12.2021] pcisar
|
||||
It's impossible to reimplement it in the same way with new driver.
|
||||
PROBLEM:
|
||||
Original test used two parameter values where 3 parameters are expected, but
|
||||
new driver does not even allow that as it checks number of values with number of
|
||||
parameters - returned by iMessageMetadata.get_count().
|
||||
ALSO, as new driver uses OO API, it does not use SQLDA structures at all.
|
||||
[14.12.2021] pcisar
|
||||
It's impossible to reimplement it in the same way with new driver.
|
||||
PROBLEM:
|
||||
Original test used two parameter values where 3 parameters are expected, but
|
||||
new driver does not even allow that as it checks number of values with number of
|
||||
parameters - returned by iMessageMetadata.get_count().
|
||||
ALSO, as new driver uses OO API, it does not use SQLDA structures at all.
|
||||
|
||||
[29.12.2023] pzotov
|
||||
Problem can be reproduced if we run MERGE using ISQL utility with 'set sqlda_display on'.
|
||||
Example was provided by Mark:
|
||||
https://github.com/FirebirdSQL/firebird/issues/6522#issuecomment-826246877
|
||||
|
||||
Confirmed crash on 3.0.6.33283 (date of build: 15.04.2020).
|
||||
Checked on 3.0.6.33285 (16.04.2020) -- all fine.
|
||||
Checked on 6.0.0.195, 5.0.0.1305, 4.0.5.3049.
|
||||
JIRA: CORE-6280
|
||||
FBTEST: bugs.core_6280
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from firebird.qa import *
|
||||
from firebird.driver import DatabaseError
|
||||
|
||||
init_script = """
|
||||
recreate table t(i int not null primary key, j int);
|
||||
@ -30,65 +35,30 @@ init_script = """
|
||||
|
||||
db = db_factory(init=init_script)
|
||||
|
||||
act = python_act('db')
|
||||
test_script = """
|
||||
set sqlda_display on;
|
||||
merge into t using (select 1 x from rdb$database) on 1 = 1
|
||||
when matched then update set j = ?
|
||||
when matched and i = ? then delete
|
||||
when not matched then insert (i, j) values (1, ?);
|
||||
|
||||
expected_stdout = """
|
||||
Error while executing SQL statement:
|
||||
- SQLCODE: -902
|
||||
- Dynamic SQL Error
|
||||
- SQLDA error
|
||||
- No SQLDA for input values provided
|
||||
"""
|
||||
|
||||
@pytest.mark.skip("FIXME: see notes")
|
||||
act = isql_act('db', test_script, substitutions=[('^((?!sqltype:|SQLSTATE|[Ee]rror|SQLDA).)*$', ''), ('[ \t]+', ' ')])
|
||||
|
||||
expected_stdout = """
|
||||
01: sqltype: 496 LONG Nullable scale: 0 subtype: 0 len: 4
|
||||
02: sqltype: 496 LONG Nullable scale: 0 subtype: 0 len: 4
|
||||
03: sqltype: 496 LONG Nullable scale: 0 subtype: 0 len: 4
|
||||
|
||||
Statement failed, SQLSTATE = 07002
|
||||
Dynamic SQL Error
|
||||
-SQLDA error
|
||||
-No SQLDA for input values provided
|
||||
"""
|
||||
|
||||
@pytest.mark.version('>=3.0.6')
|
||||
def test_1(act: Action):
|
||||
with act.db.connect() as con:
|
||||
c = con.cursor()
|
||||
cmd = """
|
||||
merge into t
|
||||
using (select 1 x from rdb$database) on 1 = 1
|
||||
when matched then
|
||||
update set j = ?
|
||||
when matched and i = ? then
|
||||
delete
|
||||
when not matched then
|
||||
insert (i, j) values (1, ?)
|
||||
"""
|
||||
# PROBLEM:
|
||||
# Original test used two parameter values where 3 parameters are expected, but
|
||||
# new driver does not even allow that as it checks number of values with number of
|
||||
# parameters - returned by iMessageMetadata.get_count().
|
||||
# ALSO, as new driver uses OO API, it does not use SQLDA structures at all.
|
||||
#with pytest.raises(DatabaseError):
|
||||
#c.execute(cmd, [1, 2])
|
||||
# Next passes ok on v4.0.0.2496, but does it really tests the original issue?
|
||||
c.execute(cmd, [1, 2, 3])
|
||||
|
||||
# test_script_1
|
||||
#---
|
||||
#
|
||||
# cur=db_conn.cursor()
|
||||
# stm='''
|
||||
# merge into t
|
||||
# using (select 1 x from rdb$database) on 1 = 1
|
||||
# when matched then
|
||||
# update set j = ?
|
||||
# when matched and i = ? then
|
||||
# delete
|
||||
# when not matched then
|
||||
# insert (i, j) values (1, ?)
|
||||
# '''
|
||||
#
|
||||
# try:
|
||||
# cur.execute( stm ) (1,2,)
|
||||
# # cur.execute( stm ) (1,2,3,) -- also leads to "No SQLDA for input values provided"
|
||||
# except Exception as e:
|
||||
# print(e[0])
|
||||
# finally:
|
||||
# cur.close()
|
||||
# db_conn.close()
|
||||
#
|
||||
#
|
||||
#---
|
||||
|
||||
act.expected_stdout = expected_stdout
|
||||
act.execute(combine_output = True)
|
||||
assert act.clean_stdout == act.clean_expected_stdout
|
||||
|
Loading…
Reference in New Issue
Block a user