AryaWu/sqlite
0
1# 2017-02-152#3# The author disclaims copyright to this source code. In place of4# 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.tcl17 18# Build some test data19#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 CPU29proc stopDb {args} {30 db interrupt31}32db progress 1000000 {stopDb}33 34# Prior to the query planner optimization on 2017-02-15, this query would35# 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_test51 