6
0
mirror of https://github.com/FirebirdSQL/firebird-qa.git synced 2025-01-23 14:03:06 +01:00
firebird-qa/tests/bugs/core_6166_test.py

99 lines
5.8 KiB
Python
Raw Normal View History

2021-04-26 20:07:00 +02:00
#coding:utf-8
2022-01-27 20:08:36 +01:00
"""
ID: issue-6414
ISSUE: 6414
TITLE: Problems with long object names (> 255 bytes)
DESCRIPTION:
We define several objects with non-ascii names of max allowed length (63 characters) and make check statements.
Result no matter, but these statements must finished without errors.
Then we extract metadata and add the same set of check statements to this sql script.
Applying of this script to empty (another) database must end also without any error.
2021-04-26 20:07:00 +02:00
2022-01-27 20:08:36 +01:00
Confirmed problem on 4.0.0.1633: ISQL crashed when performing script which contains DDL with non-ascii names
of max allowed len (63 characters).
JIRA: CORE-6166
FBTEST: bugs.core_6166
2022-01-27 20:08:36 +01:00
"""
2021-04-26 20:07:00 +02:00
2022-01-27 20:08:36 +01:00
import pytest
from firebird.qa import *
2021-04-26 20:07:00 +02:00
2022-01-27 20:08:36 +01:00
db = db_factory(charset='UTF8')
2021-12-14 20:56:34 +01:00
2022-01-27 20:08:36 +01:00
act = python_act('db')
2021-04-26 20:07:00 +02:00
2022-01-27 20:08:36 +01:00
expected_stdout = """
2021-12-14 20:56:34 +01:00
ПакетДляРешенияЛинейныхГиперболическихИТрансцендентныхУравнений
КоэффициентыЛинейныхГиперболическихИТрансцендентныхУравненийЦЫЧ UNIQUE INDEX ON КоэффициентыДляЛинейныхГиперболическихИТрансцендентныхУравнений(КоэффициентЦДляЛинейныхГиперболическихИТрансцендентныхУравнений, КоэффициентЫДляЛинейныхГиперболическихИТрансцендентныхУравнений, КоэффициентЧДляЛинейныхГиперболическихИТрансцендентныхУравнений)
МетодЗейделяДляЛинейныхГиперболическихИТрансцендентныхУравнений 123
МетодНьютонаДляЛинейныхГиперболическихИТрансцендентныхУравнений 456
"""
2021-04-26 20:07:00 +02:00
2021-12-14 20:56:34 +01:00
ddl_script = """
set term ^;
recreate package "ПакетДляРешенияЛинейныхГиперболическихИТрансцендентныхУравнений" as
begin
function "МетодЗейделяДляЛинейныхГиперболическихИТрансцендентныхУравнений"() returns int;
function "МетодНьютонаДляЛинейныхГиперболическихИТрансцендентныхУравнений"() returns int;
end
^
recreate package body "ПакетДляРешенияЛинейныхГиперболическихИТрансцендентныхУравнений" as
begin
function "МетодЗейделяДляЛинейныхГиперболическихИТрансцендентныхУравнений"() returns int as
begin
return 123;
end
function "МетодНьютонаДляЛинейныхГиперболическихИТрансцендентныхУравнений"() returns int as
begin
return 456;
end
2021-04-26 20:07:00 +02:00
2021-12-14 20:56:34 +01:00
end
^
set term ;^
commit;
create table "КоэффициентыДляЛинейныхГиперболическихИТрансцендентныхУравнений" (
"КоэффициентЦДляЛинейныхГиперболическихИТрансцендентныхУравнений" int
,"КоэффициентЫДляЛинейныхГиперболическихИТрансцендентныхУравнений" int
,"КоэффициентЧДляЛинейныхГиперболическихИТрансцендентныхУравнений" int
);
create unique index "КоэффициентыЛинейныхГиперболическихИТрансцендентныхУравненийЦЫЧ"
on "КоэффициентыДляЛинейныхГиперболическихИТрансцендентныхУравнений" (
"КоэффициентЦДляЛинейныхГиперболическихИТрансцендентныхУравнений"
,"КоэффициентЫДляЛинейныхГиперболическихИТрансцендентныхУравнений"
,"КоэффициентЧДляЛинейныхГиперболическихИТрансцендентныхУравнений"
);
commit;
"""
2021-04-26 20:07:00 +02:00
2021-12-14 20:56:34 +01:00
test_script = """
show package;
show index "КоэффициентыДляЛинейныхГиперболическихИТрансцендентныхУравнений";
set list on;
select "ПакетДляРешенияЛинейныхГиперболическихИТрансцендентныхУравнений"."МетодЗейделяДляЛинейныхГиперболическихИТрансцендентныхУравнений"() from rdb$database;
select "ПакетДляРешенияЛинейныхГиперболическихИТрансцендентныхУравнений"."МетодНьютонаДляЛинейныхГиперболическихИТрансцендентныхУравнений"() from rdb$database;
rollback;
"""
@pytest.mark.version('>=4.0')
2022-01-27 20:08:36 +01:00
def test_1(act: Action):
act.expected_stdout = expected_stdout
act.isql(switches=[], input=ddl_script + test_script, charset='utf8')
assert act.clean_stdout == act.clean_expected_stdout
2021-12-14 20:56:34 +01:00
# Extract metadata
2022-01-27 20:08:36 +01:00
act.reset()
act.isql(switches=['-x'], charset='utf8')
meta = act.stdout
2021-12-14 20:56:34 +01:00
# drop + recreate database
2022-01-27 20:08:36 +01:00
act.db.drop()
act.db.create(sql_dialect=3)
2021-12-14 20:56:34 +01:00
# Recereate metadata
2022-01-27 20:08:36 +01:00
act.reset()
act.isql(switches=[], input=meta, charset='utf8')
2021-12-14 20:56:34 +01:00
# Check 2
2022-01-27 20:08:36 +01:00
act.reset()
act.expected_stdout = expected_stdout
act.isql(switches=[], input=test_script, combine_output = True, charset='utf8')
2022-01-27 20:08:36 +01:00
assert act.clean_stdout == act.clean_expected_stdout