| # 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 |
| |
| |
| |
| |