mirror of
https://github.com/FirebirdSQL/firebird-qa.git
synced 2025-02-02 02:40:42 +01:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
034b469851
Binary file not shown.
66
tests/bugs/gh_7488_test.py
Normal file
66
tests/bugs/gh_7488_test.py
Normal file
@ -0,0 +1,66 @@
|
||||
#coding:utf-8
|
||||
|
||||
"""
|
||||
ID: issue-7488
|
||||
ISSUE: 7488
|
||||
TITLE: Invalid real to string cast
|
||||
NOTES:
|
||||
[14.02.2023] pzotov
|
||||
Confirmed bug on 5.0.0.967; 4.0.3.2904
|
||||
Checked on intermediate builds 5.0.0.970; 4.0.3.2906
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from firebird.qa import *
|
||||
|
||||
db = db_factory()
|
||||
|
||||
test_script = """
|
||||
set list on;
|
||||
select x, cast(x as varchar(10)) s
|
||||
from
|
||||
(
|
||||
select 345.12e-2 x from rdb$database union all
|
||||
select 4512e-4 from rdb$database union all
|
||||
select 3451.2e-3 from rdb$database union all
|
||||
select 34.512e-1 from rdb$database union all
|
||||
select 3.4512e0 from rdb$database union all
|
||||
select 0.34512e1 from rdb$database union all
|
||||
select 0.034512e2 from rdb$database union all
|
||||
select 0.0034512e3 from rdb$database
|
||||
);
|
||||
"""
|
||||
|
||||
act = isql_act('db', test_script)
|
||||
|
||||
expected_stdout = """
|
||||
X 3.451200000000000
|
||||
S 3.45
|
||||
|
||||
X 0.4512000000000000
|
||||
S 0.45
|
||||
|
||||
X 3.451200000000000
|
||||
S 3.45
|
||||
|
||||
X 3.451200000000000
|
||||
S 3.45
|
||||
|
||||
X 3.451200000000000
|
||||
S 3.45
|
||||
|
||||
X 3.451200000000000
|
||||
S 3.45
|
||||
|
||||
X 3.451200000000000
|
||||
S 3.45
|
||||
|
||||
X 3.451200000000000
|
||||
S 3.45
|
||||
"""
|
||||
|
||||
@pytest.mark.version('>=4.0.3')
|
||||
def test_1(act: Action):
|
||||
act.expected_stdout = expected_stdout
|
||||
act.execute(combine_output = True)
|
||||
assert act.clean_stdout == act.clean_expected_stdout
|
@ -7,85 +7,89 @@ DESCRIPTION:
|
||||
Check if it will select the index with the best selectivity and with the biggest segment match.
|
||||
Prefer "lower and upper bound" (but not the same value (BETWEEN)) above only upper or lower bound ( >=, >, <, <=).
|
||||
FBTEST: functional.arno.optimizer.opt_multi_index_selection_06
|
||||
NOTES:
|
||||
[09.03.2023] pzotov
|
||||
Adjusted allowed versions: FB 3.x and 4.x issue same execution plan.
|
||||
Plan in FB 5.x differs: PLAN (ST INDEX (I_F3_F1_ASC)).
|
||||
Version 5.x is not checked currently. Wait for resolution.
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from firebird.qa import *
|
||||
|
||||
init_script = """CREATE TABLE SelectionTest (
|
||||
F1 INTEGER NOT NULL,
|
||||
F2 INTEGER,
|
||||
F3 INTEGER
|
||||
);
|
||||
init_script = """
|
||||
CREATE TABLE SelectionTest (
|
||||
F1 INTEGER NOT NULL,
|
||||
F2 INTEGER,
|
||||
F3 INTEGER
|
||||
);
|
||||
|
||||
SET TERM ^^ ;
|
||||
CREATE PROCEDURE PR_SelectionTest
|
||||
AS
|
||||
DECLARE VARIABLE FillID INTEGER;
|
||||
BEGIN
|
||||
FillID = 1;
|
||||
WHILE (FillID <= 1000) DO
|
||||
BEGIN
|
||||
INSERT INTO SelectionTest
|
||||
(F1, F2, F3)
|
||||
VALUES
|
||||
(:FillID, (:FILLID / 2) * 2, :FILLID);
|
||||
FillID = FillID + 1;
|
||||
END
|
||||
END
|
||||
^^
|
||||
SET TERM ; ^^
|
||||
SET TERM ^^ ;
|
||||
CREATE PROCEDURE PR_SelectionTest
|
||||
AS
|
||||
DECLARE VARIABLE FillID INTEGER;
|
||||
BEGIN
|
||||
FillID = 1;
|
||||
WHILE (FillID <= 1000) DO
|
||||
BEGIN
|
||||
INSERT INTO SelectionTest
|
||||
(F1, F2, F3)
|
||||
VALUES
|
||||
(:FillID, (:FILLID / 2) * 2, :FILLID);
|
||||
FillID = FillID + 1;
|
||||
END
|
||||
END
|
||||
^^
|
||||
SET TERM ; ^^
|
||||
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
/* Fill table with data */
|
||||
EXECUTE PROCEDURE PR_SelectionTest;
|
||||
/* Fill table with data */
|
||||
EXECUTE PROCEDURE PR_SelectionTest;
|
||||
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
/* Create indexes */
|
||||
CREATE UNIQUE ASC INDEX I_F1_UNIQUE_ASC ON SelectionTest (F1);
|
||||
CREATE ASC INDEX I_F1_ASC ON SelectionTest (F1);
|
||||
CREATE ASC INDEX I_F2_ASC ON SelectionTest (F2);
|
||||
CREATE ASC INDEX I_F3_ASC ON SelectionTest (F3);
|
||||
CREATE ASC INDEX I_F1_F2_ASC ON SelectionTest (F1, F2);
|
||||
CREATE ASC INDEX I_F1_F3_ASC ON SelectionTest (F1, F3);
|
||||
CREATE ASC INDEX I_F1_F2_F3_ASC ON SelectionTest (F1, F2, F3);
|
||||
CREATE ASC INDEX I_F1_F3_F2_ASC ON SelectionTest (F1, F3, F2);
|
||||
CREATE ASC INDEX I_F2_F1_ASC ON SelectionTest (F2, F1);
|
||||
CREATE ASC INDEX I_F2_F3_ASC ON SelectionTest (F2, F3);
|
||||
CREATE ASC INDEX I_F2_F1_F3_ASC ON SelectionTest (F2, F1, F3);
|
||||
CREATE ASC INDEX I_F2_F3_F1_ASC ON SelectionTest (F2, F3, F1);
|
||||
CREATE ASC INDEX I_F3_F1_ASC ON SelectionTest (F3, F1);
|
||||
CREATE ASC INDEX I_F3_F2_ASC ON SelectionTest (F3, F2);
|
||||
CREATE ASC INDEX I_F3_F1_F2_ASC ON SelectionTest (F3, F1, F2);
|
||||
CREATE ASC INDEX I_F3_F2_F1_ASC ON SelectionTest (F3, F2, F1);
|
||||
|
||||
COMMIT;
|
||||
/* Create indexes */
|
||||
CREATE UNIQUE ASC INDEX I_F1_UNIQUE_ASC ON SelectionTest (F1);
|
||||
CREATE ASC INDEX I_F1_ASC ON SelectionTest (F1);
|
||||
CREATE ASC INDEX I_F2_ASC ON SelectionTest (F2);
|
||||
CREATE ASC INDEX I_F3_ASC ON SelectionTest (F3);
|
||||
CREATE ASC INDEX I_F1_F2_ASC ON SelectionTest (F1, F2);
|
||||
CREATE ASC INDEX I_F1_F3_ASC ON SelectionTest (F1, F3);
|
||||
CREATE ASC INDEX I_F1_F2_F3_ASC ON SelectionTest (F1, F2, F3);
|
||||
CREATE ASC INDEX I_F1_F3_F2_ASC ON SelectionTest (F1, F3, F2);
|
||||
CREATE ASC INDEX I_F2_F1_ASC ON SelectionTest (F2, F1);
|
||||
CREATE ASC INDEX I_F2_F3_ASC ON SelectionTest (F2, F3);
|
||||
CREATE ASC INDEX I_F2_F1_F3_ASC ON SelectionTest (F2, F1, F3);
|
||||
CREATE ASC INDEX I_F2_F3_F1_ASC ON SelectionTest (F2, F3, F1);
|
||||
CREATE ASC INDEX I_F3_F1_ASC ON SelectionTest (F3, F1);
|
||||
CREATE ASC INDEX I_F3_F2_ASC ON SelectionTest (F3, F2);
|
||||
CREATE ASC INDEX I_F3_F1_F2_ASC ON SelectionTest (F3, F1, F2);
|
||||
CREATE ASC INDEX I_F3_F2_F1_ASC ON SelectionTest (F3, F2, F1);
|
||||
COMMIT;
|
||||
"""
|
||||
|
||||
db = db_factory(init=init_script)
|
||||
|
||||
test_script = """SET PLAN ON;
|
||||
SELECT
|
||||
st.F1, st.F2, st.F3
|
||||
FROM
|
||||
SelectionTest st
|
||||
WHERE
|
||||
st.F1 >= 99 and st.F1 <= 101 and
|
||||
st.F2 >= 99 and
|
||||
st.F3 = 100;"""
|
||||
test_script = """
|
||||
set planonly;
|
||||
select
|
||||
st.f1, st.f2, st.f3
|
||||
from
|
||||
selectiontest st
|
||||
where
|
||||
st.f1 >= 99 and st.f1 <= 101 and
|
||||
st.f2 >= 99 and
|
||||
st.f3 = 100;
|
||||
"""
|
||||
|
||||
act = isql_act('db', test_script)
|
||||
|
||||
expected_stdout = """PLAN (ST INDEX (I_F3_F2_ASC))
|
||||
expected_stdout = """
|
||||
PLAN (ST INDEX (I_F3_F2_ASC))
|
||||
"""
|
||||
|
||||
F1 F2 F3
|
||||
============ ============ ============
|
||||
|
||||
100 100 100"""
|
||||
|
||||
@pytest.mark.version('>=3,<4')
|
||||
@pytest.mark.version('>=3,<5')
|
||||
def test_1(act: Action):
|
||||
act.expected_stdout = expected_stdout
|
||||
act.execute()
|
||||
|
Loading…
Reference in New Issue
Block a user