mirror of
https://github.com/FirebirdSQL/firebird-qa.git
synced 2025-01-22 21:43:06 +01:00
Added/Updated tests\bugs\gh_8214_test.py: Checked on 5.0.2.1551, 6.0.0.515.
This commit is contained in:
parent
20af1b6410
commit
1370ed4824
441
tests/bugs/gh_8214_test.py
Normal file
441
tests/bugs/gh_8214_test.py
Normal file
@ -0,0 +1,441 @@
|
|||||||
|
#coding:utf-8
|
||||||
|
|
||||||
|
"""
|
||||||
|
ID: issue-8214
|
||||||
|
ISSUE: 8214
|
||||||
|
TITLE: Incorrect result of index list scan for a composite index, the second segment of which is a text field with COLLATE UNICODE_CI
|
||||||
|
DESCRIPTION:
|
||||||
|
Test adds check for:
|
||||||
|
* collation with attributes 'case insensitive accent insensitive';
|
||||||
|
* null values of some records (the must not appear in any query);
|
||||||
|
* non-ascii values;
|
||||||
|
* both asc and desc indices - results must be identical;
|
||||||
|
* miscelaneous predicates
|
||||||
|
NOTES:
|
||||||
|
[31.10.2024] pzotov
|
||||||
|
Confirmed bug on 5.0.2.1547.
|
||||||
|
Checked on 5.0.2.1551, 6.0.0.515.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from firebird.qa import *
|
||||||
|
|
||||||
|
db = db_factory(charset = 'utf8')
|
||||||
|
|
||||||
|
test_script = """
|
||||||
|
set bail on;
|
||||||
|
set list on;
|
||||||
|
|
||||||
|
create collation txt_coll_ci for utf8 from unicode case insensitive;
|
||||||
|
create collation txt_coll_ci_ai for utf8 from unicode case insensitive accent insensitive;
|
||||||
|
|
||||||
|
recreate table mans (
|
||||||
|
id bigint not null,
|
||||||
|
code_sex smallint not null,
|
||||||
|
name_1 varchar(50) collate txt_coll_ci,
|
||||||
|
name_2 varchar(50) collate txt_coll_ci_ai,
|
||||||
|
constraint pk_mans primary key(id)
|
||||||
|
);
|
||||||
|
|
||||||
|
commit;
|
||||||
|
insert into mans (id, code_sex, name_1, name_2) values (1, 1, 'BoB', 'BØb');
|
||||||
|
insert into mans (id, code_sex, name_1, name_2) values (2, 1, 'jOhN', 'jŐhŇ');
|
||||||
|
insert into mans (id, code_sex, name_1, name_2) values (3, 2, 'BArbArA', 'BÄŔBĄŕă');
|
||||||
|
insert into mans (id, code_sex, name_1, name_2) values (4, 2, 'aNNA', 'âŃŃÁ');
|
||||||
|
insert into mans (id, code_sex, name_1, name_2) values (5, 1, null, null);
|
||||||
|
insert into mans (id, code_sex, name_1, name_2) values (6, 2, null, null);
|
||||||
|
insert into mans (id, code_sex, name_1, name_2) values (7, 1, 'danIEL', 'ĐÁniel');
|
||||||
|
insert into mans (id, code_sex, name_1, name_2) values (8, 2, 'debora', 'ĐeborÁ');
|
||||||
|
commit;
|
||||||
|
|
||||||
|
create index mans_sex_name_1_asc on mans(code_sex, name_1);
|
||||||
|
create index mans_sex_name_2_asc on mans(code_sex, name_2);
|
||||||
|
|
||||||
|
create view v_test_1 as
|
||||||
|
select msg, id, name_1
|
||||||
|
from (
|
||||||
|
select 'chk-a' as msg, id, code_sex, name_1
|
||||||
|
from mans where code_sex between 1 and 2 and name_1 starts 'b'
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-b' as msg, id, code_sex, name_1
|
||||||
|
from mans where code_sex > 0 and code_sex < 3 and name_1 starts 'b'
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-c' as msg, id, code_sex, name_1
|
||||||
|
from mans where (code_sex =1 or code_sex =2) and name_1 starts 'b'
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-d' as msg, id, code_sex, name_1
|
||||||
|
from mans where code_sex in(1,2) and name_1 starts 'b'
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-e' as msg, id, code_sex, name_1
|
||||||
|
from mans where code_sex in(1,2) and name_1 like 'b%'
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-f' as msg, id, code_sex, name_1
|
||||||
|
from mans where code_sex in(1,2) and name_1 similar to 'b%'
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-g' as msg, id, code_sex, name_1
|
||||||
|
from mans where code_sex in(1,2) and name_1 in ('boB', 'barbarA')
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-h' as msg, id, code_sex, name_1
|
||||||
|
from mans where code_sex in(1,2) and (name_1 is not distinct from 'boB' or name_1 is not distinct from 'barbarA')
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-i' as msg, id, code_sex, name_1
|
||||||
|
from mans where code_sex in(1,2) and (name_1 >= 'D' and name_1 <= 'E')
|
||||||
|
)
|
||||||
|
order by msg, id
|
||||||
|
;
|
||||||
|
|
||||||
|
create view v_test_2 as
|
||||||
|
select msg, id, name_2
|
||||||
|
from (
|
||||||
|
select 'chk-a' as msg, id, code_sex, name_2
|
||||||
|
from mans where code_sex between 1 and 2 and name_2 starts 'b'
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-b' as msg, id, code_sex, name_2
|
||||||
|
from mans where code_sex > 0 and code_sex < 3 and name_2 starts 'b'
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-c' as msg, id, code_sex, name_2
|
||||||
|
from mans where (code_sex =1 or code_sex =2) and name_2 starts 'b'
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-d' as msg, id, code_sex, name_2
|
||||||
|
from mans where code_sex in(1,2) and name_2 starts 'b'
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-e' as msg, id, code_sex, name_2
|
||||||
|
from mans where code_sex in(1,2) and name_2 like 'b%'
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-f' as msg, id, code_sex, name_2
|
||||||
|
from mans where code_sex in(1,2) and name_2 similar to 'b%'
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-g' as msg, id, code_sex, name_2
|
||||||
|
from mans where code_sex in(1,2) and name_2 in ('boB', 'barbarA')
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-h' as msg, id, code_sex, name_2
|
||||||
|
from mans where code_sex in(1,2) and (name_2 is not distinct from 'boB' or name_2 is not distinct from 'barbarA')
|
||||||
|
UNION ALL
|
||||||
|
select 'chk-i' as msg, id, code_sex, name_2
|
||||||
|
from mans where code_sex in(1,2) and (name_2 >= 'D' and name_2 <= 'E')
|
||||||
|
)
|
||||||
|
order by msg, id
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
select * from v_test_1;
|
||||||
|
select * from v_test_2;
|
||||||
|
commit;
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
alter index mans_sex_name_1_asc inactive;
|
||||||
|
alter index mans_sex_name_2_asc inactive;
|
||||||
|
|
||||||
|
create descending index mans_sex_name_1_dec on mans(code_sex, name_1);
|
||||||
|
create descending index mans_sex_name_2_dec on mans(code_sex, name_2);
|
||||||
|
commit;
|
||||||
|
|
||||||
|
select * from v_test_1;
|
||||||
|
select * from v_test_2;
|
||||||
|
"""
|
||||||
|
|
||||||
|
act = isql_act('db', test_script, substitutions = [ ('[ \t]+',' ') ])
|
||||||
|
|
||||||
|
expected_stdout = """
|
||||||
|
MSG chk-a
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-a
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-b
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-b
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-c
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-c
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-d
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-d
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-e
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-e
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-f
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-f
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-g
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-g
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-h
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-h
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-i
|
||||||
|
ID 7
|
||||||
|
NAME_1 danIEL
|
||||||
|
|
||||||
|
MSG chk-i
|
||||||
|
ID 8
|
||||||
|
NAME_1 debora
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MSG chk-a
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-a
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-b
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-b
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-c
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-c
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-d
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-d
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-e
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-e
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-f
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-f
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-g
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-g
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-h
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-h
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-i
|
||||||
|
ID 7
|
||||||
|
NAME_2 ĐÁniel
|
||||||
|
|
||||||
|
MSG chk-i
|
||||||
|
ID 8
|
||||||
|
NAME_2 ĐeborÁ
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MSG chk-a
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-a
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-b
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-b
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-c
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-c
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-d
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-d
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-e
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-e
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-f
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-f
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-g
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-g
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-h
|
||||||
|
ID 1
|
||||||
|
NAME_1 BoB
|
||||||
|
|
||||||
|
MSG chk-h
|
||||||
|
ID 3
|
||||||
|
NAME_1 BArbArA
|
||||||
|
|
||||||
|
MSG chk-i
|
||||||
|
ID 7
|
||||||
|
NAME_1 danIEL
|
||||||
|
|
||||||
|
MSG chk-i
|
||||||
|
ID 8
|
||||||
|
NAME_1 debora
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MSG chk-a
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-a
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-b
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-b
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-c
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-c
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-d
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-d
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-e
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-e
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-f
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-f
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-g
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-g
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-h
|
||||||
|
ID 1
|
||||||
|
NAME_2 BØb
|
||||||
|
|
||||||
|
MSG chk-h
|
||||||
|
ID 3
|
||||||
|
NAME_2 BÄŔBĄŕă
|
||||||
|
|
||||||
|
MSG chk-i
|
||||||
|
ID 7
|
||||||
|
NAME_2 ĐÁniel
|
||||||
|
|
||||||
|
MSG chk-i
|
||||||
|
ID 8
|
||||||
|
NAME_2 ĐeborÁ
|
||||||
|
"""
|
||||||
|
|
||||||
|
@pytest.mark.version('>=5.0.2')
|
||||||
|
def test_1(act: Action):
|
||||||
|
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