Fix another memory leak related to UNION ALL and sub-selects. (CVS 5336)
FossilOrigin-Name: 56109b9a1f600ab3f16769aba0d47dcf782bbc95
This commit is contained in:
+142
-44
@@ -10,7 +10,7 @@
|
||||
#***********************************************************************
|
||||
# This file implements regression tests for SQLite library.
|
||||
#
|
||||
# $Id: selectB.test,v 1.3 2008/07/01 16:05:26 danielk1977 Exp $
|
||||
# $Id: selectB.test,v 1.4 2008/07/01 17:39:28 danielk1977 Exp $
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
@@ -144,56 +144,154 @@ for {set ii 1} {$ii <= 2} {incr ii} {
|
||||
UNION ALL SELECT c FROM t1 WHERE c>=10
|
||||
ORDER BY 1 LIMIT 3
|
||||
} {12 12 14}
|
||||
|
||||
}
|
||||
|
||||
|
||||
do_test selectB-2.1 {
|
||||
do_test selectB-3.0 {
|
||||
execsql {
|
||||
SELECT DISTINCT * FROM
|
||||
(SELECT c FROM t1 UNION ALL SELECT e FROM t2)
|
||||
ORDER BY 1;
|
||||
}
|
||||
} {6 12 15 18 24}
|
||||
|
||||
do_test selectB-2.2 {
|
||||
execsql {
|
||||
SELECT c, count(*) FROM
|
||||
(SELECT c FROM t1 UNION ALL SELECT e FROM t2)
|
||||
GROUP BY c ORDER BY 1;
|
||||
}
|
||||
} {6 2 12 1 15 1 18 1 24 1}
|
||||
do_test selectB-2.3 {
|
||||
execsql {
|
||||
SELECT c, count(*) FROM
|
||||
(SELECT c FROM t1 UNION ALL SELECT e FROM t2)
|
||||
GROUP BY c HAVING count(*)>1;
|
||||
}
|
||||
} {6 2}
|
||||
do_test selectB-2.4 {
|
||||
execsql {
|
||||
SELECT t4.c, t3.a FROM
|
||||
(SELECT c FROM t1 UNION ALL SELECT e FROM t2) AS t4, t1 AS t3
|
||||
WHERE t3.a=14
|
||||
ORDER BY 1
|
||||
}
|
||||
} {6 14 6 14 12 14 15 14 18 14 24 14}
|
||||
|
||||
do_test selectB-2.5 {
|
||||
execsql {
|
||||
SELECT d FROM t2
|
||||
EXCEPT
|
||||
SELECT a FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2)
|
||||
DROP INDEX i1;
|
||||
DROP INDEX i2;
|
||||
}
|
||||
} {}
|
||||
|
||||
do_test selectB-2.6 {
|
||||
execsql {
|
||||
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2)
|
||||
EXCEPT
|
||||
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2)
|
||||
for {set ii 3} {$ii <= 4} {incr ii} {
|
||||
|
||||
if {$ii == 4} {
|
||||
do_test selectB-4.0 {
|
||||
execsql {
|
||||
CREATE INDEX i1 ON t1(a);
|
||||
CREATE INDEX i2 ON t1(b);
|
||||
CREATE INDEX i3 ON t1(c);
|
||||
CREATE INDEX i4 ON t2(d);
|
||||
CREATE INDEX i5 ON t2(e);
|
||||
CREATE INDEX i6 ON t2(f);
|
||||
}
|
||||
} {}
|
||||
}
|
||||
} {}
|
||||
|
||||
do_test selectB-$ii.1 {
|
||||
execsql {
|
||||
SELECT DISTINCT * FROM
|
||||
(SELECT c FROM t1 UNION ALL SELECT e FROM t2)
|
||||
ORDER BY 1;
|
||||
}
|
||||
} {6 12 15 18 24}
|
||||
|
||||
do_test selectB-$ii.2 {
|
||||
execsql {
|
||||
SELECT c, count(*) FROM
|
||||
(SELECT c FROM t1 UNION ALL SELECT e FROM t2)
|
||||
GROUP BY c ORDER BY 1;
|
||||
}
|
||||
} {6 2 12 1 15 1 18 1 24 1}
|
||||
do_test selectB-$ii.3 {
|
||||
execsql {
|
||||
SELECT c, count(*) FROM
|
||||
(SELECT c FROM t1 UNION ALL SELECT e FROM t2)
|
||||
GROUP BY c HAVING count(*)>1;
|
||||
}
|
||||
} {6 2}
|
||||
do_test selectB-$ii.4 {
|
||||
execsql {
|
||||
SELECT t4.c, t3.a FROM
|
||||
(SELECT c FROM t1 UNION ALL SELECT e FROM t2) AS t4, t1 AS t3
|
||||
WHERE t3.a=14
|
||||
ORDER BY 1
|
||||
}
|
||||
} {6 14 6 14 12 14 15 14 18 14 24 14}
|
||||
|
||||
do_test selectB-$ii.5 {
|
||||
execsql {
|
||||
SELECT d FROM t2
|
||||
EXCEPT
|
||||
SELECT a FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2)
|
||||
}
|
||||
} {}
|
||||
do_test selectB-$ii.6 {
|
||||
execsql {
|
||||
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2)
|
||||
EXCEPT
|
||||
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2)
|
||||
}
|
||||
} {}
|
||||
do_test selectB-$ii.7 {
|
||||
execsql {
|
||||
SELECT c FROM t1
|
||||
EXCEPT
|
||||
SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
|
||||
}
|
||||
} {12}
|
||||
do_test selectB-$ii.8 {
|
||||
execsql {
|
||||
SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
|
||||
EXCEPT
|
||||
SELECT c FROM t1
|
||||
}
|
||||
} {9 15 24 27}
|
||||
do_test selectB-$ii.9 {
|
||||
execsql {
|
||||
SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
|
||||
EXCEPT
|
||||
SELECT c FROM t1
|
||||
ORDER BY c DESC
|
||||
}
|
||||
} {27 24 15 9}
|
||||
|
||||
do_test selectB-$ii.10 {
|
||||
execsql {
|
||||
SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
|
||||
UNION
|
||||
SELECT c FROM t1
|
||||
ORDER BY c DESC
|
||||
}
|
||||
} {27 24 18 15 12 9 6}
|
||||
do_test selectB-$ii.11 {
|
||||
execsql {
|
||||
SELECT c FROM t1
|
||||
UNION
|
||||
SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
|
||||
ORDER BY c
|
||||
}
|
||||
} {6 9 12 15 18 24 27}
|
||||
do_test selectB-$ii.12 {
|
||||
execsql {
|
||||
SELECT c FROM t1 UNION SELECT e FROM t2 UNION ALL SELECT f FROM t2
|
||||
ORDER BY c
|
||||
}
|
||||
} {6 9 12 15 18 18 24 27}
|
||||
do_test selectB-$ii.13 {
|
||||
execsql {
|
||||
SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
|
||||
UNION
|
||||
SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
|
||||
ORDER BY 1
|
||||
}
|
||||
} {6 9 15 18 24 27}
|
||||
|
||||
do_test selectB-$ii.14 {
|
||||
execsql {
|
||||
SELECT c FROM t1
|
||||
INTERSECT
|
||||
SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
|
||||
ORDER BY 1
|
||||
}
|
||||
} {6 18}
|
||||
do_test selectB-$ii.15 {
|
||||
execsql {
|
||||
SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
|
||||
INTERSECT
|
||||
SELECT c FROM t1
|
||||
ORDER BY 1
|
||||
}
|
||||
} {6 18}
|
||||
do_test selectB-$ii.16 {
|
||||
execsql {
|
||||
SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
|
||||
INTERSECT
|
||||
SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
|
||||
ORDER BY 1
|
||||
}
|
||||
} {6 9 15 18 24 27}
|
||||
}
|
||||
|
||||
finish_test
|
||||
|
||||
|
||||
Reference in New Issue
Block a user