mirror of
https://github.com/FirebirdSQL/firebird-qa.git
synced 2025-01-22 13:33:07 +01:00
128 lines
3.5 KiB
Python
128 lines
3.5 KiB
Python
|
#coding:utf-8
|
||
|
|
||
|
"""
|
||
|
ID: issue-8249
|
||
|
ISSUE: https://github.com/FirebirdSQL/firebird/issues/8249
|
||
|
TITLE: CAST() ignores collation of target data type
|
||
|
NOTES:
|
||
|
[22.10.2024] pzotov
|
||
|
Commit related to this test (04.10.2024 13:13):
|
||
|
https://github.com/FirebirdSQL/firebird/commit/aa167e2b36122684796d7b34935b0340be6f5074
|
||
|
See also: gh_7748_test.py
|
||
|
|
||
|
Confirmed problem on 6.0.0.483: queries to view, function, SP and EB complete OK (rather than expectedly raise error).
|
||
|
Checked on 6.0.0.485 -- all OK. No output to STDOUT, all queries finish with errors.
|
||
|
"""
|
||
|
|
||
|
import pytest
|
||
|
from firebird.qa import *
|
||
|
|
||
|
db = db_factory()
|
||
|
|
||
|
test_script = """
|
||
|
set list on;
|
||
|
create view v_test_1 as
|
||
|
select cast('x' as varchar(10) character set utf8 collate missed_coll) as view_output from rdb$database
|
||
|
;
|
||
|
commit;
|
||
|
|
||
|
set term ^;
|
||
|
create procedure sp_test_1 returns(sp_output varchar(10) character set utf8) as
|
||
|
begin
|
||
|
sp_output = cast('x' as varchar(10) character set utf8 collate missed_coll);
|
||
|
suspend;
|
||
|
end
|
||
|
^
|
||
|
create procedure sp_test_2 returns(sp_output varchar(10) character set utf8) as
|
||
|
declare v_text varchar(10) character set utf8;
|
||
|
begin
|
||
|
v_text = cast('x' as varchar(10) character set utf8 collate missed_coll);
|
||
|
sp_output = v_text;
|
||
|
suspend;
|
||
|
end
|
||
|
^
|
||
|
create function fn_test_1 returns varchar(10) character set utf8 as
|
||
|
begin
|
||
|
return cast('x' as varchar(10) character set utf8 collate missed_coll);
|
||
|
end
|
||
|
^
|
||
|
set term ;^
|
||
|
commit;
|
||
|
|
||
|
select * from v_test_1;
|
||
|
select fn_test_1() as fn_output from rdb$database;
|
||
|
select * from sp_test_1;
|
||
|
|
||
|
set term ^;
|
||
|
execute block returns(eb_text varchar(10) character set utf8) as
|
||
|
begin
|
||
|
execute procedure sp_test_2 returning_values :eb_text;
|
||
|
suspend;
|
||
|
end
|
||
|
^
|
||
|
set term ;^
|
||
|
|
||
|
"""
|
||
|
|
||
|
act = isql_act('db', test_script, substitutions = [('[-]?At line \\d+.*', '')])
|
||
|
|
||
|
expected_stdout = """
|
||
|
Statement failed, SQLSTATE = 22021
|
||
|
unsuccessful metadata update
|
||
|
-CREATE VIEW V_TEST_1 failed
|
||
|
-Dynamic SQL Error
|
||
|
-SQL error code = -204
|
||
|
-COLLATION MISSED_COLL for CHARACTER SET UTF8 is not defined
|
||
|
|
||
|
Statement failed, SQLSTATE = 22021
|
||
|
unsuccessful metadata update
|
||
|
-CREATE PROCEDURE SP_TEST_1 failed
|
||
|
-Dynamic SQL Error
|
||
|
-SQL error code = -204
|
||
|
-COLLATION MISSED_COLL for CHARACTER SET UTF8 is not defined
|
||
|
|
||
|
Statement failed, SQLSTATE = 22021
|
||
|
unsuccessful metadata update
|
||
|
-CREATE PROCEDURE SP_TEST_2 failed
|
||
|
-Dynamic SQL Error
|
||
|
-SQL error code = -204
|
||
|
-COLLATION MISSED_COLL for CHARACTER SET UTF8 is not defined
|
||
|
|
||
|
Statement failed, SQLSTATE = 22021
|
||
|
unsuccessful metadata update
|
||
|
-CREATE FUNCTION FN_TEST_1 failed
|
||
|
-Dynamic SQL Error
|
||
|
-SQL error code = -204
|
||
|
-COLLATION MISSED_COLL for CHARACTER SET UTF8 is not defined
|
||
|
|
||
|
Statement failed, SQLSTATE = 42S02
|
||
|
Dynamic SQL Error
|
||
|
-SQL error code = -204
|
||
|
-Table unknown
|
||
|
-V_TEST_1
|
||
|
|
||
|
Statement failed, SQLSTATE = 39000
|
||
|
Dynamic SQL Error
|
||
|
-SQL error code = -804
|
||
|
-Function unknown
|
||
|
-FN_TEST_1
|
||
|
|
||
|
Statement failed, SQLSTATE = 42S02
|
||
|
Dynamic SQL Error
|
||
|
-SQL error code = -204
|
||
|
-Table unknown
|
||
|
-SP_TEST_1
|
||
|
|
||
|
Statement failed, SQLSTATE = 42000
|
||
|
Dynamic SQL Error
|
||
|
-SQL error code = -204
|
||
|
-Procedure unknown
|
||
|
-SP_TEST_2
|
||
|
"""
|
||
|
|
||
|
@pytest.mark.version('>=6.0')
|
||
|
def test_1(act: Action):
|
||
|
act.expected_stdout = expected_stdout
|
||
|
act.execute(combine_output = True)
|
||
|
assert act.clean_stdout == act.clean_expected_stdout
|