Merge all the latest trunk changes into the experimental STAT3 branch.

FossilOrigin-Name: 51908c8f2bc6c086570f7493a29b096f0a40ce34
This commit is contained in:
drh
2011-09-16 19:29:58 +00:00
17 changed files with 367 additions and 102 deletions
+18
View File
@@ -158,5 +158,23 @@ do_execsql_test 2.3 {
SELECT docid FROM t2 WHERE t2 MATCH 'aa';
} {3 1}
#-------------------------------------------------------------------------
# Test that ticket [56be976859] has been fixed.
#
do_execsql_test 3.1 {
CREATE VIRTUAL TABLE t3 USING fts4(x, order=DESC);
INSERT INTO t3(docid, x) VALUES(113382409004785664, 'aa');
INSERT INTO t3(docid, x) VALUES(1, 'ab');
SELECT rowid FROM t3 WHERE x MATCH 'a*' ORDER BY docid DESC;
} {113382409004785664 1}
do_execsql_test 3.2 {
CREATE VIRTUAL TABLE t4 USING fts4(x);
INSERT INTO t4(docid, x) VALUES(-113382409004785664, 'aa');
INSERT INTO t4(docid, x) VALUES(1, 'ab');
SELECT rowid FROM t4 WHERE x MATCH 'a*';
} {-113382409004785664 1}
finish_test
+86
View File
@@ -0,0 +1,86 @@
# 2011 September 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.
#
#*************************************************************************
# This file implements regression tests for SQLite library. The
# focus of this script is testing correlated subqueries
#
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
ifcapable !subquery {
finish_test
return
}
do_test subquery2-1.1 {
execsql {
BEGIN;
CREATE TABLE t1(a,b);
INSERT INTO t1 VALUES(1,2);
INSERT INTO t1 VALUES(3,4);
INSERT INTO t1 VALUES(5,6);
INSERT INTO t1 VALUES(7,8);
CREATE TABLE t2(c,d);
INSERT INTO t2 VALUES(1,1);
INSERT INTO t2 VALUES(3,9);
INSERT INTO t2 VALUES(5,25);
INSERT INTO t2 VALUES(7,49);
CREATE TABLE t3(e,f);
INSERT INTO t3 VALUES(1,1);
INSERT INTO t3 VALUES(3,27);
INSERT INTO t3 VALUES(5,125);
INSERT INTO t3 VALUES(7,343);
COMMIT;
}
execsql {
SELECT a FROM t1
WHERE b IN (SELECT x+1 FROM (SELECT DISTINCT f/(a*a) AS x FROM t3));
}
} {1 3 5 7}
do_test subquery2-1.2 {
execsql {
CREATE INDEX t1b ON t1(b);
SELECT a FROM t1
WHERE b IN (SELECT x+1 FROM (SELECT DISTINCT f/(a*a) AS x FROM t3));
}
} {1 3 5 7}
do_test subquery2-1.11 {
execsql {
SELECT a FROM t1
WHERE +b=(SELECT x+1 FROM (SELECT DISTINCT f/(a*a) AS x FROM t3));
}
} {1}
do_test subquery2-1.12 {
execsql {
SELECT a FROM t1
WHERE b=(SELECT x+1 FROM (SELECT DISTINCT f/(a*a) AS x FROM t3));
}
} {1}
do_test subquery2-1.21 {
execsql {
SELECT a FROM t1
WHERE +b=(SELECT x+1 FROM
(SELECT DISTINCT f/d AS x FROM t2 JOIN t3 ON d*a=f))
}
} {1 3 5 7}
do_test subquery2-1.22 {
execsql {
SELECT a FROM t1
WHERE b=(SELECT x+1 FROM
(SELECT DISTINCT f/d AS x FROM t2 JOIN t3 ON d*a=f))
}
} {1 3 5 7}
finish_test
+101
View File
@@ -74,4 +74,105 @@ do_test tkt-31338-2.2 {
} {111 222 222 333 888 333 444 444 555 888 333 444 444 555 999}
# Ticket [2c2de252666662f5459904fc33a9f2956cbff23c]
#
do_test tkt-31338-3.1 {
foreach x [db eval {SELECT name FROM sqlite_master WHERE type='table'}] {
db eval "DROP TABLE $x"
}
db eval {
CREATE TABLE t1(a,b,c,d);
CREATE TABLE t2(e,f);
INSERT INTO t1 VALUES(1,2,3,4);
INSERT INTO t2 VALUES(10,-8);
CREATE INDEX t1a ON t1(a);
CREATE INDEX t1b ON t1(b);
CREATE TABLE t3(g);
INSERT INTO t3 VALUES(4);
CREATE TABLE t4(h);
INSERT INTO t4 VALUES(5);
SELECT * FROM t3 LEFT JOIN t1 ON d=g LEFT JOIN t4 ON c=h
WHERE (a=1 AND h=4)
OR (b IN (
SELECT x FROM (SELECT e+f AS x, e FROM t2 ORDER BY 1 LIMIT 2)
GROUP BY e
));
}
} {4 1 2 3 4 {}}
do_test tkt-31338-3.2 {
db eval {
SELECT * FROM t3 LEFT JOIN t1 ON d=g LEFT JOIN t4 ON c=h
WHERE (a=1 AND h=4)
OR (b=2 AND b NOT IN (
SELECT x+1 FROM (SELECT e+f AS x, e FROM t2 ORDER BY 1 LIMIT 2)
GROUP BY e
));
}
} {4 1 2 3 4 {}}
do_test tkt-31338-3.3 {
db eval {
SELECT * FROM t3 LEFT JOIN t1 ON d=g LEFT JOIN t4 ON c=h
WHERE (+a=1 AND h=4)
OR (b IN (
SELECT x FROM (SELECT e+f AS x, e FROM t2 ORDER BY 1 LIMIT 2)
GROUP BY e
));
}
} {4 1 2 3 4 {}}
do_test tkt-31338-3.4 {
db eval {
SELECT * FROM t3 LEFT JOIN t1 ON d=g LEFT JOIN t4 ON c=h
WHERE (a=1 AND h=4)
OR (+b IN (
SELECT x FROM (SELECT e+f AS x, e FROM t2 ORDER BY 1 LIMIT 2)
GROUP BY e
));
}
} {4 1 2 3 4 {}}
do_test tkt-31338-3.5 {
db eval {
CREATE TABLE t5(a,b,c,d,e,f);
CREATE TABLE t6(g,h);
CREATE TRIGGER t6r AFTER INSERT ON t6 BEGIN
INSERT INTO t5
SELECT * FROM t3 LEFT JOIN t1 ON d=g LEFT JOIN t4 ON c=h
WHERE (a=1 AND h=4)
OR (b IN (
SELECT x FROM (SELECT e+f AS x, e FROM t2 ORDER BY 1 LIMIT 2)
GROUP BY e
));
END;
INSERT INTO t6 VALUES(88,99);
SELECT * FROM t5;
}
} {4 1 2 3 4 {}}
do_test tkt-31338-3.6 {
db eval {
INSERT INTO t1 VALUES(2,4,3,4);
INSERT INTO t1 VALUES(99,101,3,4);
INSERT INTO t1 VALUES(98,97,3,4);
SELECT * FROM t3 LEFT JOIN t1 ON d=g LEFT JOIN t4 ON c=h
WHERE (a=1 AND h=4)
OR (b IN (
SELECT x+a FROM (SELECT e+f AS x, e FROM t2 ORDER BY 1 LIMIT 2)
GROUP BY e
));
}
} {4 2 4 3 4 {} 4 99 101 3 4 {}}
do_test tkt-31338-3.7 {
db eval {
SELECT * FROM t3 LEFT JOIN t1 ON d=g LEFT JOIN t4 ON c=h
WHERE (a=1 AND h=4)
OR (b IN (
SELECT x FROM (SELECT e+f+a AS x, e FROM t2 ORDER BY 1 LIMIT 2)
GROUP BY e
));
}
} {4 2 4 3 4 {} 4 99 101 3 4 {}}
finish_test