4edbcdd391
sure to remove the EP_Skip and EP_Unlikely flags from the result set expressions that get nulled-out. dbsqlfuzz bf1d3ed6e0e0dd8766027797d43db40c776d2b15. FossilOrigin-Name: 21aec65e5e2a01e58dd0bb8c8b9b29b8414373b53353fc7ca80a152fdd27566b
119 lines
3.1 KiB
Plaintext
119 lines
3.1 KiB
Plaintext
# 2023-02-16
|
|
#
|
|
# The author disclaims copyright to this source code. In place of
|
|
# a legal notice, here is a blessing:
|
|
#
|
|
# May you do good and not evil.
|
|
# May you find forgiveness for yourself and forgive others.
|
|
# May you share freely, never taking more than you give.
|
|
#
|
|
#***********************************************************************
|
|
#
|
|
# Test cases for the omit-unused-subquery-column optimization.
|
|
#
|
|
|
|
set testdir [file dirname $argv0]
|
|
source $testdir/tester.tcl
|
|
set testprefix selectH
|
|
|
|
do_execsql_test 1.1 {
|
|
CREATE TABLE t1(
|
|
c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,
|
|
c10, c11, c12, c13, c14, c15, c16, c17, c18, c19,
|
|
c20, c21, c22, c23, c24, c25, c26, c27, c28, c29,
|
|
c30, c31, c32, c33, c34, c35, c36, c37, c38, c39,
|
|
c40, c41, c42, c43, c44, c45, c46, c47, c48, c49,
|
|
c50, c51, c52, c53, c54, c55, c56, c57, c58, c59,
|
|
c60, c61, c62, c63, c64, c65
|
|
);
|
|
INSERT INTO t1 VALUES(
|
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
|
|
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
|
|
20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
|
|
30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
|
|
40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
|
|
50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
|
|
60, 61, 62, 63, 64, 65
|
|
);
|
|
CREATE INDEX t1c60 ON t1(c60);
|
|
}
|
|
|
|
# The SQL counter(N) function adjusts the value of the global
|
|
# TCL variable ::selectH_cnt by the value N and returns the new
|
|
# value. By putting calls to counter(N) as unused columns in a
|
|
# view or subquery, we can check to see if the counter gets incremented,
|
|
# and if not that means that the unused column was omitted.
|
|
#
|
|
unset -nocomplain selectH_cnt
|
|
set selectH_cnt 0
|
|
proc selectH_counter {amt} {
|
|
global selectH_cnt
|
|
incr selectH_cnt $amt
|
|
return $selectH_cnt
|
|
}
|
|
db func counter selectH_counter
|
|
|
|
do_execsql_test 1.2 {
|
|
SELECT DISTINCT c44 FROM (
|
|
SELECT c0 AS a, *, counter(1) FROM t1
|
|
UNION ALL
|
|
SELECT c1 AS a, *, counter(1) FROM t1
|
|
) WHERE c60=60;
|
|
} {44}
|
|
do_test 1.3 {
|
|
set ::selectH_cnt
|
|
} {0}
|
|
|
|
do_execsql_test 2.1 {
|
|
SELECT a FROM (
|
|
SELECT counter(1) AS cnt, c15 AS a, *, c62 AS b FROM t1
|
|
UNION ALL
|
|
SELECT counter(1) AS cnt, c16 AS a, *, c61 AS b FROM t1
|
|
ORDER BY b
|
|
);
|
|
} {16 15}
|
|
do_test 2.2 {
|
|
set ::selectH_cnt
|
|
} {0}
|
|
|
|
do_execsql_test 3.1 {
|
|
CREATE VIEW v1 AS
|
|
SELECT c16 AS a, *, counter(1) AS x FROM t1
|
|
UNION ALL
|
|
SELECT c17 AS a, *, counter(1) AS x FROM t1
|
|
UNION ALL
|
|
SELECT c18 AS a, *, counter(1) AS x FROM t1
|
|
UNION ALL
|
|
SELECT c19 AS a, *, counter(1) AS x FROM t1;
|
|
SELECT count(*) FROM v1 WHERE c60=60;
|
|
} {4}
|
|
do_test 3.2 {
|
|
set ::selectH_cnt
|
|
} {0}
|
|
do_execsql_test 3.3 {
|
|
SELECT count(a) FROM v1 WHERE c60=60;
|
|
} {4}
|
|
do_execsql_test 3.4 {
|
|
SELECT a FROM v1 WHERE c60=60;
|
|
} {16 17 18 19}
|
|
do_test 3.5 {
|
|
set ::selectH_cnt
|
|
} {0}
|
|
do_execsql_test 3.6 {
|
|
SELECT x FROM v1 WHERE c60=60;
|
|
} {1 2 3 4}
|
|
do_test 3.7 {
|
|
set ::selectH_cnt
|
|
} {4}
|
|
|
|
# 2023-02-25 dbsqlfuzz bf1d3ed6e0e0dd8766027797d43db40c776d2b15
|
|
#
|
|
do_execsql_test 4.1 {
|
|
DROP TABLE IF EXISTS t1;
|
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT);
|
|
SELECT 1 FROM (SELECT DISTINCT name COLLATE rtrim FROM sqlite_schema
|
|
UNION ALL SELECT a FROM t1);
|
|
} 1
|
|
|
|
finish_test
|