blob: 79cd16e9133d4bd1bd9e4e76ed3b982789201e6e [file] [log] [blame]
drh3a3b4202017-02-15 22:36:15 +00001# 2017-02-15
2#
3# The author disclaims copyright to this source code. In place of
4# a legal notice, here is a blessing:
5#
6# May you do good and not evil.
7# May you find forgiveness for yourself and forgive others.
8# May you share freely, never taking more than you give.
9#
10#***********************************************************************
11#
12# Test cases to show that a join involving an empty table is very fast.
13#
14
15set testdir [file dirname $argv0]
16source $testdir/tester.tcl
17
18# Build some test data
19#
20do_execsql_test emptytable-100 {
21 CREATE TABLE t1(a);
22 WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100)
23 INSERT INTO t1(a) SELECT x FROM c;
24 CREATE TABLE empty(x);
25 SELECT count(*) FROM t1;
26} {100}
27
28# Interrupt queries after 1M cycles to prevent burning excess CPU
29proc stopDb {args} {
30 db interrupt
31}
32db progress 1000000 {stopDb}
33
34# Prior to the query planner optimization on 2017-02-15, this query would
35# take a ridiculous amount of time. If that optimization stops working,
36# the result here will be in interrupt for running too long.
37#
38do_catchsql_test emptytable-110 {
39 SELECT count(*) FROM t1, t1, t1, t1, t1, t1, empty;
40} {0 0}
41
42do_catchsql_test emptytable-120 {
43 SELECT count(*) FROM t1, t1 LEFT JOIN empty;
44} {0 10000}
45do_catchsql_test emptytable-121 {
46 SELECT count(*) FROM t1, t1 LEFT JOIN t1, empty;
47} {0 0}
48
49
50finish_test