gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/make-where7.tcl (about)

     1  #!/usr/bin/tclsh
     2  #
     3  # Run this script to generate randomized test cases for the where7.test
     4  # script.  The output will need to be manually copied and pasted into
     5  # the where7.test script.
     6  #
     7  puts "do_test where7-2.1 \173"
     8  puts "  db eval \173"
     9  puts "    CREATE TABLE t2(a INTEGER PRIMARY KEY,b,c,d,e,f,g);"
    10  set NA 100
    11  for {set a 1} {$a<=$NA} {incr a} {
    12    set b [expr {$a*11}]
    13    set div3 [expr {int(($a+2)/3)}]
    14    set c [expr {$div3*1001}]
    15    set d [expr {$a*1.001}]
    16    set e [expr {$div3*100.1}]
    17    set x [expr {$a%26}]
    18    set f [string range {abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz} \
    19             $x [expr {$x+8}]]
    20    set div5 [expr {int(($a+7)/5)}]
    21    set x [expr {$div5%26}]
    22    set g [string range {zyxwvutsrqponmlkjihgfedcbazyxwvutsrqponmlkjihgfedcba} \
    23             $x [expr {$x+6}]]
    24    puts "    INSERT INTO t2 VALUES($a,$b,$c,$d,$e,'$f','$g');"
    25    lappend fidx($f) $a
    26    lappend gidx($g) $a
    27    set gof($a) $g
    28    set fof($a) $f
    29  
    30    set expr "a=$a"
    31    set term($expr) $a
    32    set expr "((a BETWEEN [expr {$a-1}] AND [expr {$a+1}]) AND a!=$a)"
    33    set x {}
    34    if {$a>1} {set x [expr {$a-1}]}
    35    if {$a<$NA} {lappend x [expr {$a+1}]}
    36    set term($expr) $x
    37    set expr "b=$b"
    38    set term($expr) $a
    39    set expr "b=[expr {$a*11+3}]"
    40    set term($expr) {}
    41    set expr "c=$c"
    42    lappend term($expr) $a
    43    set expr "(d>=$a.0 AND d<[expr {$a+1.0}] AND d NOT NULL)"
    44    lappend term($expr) $a
    45    set expr "f='$f'"
    46    lappend term($expr) $a
    47    set expr \
    48       "(f GLOB '?[string range $f 1 4]*' AND f GLOB '[string range $f 0 3]*')"
    49    lappend term($expr) $a
    50    set expr "(g='$g' AND f GLOB '[string range $f 0 4]*')"
    51    lappend term($expr) $a
    52  }
    53  puts "    CREATE INDEX t2b ON t2(b);"
    54  puts "    CREATE INDEX t2c ON t2(c);"
    55  puts "    CREATE INDEX t2d ON t2(d);"
    56  puts "    CREATE INDEX t2e ON t2(e);"
    57  puts "    CREATE INDEX t2f ON t2(f);"
    58  puts "    CREATE INDEX t2g ON t2(g);"
    59  puts "    CREATE TABLE t3(a INTEGER PRIMARY KEY,b,c,d,e,f,g);"
    60  puts "    INSERT INTO t3 SELECT * FROM t2;"
    61  puts "    CREATE INDEX t3b ON t3(b,c);"
    62  puts "    CREATE INDEX t3c ON t3(c,e);"
    63  puts "    CREATE INDEX t3d ON t3(d,g);"
    64  puts "    CREATE INDEX t3e ON t3(e,f,g);"
    65  puts "    CREATE INDEX t3f ON t3(f,b,d,c);"
    66  puts "    CREATE INDEX t3g ON t3(g,f);"
    67  
    68  puts "  \175"
    69  puts "\175 {}"
    70  
    71  set term(b<0) {}
    72  set term(1000000<b) {}
    73  set term(c<=10) {}
    74  set term(c>=[expr {int(($NA+2)/3)*1001+1}]) {}
    75  set term(d<0.0) {}
    76  set term(d>1e10) {}
    77  set expr {e IS NULL}
    78  set term($expr) {}
    79  set expr {f IS NULL}
    80  set term($expr) {}
    81  set expr {g IS NULL}
    82  set term($expr) {}
    83  
    84  set NT 1000
    85  set termlist [array names term]
    86  set nterm [llength $termlist]
    87  for {set i 2} {$i<=$NT+1} {incr i} {
    88    set n [expr {int(rand()*10)+2}]
    89    set w {}
    90    unset -nocomplain r
    91    for {set j 0} {$j<$n} {incr j} {
    92      set k [expr {int(rand()*$nterm)}]
    93      set t [lindex $termlist $k]
    94      lappend w $t
    95      foreach a $term($t) {
    96        set r($a) 1
    97      }
    98    }
    99    if {[info exists seen($w)]} {
   100      incr i -1
   101      continue
   102    }
   103    set seen($w) 1
   104    set result [lsort -int [array names r]]
   105    puts "do_test where7-2.$i.1 \173"
   106    puts "  count_steps_sort \173"
   107    puts "     SELECT a FROM t2"
   108    set wc [join $w "\n         OR "]
   109    puts "      WHERE $wc"
   110    puts "  \175"
   111    puts "\175 {$result scan 0 sort 0}"
   112    puts "do_test where7-2.$i.2 \173"
   113    puts "  count_steps_sort \173"
   114    puts "     SELECT a FROM t3"
   115    set wc [join $w "\n         OR "]
   116    puts "      WHERE $wc"
   117    puts "  \175"
   118    puts "\175 {$result scan 0 sort 0}"
   119  }
   120  puts "finish_test"