Fix some problems with virtual tables and joins in where.c. (CVS 3277)

FossilOrigin-Name: 3e19a7d8eabcd2fa71ced3f76c5f9bc1f3900b81
This commit is contained in:
danielk1977
2006-06-20 13:07:27 +00:00
parent 4b2688ab31
commit 93626f4869
5 changed files with 130 additions and 25 deletions
+94 -2
View File
@@ -11,7 +11,7 @@
# This file implements regression tests for SQLite library. The
# focus of this file is creating and dropping virtual tables.
#
# $Id: vtab1.test,v 1.23 2006/06/20 11:01:09 danielk1977 Exp $
# $Id: vtab1.test,v 1.24 2006/06/20 13:07:28 danielk1977 Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@@ -204,7 +204,6 @@ do_test vtab1-2.5 {
}
set echo_module
} {xDestroy}
finish_test
do_test vtab1-2.6 {
execsql {
@@ -414,6 +413,99 @@ execsql {
DROP TABLE treal;
}
#----------------------------------------------------------------------
# Test cases vtab1-5 test SELECT queries that include joins on virtual
# tables.
proc filter {log} {
set out [list]
for {set ii 0} {$ii < [llength $log]} {incr ii} {
if {[lindex $log $ii] eq "xFilter"} {
lappend out xFilter
lappend out [lindex $log [expr $ii+1]]
}
}
return $out
}
do_test vtab1-5-1 {
execsql {
CREATE TABLE t1(a, b, c);
CREATE TABLE t2(d, e, f);
INSERT INTO t1 VALUES(1, 'red', 'green');
INSERT INTO t1 VALUES(2, 'blue', 'black');
INSERT INTO t2 VALUES(1, 'spades', 'clubs');
INSERT INTO t2 VALUES(2, 'hearts', 'diamonds');
CREATE VIRTUAL TABLE et1 USING echo(t1);
CREATE VIRTUAL TABLE et2 USING echo(t2);
}
} {}
do_test vtab1-5-2 {
set echo_module ""
execsql {
SELECT * FROM et1, et2;
}
} [list \
1 red green 1 spades clubs \
1 red green 2 hearts diamonds \
2 blue black 1 spades clubs \
2 blue black 2 hearts diamonds \
]
do_test vtab1-5-3 {
filter $echo_module
} [list \
xFilter {SELECT rowid, * FROM 't1'} \
xFilter {SELECT rowid, * FROM 't2'} \
xFilter {SELECT rowid, * FROM 't2'} \
]
do_test vtab1-5-4 {
set echo_module ""
execsql {
SELECT * FROM et1, et2 WHERE et2.d = 2;
}
} [list \
1 red green 2 hearts diamonds \
2 blue black 2 hearts diamonds \
]
do_test vtab1-5-5 {
filter $echo_module
} [list \
xFilter {SELECT rowid, * FROM 't1'} \
xFilter {SELECT rowid, * FROM 't2'} \
xFilter {SELECT rowid, * FROM 't2'} \
]
do_test vtab1-5-6 {
execsql {
CREATE INDEX i1 ON t2(d);
}
db close
sqlite3 db test.db
register_echo_module [sqlite3_connection_pointer db]
set echo_module ""
execsql {
SELECT * FROM et1, et2 WHERE et2.d = 2;
}
} [list \
1 red green 2 hearts diamonds \
2 blue black 2 hearts diamonds \
]
do_test vtab1-5-7 {
filter $echo_module
} [list \
xFilter {SELECT rowid, * FROM 't2' WHERE d = ?} \
xFilter {SELECT rowid, * FROM 't1'} \
]
execsql {
DROP TABLE t1;
DROP TABLE t2;
DROP TABLE et1;
DROP TABLE et2;
}
#----------------------------------------------------------------------
# Test cases vtab1-6 test INSERT, UPDATE and DELETE operations
# on virtual tables.