/ Hex Artifact Content
Login

Artifact 23361e108a125dca9c4080c2feb884fe54d69243:


0000: 70 75 74 73 20 7b 23 20 32 30 30 38 20 44 65 63  puts {# 2008 Dec
0010: 65 6d 62 65 72 20 31 31 0a 23 0a 23 20 54 68 65  ember 11.#.# The
0020: 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69 6d   author disclaim
0030: 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20 74  s copyright to t
0040: 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65 2e  his source code.
0050: 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 23 20    In place of.# 
0060: 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20  a legal notice, 
0070: 68 65 72 65 20 69 73 20 61 20 62 6c 65 73 73 69  here is a blessi
0080: 6e 67 3a 0a 23 0a 23 20 20 20 20 4d 61 79 20 79  ng:.#.#    May y
0090: 6f 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e  ou do good and n
00a0: 6f 74 20 65 76 69 6c 2e 0a 23 20 20 20 20 4d 61  ot evil..#    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 23 20 20 20 20 4d 61 79  others..#    May
00f0: 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65 6c   you share freel
0100: 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67 20  y, never taking 
0110: 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67 69  more than you gi
0120: 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a 2a 2a 2a 2a  ve..#.#*********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23  **************.#
0170: 20 54 68 69 73 20 66 69 6c 65 20 69 6d 70 6c 65   This file imple
0180: 6d 65 6e 74 73 20 72 65 67 72 65 73 73 69 6f 6e  ments regression
0190: 20 74 65 73 74 73 20 66 6f 72 20 53 51 4c 69 74   tests for SQLit
01a0: 65 20 6c 69 62 72 61 72 79 2e 0a 23 0a 23 20 54  e library..#.# T
01b0: 68 69 73 20 66 69 6c 65 20 69 73 20 61 75 74 6f  his file is auto
01c0: 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61  matically genera
01d0: 74 65 64 20 66 72 6f 6d 20 61 20 73 65 70 61 72  ted from a separ
01e0: 61 74 65 20 54 43 4c 20 73 63 72 69 70 74 2e 0a  ate TCL script..
01f0: 23 20 54 68 69 73 20 66 69 6c 65 20 73 65 65 6b  # This file seek
0200: 73 20 74 6f 20 65 78 65 72 63 69 73 65 20 69 6e  s to exercise in
0210: 74 65 67 65 72 20 62 6f 75 6e 64 61 72 79 20 76  teger boundary v
0220: 61 6c 75 65 73 2e 0a 23 0a 0a 73 65 74 20 74 65  alues..#..set te
0230: 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e  stdir [file dirn
0240: 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72  ame $argv0].sour
0250: 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74  ce $testdir/test
0260: 65 72 2e 74 63 6c 0a 0a 23 20 4d 61 6e 79 20 6f  er.tcl..# Many o
0270: 66 20 74 68 65 20 62 6f 75 6e 64 61 72 79 20 74  f the boundary t
0280: 65 73 74 73 20 64 65 70 65 6e 64 20 6f 6e 20 61  ests depend on a
0290: 20 77 6f 72 6b 69 6e 67 20 36 34 2d 62 69 74 20   working 64-bit 
02a0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a  implementation..
02b0: 69 66 20 7b 21 5b 77 6f 72 6b 69 6e 67 5f 36 34  if {![working_64
02c0: 62 69 74 5f 69 6e 74 5d 7d 20 7b 20 66 69 6e 69  bit_int]} { fini
02d0: 73 68 5f 74 65 73 74 3b 20 72 65 74 75 72 6e 20  sh_test; return 
02e0: 7d 0a 7d 0a 0a 65 78 70 72 20 73 72 61 6e 64 28  }.}..expr srand(
02f0: 30 29 0a 0a 23 20 47 65 6e 65 72 61 74 65 20 69  0)..# Generate i
0300: 6e 74 65 72 65 73 74 69 6e 67 20 62 6f 75 6e 64  nteresting bound
0310: 61 72 79 20 6e 75 6d 62 65 72 73 0a 23 0a 66 6f  ary numbers.#.fo
0320: 72 65 61 63 68 20 78 20 7b 0a 20 20 30 0a 20 20  reach x {.  0.  
0330: 31 0a 20 20 30 78 37 66 0a 20 20 30 78 37 66 66  1.  0x7f.  0x7ff
0340: 66 0a 20 20 30 78 37 66 66 66 66 66 0a 20 20 30  f.  0x7fffff.  0
0350: 78 37 66 66 66 66 66 66 66 0a 20 20 30 78 37 66  x7fffffff.  0x7f
0360: 66 66 66 66 66 66 66 66 0a 20 20 30 78 37 66 66  ffffffff.  0x7ff
0370: 66 66 66 66 66 66 66 66 66 0a 20 20 30 78 37 66  fffffffff.  0x7f
0380: 66 66 66 66 66 66 66 66 66 66 66 66 0a 20 20 30  ffffffffffff.  0
0390: 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
03a0: 66 0a 7d 20 7b 0a 20 20 73 65 74 20 78 20 5b 65  f.} {.  set x [e
03b0: 78 70 72 20 7b 77 69 64 65 28 24 78 29 7d 5d 0a  xpr {wide($x)}].
03c0: 20 20 73 65 74 20 62 6f 75 6e 64 61 72 79 6e 75    set boundarynu
03d0: 6d 28 24 78 29 20 31 0a 20 20 73 65 74 20 62 6f  m($x) 1.  set bo
03e0: 75 6e 64 61 72 79 6e 75 6d 28 5b 65 78 70 72 20  undarynum([expr 
03f0: 7b 77 69 64 65 28 24 78 2b 31 29 7d 5d 29 20 31  {wide($x+1)}]) 1
0400: 0a 20 20 73 65 74 20 62 6f 75 6e 64 61 72 79 6e  .  set boundaryn
0410: 75 6d 28 5b 65 78 70 72 20 7b 77 69 64 65 28 2d  um([expr {wide(-
0420: 28 24 78 2b 31 29 29 7d 5d 29 20 31 0a 20 20 73  ($x+1))}]) 1.  s
0430: 65 74 20 62 6f 75 6e 64 61 72 79 6e 75 6d 28 5b  et boundarynum([
0440: 65 78 70 72 20 7b 77 69 64 65 28 2d 28 24 78 2b  expr {wide(-($x+
0450: 32 29 29 7d 5d 29 20 31 0a 20 20 73 65 74 20 62  2))}]) 1.  set b
0460: 6f 75 6e 64 61 72 79 6e 75 6d 28 5b 65 78 70 72  oundarynum([expr
0470: 20 7b 77 69 64 65 28 24 78 2b 24 78 2b 31 29 7d   {wide($x+$x+1)}
0480: 5d 29 20 31 0a 20 20 73 65 74 20 62 6f 75 6e 64  ]) 1.  set bound
0490: 61 72 79 6e 75 6d 28 5b 65 78 70 72 20 7b 77 69  arynum([expr {wi
04a0: 64 65 28 24 78 2b 24 78 2b 32 29 7d 5d 29 20 31  de($x+$x+2)}]) 1
04b0: 0a 7d 0a 73 65 74 20 78 20 5b 65 78 70 72 20 7b  .}.set x [expr {
04c0: 77 69 64 65 28 31 32 37 29 7d 5d 0a 66 6f 72 20  wide(127)}].for 
04d0: 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d 39  {set i 1} {$i<=9
04e0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 73  } {incr i} {.  s
04f0: 65 74 20 62 6f 75 6e 64 61 72 79 6e 75 6d 28 24  et boundarynum($
0500: 78 29 20 31 0a 20 20 73 65 74 20 62 6f 75 6e 64  x) 1.  set bound
0510: 61 72 79 6e 75 6d 28 5b 65 78 70 72 20 7b 77 69  arynum([expr {wi
0520: 64 65 28 24 78 2b 31 29 7d 5d 29 20 31 0a 20 20  de($x+1)}]) 1.  
0530: 73 65 74 20 78 20 5b 65 78 70 72 20 7b 77 69 64  set x [expr {wid
0540: 65 28 24 78 2a 31 32 38 20 2b 20 31 32 37 29 7d  e($x*128 + 127)}
0550: 5d 0a 7d 0a 0a 23 20 53 63 72 61 6d 62 6c 65 20  ].}..# Scramble 
0560: 74 68 65 20 24 69 6e 6c 69 73 74 20 69 6e 74 6f  the $inlist into
0570: 20 61 20 72 61 6e 64 6f 6d 20 6f 72 64 65 72 2e   a random order.
0580: 0a 23 0a 70 72 6f 63 20 73 63 72 61 6d 62 6c 65  .#.proc scramble
0590: 20 7b 69 6e 6c 69 73 74 7d 20 7b 0a 20 20 73 65   {inlist} {.  se
05a0: 74 20 79 20 7b 7d 0a 20 20 66 6f 72 65 61 63 68  t y {}.  foreach
05b0: 20 78 20 24 69 6e 6c 69 73 74 20 7b 0a 20 20 20   x $inlist {.   
05c0: 20 6c 61 70 70 65 6e 64 20 79 20 5b 6c 69 73 74   lappend y [list
05d0: 20 5b 65 78 70 72 20 7b 72 61 6e 64 28 29 7d 5d   [expr {rand()}]
05e0: 20 24 78 5d 0a 20 20 7d 0a 20 20 73 65 74 20 79   $x].  }.  set y
05f0: 20 5b 6c 73 6f 72 74 20 24 79 5d 0a 20 20 73 65   [lsort $y].  se
0600: 74 20 6f 75 74 6c 69 73 74 20 7b 7d 0a 20 20 66  t outlist {}.  f
0610: 6f 72 65 61 63 68 20 78 20 24 79 20 7b 0a 20 20  oreach x $y {.  
0620: 20 20 6c 61 70 70 65 6e 64 20 6f 75 74 6c 69 73    lappend outlis
0630: 74 20 5b 6c 69 6e 64 65 78 20 24 78 20 31 5d 0a  t [lindex $x 1].
0640: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 24 6f 75    }.  return $ou
0650: 74 6c 69 73 74 0a 7d 0a 0a 23 20 41 20 73 69 6d  tlist.}..# A sim
0660: 70 6c 65 20 73 65 6c 65 63 74 69 6f 6e 20 73 6f  ple selection so
0670: 72 74 2e 20 20 4e 6f 74 20 74 72 79 69 6e 67 20  rt.  Not trying 
0680: 74 6f 20 62 65 20 65 66 66 69 63 69 65 6e 74 2e  to be efficient.
0690: 0a 23 0a 70 72 6f 63 20 73 6f 72 74 20 7b 69 6e  .#.proc sort {in
06a0: 6c 69 73 74 7d 20 7b 0a 20 20 73 65 74 20 6f 75  list} {.  set ou
06b0: 74 6c 69 73 74 20 7b 7d 0a 20 20 73 65 74 20 6d  tlist {}.  set m
06c0: 6e 20 5b 6c 69 6e 64 65 78 20 24 69 6e 6c 69 73  n [lindex $inlis
06d0: 74 20 30 5d 0a 20 20 66 6f 72 65 61 63 68 20 78  t 0].  foreach x
06e0: 20 24 69 6e 6c 69 73 74 20 7b 0a 20 20 20 20 69   $inlist {.    i
06f0: 66 20 7b 24 78 3c 24 6d 6e 7d 20 7b 73 65 74 20  f {$x<$mn} {set 
0700: 6d 6e 20 24 78 7d 0a 20 20 7d 0a 20 20 73 65 74  mn $x}.  }.  set
0710: 20 6f 75 74 6c 69 73 74 20 24 6d 6e 0a 20 20 73   outlist $mn.  s
0720: 65 74 20 6d 78 20 24 6d 6e 0a 20 20 77 68 69 6c  et mx $mn.  whil
0730: 65 20 7b 31 7d 20 7b 0a 20 20 20 20 73 65 74 20  e {1} {.    set 
0740: 76 61 6c 69 64 20 30 0a 20 20 20 20 66 6f 72 65  valid 0.    fore
0750: 61 63 68 20 78 20 24 69 6e 6c 69 73 74 20 7b 0a  ach x $inlist {.
0760: 20 20 20 20 20 20 69 66 20 7b 24 78 3e 24 6d 78        if {$x>$mx
0770: 20 26 26 20 28 21 24 76 61 6c 69 64 20 7c 7c 20   && (!$valid || 
0780: 24 6d 6e 3e 24 78 29 7d 20 7b 0a 20 20 20 20 20  $mn>$x)} {.     
0790: 20 20 20 73 65 74 20 6d 6e 20 24 78 0a 20 20 20     set mn $x.   
07a0: 20 20 20 20 20 73 65 74 20 76 61 6c 69 64 20 31       set valid 1
07b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
07c0: 20 20 20 69 66 20 7b 21 24 76 61 6c 69 64 7d 20     if {!$valid} 
07d0: 62 72 65 61 6b 0a 20 20 20 20 6c 61 70 70 65 6e  break.    lappen
07e0: 64 20 6f 75 74 6c 69 73 74 20 24 6d 6e 0a 20 20  d outlist $mn.  
07f0: 20 20 73 65 74 20 6d 78 20 24 6d 6e 0a 20 20 7d    set mx $mn.  }
0800: 0a 20 20 72 65 74 75 72 6e 20 24 6f 75 74 6c 69  .  return $outli
0810: 73 74 0a 7d 0a 0a 23 20 52 65 76 65 72 73 65 20  st.}..# Reverse 
0820: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 61 20 6c  the order of a l
0830: 69 73 74 0a 23 0a 70 72 6f 63 20 72 65 76 65 72  ist.#.proc rever
0840: 73 65 20 7b 69 6e 6c 69 73 74 7d 20 7b 0a 20 20  se {inlist} {.  
0850: 73 65 74 20 69 20 5b 6c 6c 65 6e 67 74 68 20 24  set i [llength $
0860: 69 6e 6c 69 73 74 5d 0a 20 20 73 65 74 20 6f 75  inlist].  set ou
0870: 74 6c 69 73 74 20 7b 7d 0a 20 20 66 6f 72 20 7b  tlist {}.  for {
0880: 69 6e 63 72 20 69 20 2d 31 7d 20 7b 24 69 3e 3d  incr i -1} {$i>=
0890: 30 7d 20 7b 69 6e 63 72 20 69 20 2d 31 7d 20 7b  0} {incr i -1} {
08a0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 75 74  .    lappend out
08b0: 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 69 6e  list [lindex $in
08c0: 6c 69 73 74 20 24 69 5d 0a 20 20 7d 0a 20 20 72  list $i].  }.  r
08d0: 65 74 75 72 6e 20 24 6f 75 74 6c 69 73 74 0a 7d  eturn $outlist.}
08e0: 0a 0a 73 65 74 20 6e 75 6d 73 31 20 5b 73 63 72  ..set nums1 [scr
08f0: 61 6d 62 6c 65 20 5b 61 72 72 61 79 20 6e 61 6d  amble [array nam
0900: 65 73 20 62 6f 75 6e 64 61 72 79 6e 75 6d 5d 5d  es boundarynum]]
0910: 0a 73 65 74 20 6e 75 6d 73 32 20 5b 73 63 72 61  .set nums2 [scra
0920: 6d 62 6c 65 20 5b 61 72 72 61 79 20 6e 61 6d 65  mble [array name
0930: 73 20 62 6f 75 6e 64 61 72 79 6e 75 6d 5d 5d 0a  s boundarynum]].
0940: 0a 73 65 74 20 74 6e 61 6d 65 20 62 6f 75 6e 64  .set tname bound
0950: 61 72 79 33 0a 70 75 74 73 20 22 64 6f 5f 74 65  ary3.puts "do_te
0960: 73 74 20 24 74 6e 61 6d 65 2d 31 2e 31 20 5c 31  st $tname-1.1 \1
0970: 37 33 22 0a 70 75 74 73 20 22 20 20 64 62 20 65  73".puts "  db e
0980: 76 61 6c 20 5c 31 37 33 22 0a 70 75 74 73 20 22  val \173".puts "
0990: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
09a0: 20 74 31 28 61 2c 78 29 3b 22 0a 73 65 74 20 61   t1(a,x);".set a
09b0: 20 30 0a 66 6f 72 65 61 63 68 20 72 20 24 6e 75   0.foreach r $nu
09c0: 6d 73 31 20 7b 0a 20 20 69 6e 63 72 20 61 0a 20  ms1 {.  incr a. 
09d0: 20 73 65 74 20 74 31 72 61 28 24 72 29 20 24 61   set t1ra($r) $a
09e0: 0a 20 20 73 65 74 20 74 31 61 72 28 24 61 29 20  .  set t1ar($a) 
09f0: 24 72 0a 20 20 73 65 74 20 78 20 5b 66 6f 72 6d  $r.  set x [form
0a00: 61 74 20 25 30 31 36 78 20 5b 65 78 70 72 20 7b  at %016x [expr {
0a10: 77 69 64 65 28 24 72 29 7d 5d 5d 0a 20 20 73 65  wide($r)}]].  se
0a20: 74 20 74 31 72 78 28 24 72 29 20 24 78 0a 20 20  t t1rx($r) $x.  
0a30: 73 65 74 20 74 31 78 72 28 24 78 29 20 24 72 0a  set t1xr($x) $r.
0a40: 20 20 70 75 74 73 20 22 20 20 20 20 49 4e 53 45    puts "    INSE
0a50: 52 54 20 49 4e 54 4f 20 74 31 28 6f 69 64 2c 61  RT INTO t1(oid,a
0a60: 2c 78 29 20 56 41 4c 55 45 53 28 24 72 2c 24 61  ,x) VALUES($r,$a
0a70: 2c 27 24 78 27 29 3b 22 0a 7d 0a 70 75 74 73 20  ,'$x');".}.puts 
0a80: 22 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  "    CREATE INDE
0a90: 58 20 74 31 69 31 20 4f 4e 20 74 31 28 61 29 3b  X t1i1 ON t1(a);
0aa0: 22 0a 70 75 74 73 20 22 20 20 20 20 43 52 45 41  ".puts "    CREA
0ab0: 54 45 20 49 4e 44 45 58 20 74 31 69 32 20 4f 4e  TE INDEX t1i2 ON
0ac0: 20 74 31 28 78 29 3b 22 0a 70 75 74 73 20 22 20   t1(x);".puts " 
0ad0: 20 5c 31 37 35 22 0a 70 75 74 73 20 22 5c 31 37   \175".puts "\17
0ae0: 35 20 7b 7d 22 0a 0a 70 75 74 73 20 22 64 6f 5f  5 {}"..puts "do_
0af0: 74 65 73 74 20 24 74 6e 61 6d 65 2d 31 2e 32 20  test $tname-1.2 
0b00: 5c 31 37 33 22 0a 70 75 74 73 20 22 20 20 64 62  \173".puts "  db
0b10: 20 65 76 61 6c 20 5c 31 37 33 22 0a 70 75 74 73   eval \173".puts
0b20: 20 22 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75   "    SELECT cou
0b30: 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 22 0a 70  nt(*) FROM t1".p
0b40: 75 74 73 20 22 20 20 5c 31 37 35 22 0a 70 75 74  uts "  \175".put
0b50: 73 20 22 5c 31 37 35 20 7b 36 34 7d 22 0a 0a 70  s "\175 {64}"..p
0b60: 75 74 73 20 22 64 6f 5f 74 65 73 74 20 24 74 6e  uts "do_test $tn
0b70: 61 6d 65 2d 31 2e 33 20 5c 31 37 33 22 0a 70 75  ame-1.3 \173".pu
0b80: 74 73 20 22 20 20 64 62 20 65 76 61 6c 20 5c 31  ts "  db eval \1
0b90: 37 33 22 0a 70 75 74 73 20 22 20 20 20 20 43 52  73".puts "    CR
0ba0: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 72 2c  EATE TABLE t2(r,
0bb0: 61 29 3b 22 0a 70 75 74 73 20 22 20 20 20 20 49  a);".puts "    I
0bc0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45  NSERT INTO t2 SE
0bd0: 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52  LECT rowid, a FR
0be0: 4f 4d 20 74 31 3b 22 0a 70 75 74 73 20 22 20 20  OM t1;".puts "  
0bf0: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
0c00: 32 69 31 20 4f 4e 20 74 32 28 72 29 3b 22 0a 70  2i1 ON t2(r);".p
0c10: 75 74 73 20 22 20 20 20 20 43 52 45 41 54 45 20  uts "    CREATE 
0c20: 49 4e 44 45 58 20 74 32 69 32 20 4f 4e 20 74 32  INDEX t2i2 ON t2
0c30: 28 61 29 3b 22 0a 70 75 74 73 20 22 20 20 20 20  (a);".puts "    
0c40: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
0c50: 41 4c 55 45 53 28 39 2e 32 32 33 33 37 33 30 33  ALUES(9.22337303
0c60: 36 38 35 34 37 37 35 38 30 38 30 30 65 2b 31 38  685477580800e+18
0c70: 2c 36 35 29 3b 22 0a 73 65 74 20 74 31 72 61 28  ,65);".set t1ra(
0c80: 39 2e 32 32 33 33 37 33 30 33 36 38 35 34 37 37  9.22337303685477
0c90: 35 38 30 38 30 30 65 2b 31 38 29 20 36 35 0a 73  580800e+18) 65.s
0ca0: 65 74 20 74 31 61 72 28 36 35 29 20 39 2e 32 32  et t1ar(65) 9.22
0cb0: 33 33 37 33 30 33 36 38 35 34 37 37 35 38 30 38  3373036854775808
0cc0: 30 30 65 2b 31 38 29 0a 70 75 74 73 20 22 20 20  00e+18).puts "  
0cd0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
0ce0: 20 56 41 4c 55 45 53 28 2d 39 2e 32 32 33 33 37   VALUES(-9.22337
0cf0: 33 30 33 36 38 35 34 37 37 35 38 30 38 30 30 65  303685477580800e
0d00: 2b 31 38 2c 36 36 29 3b 22 0a 73 65 74 20 74 31  +18,66);".set t1
0d10: 72 61 28 2d 39 2e 32 32 33 33 37 33 30 33 36 38  ra(-9.2233730368
0d20: 35 34 37 37 35 38 30 38 30 30 65 2b 31 38 29 20  5477580800e+18) 
0d30: 36 36 0a 73 65 74 20 74 31 61 72 28 36 36 29 20  66.set t1ar(66) 
0d40: 2d 39 2e 32 32 33 33 37 33 30 33 36 38 35 34 37  -9.2233730368547
0d50: 37 35 38 30 38 30 30 65 2b 31 38 29 0a 70 75 74  7580800e+18).put
0d60: 73 20 22 20 20 20 20 53 45 4c 45 43 54 20 63 6f  s "    SELECT co
0d70: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 32 3b 22  unt(*) FROM t2;"
0d80: 0a 70 75 74 73 20 22 20 20 5c 31 37 35 22 0a 70  .puts "  \175".p
0d90: 75 74 73 20 22 5c 31 37 35 20 7b 36 36 7d 22 0a  uts "\175 {66}".
0da0: 0a 73 65 74 20 6e 75 6d 73 33 20 24 6e 75 6d 73  .set nums3 $nums
0db0: 32 0a 6c 61 70 70 65 6e 64 20 6e 75 6d 73 33 20  2.lappend nums3 
0dc0: 39 2e 32 32 33 33 37 33 30 33 36 38 35 34 37 37  9.22337303685477
0dd0: 35 38 30 38 30 30 65 2b 31 38 0a 6c 61 70 70 65  580800e+18.lappe
0de0: 6e 64 20 6e 75 6d 73 33 20 2d 39 2e 32 32 33 33  nd nums3 -9.2233
0df0: 37 33 30 33 36 38 35 34 37 37 35 38 30 38 30 30  7303685477580800
0e00: 65 2b 31 38 0a 0a 73 65 74 20 69 20 30 0a 66 6f  e+18..set i 0.fo
0e10: 72 65 61 63 68 20 72 20 24 6e 75 6d 73 33 20 7b  reach r $nums3 {
0e20: 0a 20 20 69 6e 63 72 20 69 0a 0a 20 20 73 65 74  .  incr i..  set
0e30: 20 72 35 20 24 72 2e 35 0a 20 20 73 65 74 20 72   r5 $r.5.  set r
0e40: 30 20 24 72 2e 30 0a 20 20 20 69 66 20 7b 61 62  0 $r.0.   if {ab
0e50: 73 28 24 72 29 3c 30 78 37 46 46 46 46 46 46 46  s($r)<0x7FFFFFFF
0e60: 46 46 46 46 46 46 46 46 20 7c 7c 20 24 72 3d 3d  FFFFFFFF || $r==
0e70: 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
0e80: 35 38 30 38 7d 20 7b 0a 20 20 20 20 73 65 74 20  5808} {.    set 
0e90: 78 20 24 74 31 72 78 28 24 72 29 0a 20 20 20 20  x $t1rx($r).    
0ea0: 73 65 74 20 61 20 24 74 31 72 61 28 24 72 29 0a  set a $t1ra($r).
0eb0: 20 20 20 20 70 75 74 73 20 22 64 6f 5f 74 65 73      puts "do_tes
0ec0: 74 20 24 74 6e 61 6d 65 2d 32 2e 24 69 2e 31 20  t $tname-2.$i.1 
0ed0: 5c 31 37 33 22 0a 20 20 20 20 70 75 74 73 20 22  \173".    puts "
0ee0: 20 20 64 62 20 65 76 61 6c 20 5c 31 37 33 22 0a    db eval \173".
0ef0: 20 20 20 20 70 75 74 73 20 22 20 20 20 20 53 45      puts "    SE
0f00: 4c 45 43 54 20 74 31 2e 2a 20 46 52 4f 4d 20 74  LECT t1.* FROM t
0f10: 31 2c 20 74 32 20 57 48 45 52 45 20 74 31 2e 72  1, t2 WHERE t1.r
0f20: 6f 77 69 64 3d 24 72 20 41 4e 44 20 74 32 2e 61  owid=$r AND t2.a
0f30: 3d 74 31 2e 61 22 0a 20 20 20 20 70 75 74 73 20  =t1.a".    puts 
0f40: 22 20 20 5c 31 37 35 22 0a 20 20 20 20 70 75 74  "  \175".    put
0f50: 73 20 22 5c 31 37 35 20 7b 24 61 20 24 78 7d 22  s "\175 {$a $x}"
0f60: 0a 20 20 20 20 70 75 74 73 20 22 64 6f 5f 74 65  .    puts "do_te
0f70: 73 74 20 24 74 6e 61 6d 65 2d 32 2e 24 69 2e 32  st $tname-2.$i.2
0f80: 20 5c 31 37 33 22 0a 20 20 20 20 70 75 74 73 20   \173".    puts 
0f90: 22 20 20 64 62 20 65 76 61 6c 20 5c 31 37 33 22  "  db eval \173"
0fa0: 0a 20 20 20 20 70 75 74 73 20 22 20 20 20 20 53  .    puts "    S
0fb0: 45 4c 45 43 54 20 74 32 2e 2a 20 46 52 4f 4d 20  ELECT t2.* FROM 
0fc0: 74 31 20 4a 4f 49 4e 20 74 32 20 55 53 49 4e 47  t1 JOIN t2 USING
0fd0: 28 61 29 20 57 48 45 52 45 20 78 3d 27 24 78 27  (a) WHERE x='$x'
0fe0: 22 0a 20 20 20 20 70 75 74 73 20 22 20 20 5c 31  ".    puts "  \1
0ff0: 37 35 22 0a 20 20 20 20 70 75 74 73 20 22 5c 31  75".    puts "\1
1000: 37 35 20 7b 24 72 20 24 61 7d 22 0a 20 20 20 20  75 {$r $a}".    
1010: 70 75 74 73 20 22 64 6f 5f 74 65 73 74 20 24 74  puts "do_test $t
1020: 6e 61 6d 65 2d 32 2e 24 69 2e 33 20 5c 31 37 33  name-2.$i.3 \173
1030: 22 0a 20 20 20 20 70 75 74 73 20 22 20 20 64 62  ".    puts "  db
1040: 20 65 76 61 6c 20 5c 31 37 33 22 0a 20 20 20 20   eval \173".    
1050: 70 75 74 73 20 22 20 20 20 20 53 45 4c 45 43 54  puts "    SELECT
1060: 20 74 31 2e 72 6f 77 69 64 2c 20 78 20 46 52 4f   t1.rowid, x FRO
1070: 4d 20 74 31 20 4a 4f 49 4e 20 74 32 20 4f 4e 20  M t1 JOIN t2 ON 
1080: 74 32 2e 72 3d 74 31 2e 72 6f 77 69 64 20 57 48  t2.r=t1.rowid WH
1090: 45 52 45 20 74 32 2e 61 3d 24 61 22 0a 20 20 20  ERE t2.a=$a".   
10a0: 20 70 75 74 73 20 22 20 20 5c 31 37 35 22 0a 20   puts "  \175". 
10b0: 20 20 20 70 75 74 73 20 22 5c 31 37 35 20 7b 24     puts "\175 {$
10c0: 72 20 24 78 7d 22 0a 20 20 7d 0a 0a 20 20 66 6f  r $x}".  }..  fo
10d0: 72 65 61 63 68 20 6f 70 20 7b 3e 20 3e 3d 20 3c  reach op {> >= <
10e0: 20 3c 3d 7d 20 73 75 62 6e 6f 20 7b 67 74 20 67   <=} subno {gt g
10f0: 65 20 6c 74 20 6c 65 7d 20 7b 0a 0a 20 20 20 20  e lt le} {..    
1100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1110: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1140: 20 32 2e 78 2e 79 2e 31 0a 20 20 20 20 73 65 74   2.x.y.1.    set
1150: 20 72 73 65 74 20 7b 7d 0a 20 20 20 20 73 65 74   rset {}.    set
1160: 20 61 73 65 74 20 7b 7d 0a 20 20 20 20 66 6f 72   aset {}.    for
1170: 65 61 63 68 20 72 78 20 24 6e 75 6d 73 32 20 7b  each rx $nums2 {
1180: 0a 20 20 20 20 20 20 69 66 20 22 5c 24 72 78 20  .      if "\$rx 
1190: 24 6f 70 20 5c 24 72 22 20 7b 0a 20 20 20 20 20  $op \$r" {.     
11a0: 20 20 20 6c 61 70 70 65 6e 64 20 72 73 65 74 20     lappend rset 
11b0: 24 72 78 0a 20 20 20 20 20 20 20 20 6c 61 70 70  $rx.        lapp
11c0: 65 6e 64 20 61 73 65 74 20 24 74 31 72 61 28 24  end aset $t1ra($
11d0: 72 78 29 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  rx).      }.    
11e0: 7d 0a 20 20 20 20 70 75 74 73 20 22 64 6f 5f 74  }.    puts "do_t
11f0: 65 73 74 20 24 74 6e 61 6d 65 2d 32 2e 24 69 2e  est $tname-2.$i.
1200: 24 73 75 62 6e 6f 2e 31 20 5c 31 37 33 22 0a 20  $subno.1 \173". 
1210: 20 20 20 70 75 74 73 20 22 20 20 64 62 20 65 76     puts "  db ev
1220: 61 6c 20 5c 31 37 33 22 0a 20 20 20 20 70 75 74  al \173".    put
1230: 73 20 22 20 20 20 20 53 45 4c 45 43 54 20 74 32  s "    SELECT t2
1240: 2e 61 20 46 52 4f 4d 20 74 31 20 4a 4f 49 4e 20  .a FROM t1 JOIN 
1250: 74 32 20 55 53 49 4e 47 28 61 29 22 0a 20 20 20  t2 USING(a)".   
1260: 20 70 75 74 73 20 22 20 20 20 20 20 57 48 45 52   puts "     WHER
1270: 45 20 74 31 2e 72 6f 77 69 64 20 24 6f 70 20 24  E t1.rowid $op $
1280: 72 20 4f 52 44 45 52 20 42 59 20 74 32 2e 61 22  r ORDER BY t2.a"
1290: 0a 20 20 20 20 70 75 74 73 20 22 20 20 5c 31 37  .    puts "  \17
12a0: 35 22 0a 20 20 20 20 70 75 74 73 20 22 5c 31 37  5".    puts "\17
12b0: 35 20 7b 5b 73 6f 72 74 20 24 61 73 65 74 5d 7d  5 {[sort $aset]}
12c0: 22 0a 20 20 0a 20 20 20 20 23 23 23 23 23 23 23  ".  .    #######
12d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1300: 23 23 23 23 23 23 23 23 23 20 32 2e 78 2e 79 2e  ######### 2.x.y.
1310: 32 0a 20 20 20 20 70 75 74 73 20 22 64 6f 5f 74  2.    puts "do_t
1320: 65 73 74 20 24 74 6e 61 6d 65 2d 32 2e 24 69 2e  est $tname-2.$i.
1330: 24 73 75 62 6e 6f 2e 32 20 5c 31 37 33 22 0a 20  $subno.2 \173". 
1340: 20 20 20 70 75 74 73 20 22 20 20 64 62 20 65 76     puts "  db ev
1350: 61 6c 20 5c 31 37 33 22 0a 20 20 20 20 70 75 74  al \173".    put
1360: 73 20 22 20 20 20 20 53 45 4c 45 43 54 20 74 32  s "    SELECT t2
1370: 2e 61 20 46 52 4f 4d 20 74 32 20 4e 41 54 55 52  .a FROM t2 NATUR
1380: 41 4c 20 4a 4f 49 4e 20 74 31 22 0a 20 20 20 20  AL JOIN t1".    
1390: 70 75 74 73 20 22 20 20 20 20 20 57 48 45 52 45  puts "     WHERE
13a0: 20 74 31 2e 72 6f 77 69 64 20 24 6f 70 20 24 72   t1.rowid $op $r
13b0: 20 4f 52 44 45 52 20 42 59 20 74 31 2e 61 20 44   ORDER BY t1.a D
13c0: 45 53 43 22 0a 20 20 20 20 70 75 74 73 20 22 20  ESC".    puts " 
13d0: 20 5c 31 37 35 22 0a 20 20 20 20 70 75 74 73 20   \175".    puts 
13e0: 22 5c 31 37 35 20 7b 5b 72 65 76 65 72 73 65 20  "\175 {[reverse 
13f0: 5b 73 6f 72 74 20 24 61 73 65 74 5d 5d 7d 22 0a  [sort $aset]]}".
1400: 0a 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
1410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1440: 23 23 23 23 23 23 20 32 2e 78 2e 79 2e 33 0a 20  ###### 2.x.y.3. 
1450: 20 20 20 73 65 74 20 61 78 20 24 74 31 72 61 28     set ax $t1ra(
1460: 24 72 29 0a 20 20 20 20 73 65 74 20 61 73 65 74  $r).    set aset
1470: 20 7b 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20   {}.    foreach 
1480: 72 78 20 5b 73 6f 72 74 20 24 72 73 65 74 5d 20  rx [sort $rset] 
1490: 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20  {.      lappend 
14a0: 61 73 65 74 20 24 74 31 72 61 28 24 72 78 29 0a  aset $t1ra($rx).
14b0: 20 20 20 20 7d 0a 20 20 20 20 70 75 74 73 20 22      }.    puts "
14c0: 64 6f 5f 74 65 73 74 20 24 74 6e 61 6d 65 2d 32  do_test $tname-2
14d0: 2e 24 69 2e 24 73 75 62 6e 6f 2e 33 20 5c 31 37  .$i.$subno.3 \17
14e0: 33 22 0a 20 20 20 20 70 75 74 73 20 22 20 20 64  3".    puts "  d
14f0: 62 20 65 76 61 6c 20 5c 31 37 33 22 0a 20 20 20  b eval \173".   
1500: 20 70 75 74 73 20 22 20 20 20 20 53 45 4c 45 43   puts "    SELEC
1510: 54 20 74 31 2e 61 20 46 52 4f 4d 20 74 31 20 4a  T t1.a FROM t1 J
1520: 4f 49 4e 20 74 32 20 4f 4e 20 74 31 2e 72 6f 77  OIN t2 ON t1.row
1530: 69 64 20 24 6f 70 20 74 32 2e 72 22 0a 20 20 20  id $op t2.r".   
1540: 20 70 75 74 73 20 22 20 20 20 20 20 57 48 45 52   puts "     WHER
1550: 45 20 74 32 2e 61 3d 24 61 78 22 0a 20 20 20 20  E t2.a=$ax".    
1560: 70 75 74 73 20 22 20 20 20 20 20 4f 52 44 45 52  puts "     ORDER
1570: 20 42 59 20 74 31 2e 72 6f 77 69 64 22 0a 20 20   BY t1.rowid".  
1580: 20 20 70 75 74 73 20 22 20 20 5c 31 37 35 22 0a    puts "  \175".
1590: 20 20 20 20 70 75 74 73 20 22 5c 31 37 35 20 7b      puts "\175 {
15a0: 24 61 73 65 74 7d 22 0a 20 20 0a 20 20 20 20 23  $aset}".  .    #
15b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 20  ############### 
15f0: 32 2e 78 2e 79 2e 34 0a 20 20 20 20 73 65 74 20  2.x.y.4.    set 
1600: 61 73 65 74 20 7b 7d 0a 20 20 20 20 66 6f 72 65  aset {}.    fore
1610: 61 63 68 20 72 78 20 5b 72 65 76 65 72 73 65 20  ach rx [reverse 
1620: 5b 73 6f 72 74 20 24 72 73 65 74 5d 5d 20 7b 0a  [sort $rset]] {.
1630: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 61 73        lappend as
1640: 65 74 20 24 74 31 72 61 28 24 72 78 29 0a 20 20  et $t1ra($rx).  
1650: 20 20 7d 0a 20 20 20 20 70 75 74 73 20 22 64 6f    }.    puts "do
1660: 5f 74 65 73 74 20 24 74 6e 61 6d 65 2d 32 2e 24  _test $tname-2.$
1670: 69 2e 24 73 75 62 6e 6f 2e 34 20 5c 31 37 33 22  i.$subno.4 \173"
1680: 0a 20 20 20 20 70 75 74 73 20 22 20 20 64 62 20  .    puts "  db 
1690: 65 76 61 6c 20 5c 31 37 33 22 0a 20 20 20 20 70  eval \173".    p
16a0: 75 74 73 20 22 20 20 20 20 53 45 4c 45 43 54 20  uts "    SELECT 
16b0: 74 31 2e 61 20 46 52 4f 4d 20 74 31 20 4a 4f 49  t1.a FROM t1 JOI
16c0: 4e 20 74 32 20 4f 4e 20 74 31 2e 72 6f 77 69 64  N t2 ON t1.rowid
16d0: 20 24 6f 70 20 74 32 2e 72 22 0a 20 20 20 20 70   $op t2.r".    p
16e0: 75 74 73 20 22 20 20 20 20 20 57 48 45 52 45 20  uts "     WHERE 
16f0: 74 32 2e 61 3d 24 61 78 22 0a 20 20 20 20 70 75  t2.a=$ax".    pu
1700: 74 73 20 22 20 20 20 20 20 4f 52 44 45 52 20 42  ts "     ORDER B
1710: 59 20 74 31 2e 72 6f 77 69 64 20 44 45 53 43 22  Y t1.rowid DESC"
1720: 0a 20 20 20 20 70 75 74 73 20 22 20 20 5c 31 37  .    puts "  \17
1730: 35 22 0a 20 20 20 20 70 75 74 73 20 22 5c 31 37  5".    puts "\17
1740: 35 20 7b 24 61 73 65 74 7d 22 0a 20 20 0a 20 20  5 {$aset}".  .  
1750: 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
1760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1790: 23 23 20 32 2e 78 2e 79 2e 35 0a 20 20 20 20 73  ## 2.x.y.5.    s
17a0: 65 74 20 61 73 65 74 20 7b 7d 0a 20 20 20 20 73  et aset {}.    s
17b0: 65 74 20 78 73 65 74 20 7b 7d 0a 20 20 20 20 66  et xset {}.    f
17c0: 6f 72 65 61 63 68 20 72 78 20 24 72 73 65 74 20  oreach rx $rset 
17d0: 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20  {.      lappend 
17e0: 78 73 65 74 20 24 74 31 72 78 28 24 72 78 29 0a  xset $t1rx($rx).
17f0: 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 65 61 63      }.    foreac
1800: 68 20 78 20 5b 73 6f 72 74 20 24 78 73 65 74 5d  h x [sort $xset]
1810: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 72 78 20   {.      set rx 
1820: 24 74 31 78 72 28 24 78 29 0a 20 20 20 20 20 20  $t1xr($x).      
1830: 6c 61 70 70 65 6e 64 20 61 73 65 74 20 24 74 31  lappend aset $t1
1840: 72 61 28 24 72 78 29 0a 20 20 20 20 7d 0a 20 20  ra($rx).    }.  
1850: 20 20 70 75 74 73 20 22 64 6f 5f 74 65 73 74 20    puts "do_test 
1860: 24 74 6e 61 6d 65 2d 32 2e 24 69 2e 24 73 75 62  $tname-2.$i.$sub
1870: 6e 6f 2e 35 20 5c 31 37 33 22 0a 20 20 20 20 70  no.5 \173".    p
1880: 75 74 73 20 22 20 20 64 62 20 65 76 61 6c 20 5c  uts "  db eval \
1890: 31 37 33 22 0a 20 20 20 20 70 75 74 73 20 22 20  173".    puts " 
18a0: 20 20 20 53 45 4c 45 43 54 20 74 31 2e 61 20 46     SELECT t1.a F
18b0: 52 4f 4d 20 74 31 20 4a 4f 49 4e 20 74 32 20 4f  ROM t1 JOIN t2 O
18c0: 4e 20 74 31 2e 72 6f 77 69 64 20 24 6f 70 20 74  N t1.rowid $op t
18d0: 32 2e 72 22 0a 20 20 20 20 70 75 74 73 20 22 20  2.r".    puts " 
18e0: 20 20 20 20 57 48 45 52 45 20 74 32 2e 61 3d 24      WHERE t2.a=$
18f0: 61 78 22 0a 20 20 20 20 70 75 74 73 20 22 20 20  ax".    puts "  
1900: 20 20 20 4f 52 44 45 52 20 42 59 20 78 22 0a 20     ORDER BY x". 
1910: 20 20 20 70 75 74 73 20 22 20 20 5c 31 37 35 22     puts "  \175"
1920: 0a 20 20 20 20 70 75 74 73 20 22 5c 31 37 35 20  .    puts "\175 
1930: 7b 24 61 73 65 74 7d 22 0a 20 20 0a 20 20 20 20  {$aset}".  .    
1940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1980: 20 32 2e 78 2e 79 2e 31 30 0a 20 20 20 20 69 66   2.x.y.10.    if
1990: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
19a0: 20 24 72 35 5d 3e 31 35 7d 20 63 6f 6e 74 69 6e   $r5]>15} contin
19b0: 75 65 0a 20 20 20 20 73 65 74 20 72 73 65 74 20  ue.    set rset 
19c0: 7b 7d 0a 20 20 20 20 73 65 74 20 61 73 65 74 20  {}.    set aset 
19d0: 7b 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 72  {}.    foreach r
19e0: 78 20 24 6e 75 6d 73 32 20 7b 0a 20 20 20 20 20  x $nums2 {.     
19f0: 20 69 66 20 22 5c 24 72 78 20 24 6f 70 20 5c 24   if "\$rx $op \$
1a00: 72 30 22 20 7b 0a 20 20 20 20 20 20 20 20 6c 61  r0" {.        la
1a10: 70 70 65 6e 64 20 72 73 65 74 20 24 72 78 0a 20  ppend rset $rx. 
1a20: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
1a30: 20 66 6f 72 65 61 63 68 20 72 78 20 5b 73 6f 72   foreach rx [sor
1a40: 74 20 24 72 73 65 74 5d 20 7b 0a 20 20 20 20 20  t $rset] {.     
1a50: 20 6c 61 70 70 65 6e 64 20 61 73 65 74 20 24 74   lappend aset $t
1a60: 31 72 61 28 24 72 78 29 0a 20 20 20 20 7d 0a 20  1ra($rx).    }. 
1a70: 20 20 20 70 75 74 73 20 22 64 6f 5f 74 65 73 74     puts "do_test
1a80: 20 24 74 6e 61 6d 65 2d 32 2e 24 69 2e 24 73 75   $tname-2.$i.$su
1a90: 62 6e 6f 2e 31 30 20 5c 31 37 33 22 0a 20 20 20  bno.10 \173".   
1aa0: 20 70 75 74 73 20 22 20 20 64 62 20 65 76 61 6c   puts "  db eval
1ab0: 20 5c 31 37 33 22 0a 20 20 20 20 70 75 74 73 20   \173".    puts 
1ac0: 22 20 20 20 20 53 45 4c 45 43 54 20 74 31 2e 61  "    SELECT t1.a
1ad0: 20 46 52 4f 4d 20 74 31 20 4a 4f 49 4e 20 74 32   FROM t1 JOIN t2
1ae0: 20 4f 4e 20 74 31 2e 72 6f 77 69 64 20 24 6f 70   ON t1.rowid $op
1af0: 20 43 41 53 54 28 74 32 2e 72 20 41 53 20 72 65   CAST(t2.r AS re
1b00: 61 6c 29 22 0a 20 20 20 20 70 75 74 73 20 22 20  al)".    puts " 
1b10: 20 20 20 20 57 48 45 52 45 20 74 32 2e 61 3d 24      WHERE t2.a=$
1b20: 61 78 22 0a 20 20 20 20 70 75 74 73 20 22 20 20  ax".    puts "  
1b30: 20 20 20 4f 52 44 45 52 20 42 59 20 74 31 2e 72     ORDER BY t1.r
1b40: 6f 77 69 64 22 0a 20 20 20 20 70 75 74 73 20 22  owid".    puts "
1b50: 20 20 5c 31 37 35 22 0a 20 20 20 20 70 75 74 73    \175".    puts
1b60: 20 22 5c 31 37 35 20 7b 24 61 73 65 74 7d 22 0a   "\175 {$aset}".
1b70: 20 20 0a 20 20 20 20 23 23 23 23 23 23 23 23 23    .    #########
1b80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bb0: 23 23 23 23 23 23 23 20 32 2e 78 2e 79 2e 31 31  ####### 2.x.y.11
1bc0: 0a 20 20 20 20 73 65 74 20 61 73 65 74 20 7b 7d  .    set aset {}
1bd0: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 72 78 20  .    foreach rx 
1be0: 5b 72 65 76 65 72 73 65 20 5b 73 6f 72 74 20 24  [reverse [sort $
1bf0: 72 73 65 74 5d 5d 20 7b 0a 20 20 20 20 20 20 6c  rset]] {.      l
1c00: 61 70 70 65 6e 64 20 61 73 65 74 20 24 74 31 72  append aset $t1r
1c10: 61 28 24 72 78 29 0a 20 20 20 20 7d 0a 20 20 20  a($rx).    }.   
1c20: 20 70 75 74 73 20 22 64 6f 5f 74 65 73 74 20 24   puts "do_test $
1c30: 74 6e 61 6d 65 2d 32 2e 24 69 2e 24 73 75 62 6e  tname-2.$i.$subn
1c40: 6f 2e 31 31 20 5c 31 37 33 22 0a 20 20 20 20 70  o.11 \173".    p
1c50: 75 74 73 20 22 20 20 64 62 20 65 76 61 6c 20 5c  uts "  db eval \
1c60: 31 37 33 22 0a 20 20 20 20 70 75 74 73 20 22 20  173".    puts " 
1c70: 20 20 20 53 45 4c 45 43 54 20 74 31 2e 61 20 46     SELECT t1.a F
1c80: 52 4f 4d 20 74 31 20 4a 4f 49 4e 20 74 32 20 4f  ROM t1 JOIN t2 O
1c90: 4e 20 74 31 2e 72 6f 77 69 64 20 24 6f 70 20 43  N t1.rowid $op C
1ca0: 41 53 54 28 74 32 2e 72 20 41 53 20 72 65 61 6c  AST(t2.r AS real
1cb0: 29 22 0a 20 20 20 20 70 75 74 73 20 22 20 20 20  )".    puts "   
1cc0: 20 20 57 48 45 52 45 20 74 32 2e 61 3d 24 61 78    WHERE t2.a=$ax
1cd0: 22 0a 20 20 20 20 70 75 74 73 20 22 20 20 20 20  ".    puts "    
1ce0: 20 4f 52 44 45 52 20 42 59 20 74 31 2e 72 6f 77   ORDER BY t1.row
1cf0: 69 64 20 44 45 53 43 22 0a 20 20 20 20 70 75 74  id DESC".    put
1d00: 73 20 22 20 20 5c 31 37 35 22 0a 20 20 20 20 70  s "  \175".    p
1d10: 75 74 73 20 22 5c 31 37 35 20 7b 24 61 73 65 74  uts "\175 {$aset
1d20: 7d 22 0a 20 20 7d 0a 20 20 0a 7d 0a 0a 0a 70 75  }".  }.  .}...pu
1d30: 74 73 20 7b 66 69 6e 69 73 68 5f 74 65 73 74 7d  ts {finish_test}
1d40: 0a                                               .