mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
A few simple test cases for the omit-unused-subquery-column optimization.
FossilOrigin-Name: cf8f57c53425d89619ece10edc197d7d28946d3b23fcb4f526330196c76d9cc1
This commit is contained in:
110
test/selectH.test
Normal file
110
test/selectH.test
Normal file
@ -0,0 +1,110 @@
|
||||
# 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}
|
||||
|
||||
|
||||
finish_test
|
Reference in New Issue
Block a user