sqlite/test/bestindex9.test
2022-03-16 12:06:00 +00:00

109 lines
2.2 KiB
Plaintext

# 2020-01-29
#
# 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.
#
#***********************************************************************
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set testprefix bestindex9
ifcapable !vtab {
finish_test
return
}
proc vtab_command {method args} {
switch -- $method {
xConnect {
return $::create_table
}
xBestIndex {
set hdl [lindex $args 0]
set ::vtab_orderby [$hdl orderby]
set ::vtab_distinct [$hdl distinct]
return [list orderby 1]
}
xFilter {
return ""
}
}
return {}
}
proc do_bestindex9_test {tn create select orderby distinct} {
forcedelete test.db2
sqlite3 dbtest test.db2
register_tcl_module dbtest
set ::create_table $create
dbtest eval { CREATE VIRTUAL TABLE t1 USING tcl(vtab_command); }
dbtest eval $select
do_test $tn.orderby [list set {} $::vtab_orderby] $orderby
do_test $tn.distinct [list set {} $::vtab_distinct] $distinct
dbtest close
}
#-------------------------------------------------------------------------
#
do_bestindex9_test 1.0 {
CREATE TABLE x(k1, k2, v1, PRIMARY KEY(k1, k2))
} {
SELECT DISTINCT k1, k2 FROM t1
} {{column 0 desc 0} {column 1 desc 0}} 2
do_bestindex9_test 1.1 {
CREATE TABLE x(k1, k2, v1, PRIMARY KEY(k1, k2)) WITHOUT ROWID
} {
SELECT DISTINCT k1, k2 FROM t1
} {} 0
do_bestindex9_test 1.2 {
CREATE TABLE x(k1 NOT NULL, k2 NOT NULL, v1, PRIMARY KEY(k1, k2))
} {
SELECT DISTINCT k1, k2 FROM t1
} {} 0
#-------------------------------------------------------------------------
#
do_bestindex9_test 2 {
CREATE TABLE x(c1, c2, c3);
} {
SELECT DISTINCT c1 FROM t1 ORDER BY c1
} {{column 0 desc 0}} 3
#-------------------------------------------------------------------------
#
do_bestindex9_test 3 {
CREATE TABLE x(c1, c2, c3);
} {
SELECT DISTINCT c1 FROM t1 GROUP BY c1
} {{column 0 desc 0}} 1
do_bestindex9_test 4 {
CREATE TABLE x(c1, c2, c3);
} {
CREATE TABLE t2(balls);
SELECT DISTINCT c1 FROM t1, t2
} {{column 0 desc 0}} 2
finish_test