mirror of
https://github.com/FirebirdSQL/firebird-qa.git
synced 2025-01-22 13:33:07 +01:00
New metadata + cleanup
This commit is contained in:
parent
decd3ba022
commit
91781e9231
47
files/gtcs-window-func.sql
Normal file
47
files/gtcs-window-func.sql
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
recreate table persons (
|
||||||
|
id integer generated by default as identity primary key,
|
||||||
|
name varchar(15)
|
||||||
|
);
|
||||||
|
|
||||||
|
recreate table entries (
|
||||||
|
id integer generated by default as identity primary key,
|
||||||
|
person integer references persons,
|
||||||
|
dat date,
|
||||||
|
val numeric(10,2)
|
||||||
|
);
|
||||||
|
|
||||||
|
insert into persons (name) values ('Person 1');
|
||||||
|
insert into persons (name) values ('Person 2');
|
||||||
|
insert into persons (name) values ('Person 3');
|
||||||
|
insert into persons (name) values ('Person 4');
|
||||||
|
insert into persons (name) values ('Person 5');
|
||||||
|
|
||||||
|
insert into entries (person, dat, val) select id, date '2010-01-02' + id, id * 2 + 0.3 from persons;
|
||||||
|
insert into entries (person, dat, val) select id, date '2010-02-01' + id, id * 3 + 0.4 from persons;
|
||||||
|
insert into entries (person, dat, val) select id, date '2010-03-01' + id, id * 3 + 0.4 from persons;
|
||||||
|
insert into entries (person, dat, val) values (1, null, null);
|
||||||
|
commit;
|
||||||
|
|
||||||
|
-- select * from entries;
|
||||||
|
|
||||||
|
recreate view v1 (x1, x2, x3, x4, x5, x6, x7, x8) as
|
||||||
|
select
|
||||||
|
count(*) over (partition by p.id), count(e.val) over (partition by p.id),
|
||||||
|
min(e.val) over (partition by p.id), max(e.val) over (partition by p.id),
|
||||||
|
count(distinct e.val) over (partition by p.id), min(distinct e.val) over (partition by p.id),
|
||||||
|
max(distinct e.val) over (partition by p.id),
|
||||||
|
p.name
|
||||||
|
from entries e
|
||||||
|
join persons p
|
||||||
|
on p.id = e.person;
|
||||||
|
|
||||||
|
recreate view v2 as
|
||||||
|
select *
|
||||||
|
from entries;
|
||||||
|
|
||||||
|
recreate view v3 as
|
||||||
|
select v2.person, v2.val, p.name
|
||||||
|
from v2
|
||||||
|
join persons p
|
||||||
|
on p.id = v2.person;
|
||||||
|
commit;
|
@ -2,8 +2,10 @@
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
ID: dummy
|
ID: dummy
|
||||||
|
ISSUE:
|
||||||
TITLE: Dummy test
|
TITLE: Dummy test
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
JIRA:
|
||||||
FBTEST: bugs.core_0000
|
FBTEST: bugs.core_0000
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -6,6 +6,11 @@ ISSUE: 5137
|
|||||||
TITLE: Make message about missing password being always displayed as reply on attempt
|
TITLE: Make message about missing password being always displayed as reply on attempt
|
||||||
to issue CREATE new login without PASSWORD clause
|
to issue CREATE new login without PASSWORD clause
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
NOTES:
|
||||||
|
[04.02.2022] pcisar
|
||||||
|
Test fails with 3.0.8, because command
|
||||||
|
create or alter user u01 tags (password = 'foo');
|
||||||
|
does not produce any error.
|
||||||
JIRA: CORE-4841
|
JIRA: CORE-4841
|
||||||
FBTEST: bugs.core_4841
|
FBTEST: bugs.core_4841
|
||||||
"""
|
"""
|
||||||
@ -29,8 +34,6 @@ test_script = """
|
|||||||
|
|
||||||
act = isql_act('db', test_script, substitutions=[('[-]?Password', 'Password')])
|
act = isql_act('db', test_script, substitutions=[('[-]?Password', 'Password')])
|
||||||
|
|
||||||
# version: 3.0.8
|
|
||||||
|
|
||||||
expected_stderr = """
|
expected_stderr = """
|
||||||
Statement failed, SQLSTATE = 42000
|
Statement failed, SQLSTATE = 42000
|
||||||
unsuccessful metadata update
|
unsuccessful metadata update
|
||||||
@ -66,6 +69,7 @@ unsuccessful metadata update
|
|||||||
-Password must be specified when creating user
|
-Password must be specified when creating user
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@pytest.mark.skip("FIXME: see notes")
|
||||||
@pytest.mark.version('>=3.0.8')
|
@pytest.mark.version('>=3.0.8')
|
||||||
def test_1(act: Action):
|
def test_1(act: Action):
|
||||||
act.expected_stderr = expected_stderr
|
act.expected_stderr = expected_stderr
|
||||||
|
@ -5,6 +5,11 @@ ID: issue-5508
|
|||||||
ISSUE: 5508
|
ISSUE: 5508
|
||||||
TITLE: Allow to enforce IPv4 or IPv6 in URL-like connection strings
|
TITLE: Allow to enforce IPv4 or IPv6 in URL-like connection strings
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
NOTES:
|
||||||
|
[04.02.2022] pcisar
|
||||||
|
Test may fail with IPv6.
|
||||||
|
For example it fails on my Linux OpenSuSE Tumbleweed with regular setup (IPv6 should not be disabled).
|
||||||
|
Test should IMHO check IPv4/IPv6 availability on test host before runs inet6:// check.
|
||||||
JIRA: CORE-5229
|
JIRA: CORE-5229
|
||||||
FBTEST: bugs.core_5229
|
FBTEST: bugs.core_5229
|
||||||
"""
|
"""
|
||||||
@ -24,6 +29,7 @@ expected_stdout = """
|
|||||||
PROTOCOL_WHEN_CONNECT_BY_ES_EDS TCPv6
|
PROTOCOL_WHEN_CONNECT_BY_ES_EDS TCPv6
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@pytest.mark.skip("FIXME: see notes")
|
||||||
@pytest.mark.version('>=3.0.1')
|
@pytest.mark.version('>=3.0.1')
|
||||||
def test_1(act: Action):
|
def test_1(act: Action):
|
||||||
sql_chk = f"""
|
sql_chk = f"""
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-01
|
ID: derived-table-01
|
||||||
TITLE: Simple derived table
|
TITLE: Simple derived table
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-02
|
ID: derived-table-02
|
||||||
TITLE: Unnamed (no relation alias) derived table
|
TITLE: Unnamed (no relation alias) derived table
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.02
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-03
|
ID: derived-table-03
|
||||||
TITLE: Explicit column names for derived table
|
TITLE: Explicit column names for derived table
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.03
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-04
|
ID: derived-table-04
|
||||||
TITLE: Derived table column names must be unique
|
TITLE: Derived table column names must be unique
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.04
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-05
|
ID: derived-table-05
|
||||||
TITLE: Derived table column names must be unique
|
TITLE: Derived table column names must be unique
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.05
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-06
|
ID: derived-table-06
|
||||||
TITLE: Outer reference inside derived table to other relations in from clause is not allowed
|
TITLE: Outer reference inside derived table to other relations in from clause is not allowed
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.06
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-07
|
ID: derived-table-07
|
||||||
TITLE: Outer reference inside derived table to other relations in from clause is not allowed
|
TITLE: Outer reference inside derived table to other relations in from clause is not allowed
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.07
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-08
|
ID: derived-table-08
|
||||||
TITLE: Outer reference inside derived table to other relations in from clause is not allowed
|
TITLE: Outer reference inside derived table to other relations in from clause is not allowed
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.08
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-09
|
ID: derived-table-09
|
||||||
TITLE: Outer reference inside derived table to other relations in from clause is not allowed
|
TITLE: Outer reference inside derived table to other relations in from clause is not allowed
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.09
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-10
|
ID: derived-table-10
|
||||||
TITLE: Outer reference to upper scope-level is allowed
|
TITLE: Outer reference to upper scope-level is allowed
|
||||||
DESCRIPTION: Such as fields inside derived table part of sub-query.
|
DESCRIPTION: Such as fields inside derived table part of sub-query.
|
||||||
|
FBTEST: functional.arno.derived_tables.10
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-11
|
ID: derived-table-11
|
||||||
TITLE: Outer reference to upper scope-level is allowed
|
TITLE: Outer reference to upper scope-level is allowed
|
||||||
DESCRIPTION: Such as fields inside derived table part of sub-query (IN-predicate).
|
DESCRIPTION: Such as fields inside derived table part of sub-query (IN-predicate).
|
||||||
|
FBTEST: functional.arno.derived_tables.11
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-12
|
ID: derived-table-12
|
||||||
TITLE: Outer reference to upper scope-level is allowed
|
TITLE: Outer reference to upper scope-level is allowed
|
||||||
DESCRIPTION: Such as fields inside derived table part of sub-query (EXISTS).
|
DESCRIPTION: Such as fields inside derived table part of sub-query (EXISTS).
|
||||||
|
FBTEST: functional.arno.derived_tables.12
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-13
|
ID: derived-table-13
|
||||||
TITLE: DISTINCT inside derived table
|
TITLE: DISTINCT inside derived table
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.13
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-14
|
ID: derived-table-14
|
||||||
TITLE: FIRST / SKIP inside derived table
|
TITLE: FIRST / SKIP inside derived table
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.14
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-15
|
ID: derived-table-15
|
||||||
TITLE: UNION inside derived table
|
TITLE: UNION inside derived table
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.15
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-16
|
ID: derived-table-16
|
||||||
TITLE: Simple derived table with aggregate inside
|
TITLE: Simple derived table with aggregate inside
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.16
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-17
|
ID: derived-table-17
|
||||||
TITLE: Aggregate inside derived table
|
TITLE: Aggregate inside derived table
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.17
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-18
|
ID: derived-table-18
|
||||||
TITLE: Aggregate inside derived table
|
TITLE: Aggregate inside derived table
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.18
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-19
|
ID: derived-table-19
|
||||||
TITLE: Sub-select inside derived table
|
TITLE: Sub-select inside derived table
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.19
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-20
|
ID: derived-table-20
|
||||||
TITLE: Sub-select inside derived table
|
TITLE: Sub-select inside derived table
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
|
FBTEST: functional.arno.derived_tables.20
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -6,6 +6,7 @@ TITLE: Implicit derived table by IN predicate
|
|||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
IN predicate uses derived table internally and should ignore column-name checks
|
IN predicate uses derived table internally and should ignore column-name checks
|
||||||
(Aggregate functions are unnamed by default).
|
(Aggregate functions are unnamed by default).
|
||||||
|
FBTEST: functional.arno.derived_tables.21
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: derived-table-22
|
ID: derived-table-22
|
||||||
TITLE: Derived table outer reference (triggers)
|
TITLE: Derived table outer reference (triggers)
|
||||||
DESCRIPTION: NEW/OLD context variables should be available inside the derived table.
|
DESCRIPTION: NEW/OLD context variables should be available inside the derived table.
|
||||||
|
FBTEST: functional.arno.derived_tables.22
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Check if all 5 values are fetched with "equals" operator over first segment and
|
Check if all 5 values are fetched with "equals" operator over first segment and
|
||||||
"greater than or equal" operator on second segment. 2 values are bound to the upper
|
"greater than or equal" operator on second segment. 2 values are bound to the upper
|
||||||
segments and 1 value is bound to the lower segment.
|
segments and 1 value is bound to the lower segment.
|
||||||
|
FBTEST: functional.arno.indices.lower_bound_asc_02_segments_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Check if all 5 values are fetched with "equals" operator over first segment and
|
Check if all 5 values are fetched with "equals" operator over first segment and
|
||||||
"lower than or equal" operator on second segment. 2 values are bound to the lower
|
"lower than or equal" operator on second segment. 2 values are bound to the lower
|
||||||
segments and 1 value is bound to the upper segment.
|
segments and 1 value is bound to the upper segment.
|
||||||
|
FBTEST: functional.arno.indices.lower_bound_desc_02_segments_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: index.starting-with-01
|
ID: index.starting-with-01
|
||||||
TITLE: STARTING WITH charset NONE
|
TITLE: STARTING WITH charset NONE
|
||||||
DESCRIPTION: STARTING WITH - Select from table with 2 entries
|
DESCRIPTION: STARTING WITH - Select from table with 2 entries
|
||||||
|
FBTEST: functional.arno.indices.starting_with_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: index.starting-with-02
|
ID: index.starting-with-02
|
||||||
TITLE: STARTING WITH charset ISO8859_1
|
TITLE: STARTING WITH charset ISO8859_1
|
||||||
DESCRIPTION: STARTING WITH - Select from table with 2 entries
|
DESCRIPTION: STARTING WITH - Select from table with 2 entries
|
||||||
|
FBTEST: functional.arno.indices.starting_with_02
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -6,6 +6,7 @@ TITLE: TIMESTAMP in index with values below julian date
|
|||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
Datetime values below the julian date (firebird base date '1858-11-17') should be stored
|
Datetime values below the julian date (firebird base date '1858-11-17') should be stored
|
||||||
in correct order.
|
in correct order.
|
||||||
|
FBTEST: functional.arno.indices.timestamps_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -1,17 +1,10 @@
|
|||||||
#coding:utf-8
|
#coding:utf-8
|
||||||
#
|
|
||||||
# id: functional.arno.indices.upper_bound_asc_01_segments_01
|
|
||||||
# title: ASC single index upper bound
|
|
||||||
# decription: Check if all 15 values are fetched with "lower than or equal" operator.
|
|
||||||
# tracker_id:
|
|
||||||
# min_versions: []
|
|
||||||
# versions: 1.5
|
|
||||||
# qmid: functional.arno.indexes.upper_bound_asc_01_segments_01
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
ID: index.upper-bound-asc-1-segment-01
|
ID: index.upper-bound-asc-1-segment-01
|
||||||
TITLE: ASC single segment index upper bound
|
TITLE: ASC single segment index upper bound
|
||||||
DESCRIPTION: Check if all 15 values are fetched with "lower than or equal" operator.
|
DESCRIPTION: Check if all 15 values are fetched with "lower than or equal" operator.
|
||||||
|
FBTEST: functional.arno.indices.upper_bound_asc_01_segments_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: index.upper-bound-asc-1-segment-02
|
ID: index.upper-bound-asc-1-segment-02
|
||||||
TITLE: ASC single segment index upper bound
|
TITLE: ASC single segment index upper bound
|
||||||
DESCRIPTION: Check if all 32 values are fetched with "lower than" operator.
|
DESCRIPTION: Check if all 32 values are fetched with "lower than" operator.
|
||||||
|
FBTEST: functional.arno.indices.upper_bound_asc_01_segments_02
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: index.upper-bound-asc-1-segment-03
|
ID: index.upper-bound-asc-1-segment-03
|
||||||
TITLE: ASC single segment index upper bound
|
TITLE: ASC single segment index upper bound
|
||||||
DESCRIPTION: Check if all 5 values are fetched with "lower than or equal" operator.
|
DESCRIPTION: Check if all 5 values are fetched with "lower than or equal" operator.
|
||||||
|
FBTEST: functional.arno.indices.upper_bound_asc_01_segments_03
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: index.upper-bound-asc-1-segment-04
|
ID: index.upper-bound-asc-1-segment-04
|
||||||
TITLE: ASC single segment index upper bound
|
TITLE: ASC single segment index upper bound
|
||||||
DESCRIPTION: Check if all 5 values are fetched with "lower than or equal" operator.
|
DESCRIPTION: Check if all 5 values are fetched with "lower than or equal" operator.
|
||||||
|
FBTEST: functional.arno.indices.upper_bound_asc_01_segments_04
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Check if all 5 values are fetched with "equals" operator over first segment and
|
Check if all 5 values are fetched with "equals" operator over first segment and
|
||||||
"lower than or equal" operator on second segment. 2 values are bound to the upper
|
"lower than or equal" operator on second segment. 2 values are bound to the upper
|
||||||
segments and 1 value is bound to the lower segments.
|
segments and 1 value is bound to the lower segments.
|
||||||
|
FBTEST: functional.arno.indices.upper_bound_asc_02_segments_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: index.upper-bound-desc-1-segment-01
|
ID: index.upper-bound-desc-1-segment-01
|
||||||
TITLE: DESC single segment index upper bound
|
TITLE: DESC single segment index upper bound
|
||||||
DESCRIPTION: Check if all 15 values are fetched with "greater than or equal" operator.
|
DESCRIPTION: Check if all 15 values are fetched with "greater than or equal" operator.
|
||||||
|
FBTEST: functional.arno.indices.upper_bound_desc_01_segments_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: index.upper-bound-desc-1-segment-02
|
ID: index.upper-bound-desc-1-segment-02
|
||||||
TITLE: DESC single segment index upper bound
|
TITLE: DESC single segment index upper bound
|
||||||
DESCRIPTION: Check if all 15 values are fetched with "greater than" operator.
|
DESCRIPTION: Check if all 15 values are fetched with "greater than" operator.
|
||||||
|
FBTEST: functional.arno.indices.upper_bound_desc_01_segments_02
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Check if all 5 values are fetched with "equals" operator over first segment and
|
Check if all 5 values are fetched with "equals" operator over first segment and
|
||||||
"greater than or equal" operator on second segment. 2 values are bound to the upper
|
"greater than or equal" operator on second segment. 2 values are bound to the upper
|
||||||
segments and 1 value is bound to the lower segment.
|
segments and 1 value is bound to the lower segment.
|
||||||
|
FBTEST: functional.arno.indices.upper_bound_desc_02_segments_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -5,6 +5,7 @@ ID: index.upper-lower-bounds-01
|
|||||||
TITLE: Upper and lower bounds
|
TITLE: Upper and lower bounds
|
||||||
DESCRIPTION: Equal comparison should be prefered.
|
DESCRIPTION: Equal comparison should be prefered.
|
||||||
Lower and Upper bounds are bound by the same value.
|
Lower and Upper bounds are bound by the same value.
|
||||||
|
FBTEST: functional.arno.indices.upper_lower_bounds_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -1,12 +1,4 @@
|
|||||||
#coding:utf-8
|
#coding:utf-8
|
||||||
#
|
|
||||||
# id: functional.arno.indices.upper_lower_bounds_02
|
|
||||||
# title: upper and lower bounds
|
|
||||||
# decription: "Less or equal than" should be prefered above "less than" and "greater or equal than" above "greater than".
|
|
||||||
# tracker_id:
|
|
||||||
# min_versions: []
|
|
||||||
# versions: 3.0
|
|
||||||
# qmid: functional.arno.indexes.upper_lower_bounds_02
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
ID: index.upper-lower-bounds-02
|
ID: index.upper-lower-bounds-02
|
||||||
@ -14,6 +6,7 @@ TITLE: Upper and lower bounds
|
|||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
"Less or equal than" should be prefered above "less than" and "greater or equal than"
|
"Less or equal than" should be prefered above "less than" and "greater or equal than"
|
||||||
above "greater than".
|
above "greater than".
|
||||||
|
FBTEST: functional.arno.indices.upper_lower_bounds_02
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -1,12 +1,4 @@
|
|||||||
#coding:utf-8
|
#coding:utf-8
|
||||||
#
|
|
||||||
# id: functional.arno.optimizer.opt_aggregate_distribution_01
|
|
||||||
# title: Try to deliver HAVING CLAUSE conjunctions to the WHERE clause
|
|
||||||
# decription: Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions should be delivered to the where clause. The underlying aggregate stream could possible use it for a index and speed it up.
|
|
||||||
# tracker_id:
|
|
||||||
# min_versions: []
|
|
||||||
# versions: 3.0
|
|
||||||
# qmid: functional.arno.optimizer.opt_aggregate_distribution_01
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
ID: optimizer.aggregate-distribution-01
|
ID: optimizer.aggregate-distribution-01
|
||||||
@ -15,6 +7,7 @@ DESCRIPTION:
|
|||||||
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
||||||
should be delivered to the where clause. The underlying aggregate stream could possible
|
should be delivered to the where clause. The underlying aggregate stream could possible
|
||||||
use it for a index and speed it up.
|
use it for a index and speed it up.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_aggregate_distribution_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
||||||
should be delivered to the where clause. The underlying aggregate stream could possible
|
should be delivered to the where clause. The underlying aggregate stream could possible
|
||||||
use it for a index and speed it up.
|
use it for a index and speed it up.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_aggregate_distribution_02
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
||||||
should be delivered to the where clause. The underlying aggregate stream could possible
|
should be delivered to the where clause. The underlying aggregate stream could possible
|
||||||
use it for a index and speed it up.
|
use it for a index and speed it up.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_aggregate_distribution_03
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
||||||
should be delivered to the where clause. The underlying aggregate stream could possible
|
should be delivered to the where clause. The underlying aggregate stream could possible
|
||||||
use it for a index and speed it up.
|
use it for a index and speed it up.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_aggregate_distribution_04
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -8,6 +8,7 @@ DESCRIPTION:
|
|||||||
should be delivered to the where clause. The underlying aggregate stream could possible
|
should be delivered to the where clause. The underlying aggregate stream could possible
|
||||||
use it for a index and speed it up. VIEWs that contain aggregate queries always (as expected)
|
use it for a index and speed it up. VIEWs that contain aggregate queries always (as expected)
|
||||||
add WHERE clause (on that VIEW) inside the HAVING clause from the aggregate.
|
add WHERE clause (on that VIEW) inside the HAVING clause from the aggregate.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_aggregate_distribution_05
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -8,6 +8,7 @@ DESCRIPTION:
|
|||||||
should be delivered to the where clause. The underlying aggregate stream could possible
|
should be delivered to the where clause. The underlying aggregate stream could possible
|
||||||
use it for a index and speed it up. VIEWs that contain aggregate queries always (as expected)
|
use it for a index and speed it up. VIEWs that contain aggregate queries always (as expected)
|
||||||
add WHERE clause (on that VIEW) inside the HAVING clause from the aggregate.
|
add WHERE clause (on that VIEW) inside the HAVING clause from the aggregate.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_aggregate_distribution_06
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
||||||
should be delivered to the where clause. The underlying aggregate stream could possible
|
should be delivered to the where clause. The underlying aggregate stream could possible
|
||||||
use it for a index and speed it up.
|
use it for a index and speed it up.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_aggregate_distribution_07
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
||||||
should be delivered to the where clause. The underlying aggregate stream could possible
|
should be delivered to the where clause. The underlying aggregate stream could possible
|
||||||
use it for a index and speed it up.
|
use it for a index and speed it up.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_aggregate_distribution_08
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
||||||
should be delivered to the where clause. The underlying aggregate stream could possible
|
should be delivered to the where clause. The underlying aggregate stream could possible
|
||||||
use it for a index and speed it up.
|
use it for a index and speed it up.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_aggregate_distribution_09
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
||||||
should be delivered to the where clause. The underlying aggregate stream could possible
|
should be delivered to the where clause. The underlying aggregate stream could possible
|
||||||
use it for a index and speed it up.
|
use it for a index and speed it up.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_aggregate_distribution_10
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
||||||
should be delivered to the where clause. The underlying aggregate stream could possible
|
should be delivered to the where clause. The underlying aggregate stream could possible
|
||||||
use it for a index and speed it up.
|
use it for a index and speed it up.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_aggregate_distribution_11
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
||||||
should be delivered to the where clause. The underlying aggregate stream could possible
|
should be delivered to the where clause. The underlying aggregate stream could possible
|
||||||
use it for a index and speed it up.
|
use it for a index and speed it up.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_aggregate_distribution_12
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -1,12 +1,4 @@
|
|||||||
#coding:utf-8
|
#coding:utf-8
|
||||||
#
|
|
||||||
# id: functional.arno.optimizer.opt_aggregate_distribution_13
|
|
||||||
# title: Try to deliver HAVING CLAUSE conjunctions to the WHERE clause
|
|
||||||
# decription: Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions should be delivered to the where clause. The underlying aggregate stream could possible use it for a index and speed it up.
|
|
||||||
# tracker_id:
|
|
||||||
# min_versions: []
|
|
||||||
# versions: 3.0
|
|
||||||
# qmid: functional.arno.optimizer.opt_aggregate_distribution_13
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
ID: optimizer.aggregate-distribution-13
|
ID: optimizer.aggregate-distribution-13
|
||||||
@ -15,6 +7,7 @@ DESCRIPTION:
|
|||||||
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
Comparisons which doesn't contain (anywhere hiding in the expression) aggregate-functions
|
||||||
should be delivered to the where clause. The underlying aggregate stream could possible
|
should be delivered to the where clause. The underlying aggregate stream could possible
|
||||||
use it for a index and speed it up.
|
use it for a index and speed it up.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_aggregate_distribution_13
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -9,6 +9,7 @@ DESCRIPTION:
|
|||||||
should be delivered to the where clause. The underlying aggregate stream could possible
|
should be delivered to the where clause. The underlying aggregate stream could possible
|
||||||
use it for a index and speed it up.
|
use it for a index and speed it up.
|
||||||
JIRA: CORE-2417
|
JIRA: CORE-2417
|
||||||
|
FBTEST: functional.arno.optimizer.opt_aggregate_distribution_14
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -8,6 +8,7 @@ DESCRIPTION:
|
|||||||
Samples here are from #3431.
|
Samples here are from #3431.
|
||||||
Confirmed usage 'PLAN INDEX ...' in FB 2.0.0.12724
|
Confirmed usage 'PLAN INDEX ...' in FB 2.0.0.12724
|
||||||
JIRA: CORE-3051
|
JIRA: CORE-3051
|
||||||
|
FBTEST: functional.arno.optimizer.opt_avoid_index_usage
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
TableX FULL OUTER JOIN TableY with relation in the ON clause.
|
TableX FULL OUTER JOIN TableY with relation in the ON clause.
|
||||||
Three tables are used, where 1 table (RC) holds references to the two other tables (R and C).
|
Three tables are used, where 1 table (RC) holds references to the two other tables (R and C).
|
||||||
The two tables R and C contain both 1 value that isn't inside RC.
|
The two tables R and C contain both 1 value that isn't inside RC.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_full_join_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -12,6 +12,7 @@ NOTES:
|
|||||||
added 'rc.categoryid' to 'order by' list in order to have always stable sort result.
|
added 'rc.categoryid' to 'order by' list in order to have always stable sort result.
|
||||||
Mismatch with expected result due to different position of records with the same 'rc.relationid'
|
Mismatch with expected result due to different position of records with the same 'rc.relationid'
|
||||||
occured on 4.0.0.2298. CHecked on 4.0.0.2303.
|
occured on 4.0.0.2298. CHecked on 4.0.0.2303.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_full_join_02
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
TableX FULL OUTER JOIN TableY with relation in the ON clause.
|
TableX FULL OUTER JOIN TableY with relation in the ON clause.
|
||||||
Three tables are used, where 1 table (RC) holds references to the two other tables (R and C).
|
Three tables are used, where 1 table (RC) holds references to the two other tables (R and C).
|
||||||
The two tables R and C contain both 1 value that isn't inside RC.
|
The two tables R and C contain both 1 value that isn't inside RC.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_full_join_03
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -9,6 +9,7 @@ DESCRIPTION:
|
|||||||
The two tables R and C contain both 1 value that isn't inside RC.
|
The two tables R and C contain both 1 value that isn't inside RC.
|
||||||
=====
|
=====
|
||||||
NB: 'UNION ALL' is used here, so PLAN for 2.5 will be of TWO separate rows.
|
NB: 'UNION ALL' is used here, so PLAN for 2.5 will be of TWO separate rows.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_full_join_04
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -6,6 +6,7 @@ TITLE: INNER JOIN join order
|
|||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
With a INNER JOIN the table with the smallest expected result should be the first one in
|
With a INNER JOIN the table with the smallest expected result should be the first one in
|
||||||
process order.
|
process order.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -9,6 +9,7 @@ DESCRIPTION:
|
|||||||
should be the second smallest. Note that calculation is based on page-size. Thus for tables
|
should be the second smallest. Note that calculation is based on page-size. Thus for tables
|
||||||
which use the same nr. of data-pages, but have in reality different nr. of records
|
which use the same nr. of data-pages, but have in reality different nr. of records
|
||||||
the table N could be bigger as table N+1 in the order.
|
the table N could be bigger as table N+1 in the order.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_02
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -9,6 +9,7 @@ DESCRIPTION:
|
|||||||
result based on previous relation and do on till last relation.
|
result based on previous relation and do on till last relation.
|
||||||
|
|
||||||
Before 2.0, Firebird did stop checking order possibilties above 7 relations.
|
Before 2.0, Firebird did stop checking order possibilties above 7 relations.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_03
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: optimizer.inner-join-04
|
ID: optimizer.inner-join-04
|
||||||
TITLE: INNER JOIN join order LIKE and IS NULL
|
TITLE: INNER JOIN join order LIKE and IS NULL
|
||||||
DESCRIPTION: IS NULL should also be used for determing join order.
|
DESCRIPTION: IS NULL should also be used for determing join order.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_04
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: optimizer.inner-join-05
|
ID: optimizer.inner-join-05
|
||||||
TITLE: INNER JOIN join order LIKE and STARTING WITH
|
TITLE: INNER JOIN join order LIKE and STARTING WITH
|
||||||
DESCRIPTION: LIKE and STARTING WITH should also be used for determing join order.
|
DESCRIPTION: LIKE and STARTING WITH should also be used for determing join order.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_05
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -8,6 +8,7 @@ DESCRIPTION:
|
|||||||
process order. All inner joins are combined to 1 inner join, because then a order can be
|
process order. All inner joins are combined to 1 inner join, because then a order can be
|
||||||
decided between them. Relations from a VIEW can also be "merged" to the 1 inner join
|
decided between them. Relations from a VIEW can also be "merged" to the 1 inner join
|
||||||
(of course not with outer joins/unions/etc..)
|
(of course not with outer joins/unions/etc..)
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_06
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -8,6 +8,7 @@ DESCRIPTION:
|
|||||||
in process order. The next relation should be the next relation with expected smallest
|
in process order. The next relation should be the next relation with expected smallest
|
||||||
result based on previous relation and do on till last relation.
|
result based on previous relation and do on till last relation.
|
||||||
Old/Current limitation in Firebird does stop checking order possibilties above 7 relations.
|
Old/Current limitation in Firebird does stop checking order possibilties above 7 relations.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_07
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
ID: optimizer.inner-join-08
|
ID: optimizer.inner-join-08
|
||||||
TITLE: INNER JOIN join order and VIEW
|
TITLE: INNER JOIN join order and VIEW
|
||||||
DESCRIPTION: Try to merge the top INNER JOINs of VIEWS/TABLES together to 1 inner join.
|
DESCRIPTION: Try to merge the top INNER JOINs of VIEWS/TABLES together to 1 inner join.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_08
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -9,6 +9,7 @@ DESCRIPTION:
|
|||||||
result based on previous relation and do on till last relation.
|
result based on previous relation and do on till last relation.
|
||||||
|
|
||||||
Distribution is tested if it's conjunctions are distributed from WHERE clause.
|
Distribution is tested if it's conjunctions are distributed from WHERE clause.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_09
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -10,6 +10,7 @@ DESCRIPTION:
|
|||||||
|
|
||||||
It is expected that a unique index gives fewer results then non-unique index.
|
It is expected that a unique index gives fewer results then non-unique index.
|
||||||
Thus non-unique indexes will be at the end by determing join order.
|
Thus non-unique indexes will be at the end by determing join order.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_10
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
X JOIN Y ON (X.Field = Y.Field)
|
X JOIN Y ON (X.Field = Y.Field)
|
||||||
When no index can be used on a INNER JOIN and there's a relation setup between X and Y
|
When no index can be used on a INNER JOIN and there's a relation setup between X and Y
|
||||||
then a MERGE should be performed.
|
then a MERGE should be performed.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_merge_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
X JOIN Y ON (X.Field = Y.Field)
|
X JOIN Y ON (X.Field = Y.Field)
|
||||||
When no index can be used on a INNER JOIN and there's a relation setup between X and Y
|
When no index can be used on a INNER JOIN and there's a relation setup between X and Y
|
||||||
then a MERGE should be performed.
|
then a MERGE should be performed.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_merge_02
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
X JOIN Y ON (X.Field + (10 * 2) = Y.Field + 20)
|
X JOIN Y ON (X.Field + (10 * 2) = Y.Field + 20)
|
||||||
When no index can be used on a INNER JOIN and there's a relation setup between X and Y
|
When no index can be used on a INNER JOIN and there's a relation setup between X and Y
|
||||||
then a MERGE should be performed. Also when expressions are used.
|
then a MERGE should be performed. Also when expressions are used.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_merge_03
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
X JOIN Y ON (X.Field = Y.Field)
|
X JOIN Y ON (X.Field = Y.Field)
|
||||||
When no index can be used on a INNER JOIN and there's a relation setup between X and Y
|
When no index can be used on a INNER JOIN and there's a relation setup between X and Y
|
||||||
then a MERGE should be performed. An equality between NULLs should not be seen as true.
|
then a MERGE should be performed. An equality between NULLs should not be seen as true.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_merge_04
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
X JOIN Y ON (X.Field = Y.Field)
|
X JOIN Y ON (X.Field = Y.Field)
|
||||||
When no index can be used on a INNER JOIN and there's a relation setup between X and Y
|
When no index can be used on a INNER JOIN and there's a relation setup between X and Y
|
||||||
then a MERGE should be performed. Of course also when a VIEW is used.
|
then a MERGE should be performed. Of course also when a VIEW is used.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_merge_05
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
X JOIN Y ON (X.Field = Y.Field)
|
X JOIN Y ON (X.Field = Y.Field)
|
||||||
When no index can be used on a INNER JOIN and there's a relation setup between X and Y
|
When no index can be used on a INNER JOIN and there's a relation setup between X and Y
|
||||||
then a MERGE should be performed. Test with selectable Stored Procedure.
|
then a MERGE should be performed. Test with selectable Stored Procedure.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_inner_join_merge_06
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -6,6 +6,7 @@ TITLE: LEFT OUTER JOIN with no match at all
|
|||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
TableX LEFT OUTER JOIN TableY with no match, thus result should contain all NULLs for
|
TableX LEFT OUTER JOIN TableY with no match, thus result should contain all NULLs for
|
||||||
TableY references.
|
TableY references.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_left_join_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
TableX LEFT OUTER JOIN TableY with no match, thus result should contain all NULLs for TableY
|
TableX LEFT OUTER JOIN TableY with no match, thus result should contain all NULLs for TableY
|
||||||
references. WHERE clause contains IS NULL on a field which is also in a single segment index.
|
references. WHERE clause contains IS NULL on a field which is also in a single segment index.
|
||||||
The WHERE clause shouldn't be distributed to the joined table..
|
The WHERE clause shouldn't be distributed to the joined table..
|
||||||
|
FBTEST: functional.arno.optimizer.opt_left_join_02
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
TableX LEFT OUTER JOIN TableY with full match.
|
TableX LEFT OUTER JOIN TableY with full match.
|
||||||
ON clause contains (1 = 1) and WHERE clause contains relation between TableX and TableY.
|
ON clause contains (1 = 1) and WHERE clause contains relation between TableX and TableY.
|
||||||
The WHERE comparison should be distributed to TableY. Thus TableY should use the index.
|
The WHERE comparison should be distributed to TableY. Thus TableY should use the index.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_left_join_03
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
TableX LEFT OUTER JOIN TableY with full match. Every reference from TableY should have a value.
|
TableX LEFT OUTER JOIN TableY with full match. Every reference from TableY should have a value.
|
||||||
|
|
||||||
This test also tests if not the ON clause is distributed to the outer context TableX.
|
This test also tests if not the ON clause is distributed to the outer context TableX.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_left_join_04
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -10,6 +10,7 @@ DESCRIPTION:
|
|||||||
This test also tests if not the ON clause is distributed to the outer context TableX.
|
This test also tests if not the ON clause is distributed to the outer context TableX.
|
||||||
Also if not the extra created nodes (comparisons) from a equality node and a A # B
|
Also if not the extra created nodes (comparisons) from a equality node and a A # B
|
||||||
node (# =, <, <=, >=, >) are distributed to the outer context.
|
node (# =, <, <=, >=, >) are distributed to the outer context.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_left_join_05
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -10,6 +10,7 @@ DESCRIPTION:
|
|||||||
This test also tests if not the ON clause is distributed to the outer context TableX.
|
This test also tests if not the ON clause is distributed to the outer context TableX.
|
||||||
Also if not the extra created nodes (comparisons) from a equality node and a A # B
|
Also if not the extra created nodes (comparisons) from a equality node and a A # B
|
||||||
node (# =, <, <=, >=, >) are distributed to the outer context.
|
node (# =, <, <=, >=, >) are distributed to the outer context.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_left_join_06
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -6,6 +6,7 @@ TITLE: 4 JOINed tables with 1 LEFT OUTER JOIN
|
|||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
A INNER JOINed TableD to a LEFT JOINed TableC should be able to access the outer TableB
|
A INNER JOINed TableD to a LEFT JOINed TableC should be able to access the outer TableB
|
||||||
of TableC. Also TableB is INNER JOINed to TableA. Three indexes can and should be used here.
|
of TableC. Also TableB is INNER JOINed to TableA. Three indexes can and should be used here.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_left_join_07
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
TableX LEFT OUTER JOIN TableY with full match, but TableY results limited in ON clause.
|
TableX LEFT OUTER JOIN TableY with full match, but TableY results limited in ON clause.
|
||||||
Which should result in partial NULL results for TableY. Due the WHERE clause a index for
|
Which should result in partial NULL results for TableY. Due the WHERE clause a index for
|
||||||
TableX should be used.
|
TableX should be used.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_left_join_08
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
TableX LEFT OUTER JOIN TableY with full match, but TableY results limited in ON clause.
|
TableX LEFT OUTER JOIN TableY with full match, but TableY results limited in ON clause.
|
||||||
Which should result in partial NULL results for TableY, but these are not visible because
|
Which should result in partial NULL results for TableY, but these are not visible because
|
||||||
they are filtered in the WHERE clause by "greater or equal than" operator.
|
they are filtered in the WHERE clause by "greater or equal than" operator.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_left_join_09
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
TableX LEFT OUTER JOIN TableY with no match, thus result should contain all NULLs for TableY
|
TableX LEFT OUTER JOIN TableY with no match, thus result should contain all NULLs for TableY
|
||||||
references. WHERE clause contains IS NULL on a field which is also in a single segment index.
|
references. WHERE clause contains IS NULL on a field which is also in a single segment index.
|
||||||
The WHERE clause shouldn't be distributed to the joined table.
|
The WHERE clause shouldn't be distributed to the joined table.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_left_join_10
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
TableX LEFT OUTER JOIN TableY with no match, thus result should contain all NULLs for
|
TableX LEFT OUTER JOIN TableY with no match, thus result should contain all NULLs for
|
||||||
TableY references. WHERE clause contains STARTING WITH on a field which is also in
|
TableY references. WHERE clause contains STARTING WITH on a field which is also in
|
||||||
a single segment index. The WHERE clause should be distributed to the joined table.
|
a single segment index. The WHERE clause should be distributed to the joined table.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_left_join_11
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -6,6 +6,7 @@ TITLE: LEFT OUTER JOIN with distribution CASE
|
|||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
TableX LEFT OUTER JOIN TableY with partial match. WHERE clause contains CASE expression
|
TableX LEFT OUTER JOIN TableY with partial match. WHERE clause contains CASE expression
|
||||||
based on TableY. The WHERE clause should not be distributed to the joined table.
|
based on TableY. The WHERE clause should not be distributed to the joined table.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_left_join_12
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -5,6 +5,7 @@ ID: optimizer.left-join-13
|
|||||||
TITLE: LEFT OUTER JOIN VIEW with full match
|
TITLE: LEFT OUTER JOIN VIEW with full match
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
TableX LEFT OUTER JOIN ViewY with full match. Every reference from ViewY should have a value.
|
TableX LEFT OUTER JOIN ViewY with full match. Every reference from ViewY should have a value.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_left_join_13
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -5,6 +5,7 @@ ID: optimizer.mixed-joins-01
|
|||||||
TITLE: Mixed JOINS
|
TITLE: Mixed JOINS
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
Tables without indexes should be merged (when inner join) and those who can use a index, should use it.
|
Tables without indexes should be merged (when inner join) and those who can use a index, should use it.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_mixed_joins_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -5,6 +5,7 @@ ID: optimizer.mixed-joins-02
|
|||||||
TITLE: Mixed JOINS
|
TITLE: Mixed JOINS
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
Tables without indexes should be merged (when inner join) and those who can use a index, should use it.
|
Tables without indexes should be merged (when inner join) and those who can use a index, should use it.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_mixed_joins_02
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -5,6 +5,7 @@ ID: optimizer.mixed-joins-03
|
|||||||
TITLE: Mixed JOINS
|
TITLE: Mixed JOINS
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
Tables without indexes should be merged (when inner join) and those who can use a index, should use it.
|
Tables without indexes should be merged (when inner join) and those who can use a index, should use it.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_mixed_joins_03
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -5,6 +5,7 @@ ID: optimizer.mixed-joins-04
|
|||||||
TITLE: Mixed JOINS
|
TITLE: Mixed JOINS
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
Tables without indexes should be merged (when inner join) and those who can use a index, should use it.
|
Tables without indexes should be merged (when inner join) and those who can use a index, should use it.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_mixed_joins_04
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -5,6 +5,7 @@ ID: optimizer.mixed-joins-05
|
|||||||
TITLE: Mixed JOINS
|
TITLE: Mixed JOINS
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
Tables without indexes should be merged (when inner join) and those who can use a index, should use it.
|
Tables without indexes should be merged (when inner join) and those who can use a index, should use it.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_mixed_joins_05
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -5,6 +5,7 @@ ID: optimizer.mixed-joins-06
|
|||||||
TITLE: Mixed JOINS
|
TITLE: Mixed JOINS
|
||||||
DESCRIPTION:
|
DESCRIPTION:
|
||||||
Tables without indexes should be merged (when inner join) and those who can use a index, should use it.
|
Tables without indexes should be merged (when inner join) and those who can use a index, should use it.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_mixed_joins_06
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Check if it will select only the index with the unique index when equal operator is
|
Check if it will select only the index with the unique index when equal operator is
|
||||||
performed on all segments in index. Also prefer ASC index above DESC unique index.
|
performed on all segments in index. Also prefer ASC index above DESC unique index.
|
||||||
Unique index together with equals operator will always be the best index to choose.
|
Unique index together with equals operator will always be the best index to choose.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_multi_index_selection_01
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Check if it will select the indexes which can be used.
|
Check if it will select the indexes which can be used.
|
||||||
(Indexes with selectivity more than 10x the best are ignored)
|
(Indexes with selectivity more than 10x the best are ignored)
|
||||||
See SELECTIVITY_THRESHOLD_FACTOR in opt.cpp
|
See SELECTIVITY_THRESHOLD_FACTOR in opt.cpp
|
||||||
|
FBTEST: functional.arno.optimizer.opt_multi_index_selection_02
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -8,6 +8,7 @@ DESCRIPTION:
|
|||||||
Full-segment-matched indexes have higher priority as partial matched indexes.
|
Full-segment-matched indexes have higher priority as partial matched indexes.
|
||||||
(Indexes with selectivity more than 10x the best are ignored)
|
(Indexes with selectivity more than 10x the best are ignored)
|
||||||
See SELECTIVITY_THRESHOLD_FACTOR in opt.cpp
|
See SELECTIVITY_THRESHOLD_FACTOR in opt.cpp
|
||||||
|
FBTEST: functional.arno.optimizer.opt_multi_index_selection_03
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -9,6 +9,7 @@ DESCRIPTION:
|
|||||||
(up to two segments and only ASC) is made. The best here is using 2 indexes, except if
|
(up to two segments and only ASC) is made. The best here is using 2 indexes, except if
|
||||||
the index for the "greater or equal" operator is much worser as the index used for
|
the index for the "greater or equal" operator is much worser as the index used for
|
||||||
the other two operators.
|
the other two operators.
|
||||||
|
FBTEST: functional.arno.optimizer.opt_multi_index_selection_04
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -7,6 +7,7 @@ DESCRIPTION:
|
|||||||
Check if it will select the index with the best selectivity and with the biggest segment
|
Check if it will select the index with the best selectivity and with the biggest segment
|
||||||
match. 2 equals operators and 1 greater or equal operator and every index combination is
|
match. 2 equals operators and 1 greater or equal operator and every index combination is
|
||||||
made (only ASC). The best here is using 1 index (F2_F3_F1 or F3_F2_F1).
|
made (only ASC). The best here is using 1 index (F2_F3_F1 or F3_F2_F1).
|
||||||
|
FBTEST: functional.arno.optimizer.opt_multi_index_selection_05
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user