Home | History | Annotate | Download | only in test
      1 # 2002 May 24
      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 # This file implements regression tests for SQLite library.
     12 #
     13 # This file implements tests for joins, including outer joins, where
     14 # there are a large number of tables involved in the join.
     15 #
     16 # $Id: join3.test,v 1.4 2005/01/19 23:24:51 drh Exp $
     17 
     18 set testdir [file dirname $argv0]
     19 source $testdir/tester.tcl
     20 
     21 # An unrestricted join
     22 #
     23 catch {unset ::result}
     24 set result {}
     25 for {set N 1} {$N<=$bitmask_size} {incr N} {
     26   lappend result $N
     27   do_test join3-1.$N {
     28     execsql "CREATE TABLE t${N}(x);"
     29     execsql "INSERT INTO t$N VALUES($N)"
     30     set sql "SELECT * FROM t1"
     31     for {set i 2} {$i<=$N} {incr i} {append sql ", t$i"}
     32     execsql $sql
     33   } $result
     34 }
     35 
     36 # Joins with a comparison
     37 #
     38 set result {}
     39 for {set N 1} {$N<=$bitmask_size} {incr N} {
     40   lappend result $N
     41   do_test join3-2.$N {
     42     set sql "SELECT * FROM t1"
     43     for {set i 2} {$i<=$N} {incr i} {append sql ", t$i"}
     44     set sep WHERE
     45     for {set i 1} {$i<$N} {incr i} {
     46       append sql " $sep t[expr {$i+1}].x==t$i.x+1"
     47       set sep AND
     48     }
     49     execsql $sql
     50   } $result
     51 }
     52 
     53 # Error of too many tables in the join
     54 #
     55 do_test join3-3.1 {
     56   set sql "SELECT * FROM t1 AS t0, t1"
     57   for {set i 2} {$i<=$bitmask_size} {incr i} {append sql ", t$i"}
     58   catchsql $sql
     59 } [list 1 "at most $bitmask_size tables in a join"]
     60 
     61 
     62 finish_test
     63