/ Hex Artifact Content
Login

Artifact 3f1c479c5a093a6280f378c0fbff1c2701486660:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 2e 0a 23 0a 23 20 54 68 65 20 61 75 74   15..#.# The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65   place of.# a le
0060: 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65  gal notice, here
0070: 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a   is a blessing:.
0080: 23 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64  #.#    May you d
0090: 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65  o good and not e
00a0: 76 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f  vil..#    May yo
00b0: 75 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65  u find forgivene
00c0: 73 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20  ss for yourself 
00d0: 61 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65  and forgive othe
00e0: 72 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  rs..#    May you
00f0: 20 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e   share freely, n
0100: 65 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65  ever taking more
0110: 20 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a   than you give..
0120: 23 0a 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  #.#*************
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 0a 23 20 54 68 69  **********.# Thi
0170: 73 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  s file implement
0180: 73 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  s regression tes
0190: 74 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69  ts for SQLite li
01a0: 62 72 61 72 79 2e 0a 23 0a 23 20 54 68 69 73 20  brary..#.# This 
01b0: 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  file implements 
01c0: 74 65 73 74 73 20 66 6f 72 20 6d 69 73 63 65 6c  tests for miscel
01d0: 6c 61 6e 6f 75 73 20 66 65 61 74 75 72 65 73 20  lanous features 
01e0: 74 68 61 74 20 77 65 72 65 0a 23 20 6c 65 66 74  that were.# left
01f0: 20 6f 75 74 20 6f 66 20 6f 74 68 65 72 20 74 65   out of other te
0200: 73 74 20 66 69 6c 65 73 2e 0a 23 0a 0a 73 65 74  st files..#..set
0210: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
0220: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
0230: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
0240: 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 4d 69 6d  ester.tcl..# Mim
0250: 69 63 20 74 68 65 20 53 51 4c 69 74 65 20 32 20  ic the SQLite 2 
0260: 63 6f 6c 6c 61 74 69 6f 6e 20 74 79 70 65 20 4e  collation type N
0270: 55 4d 45 52 49 43 2e 0a 64 62 20 63 6f 6c 6c 61  UMERIC..db colla
0280: 74 65 20 6e 75 6d 65 72 69 63 20 6e 75 6d 65 72  te numeric numer
0290: 69 63 5f 63 6f 6c 6c 61 74 65 0a 70 72 6f 63 20  ic_collate.proc 
02a0: 6e 75 6d 65 72 69 63 5f 63 6f 6c 6c 61 74 65 20  numeric_collate 
02b0: 7b 6c 68 73 20 72 68 73 7d 20 7b 0a 20 20 69 66  {lhs rhs} {.  if
02c0: 20 7b 24 6c 68 73 20 3d 3d 20 24 72 68 73 7d 20   {$lhs == $rhs} 
02d0: 7b 72 65 74 75 72 6e 20 30 7d 20 0a 20 20 72 65  {return 0} .  re
02e0: 74 75 72 6e 20 5b 65 78 70 72 20 28 24 6c 68 73  turn [expr ($lhs
02f0: 3e 24 72 68 73 29 3f 31 3a 2d 31 5d 0a 7d 0a 0a  >$rhs)?1:-1].}..
0300: 23 20 4d 69 6d 69 63 20 74 68 65 20 53 51 4c 69  # Mimic the SQLi
0310: 74 65 20 32 20 63 6f 6c 6c 61 74 69 6f 6e 20 74  te 2 collation t
0320: 79 70 65 20 54 45 58 54 2e 0a 64 62 20 63 6f 6c  ype TEXT..db col
0330: 6c 61 74 65 20 74 65 78 74 20 74 65 78 74 5f 63  late text text_c
0340: 6f 6c 6c 61 74 65 0a 70 72 6f 63 20 6e 75 6d 65  ollate.proc nume
0350: 72 69 63 5f 63 6f 6c 6c 61 74 65 20 7b 6c 68 73  ric_collate {lhs
0360: 20 72 68 73 7d 20 7b 0a 20 20 72 65 74 75 72 6e   rhs} {.  return
0370: 20 5b 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 65   [string compare
0380: 20 24 6c 68 73 20 24 72 68 73 5d 0a 7d 0a 0a 23   $lhs $rhs].}..#
0390: 20 54 65 73 74 20 74 68 65 20 63 72 65 61 74 69   Test the creati
03a0: 6f 6e 20 61 6e 64 20 75 73 65 20 6f 66 20 74 61  on and use of ta
03b0: 62 6c 65 73 20 74 68 61 74 20 68 61 76 65 20 61  bles that have a
03c0: 20 6c 61 72 67 65 20 6e 75 6d 62 65 72 0a 23 20   large number.# 
03d0: 6f 66 20 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 64 6f  of columns..#.do
03e0: 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 2e 31 20  _test misc1-1.1 
03f0: 7b 0a 20 20 73 65 74 20 63 6d 64 20 22 43 52 45  {.  set cmd "CRE
0400: 41 54 45 20 54 41 42 4c 45 20 6d 61 6e 79 63 6f  ATE TABLE manyco
0410: 6c 28 78 30 20 74 65 78 74 22 0a 20 20 66 6f 72  l(x0 text".  for
0420: 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d   {set i 1} {$i<=
0430: 39 39 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20  99} {incr i} {. 
0440: 20 20 20 61 70 70 65 6e 64 20 63 6d 64 20 22 2c     append cmd ",
0450: 78 24 69 20 74 65 78 74 22 0a 20 20 7d 0a 20 20  x$i text".  }.  
0460: 61 70 70 65 6e 64 20 63 6d 64 20 22 29 22 3b 0a  append cmd ")";.
0470: 20 20 65 78 65 63 73 71 6c 20 24 63 6d 64 0a 20    execsql $cmd. 
0480: 20 73 65 74 20 63 6d 64 20 22 49 4e 53 45 52 54   set cmd "INSERT
0490: 20 49 4e 54 4f 20 6d 61 6e 79 63 6f 6c 20 56 41   INTO manycol VA
04a0: 4c 55 45 53 28 30 22 0a 20 20 66 6f 72 20 7b 73  LUES(0".  for {s
04b0: 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d 39 39 7d  et i 1} {$i<=99}
04c0: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20   {incr i} {.    
04d0: 61 70 70 65 6e 64 20 63 6d 64 20 22 2c 24 69 22  append cmd ",$i"
04e0: 0a 20 20 7d 0a 20 20 61 70 70 65 6e 64 20 63 6d  .  }.  append cm
04f0: 64 20 22 29 22 3b 0a 20 20 65 78 65 63 73 71 6c  d ")";.  execsql
0500: 20 24 63 6d 64 0a 20 20 65 78 65 63 73 71 6c 20   $cmd.  execsql 
0510: 22 53 45 4c 45 43 54 20 78 39 39 20 46 52 4f 4d  "SELECT x99 FROM
0520: 20 6d 61 6e 79 63 6f 6c 22 0a 7d 20 39 39 0a 64   manycol".} 99.d
0530: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 2e 32  o_test misc1-1.2
0540: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
0550: 4c 45 43 54 20 78 30 2c 20 78 31 30 2c 20 78 32  LECT x0, x10, x2
0560: 35 2c 20 78 35 30 2c 20 78 37 35 20 46 52 4f 4d  5, x50, x75 FROM
0570: 20 6d 61 6e 79 63 6f 6c 7d 0a 7d 20 7b 30 20 31   manycol}.} {0 1
0580: 30 20 32 35 20 35 30 20 37 35 7d 0a 64 6f 5f 74  0 25 50 75}.do_t
0590: 65 73 74 20 6d 69 73 63 31 2d 31 2e 33 2e 31 20  est misc1-1.3.1 
05a0: 7b 0a 20 20 66 6f 72 20 7b 73 65 74 20 6a 20 31  {.  for {set j 1
05b0: 30 30 7d 20 7b 24 6a 3c 3d 31 30 30 30 7d 20 7b  00} {$j<=1000} {
05c0: 69 6e 63 72 20 6a 20 31 30 30 7d 20 7b 0a 20 20  incr j 100} {.  
05d0: 20 20 73 65 74 20 63 6d 64 20 22 49 4e 53 45 52    set cmd "INSER
05e0: 54 20 49 4e 54 4f 20 6d 61 6e 79 63 6f 6c 20 56  T INTO manycol V
05f0: 41 4c 55 45 53 28 24 6a 22 0a 20 20 20 20 66 6f  ALUES($j".    fo
0600: 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c  r {set i 1} {$i<
0610: 3d 39 39 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  =99} {incr i} {.
0620: 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6d 64        append cmd
0630: 20 22 2c 5b 65 78 70 72 20 7b 24 69 2b 24 6a 7d   ",[expr {$i+$j}
0640: 5d 22 0a 20 20 20 20 7d 0a 20 20 20 20 61 70 70  ]".    }.    app
0650: 65 6e 64 20 63 6d 64 20 22 29 22 0a 20 20 20 20  end cmd ")".    
0660: 65 78 65 63 73 71 6c 20 24 63 6d 64 0a 20 20 7d  execsql $cmd.  }
0670: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0680: 43 54 20 78 35 30 20 46 52 4f 4d 20 6d 61 6e 79  CT x50 FROM many
0690: 63 6f 6c 20 4f 52 44 45 52 20 42 59 20 78 38 30  col ORDER BY x80
06a0: 2b 30 7d 0a 7d 20 7b 35 30 20 31 35 30 20 32 35  +0}.} {50 150 25
06b0: 30 20 33 35 30 20 34 35 30 20 35 35 30 20 36 35  0 350 450 550 65
06c0: 30 20 37 35 30 20 38 35 30 20 39 35 30 20 31 30  0 750 850 950 10
06d0: 35 30 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63  50}.do_test misc
06e0: 31 2d 31 2e 33 2e 32 20 7b 0a 20 20 65 78 65 63  1-1.3.2 {.  exec
06f0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 78 35 30 20  sql {SELECT x50 
0700: 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c 20 4f 52 44  FROM manycol ORD
0710: 45 52 20 42 59 20 78 38 30 7d 0a 7d 20 7b 31 30  ER BY x80}.} {10
0720: 35 30 20 31 35 30 20 32 35 30 20 33 35 30 20 34  50 150 250 350 4
0730: 35 30 20 35 35 30 20 36 35 30 20 37 35 30 20 35  50 550 650 750 5
0740: 30 20 38 35 30 20 39 35 30 7d 0a 64 6f 5f 74 65  0 850 950}.do_te
0750: 73 74 20 6d 69 73 63 31 2d 31 2e 34 20 7b 0a 20  st misc1-1.4 {. 
0760: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0770: 20 78 37 35 20 46 52 4f 4d 20 6d 61 6e 79 63 6f   x75 FROM manyco
0780: 6c 20 57 48 45 52 45 20 78 35 30 3d 33 35 30 7d  l WHERE x50=350}
0790: 0a 7d 20 33 37 35 0a 64 6f 5f 74 65 73 74 20 6d  .} 375.do_test m
07a0: 69 73 63 31 2d 31 2e 35 20 7b 0a 20 20 65 78 65  isc1-1.5 {.  exe
07b0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 78 35 30  csql {SELECT x50
07c0: 20 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c 20 57 48   FROM manycol WH
07d0: 45 52 45 20 78 39 39 3d 35 39 39 7d 0a 7d 20 35  ERE x99=599}.} 5
07e0: 35 30 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31  50.do_test misc1
07f0: 2d 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.6 {.  execsql
0800: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 20 6d   {CREATE INDEX m
0810: 61 6e 79 63 6f 6c 5f 69 64 78 31 20 4f 4e 20 6d  anycol_idx1 ON m
0820: 61 6e 79 63 6f 6c 28 78 39 39 29 7d 0a 20 20 65  anycol(x99)}.  e
0830: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 78  xecsql {SELECT x
0840: 35 30 20 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c 20  50 FROM manycol 
0850: 57 48 45 52 45 20 78 39 39 3d 38 39 39 7d 0a 7d  WHERE x99=899}.}
0860: 20 38 35 30 0a 64 6f 5f 74 65 73 74 20 6d 69 73   850.do_test mis
0870: 63 31 2d 31 2e 37 20 7b 0a 20 20 65 78 65 63 73  c1-1.7 {.  execs
0880: 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74  ql {SELECT count
0890: 28 2a 29 20 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c  (*) FROM manycol
08a0: 7d 0a 7d 20 31 31 0a 64 6f 5f 74 65 73 74 20 6d  }.} 11.do_test m
08b0: 69 73 63 31 2d 31 2e 38 20 7b 0a 20 20 65 78 65  isc1-1.8 {.  exe
08c0: 63 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f  csql {DELETE FRO
08d0: 4d 20 6d 61 6e 79 63 6f 6c 20 57 48 45 52 45 20  M manycol WHERE 
08e0: 78 39 38 3d 31 32 33 34 7d 0a 20 20 65 78 65 63  x98=1234}.  exec
08f0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e  sql {SELECT coun
0900: 74 28 2a 29 20 46 52 4f 4d 20 6d 61 6e 79 63 6f  t(*) FROM manyco
0910: 6c 7d 0a 7d 20 31 31 0a 64 6f 5f 74 65 73 74 20  l}.} 11.do_test 
0920: 6d 69 73 63 31 2d 31 2e 39 20 7b 0a 20 20 65 78  misc1-1.9 {.  ex
0930: 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52  ecsql {DELETE FR
0940: 4f 4d 20 6d 61 6e 79 63 6f 6c 20 57 48 45 52 45  OM manycol WHERE
0950: 20 78 39 38 3d 39 39 38 7d 0a 20 20 65 78 65 63   x98=998}.  exec
0960: 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e  sql {SELECT coun
0970: 74 28 2a 29 20 46 52 4f 4d 20 6d 61 6e 79 63 6f  t(*) FROM manyco
0980: 6c 7d 0a 7d 20 31 30 0a 64 6f 5f 74 65 73 74 20  l}.} 10.do_test 
0990: 6d 69 73 63 31 2d 31 2e 31 30 20 7b 0a 20 20 65  misc1-1.10 {.  e
09a0: 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20 46  xecsql {DELETE F
09b0: 52 4f 4d 20 6d 61 6e 79 63 6f 6c 20 57 48 45 52  ROM manycol WHER
09c0: 45 20 78 39 39 3d 35 30 30 7d 0a 20 20 65 78 65  E x99=500}.  exe
09d0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75  csql {SELECT cou
09e0: 6e 74 28 2a 29 20 46 52 4f 4d 20 6d 61 6e 79 63  nt(*) FROM manyc
09f0: 6f 6c 7d 0a 7d 20 31 30 0a 64 6f 5f 74 65 73 74  ol}.} 10.do_test
0a00: 20 6d 69 73 63 31 2d 31 2e 31 31 20 7b 0a 20 20   misc1-1.11 {.  
0a10: 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20  execsql {DELETE 
0a20: 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c 20 57 48 45  FROM manycol WHE
0a30: 52 45 20 78 39 39 3d 35 39 39 7d 0a 20 20 65 78  RE x99=599}.  ex
0a40: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f  ecsql {SELECT co
0a50: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 6d 61 6e 79  unt(*) FROM many
0a60: 63 6f 6c 7d 0a 7d 20 39 0a 0a 23 20 43 68 65 63  col}.} 9..# Chec
0a70: 6b 20 47 52 4f 55 50 20 42 59 20 65 78 70 72 65  k GROUP BY expre
0a80: 73 73 69 6f 6e 73 20 74 68 61 74 20 6e 61 6d 65  ssions that name
0a90: 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6c   two or more col
0aa0: 75 6d 6e 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  umns..#.do_test 
0ab0: 6d 69 73 63 31 2d 32 2e 31 20 7b 0a 20 20 65 78  misc1-2.1 {.  ex
0ac0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  ecsql {.    BEGI
0ad0: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20  N TRANSACTION;. 
0ae0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
0af0: 61 67 67 65 72 28 6f 6e 65 20 74 65 78 74 2c 20  agger(one text, 
0b00: 74 77 6f 20 74 65 78 74 2c 20 74 68 72 65 65 20  two text, three 
0b10: 74 65 78 74 2c 20 66 6f 75 72 20 74 65 78 74 29  text, four text)
0b20: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0b30: 4f 20 61 67 67 65 72 20 56 41 4c 55 45 53 28 31  O agger VALUES(1
0b40: 2c 20 27 6f 6e 65 27 2c 20 27 68 65 6c 6c 6f 27  , 'one', 'hello'
0b50: 2c 20 27 79 65 73 27 29 3b 0a 20 20 20 20 49 4e  , 'yes');.    IN
0b60: 53 45 52 54 20 49 4e 54 4f 20 61 67 67 65 72 20  SERT INTO agger 
0b70: 56 41 4c 55 45 53 28 32 2c 20 27 74 77 6f 27 2c  VALUES(2, 'two',
0b80: 20 27 68 6f 77 64 79 27 2c 20 27 6e 6f 27 29 3b   'howdy', 'no');
0b90: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0ba0: 20 61 67 67 65 72 20 56 41 4c 55 45 53 28 33 2c   agger VALUES(3,
0bb0: 20 27 74 68 72 27 2c 20 27 68 6f 77 61 72 65 79   'thr', 'howarey
0bc0: 61 27 2c 20 27 79 65 73 27 29 3b 0a 20 20 20 20  a', 'yes');.    
0bd0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 67 67 65  INSERT INTO agge
0be0: 72 20 56 41 4c 55 45 53 28 34 2c 20 27 74 77 6f  r VALUES(4, 'two
0bf0: 27 2c 20 27 6c 6f 74 68 65 72 65 27 2c 20 27 79  ', 'lothere', 'y
0c00: 65 73 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  es');.    INSERT
0c10: 20 49 4e 54 4f 20 61 67 67 65 72 20 56 41 4c 55   INTO agger VALU
0c20: 45 53 28 35 2c 20 27 6f 6e 65 27 2c 20 27 61 74  ES(5, 'one', 'at
0c30: 63 68 61 27 2c 20 27 79 65 73 27 29 3b 0a 20 20  cha', 'yes');.  
0c40: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 67    INSERT INTO ag
0c50: 67 65 72 20 56 41 4c 55 45 53 28 36 2c 20 27 74  ger VALUES(6, 't
0c60: 77 6f 27 2c 20 27 68 65 6c 6c 6f 27 2c 20 27 6e  wo', 'hello', 'n
0c70: 6f 27 29 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 0a  o');.    COMMIT.
0c80: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53    }.  execsql {S
0c90: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
0ca0: 52 4f 4d 20 61 67 67 65 72 7d 0a 7d 20 36 0a 64  ROM agger}.} 6.d
0cb0: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 32 2e 32  o_test misc1-2.2
0cc0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
0cd0: 4c 45 43 54 20 73 75 6d 28 6f 6e 65 29 2c 20 74  LECT sum(one), t
0ce0: 77 6f 2c 20 66 6f 75 72 20 46 52 4f 4d 20 61 67  wo, four FROM ag
0cf0: 67 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 47  ger.           G
0d00: 52 4f 55 50 20 42 59 20 74 77 6f 2c 20 66 6f 75  ROUP BY two, fou
0d10: 72 20 4f 52 44 45 52 20 42 59 20 73 75 6d 28 6f  r ORDER BY sum(o
0d20: 6e 65 29 20 64 65 73 63 7d 0a 7d 20 7b 38 20 74  ne) desc}.} {8 t
0d30: 77 6f 20 6e 6f 20 36 20 6f 6e 65 20 79 65 73 20  wo no 6 one yes 
0d40: 34 20 74 77 6f 20 79 65 73 20 33 20 74 68 72 20  4 two yes 3 thr 
0d50: 79 65 73 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73  yes}.do_test mis
0d60: 63 31 2d 32 2e 33 20 7b 0a 20 20 65 78 65 63 73  c1-2.3 {.  execs
0d70: 71 6c 20 7b 53 45 4c 45 43 54 20 73 75 6d 28 28  ql {SELECT sum((
0d80: 6f 6e 65 29 29 2c 20 28 74 77 6f 29 2c 20 28 66  one)), (two), (f
0d90: 6f 75 72 29 20 46 52 4f 4d 20 61 67 67 65 72 0a  our) FROM agger.
0da0: 20 20 20 20 20 20 20 20 20 20 20 47 52 4f 55 50             GROUP
0db0: 20 42 59 20 28 74 77 6f 29 2c 20 28 66 6f 75 72   BY (two), (four
0dc0: 29 20 4f 52 44 45 52 20 42 59 20 73 75 6d 28 6f  ) ORDER BY sum(o
0dd0: 6e 65 29 20 64 65 73 63 7d 0a 7d 20 7b 38 20 74  ne) desc}.} {8 t
0de0: 77 6f 20 6e 6f 20 36 20 6f 6e 65 20 79 65 73 20  wo no 6 one yes 
0df0: 34 20 74 77 6f 20 79 65 73 20 33 20 74 68 72 20  4 two yes 3 thr 
0e00: 79 65 73 7d 0a 0a 23 20 48 65 72 65 27 73 20 61  yes}..# Here's a
0e10: 20 74 65 73 74 20 66 6f 72 20 61 20 62 75 67 20   test for a bug 
0e20: 66 6f 75 6e 64 20 62 79 20 4a 6f 65 6c 20 4c 75  found by Joel Lu
0e30: 63 73 79 2e 20 20 54 68 65 20 63 6f 64 65 20 62  csy.  The code b
0e40: 65 6c 6f 77 0a 23 20 77 61 73 20 63 61 75 73 69  elow.# was causi
0e50: 6e 67 20 61 6e 20 61 73 73 65 72 74 69 6f 6e 20  ng an assertion 
0e60: 66 61 69 6c 75 72 65 2e 0a 23 0a 64 6f 5f 74 65  failure..#.do_te
0e70: 73 74 20 6d 69 73 63 31 2d 33 2e 31 20 7b 0a 20  st misc1-3.1 {. 
0e80: 20 73 65 74 20 72 20 5b 65 78 65 63 73 71 6c 20   set r [execsql 
0e90: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
0ea0: 4c 45 20 74 31 28 61 29 3b 0a 20 20 20 20 49 4e  LE t1(a);.    IN
0eb0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0ec0: 55 45 53 28 27 68 69 27 29 3b 0a 20 20 20 20 50  UES('hi');.    P
0ed0: 52 41 47 4d 41 20 66 75 6c 6c 5f 63 6f 6c 75 6d  RAGMA full_colum
0ee0: 6e 5f 6e 61 6d 65 73 3d 6f 6e 3b 0a 20 20 20 20  n_names=on;.    
0ef0: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20  SELECT rowid, * 
0f00: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 5d 0a 20 20  FROM t1;.  }].  
0f10: 6c 69 6e 64 65 78 20 24 72 20 31 0a 7d 20 7b 68  lindex $r 1.} {h
0f20: 69 7d 0a 0a 23 20 48 65 72 65 27 73 20 61 20 74  i}..# Here's a t
0f30: 65 73 74 20 66 6f 72 20 79 65 74 20 61 6e 6f 74  est for yet anot
0f40: 68 65 72 20 62 75 67 20 66 6f 75 6e 64 20 62 79  her bug found by
0f50: 20 4a 6f 65 6c 20 4c 75 63 73 79 2e 20 20 54 68   Joel Lucsy.  Th
0f60: 65 20 63 6f 64 65 0a 23 20 62 65 6c 6f 77 20 77  e code.# below w
0f70: 61 73 20 63 61 75 73 69 6e 67 20 61 6e 20 61 73  as causing an as
0f80: 73 65 72 74 69 6f 6e 20 66 61 69 6c 75 72 65 2e  sertion failure.
0f90: 0a 23 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31  .#.do_test misc1
0fa0: 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.1 {.  execsql
0fb0: 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20   {.    BEGIN;.  
0fc0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0fd0: 32 28 61 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  2(a);.    INSERT
0fe0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
0ff0: 27 54 68 69 73 20 69 73 20 61 20 6c 6f 6e 67 20  'This is a long 
1000: 73 74 72 69 6e 67 20 74 6f 20 75 73 65 20 75 70  string to use up
1010: 20 61 20 6c 6f 74 20 6f 66 20 64 69 73 6b 20 2d   a lot of disk -
1020: 27 29 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74  ');.    UPDATE t
1030: 32 20 53 45 54 20 61 3d 61 7c 7c 61 7c 7c 61 7c  2 SET a=a||a||a|
1040: 7c 61 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  |a;.    INSERT I
1050: 4e 54 4f 20 74 32 20 53 45 4c 45 43 54 20 27 31  NTO t2 SELECT '1
1060: 20 2d 20 27 20 7c 7c 20 61 20 46 52 4f 4d 20 74   - ' || a FROM t
1070: 32 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  2;.    INSERT IN
1080: 54 4f 20 74 32 20 53 45 4c 45 43 54 20 27 32 20  TO t2 SELECT '2 
1090: 2d 20 27 20 7c 7c 20 61 20 46 52 4f 4d 20 74 32  - ' || a FROM t2
10a0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
10b0: 4f 20 74 32 20 53 45 4c 45 43 54 20 27 33 20 2d  O t2 SELECT '3 -
10c0: 20 27 20 7c 7c 20 61 20 46 52 4f 4d 20 74 32 3b   ' || a FROM t2;
10d0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
10e0: 20 74 32 20 53 45 4c 45 43 54 20 27 34 20 2d 20   t2 SELECT '4 - 
10f0: 27 20 7c 7c 20 61 20 46 52 4f 4d 20 74 32 3b 0a  ' || a FROM t2;.
1100: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1110: 74 32 20 53 45 4c 45 43 54 20 27 35 20 2d 20 27  t2 SELECT '5 - '
1120: 20 7c 7c 20 61 20 46 52 4f 4d 20 74 32 3b 0a 20   || a FROM t2;. 
1130: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1140: 32 20 53 45 4c 45 43 54 20 27 36 20 2d 20 27 20  2 SELECT '6 - ' 
1150: 7c 7c 20 61 20 46 52 4f 4d 20 74 32 3b 0a 20 20  || a FROM t2;.  
1160: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45    COMMIT;.    SE
1170: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
1180: 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 36 34  OM t2;.  }.} {64
1190: 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 77  }..# Make sure w
11a0: 65 20 61 63 74 75 61 6c 6c 79 20 73 65 65 20 61  e actually see a
11b0: 20 73 65 6d 69 63 6f 6c 6f 6e 20 6f 72 20 65 6e   semicolon or en
11c0: 64 2d 6f 66 2d 66 69 6c 65 20 69 6e 20 74 68 65  d-of-file in the
11d0: 20 53 51 4c 20 69 6e 70 75 74 0a 23 20 62 65 66   SQL input.# bef
11e0: 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 61 20  ore executing a 
11f0: 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 75 73 20 69  command.  Thus i
1200: 66 20 22 57 48 45 52 45 22 20 69 73 20 6d 69 73  f "WHERE" is mis
1210: 73 70 65 6c 6c 65 64 20 6f 6e 20 61 6e 20 55 50  spelled on an UP
1220: 44 41 54 45 2c 0a 23 20 74 68 65 20 75 73 65 72  DATE,.# the user
1230: 20 77 6f 6e 27 74 20 61 63 63 69 64 65 6e 74 6c   won't accidentl
1240: 79 20 75 70 64 61 74 65 20 65 76 65 72 79 20 72  y update every r
1250: 65 63 6f 72 64 2e 0a 23 0a 64 6f 5f 74 65 73 74  ecord..#.do_test
1260: 20 6d 69 73 63 31 2d 35 2e 31 20 7b 0a 20 20 63   misc1-5.1 {.  c
1270: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52  atchsql {.    CR
1280: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c  EATE TABLE t3(a,
1290: 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  b);.    INSERT I
12a0: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31 2c  NTO t3 VALUES(1,
12b0: 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  2);.    INSERT I
12c0: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 33 2c  NTO t3 VALUES(3,
12d0: 34 29 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74  4);.    UPDATE t
12e0: 33 20 53 45 54 20 61 3d 30 20 57 48 45 52 45 77  3 SET a=0 WHEREw
12f0: 77 77 20 62 3d 32 3b 0a 20 20 7d 0a 7d 20 7b 31  ww b=2;.  }.} {1
1300: 20 7b 6e 65 61 72 20 22 57 48 45 52 45 77 77 77   {near "WHEREwww
1310: 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 7d  ": syntax error}
1320: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d  }.do_test misc1-
1330: 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.2 {.  execsql 
1340: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
1350: 52 4f 4d 20 74 33 20 4f 52 44 45 52 20 42 59 20  ROM t3 ORDER BY 
1360: 61 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20  a;.  }.} {1 2 3 
1370: 34 7d 0a 0a 23 20 43 65 72 74 61 69 6e 20 6b 65  4}..# Certain ke
1380: 79 77 6f 72 64 73 20 28 65 73 70 65 63 69 61 6c  ywords (especial
1390: 6c 79 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20  ly non-standard 
13a0: 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 22 52  keywords like "R
13b0: 45 50 4c 41 43 45 22 29 20 63 61 6e 0a 23 20 61  EPLACE") can.# a
13c0: 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 69  lso be used as i
13d0: 64 65 6e 74 69 66 69 65 72 73 2e 20 20 54 68 65  dentifiers.  The
13e0: 20 77 61 79 20 74 68 69 73 20 77 6f 72 6b 73 20   way this works 
13f0: 69 6e 20 74 68 65 20 70 61 72 73 65 72 20 69 73  in the parser is
1400: 20 74 68 61 74 0a 23 20 74 68 65 20 70 61 72 73   that.# the pars
1410: 65 72 20 66 69 72 73 74 20 64 65 74 65 63 74 73  er first detects
1420: 20 61 20 73 79 6e 74 61 78 20 65 72 72 6f 72 2c   a syntax error,
1430: 20 74 68 65 20 65 72 72 6f 72 20 68 61 6e 64 6c   the error handl
1440: 69 6e 67 20 72 6f 75 74 69 6e 65 0a 23 20 73 65  ing routine.# se
1450: 65 73 20 74 68 61 74 20 74 68 65 20 73 70 65 63  es that the spec
1460: 69 61 6c 20 6b 65 79 77 6f 72 64 20 63 61 75 73  ial keyword caus
1470: 65 64 20 74 68 65 20 65 72 72 6f 72 2c 20 74 68  ed the error, th
1480: 65 6e 20 72 65 70 6c 61 63 65 73 20 74 68 65 20  en replaces the 
1490: 6b 65 79 77 6f 72 64 0a 23 20 77 69 74 68 20 22  keyword.# with "
14a0: 49 44 22 20 61 6e 64 20 74 72 69 65 73 20 61 67  ID" and tries ag
14b0: 61 69 6e 2e 0a 23 0a 23 20 43 68 65 63 6b 20 74  ain..#.# Check t
14c0: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20  he operation of 
14d0: 74 68 69 73 20 6c 6f 67 69 63 2e 0a 23 0a 64 6f  this logic..#.do
14e0: 5f 74 65 73 74 20 6d 69 73 63 31 2d 36 2e 31 20  _test misc1-6.1 
14f0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
1500: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
1510: 74 34 28 0a 20 20 20 20 20 20 61 62 6f 72 74 2c  t4(.      abort,
1520: 20 61 73 63 2c 20 62 65 67 69 6e 2c 20 63 6c 75   asc, begin, clu
1530: 73 74 65 72 2c 20 63 6f 6e 66 6c 69 63 74 2c 20  ster, conflict, 
1540: 63 6f 70 79 2c 20 64 65 6c 69 6d 69 74 65 72 73  copy, delimiters
1550: 2c 20 64 65 73 63 2c 20 65 6e 64 2c 0a 20 20 20  , desc, end,.   
1560: 20 20 20 65 78 70 6c 61 69 6e 2c 20 66 61 69 6c     explain, fail
1570: 2c 20 69 67 6e 6f 72 65 2c 20 6b 65 79 2c 20 6f  , ignore, key, o
1580: 66 66 73 65 74 2c 20 70 72 61 67 6d 61 2c 20 72  ffset, pragma, r
1590: 65 70 6c 61 63 65 2c 20 74 65 6d 70 2c 0a 20 20  eplace, temp,.  
15a0: 20 20 20 20 76 61 63 75 75 6d 2c 20 76 69 65 77      vacuum, view
15b0: 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 30  .    );.  }.} {0
15c0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73   {}}.do_test mis
15d0: 63 31 2d 36 2e 32 20 7b 0a 20 20 63 61 74 63 68  c1-6.2 {.  catch
15e0: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
15f0: 20 49 4e 54 4f 20 74 34 0a 20 20 20 20 20 20 20   INTO t4.       
1600: 56 41 4c 55 45 53 28 31 2c 32 2c 33 2c 34 2c 35  VALUES(1,2,3,4,5
1610: 2c 36 2c 37 2c 38 2c 39 2c 31 30 2c 31 31 2c 31  ,6,7,8,9,10,11,1
1620: 32 2c 31 33 2c 31 34 2c 31 35 2c 31 36 2c 31 37  2,13,14,15,16,17
1630: 2c 31 38 2c 31 39 29 3b 0a 20 20 7d 0a 7d 20 7b  ,18,19);.  }.} {
1640: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d 69  0 {}}.do_test mi
1650: 73 63 31 2d 36 2e 33 20 7b 0a 20 20 65 78 65 63  sc1-6.3 {.  exec
1660: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1670: 20 2a 20 46 52 4f 4d 20 74 34 0a 20 20 7d 0a 7d   * FROM t4.  }.}
1680: 20 7b 31 20 32 20 33 20 34 20 35 20 36 20 37 20   {1 2 3 4 5 6 7 
1690: 38 20 39 20 31 30 20 31 31 20 31 32 20 31 33 20  8 9 10 11 12 13 
16a0: 31 34 20 31 35 20 31 36 20 31 37 20 31 38 20 31  14 15 16 17 18 1
16b0: 39 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31  9}.do_test misc1
16c0: 2d 36 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -6.4 {.  execsql
16d0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 62   {.    SELECT ab
16e0: 6f 72 74 2b 61 73 63 2c 6d 61 78 28 6b 65 79 2c  ort+asc,max(key,
16f0: 70 72 61 67 6d 61 2c 74 65 6d 70 29 20 46 52 4f  pragma,temp) FRO
1700: 4d 20 74 34 0a 20 20 7d 0a 7d 20 7b 33 20 31 37  M t4.  }.} {3 17
1710: 7d 0a 0a 23 20 54 65 73 74 20 66 6f 72 20 6d 75  }..# Test for mu
1720: 6c 74 69 2d 63 6f 6c 75 6d 6e 20 70 72 69 6d 61  lti-column prima
1730: 72 79 20 6b 65 79 73 2c 20 61 6e 64 20 66 6f 72  ry keys, and for
1740: 20 6d 75 6c 74 69 70 6c 65 20 70 72 69 6d 61 72   multiple primar
1750: 79 20 6b 65 79 73 2e 0a 23 0a 64 6f 5f 74 65 73  y keys..#.do_tes
1760: 74 20 6d 69 73 63 31 2d 37 2e 31 20 7b 0a 20 20  t misc1-7.1 {.  
1770: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 43  catchsql {.    C
1780: 52 45 41 54 45 20 54 41 42 4c 45 20 65 72 72 6f  REATE TABLE erro
1790: 72 31 28 0a 20 20 20 20 20 20 61 20 54 59 50 45  r1(.      a TYPE
17a0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20   PRIMARY KEY,.  
17b0: 20 20 20 20 62 20 54 59 50 45 20 50 52 49 4d 41      b TYPE PRIMA
17c0: 52 59 20 4b 45 59 0a 20 20 20 20 29 3b 0a 20 20  RY KEY.    );.  
17d0: 7d 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 22 65  }.} {1 {table "e
17e0: 72 72 6f 72 31 22 20 68 61 73 20 6d 6f 72 65 20  rror1" has more 
17f0: 74 68 61 6e 20 6f 6e 65 20 70 72 69 6d 61 72 79  than one primary
1800: 20 6b 65 79 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d   key}}.do_test m
1810: 69 73 63 31 2d 37 2e 32 20 7b 0a 20 20 63 61 74  isc1-7.2 {.  cat
1820: 63 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  chsql {.    CREA
1830: 54 45 20 54 41 42 4c 45 20 65 72 72 6f 72 31 28  TE TABLE error1(
1840: 0a 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52  .      a INTEGER
1850: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20   PRIMARY KEY,.  
1860: 20 20 20 20 62 20 54 59 50 45 20 50 52 49 4d 41      b TYPE PRIMA
1870: 52 59 20 4b 45 59 0a 20 20 20 20 29 3b 0a 20 20  RY KEY.    );.  
1880: 7d 0a 7d 20 7b 31 20 7b 74 61 62 6c 65 20 22 65  }.} {1 {table "e
1890: 72 72 6f 72 31 22 20 68 61 73 20 6d 6f 72 65 20  rror1" has more 
18a0: 74 68 61 6e 20 6f 6e 65 20 70 72 69 6d 61 72 79  than one primary
18b0: 20 6b 65 79 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d   key}}.do_test m
18c0: 69 73 63 31 2d 37 2e 33 20 7b 0a 20 20 65 78 65  isc1-7.3 {.  exe
18d0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
18e0: 45 20 54 41 42 4c 45 20 74 35 28 61 2c 62 2c 63  E TABLE t5(a,b,c
18f0: 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 61 2c 62  ,PRIMARY KEY(a,b
1900: 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ));.    INSERT I
1910: 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28 31 2c  NTO t5 VALUES(1,
1920: 32 2c 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  2,3);.    SELECT
1930: 20 2a 20 46 52 4f 4d 20 74 35 20 4f 52 44 45 52   * FROM t5 ORDER
1940: 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 31 20   BY a;.  }.} {1 
1950: 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73  2 3}.do_test mis
1960: 63 31 2d 37 2e 34 20 7b 0a 20 20 63 61 74 63 68  c1-7.4 {.  catch
1970: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
1980: 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28   INTO t5 VALUES(
1990: 31 2c 32 2c 34 29 3b 0a 20 20 7d 0a 7d 20 7b 31  1,2,4);.  }.} {1
19a0: 20 7b 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61   {UNIQUE constra
19b0: 69 6e 74 20 66 61 69 6c 65 64 3a 20 74 35 2e 61  int failed: t5.a
19c0: 2c 20 74 35 2e 62 7d 7d 0a 64 6f 5f 74 65 73 74  , t5.b}}.do_test
19d0: 20 6d 69 73 63 31 2d 37 2e 35 20 7b 0a 20 20 63   misc1-7.5 {.  c
19e0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e  atchsql {.    IN
19f0: 53 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c  SERT INTO t5 VAL
1a00: 55 45 53 28 30 2c 32 2c 34 29 3b 0a 20 20 7d 0a  UES(0,2,4);.  }.
1a10: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
1a20: 20 6d 69 73 63 31 2d 37 2e 36 20 7b 0a 20 20 65   misc1-7.6 {.  e
1a30: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1a40: 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f 52  ECT * FROM t5 OR
1a50: 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20  DER BY a;.  }.} 
1a60: 7b 30 20 32 20 34 20 31 20 32 20 33 7d 0a 0a 64  {0 2 4 1 2 3}..d
1a70: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 38 2e 31  o_test misc1-8.1
1a80: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
1a90: 20 20 20 20 53 45 4c 45 43 54 20 2a 3b 0a 20 20      SELECT *;.  
1aa0: 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 74 61 62 6c 65  }.} {1 {no table
1ab0: 73 20 73 70 65 63 69 66 69 65 64 7d 7d 0a 64 6f  s specified}}.do
1ac0: 5f 74 65 73 74 20 6d 69 73 63 31 2d 38 2e 32 20  _test misc1-8.2 
1ad0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
1ae0: 20 20 20 53 45 4c 45 43 54 20 74 31 2e 2a 3b 0a     SELECT t1.*;.
1af0: 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63    }.} {1 {no suc
1b00: 68 20 74 61 62 6c 65 3a 20 74 31 7d 7d 0a 0a 65  h table: t1}}..e
1b10: 78 65 63 73 71 6c 20 7b 0a 20 20 44 52 4f 50 20  xecsql {.  DROP 
1b20: 54 41 42 4c 45 20 74 31 3b 0a 20 20 44 52 4f 50  TABLE t1;.  DROP
1b30: 20 54 41 42 4c 45 20 74 32 3b 0a 20 20 44 52 4f   TABLE t2;.  DRO
1b40: 50 20 54 41 42 4c 45 20 74 33 3b 0a 20 20 44 52  P TABLE t3;.  DR
1b50: 4f 50 20 54 41 42 4c 45 20 74 34 3b 0a 7d 0a 0a  OP TABLE t4;.}..
1b60: 23 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  # 64-bit integer
1b70: 73 20 61 72 65 20 72 65 70 72 65 73 65 6e 74 65  s are represente
1b80: 64 20 65 78 61 63 74 6c 79 2e 0a 23 0a 64 6f 5f  d exactly..#.do_
1b90: 74 65 73 74 20 6d 69 73 63 31 2d 39 2e 31 20 7b  test misc1-9.1 {
1ba0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
1bb0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1bc0: 31 28 61 20 75 6e 69 71 75 65 20 6e 6f 74 20 6e  1(a unique not n
1bd0: 75 6c 6c 2c 20 62 20 75 6e 69 71 75 65 20 6e 6f  ull, b unique no
1be0: 74 20 6e 75 6c 6c 29 3b 0a 20 20 20 20 49 4e 53  t null);.    INS
1bf0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1c00: 45 53 28 27 61 27 2c 31 32 33 34 35 36 37 38 39  ES('a',123456789
1c10: 30 31 32 33 34 35 36 37 38 39 29 3b 0a 20 20 20  0123456789);.   
1c20: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
1c30: 56 41 4c 55 45 53 28 27 62 27 2c 31 32 33 34 35  VALUES('b',12345
1c40: 36 37 38 39 31 31 32 33 34 35 36 37 38 39 29 3b  67891123456789);
1c50: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1c60: 20 74 31 20 56 41 4c 55 45 53 28 27 63 27 2c 31   t1 VALUES('c',1
1c70: 32 33 34 35 36 37 38 39 32 31 32 33 34 35 36 37  2345678921234567
1c80: 38 39 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  89);.    SELECT 
1c90: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  * FROM t1;.  }.}
1ca0: 20 7b 30 20 7b 61 20 31 32 33 34 35 36 37 38 39   {0 {a 123456789
1cb0: 30 31 32 33 34 35 36 37 38 39 20 62 20 31 32 33  0123456789 b 123
1cc0: 34 35 36 37 38 39 31 31 32 33 34 35 36 37 38 39  4567891123456789
1cd0: 20 63 20 31 32 33 34 35 36 37 38 39 32 31 32 33   c 1234567892123
1ce0: 34 35 36 37 38 39 7d 7d 0a 0a 23 20 41 20 57 48  456789}}..# A WH
1cf0: 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 6e 6f  ERE clause is no
1d00: 74 20 61 6c 6c 6f 77 65 64 20 74 6f 20 63 6f 6e  t allowed to con
1d10: 74 61 69 6e 20 6d 6f 72 65 20 74 68 61 6e 20 39  tain more than 9
1d20: 39 20 74 65 72 6d 73 2e 20 20 43 68 65 63 6b 20  9 terms.  Check 
1d30: 74 6f 0a 23 20 6d 61 6b 65 20 73 75 72 65 20 74  to.# make sure t
1d40: 68 69 73 20 6c 69 6d 69 74 20 69 73 20 65 6e 66  his limit is enf
1d50: 6f 72 63 65 64 2e 0a 23 0a 23 20 32 30 30 35 2d  orced..#.# 2005-
1d60: 30 37 2d 31 36 3a 20 54 68 65 72 65 20 69 73 20  07-16: There is 
1d70: 6e 6f 20 6c 6f 6e 67 65 72 20 61 20 6c 69 6d 69  no longer a limi
1d80: 74 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  t on the number 
1d90: 6f 66 20 74 65 72 6d 73 20 69 6e 20 61 0a 23 20  of terms in a.# 
1da0: 57 48 45 52 45 20 63 6c 61 75 73 65 2e 20 20 42  WHERE clause.  B
1db0: 75 74 20 6b 65 65 70 20 74 68 65 73 65 20 74 65  ut keep these te
1dc0: 73 74 73 20 6a 75 73 74 20 73 6f 20 74 68 61 74  sts just so that
1dd0: 20 77 65 20 68 61 76 65 20 73 6f 6d 65 20 74 65   we have some te
1de0: 73 74 73 0a 23 20 74 68 61 74 20 75 73 65 20 61  sts.# that use a
1df0: 20 6c 61 72 67 65 20 6e 75 6d 62 65 72 20 6f 66   large number of
1e00: 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 57 48   terms in the WH
1e10: 45 52 45 20 63 6c 61 75 73 65 2e 0a 23 0a 64 6f  ERE clause..#.do
1e20: 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 30 2e 30  _test misc1-10.0
1e30: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
1e40: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
1e50: 4f 4d 20 6d 61 6e 79 63 6f 6c 7d 0a 7d 20 7b 39  OM manycol}.} {9
1e60: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d  }.do_test misc1-
1e70: 31 30 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a 77  10.1 {.  set ::w
1e80: 68 65 72 65 20 7b 57 48 45 52 45 20 78 30 3e 3d  here {WHERE x0>=
1e90: 30 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  0}.  for {set i 
1ea0: 31 7d 20 7b 24 69 3c 3d 39 39 7d 20 7b 69 6e 63  1} {$i<=99} {inc
1eb0: 72 20 69 7d 20 7b 0a 20 20 20 20 61 70 70 65 6e  r i} {.    appen
1ec0: 64 20 3a 3a 77 68 65 72 65 20 22 20 41 4e 44 20  d ::where " AND 
1ed0: 78 24 69 3c 3e 30 22 0a 20 20 7d 0a 20 20 63 61  x$i<>0".  }.  ca
1ee0: 74 63 68 73 71 6c 20 22 53 45 4c 45 43 54 20 63  tchsql "SELECT c
1ef0: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 6d 61 6e  ount(*) FROM man
1f00: 79 63 6f 6c 20 24 3a 3a 77 68 65 72 65 22 0a 7d  ycol $::where".}
1f10: 20 7b 30 20 39 7d 0a 64 6f 5f 74 65 73 74 20 6d   {0 9}.do_test m
1f20: 69 73 63 31 2d 31 30 2e 32 20 7b 0a 20 20 63 61  isc1-10.2 {.  ca
1f30: 74 63 68 73 71 6c 20 22 53 45 4c 45 43 54 20 63  tchsql "SELECT c
1f40: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 6d 61 6e  ount(*) FROM man
1f50: 79 63 6f 6c 20 24 3a 3a 77 68 65 72 65 20 41 4e  ycol $::where AN
1f60: 44 20 72 6f 77 69 64 3e 30 22 0a 7d 20 7b 30 20  D rowid>0".} {0 
1f70: 39 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31  9}.do_test misc1
1f80: 2d 31 30 2e 33 20 7b 0a 20 20 72 65 67 73 75 62  -10.3 {.  regsub
1f90: 20 22 78 30 3e 3d 30 22 20 24 3a 3a 77 68 65 72   "x0>=0" $::wher
1fa0: 65 20 22 78 30 3d 30 22 20 3a 3a 77 68 65 72 65  e "x0=0" ::where
1fb0: 0a 20 20 63 61 74 63 68 73 71 6c 20 22 44 45 4c  .  catchsql "DEL
1fc0: 45 54 45 20 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c  ETE FROM manycol
1fd0: 20 24 3a 3a 77 68 65 72 65 22 0a 7d 20 7b 30 20   $::where".} {0 
1fe0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63  {}}.do_test misc
1ff0: 31 2d 31 30 2e 34 20 7b 0a 20 20 65 78 65 63 73  1-10.4 {.  execs
2000: 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74  ql {SELECT count
2010: 28 2a 29 20 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c  (*) FROM manycol
2020: 7d 0a 7d 20 7b 38 7d 0a 64 6f 5f 74 65 73 74 20  }.} {8}.do_test 
2030: 6d 69 73 63 31 2d 31 30 2e 35 20 7b 0a 20 20 63  misc1-10.5 {.  c
2040: 61 74 63 68 73 71 6c 20 22 44 45 4c 45 54 45 20  atchsql "DELETE 
2050: 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c 20 24 3a 3a  FROM manycol $::
2060: 77 68 65 72 65 20 41 4e 44 20 72 6f 77 69 64 3e  where AND rowid>
2070: 30 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  0".} {0 {}}.do_t
2080: 65 73 74 20 6d 69 73 63 31 2d 31 30 2e 36 20 7b  est misc1-10.6 {
2090: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
20a0: 43 54 20 78 31 20 46 52 4f 4d 20 6d 61 6e 79 63  CT x1 FROM manyc
20b0: 6f 6c 20 57 48 45 52 45 20 78 30 3d 31 30 30 7d  ol WHERE x0=100}
20c0: 0a 7d 20 7b 31 30 31 7d 0a 64 6f 5f 74 65 73 74  .} {101}.do_test
20d0: 20 6d 69 73 63 31 2d 31 30 2e 37 20 7b 0a 20 20   misc1-10.7 {.  
20e0: 72 65 67 73 75 62 20 22 78 30 3d 30 22 20 24 3a  regsub "x0=0" $:
20f0: 3a 77 68 65 72 65 20 22 78 30 3d 31 30 30 22 20  :where "x0=100" 
2100: 3a 3a 77 68 65 72 65 0a 20 20 63 61 74 63 68 73  ::where.  catchs
2110: 71 6c 20 22 55 50 44 41 54 45 20 6d 61 6e 79 63  ql "UPDATE manyc
2120: 6f 6c 20 53 45 54 20 78 31 3d 78 31 2b 31 20 24  ol SET x1=x1+1 $
2130: 3a 3a 77 68 65 72 65 22 0a 7d 20 7b 30 20 7b 7d  ::where".} {0 {}
2140: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d  }.do_test misc1-
2150: 31 30 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c  10.8 {.  execsql
2160: 20 7b 53 45 4c 45 43 54 20 78 31 20 46 52 4f 4d   {SELECT x1 FROM
2170: 20 6d 61 6e 79 63 6f 6c 20 57 48 45 52 45 20 78   manycol WHERE x
2180: 30 3d 31 30 30 7d 0a 7d 20 7b 31 30 32 7d 0a 64  0=100}.} {102}.d
2190: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 30 2e  o_test misc1-10.
21a0: 39 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 22  9 {.  catchsql "
21b0: 55 50 44 41 54 45 20 6d 61 6e 79 63 6f 6c 20 53  UPDATE manycol S
21c0: 45 54 20 78 31 3d 78 31 2b 31 20 24 3a 3a 77 68  ET x1=x1+1 $::wh
21d0: 65 72 65 20 41 4e 44 20 72 6f 77 69 64 3e 30 22  ere AND rowid>0"
21e0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
21f0: 74 20 6d 69 73 63 31 2d 31 30 2e 31 30 20 7b 0a  t misc1-10.10 {.
2200: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
2210: 54 20 78 31 20 46 52 4f 4d 20 6d 61 6e 79 63 6f  T x1 FROM manyco
2220: 6c 20 57 48 45 52 45 20 78 30 3d 31 30 30 7d 0a  l WHERE x0=100}.
2230: 7d 20 7b 31 30 33 7d 0a 0a 23 20 4d 61 6b 65 20  } {103}..# Make 
2240: 73 75 72 65 20 74 68 65 20 69 6e 69 74 69 61 6c  sure the initial
2250: 69 7a 61 74 69 6f 6e 20 77 6f 72 6b 73 20 65 76  ization works ev
2260: 65 6e 20 69 66 20 61 20 64 61 74 61 62 61 73 65  en if a database
2270: 20 69 73 20 6f 70 65 6e 65 64 20 77 68 69 6c 65   is opened while
2280: 0a 23 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65  .# another proce
2290: 73 73 20 68 61 73 20 74 68 65 20 64 61 74 61 62  ss has the datab
22a0: 61 73 65 20 6c 6f 63 6b 65 64 2e 0a 23 0a 23 20  ase locked..#.# 
22b0: 55 70 64 61 74 65 20 66 6f 72 20 76 33 3a 20 54  Update for v3: T
22c0: 68 65 20 42 45 47 49 4e 20 64 6f 65 73 6e 27 74  he BEGIN doesn't
22d0: 20 6c 6f 63 6b 20 74 68 65 20 64 61 74 61 62 61   lock the databa
22e0: 73 65 20 73 6f 20 74 68 65 20 73 63 68 65 6d 61  se so the schema
22f0: 20 69 73 20 72 65 61 64 0a 23 20 61 6e 64 20 74   is read.# and t
2300: 68 65 20 53 45 4c 45 43 54 20 72 65 74 75 72 6e  he SELECT return
2310: 73 20 73 75 63 63 65 73 73 66 75 6c 6c 79 2e 0a  s successfully..
2320: 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 31  do_test misc1-11
2330: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
2340: 42 45 47 49 4e 7d 0a 20 20 65 78 65 63 73 71 6c  BEGIN}.  execsql
2350: 20 7b 55 50 44 41 54 45 20 74 31 20 53 45 54 20   {UPDATE t1 SET 
2360: 61 3d 30 20 57 48 45 52 45 20 30 7d 0a 20 20 73  a=0 WHERE 0}.  s
2370: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
2380: 64 62 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74  db.  set rc [cat
2390: 63 68 20 7b 64 62 32 20 65 76 61 6c 20 7b 53 45  ch {db2 eval {SE
23a0: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
23b0: 4f 4d 20 74 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c  OM t1}} msg].  l
23c0: 61 70 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 23  append rc $msg.#
23d0: 20 76 32 20 72 65 73 75 6c 74 3a 20 7b 31 20 7b   v2 result: {1 {
23e0: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b  database is lock
23f0: 65 64 7d 7d 0a 7d 20 7b 30 20 33 7d 0a 64 6f 5f  ed}}.} {0 3}.do_
2400: 74 65 73 74 20 6d 69 73 63 31 2d 31 31 2e 32 20  test misc1-11.2 
2410: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 4f 4d  {.  execsql {COM
2420: 4d 49 54 7d 0a 20 20 73 65 74 20 72 63 20 5b 63  MIT}.  set rc [c
2430: 61 74 63 68 20 7b 64 62 32 20 65 76 61 6c 20 7b  atch {db2 eval {
2440: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
2450: 46 52 4f 4d 20 74 31 7d 7d 20 6d 73 67 5d 0a 20  FROM t1}} msg]. 
2460: 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 6c 61 70   db2 close.  lap
2470: 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 7d 20 7b  pend rc $msg.} {
2480: 30 20 33 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72  0 3}..# Make sur
2490: 65 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69  e string compari
24a0: 73 6f 6e 73 20 72 65 61 6c 6c 79 20 64 6f 20 63  sons really do c
24b0: 6f 6d 70 61 72 65 20 73 74 72 69 6e 67 73 20 69  ompare strings i
24c0: 6e 20 66 6f 72 6d 61 74 34 2b 2e 0a 23 20 53 69  n format4+..# Si
24d0: 6d 69 6c 61 72 20 74 65 73 74 73 20 69 6e 20 74  milar tests in t
24e0: 68 65 20 66 6f 72 6d 61 74 33 2e 74 65 73 74 20  he format3.test 
24f0: 66 69 6c 65 20 73 68 6f 77 20 74 68 61 74 20 66  file show that f
2500: 6f 72 20 66 6f 72 6d 61 74 33 20 61 6e 64 20 65  or format3 and e
2510: 61 72 6c 69 65 72 0a 23 20 61 6c 6c 20 63 6f 6d  arlier.# all com
2520: 70 61 72 69 73 69 6f 6e 73 20 77 68 65 72 65 20  parisions where 
2530: 6e 75 6d 65 72 69 63 20 69 66 20 65 69 74 68 65  numeric if eithe
2540: 72 20 6f 70 65 72 61 6e 64 20 6c 6f 6f 6b 65 64  r operand looked
2550: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2e 0a   like a number..
2560: 23 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d  #.do_test misc1-
2570: 31 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  12.1 {.  execsql
2580: 20 7b 53 45 4c 45 43 54 20 27 30 27 3d 3d 27 30   {SELECT '0'=='0
2590: 2e 30 27 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65  .0'}.} {0}.do_te
25a0: 73 74 20 6d 69 73 63 31 2d 31 32 2e 32 20 7b 0a  st misc1-12.2 {.
25b0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
25c0: 54 20 27 30 27 3d 3d 30 2e 30 7d 0a 7d 20 7b 30  T '0'==0.0}.} {0
25d0: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d  }.do_test misc1-
25e0: 31 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  12.3 {.  execsql
25f0: 20 7b 53 45 4c 45 43 54 20 27 31 32 33 34 35 36   {SELECT '123456
2600: 37 38 39 30 31 32 33 34 35 36 37 38 39 30 27 3d  78901234567890'=
2610: 3d 27 31 32 33 34 35 36 37 38 39 30 31 32 33 34  ='12345678901234
2620: 35 36 37 38 39 31 27 7d 0a 7d 20 7b 30 7d 0a 64  567891'}.} {0}.d
2630: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 32 2e  o_test misc1-12.
2640: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
2650: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2660: 20 74 36 28 61 20 49 4e 54 20 55 4e 49 51 55 45   t6(a INT UNIQUE
2670: 2c 20 62 20 54 45 58 54 20 55 4e 49 51 55 45 29  , b TEXT UNIQUE)
2680: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2690: 4f 20 74 36 20 56 41 4c 55 45 53 28 27 30 27 2c  O t6 VALUES('0',
26a0: 27 30 2e 30 27 29 3b 0a 20 20 20 20 53 45 4c 45  '0.0');.    SELE
26b0: 43 54 20 2a 20 46 52 4f 4d 20 74 36 3b 0a 20 20  CT * FROM t6;.  
26c0: 7d 0a 7d 20 7b 30 20 30 2e 30 7d 0a 69 66 63 61  }.} {0 0.0}.ifca
26d0: 70 61 62 6c 65 20 63 6f 6e 66 6c 69 63 74 20 7b  pable conflict {
26e0: 0a 20 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 31  .  do_test misc1
26f0: 2d 31 32 2e 35 20 7b 0a 20 20 20 20 65 78 65 63  -12.5 {.    exec
2700: 73 71 6c 20 7b 0a 20 20 20 20 20 20 49 4e 53 45  sql {.      INSE
2710: 52 54 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e 54  RT OR IGNORE INT
2720: 4f 20 74 36 20 56 41 4c 55 45 53 28 30 2e 30 2c  O t6 VALUES(0.0,
2730: 27 78 27 29 3b 0a 20 20 20 20 20 20 53 45 4c 45  'x');.      SELE
2740: 43 54 20 2a 20 46 52 4f 4d 20 74 36 3b 0a 20 20  CT * FROM t6;.  
2750: 20 20 7d 0a 20 20 7d 20 7b 30 20 30 2e 30 7d 0a    }.  } {0 0.0}.
2760: 20 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d    do_test misc1-
2770: 31 32 2e 36 20 7b 0a 20 20 20 20 65 78 65 63 73  12.6 {.    execs
2780: 71 6c 20 7b 0a 20 20 20 20 20 20 49 4e 53 45 52  ql {.      INSER
2790: 54 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e 54 4f  T OR IGNORE INTO
27a0: 20 74 36 20 56 41 4c 55 45 53 28 27 79 27 2c 30   t6 VALUES('y',0
27b0: 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  );.      SELECT 
27c0: 2a 20 46 52 4f 4d 20 74 36 3b 0a 20 20 20 20 7d  * FROM t6;.    }
27d0: 0a 20 20 7d 20 7b 30 20 30 2e 30 20 79 20 30 7d  .  } {0 0.0 y 0}
27e0: 0a 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31  .}.do_test misc1
27f0: 2d 31 32 2e 37 20 7b 0a 20 20 65 78 65 63 73 71  -12.7 {.  execsq
2800: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
2810: 41 42 4c 45 20 74 37 28 78 20 49 4e 54 45 47 45  ABLE t7(x INTEGE
2820: 52 2c 20 79 20 54 45 58 54 2c 20 7a 29 3b 0a 20  R, y TEXT, z);. 
2830: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2840: 37 20 56 41 4c 55 45 53 28 30 2c 30 2c 31 29 3b  7 VALUES(0,0,1);
2850: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2860: 20 74 37 20 56 41 4c 55 45 53 28 30 2e 30 2c 30   t7 VALUES(0.0,0
2870: 2c 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,2);.    INSERT 
2880: 49 4e 54 4f 20 74 37 20 56 41 4c 55 45 53 28 30  INTO t7 VALUES(0
2890: 2c 30 2e 30 2c 33 29 3b 0a 20 20 20 20 49 4e 53  ,0.0,3);.    INS
28a0: 45 52 54 20 49 4e 54 4f 20 74 37 20 56 41 4c 55  ERT INTO t7 VALU
28b0: 45 53 28 30 2e 30 2c 30 2e 30 2c 34 29 3b 0a 20  ES(0.0,0.0,4);. 
28c0: 20 20 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e     SELECT DISTIN
28d0: 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 37 20  CT x, y FROM t7 
28e0: 4f 52 44 45 52 20 42 59 20 7a 3b 0a 20 20 7d 0a  ORDER BY z;.  }.
28f0: 7d 20 7b 30 20 30 20 30 20 30 2e 30 7d 0a 64 6f  } {0 0 0 0.0}.do
2900: 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 32 2e 38  _test misc1-12.8
2910: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2920: 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28 7a 29     SELECT min(z)
2930: 2c 20 6d 61 78 28 7a 29 2c 20 63 6f 75 6e 74 28  , max(z), count(
2940: 7a 29 20 46 52 4f 4d 20 74 37 20 47 52 4f 55 50  z) FROM t7 GROUP
2950: 20 42 59 20 78 20 4f 52 44 45 52 20 42 59 20 31   BY x ORDER BY 1
2960: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 34 20 34 7d 0a  ;.  }.} {1 4 4}.
2970: 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 32  do_test misc1-12
2980: 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .9 {.  execsql {
2990: 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28  .    SELECT min(
29a0: 7a 29 2c 20 6d 61 78 28 7a 29 2c 20 63 6f 75 6e  z), max(z), coun
29b0: 74 28 7a 29 20 46 52 4f 4d 20 74 37 20 47 52 4f  t(z) FROM t7 GRO
29c0: 55 50 20 42 59 20 79 20 4f 52 44 45 52 20 42 59  UP BY y ORDER BY
29d0: 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 32   1;.  }.} {1 2 2
29e0: 20 33 20 34 20 32 7d 0a 0a 23 20 54 68 69 73 20   3 4 2}..# This 
29f0: 75 73 65 64 20 74 6f 20 62 65 20 61 6e 20 65 72  used to be an er
2a00: 72 6f 72 2e 20 20 42 75 74 20 77 65 20 63 68 61  ror.  But we cha
2a10: 6e 67 65 64 20 74 68 65 20 63 6f 64 65 20 73 6f  nged the code so
2a20: 20 74 68 61 74 20 61 72 62 69 74 72 61 72 79 0a   that arbitrary.
2a30: 23 20 69 64 65 6e 74 69 66 69 65 72 73 20 63 61  # identifiers ca
2a40: 6e 20 62 65 20 75 73 65 64 20 61 73 20 61 20 63  n be used as a c
2a50: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
2a60: 65 2e 20 20 43 6f 6c 6c 61 74 69 6f 6e 20 69 73  e.  Collation is
2a70: 20 62 79 20 74 65 78 74 0a 23 20 69 66 20 74 68   by text.# if th
2a80: 65 20 69 64 65 6e 74 69 66 69 65 72 20 63 6f 6e  e identifier con
2a90: 74 61 69 6e 73 20 22 74 65 78 74 22 2c 20 22 62  tains "text", "b
2aa0: 6c 6f 62 22 2c 20 6f 72 20 22 63 6c 6f 62 22 20  lob", or "clob" 
2ab0: 61 6e 64 20 69 73 20 6e 75 6d 65 72 69 63 0a 23  and is numeric.#
2ac0: 20 6f 74 68 65 72 77 69 73 65 2e 0a 23 0a 23 20   otherwise..#.# 
2ad0: 55 70 64 61 74 65 3a 20 49 6e 20 76 33 2c 20 69  Update: In v3, i
2ae0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 61 67  t is an error ag
2af0: 61 69 6e 2e 0a 23 0a 23 64 6f 5f 74 65 73 74 20  ain..#.#do_test 
2b00: 6d 69 73 63 31 2d 31 32 2e 31 30 20 7b 0a 23 20  misc1-12.10 {.# 
2b10: 20 63 61 74 63 68 73 71 6c 20 7b 0a 23 20 20 20   catchsql {.#   
2b20: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2b30: 36 20 4f 52 44 45 52 20 42 59 20 61 20 43 4f 4c  6 ORDER BY a COL
2b40: 4c 41 54 45 20 75 6e 6b 6e 6f 77 6e 3b 0a 23 20  LATE unknown;.# 
2b50: 20 7d 0a 23 7d 20 7b 30 20 7b 30 20 30 20 79 20   }.#} {0 {0 0 y 
2b60: 30 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63  0}}.do_test misc
2b70: 31 2d 31 32 2e 31 31 20 7b 0a 20 20 65 78 65 63  1-12.11 {.  exec
2b80: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
2b90: 20 54 41 42 4c 45 20 74 38 28 78 20 54 45 58 54   TABLE t8(x TEXT
2ba0: 20 43 4f 4c 4c 41 54 45 20 6e 75 6d 65 72 69 63   COLLATE numeric
2bb0: 2c 20 79 20 49 4e 54 45 47 45 52 20 43 4f 4c 4c  , y INTEGER COLL
2bc0: 41 54 45 20 74 65 78 74 2c 20 7a 29 3b 0a 20 20  ATE text, z);.  
2bd0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38    INSERT INTO t8
2be0: 20 56 41 4c 55 45 53 28 30 2c 30 2c 31 29 3b 0a   VALUES(0,0,1);.
2bf0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2c00: 74 38 20 56 41 4c 55 45 53 28 30 2e 30 2c 30 2c  t8 VALUES(0.0,0,
2c10: 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  2);.    INSERT I
2c20: 4e 54 4f 20 74 38 20 56 41 4c 55 45 53 28 30 2c  NTO t8 VALUES(0,
2c30: 30 2e 30 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45  0.0,3);.    INSE
2c40: 52 54 20 49 4e 54 4f 20 74 38 20 56 41 4c 55 45  RT INTO t8 VALUE
2c50: 53 28 30 2e 30 2c 30 2e 30 2c 34 29 3b 0a 20 20  S(0.0,0.0,4);.  
2c60: 20 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43    SELECT DISTINC
2c70: 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 38 20 4f  T x, y FROM t8 O
2c80: 52 44 45 52 20 42 59 20 7a 3b 0a 20 20 7d 0a 7d  RDER BY z;.  }.}
2c90: 20 7b 30 20 30 20 30 2e 30 20 30 7d 0a 64 6f 5f   {0 0 0.0 0}.do_
2ca0: 74 65 73 74 20 6d 69 73 63 31 2d 31 32 2e 31 32  test misc1-12.12
2cb0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2cc0: 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28 7a 29     SELECT min(z)
2cd0: 2c 20 6d 61 78 28 7a 29 2c 20 63 6f 75 6e 74 28  , max(z), count(
2ce0: 7a 29 20 46 52 4f 4d 20 74 38 20 47 52 4f 55 50  z) FROM t8 GROUP
2cf0: 20 42 59 20 78 20 4f 52 44 45 52 20 42 59 20 31   BY x ORDER BY 1
2d00: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 33 20 32 20 32  ;.  }.} {1 3 2 2
2d10: 20 34 20 32 7d 0a 64 6f 5f 74 65 73 74 20 6d 69   4 2}.do_test mi
2d20: 73 63 31 2d 31 32 2e 31 33 20 7b 0a 20 20 65 78  sc1-12.13 {.  ex
2d30: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
2d40: 43 54 20 6d 69 6e 28 7a 29 2c 20 6d 61 78 28 7a  CT min(z), max(z
2d50: 29 2c 20 63 6f 75 6e 74 28 7a 29 20 46 52 4f 4d  ), count(z) FROM
2d60: 20 74 38 20 47 52 4f 55 50 20 42 59 20 79 20 4f   t8 GROUP BY y O
2d70: 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d  RDER BY 1;.  }.}
2d80: 20 7b 31 20 34 20 34 7d 0a 0a 23 20 54 68 65 72   {1 4 4}..# Ther
2d90: 65 20 77 61 73 20 61 20 70 72 6f 62 6c 65 6d 20  e was a problem 
2da0: 77 69 74 68 20 72 65 61 6c 6c 6f 63 28 29 20 69  with realloc() i
2db0: 6e 20 74 68 65 20 4f 50 5f 4d 65 6d 53 74 6f 72  n the OP_MemStor
2dc0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 23  e operation of.#
2dd0: 20 74 68 65 20 56 44 42 45 2e 20 20 41 20 62 75   the VDBE.  A bu
2de0: 66 66 65 72 20 77 61 73 20 62 65 69 6e 67 20 72  ffer was being r
2df0: 65 61 6c 6c 6f 63 61 74 65 64 20 62 75 74 20 73  eallocated but s
2e00: 6f 6d 65 20 70 6f 69 6e 74 65 72 73 20 69 6e 74  ome pointers int
2e10: 6f 20 0a 23 20 74 68 65 20 6f 6c 64 20 63 6f 70  o .# the old cop
2e20: 79 20 6f 66 20 74 68 65 20 62 75 66 66 65 72 20  y of the buffer 
2e30: 77 65 72 65 20 6e 6f 74 20 62 65 69 6e 67 20 6d  were not being m
2e40: 6f 76 65 64 20 6f 76 65 72 20 74 6f 20 74 68 65  oved over to the
2e50: 20 6e 65 77 20 63 6f 70 79 2e 0a 23 20 54 68 65   new copy..# The
2e60: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20   following code 
2e70: 74 65 73 74 73 20 66 6f 72 20 74 68 65 20 70 72  tests for the pr
2e80: 6f 62 6c 65 6d 2e 0a 23 0a 69 66 63 61 70 61 62  oblem..#.ifcapab
2e90: 6c 65 20 73 75 62 71 75 65 72 79 20 7b 0a 20 20  le subquery {.  
2ea0: 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 33  do_test misc1-13
2eb0: 2e 31 20 7b 0a 20 20 20 20 20 65 78 65 63 73 71  .1 {.     execsq
2ec0: 6c 20 7b 0a 20 20 20 20 20 20 20 43 52 45 41 54  l {.       CREAT
2ed0: 45 20 54 41 42 4c 45 20 74 39 28 78 2c 79 29 3b  E TABLE t9(x,y);
2ee0: 0a 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  .       INSERT I
2ef0: 4e 54 4f 20 74 39 20 56 41 4c 55 45 53 28 27 6f  NTO t9 VALUES('o
2f00: 6e 65 27 2c 31 29 3b 0a 20 20 20 20 20 20 20 49  ne',1);.       I
2f10: 4e 53 45 52 54 20 49 4e 54 4f 20 74 39 20 56 41  NSERT INTO t9 VA
2f20: 4c 55 45 53 28 27 74 77 6f 27 2c 32 29 3b 0a 20  LUES('two',2);. 
2f30: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
2f40: 4f 20 74 39 20 56 41 4c 55 45 53 28 27 74 68 72  O t9 VALUES('thr
2f50: 65 65 27 2c 33 29 3b 0a 20 20 20 20 20 20 20 49  ee',3);.       I
2f60: 4e 53 45 52 54 20 49 4e 54 4f 20 74 39 20 56 41  NSERT INTO t9 VA
2f70: 4c 55 45 53 28 27 66 6f 75 72 27 2c 34 29 3b 0a  LUES('four',4);.
2f80: 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e         INSERT IN
2f90: 54 4f 20 74 39 20 56 41 4c 55 45 53 28 27 66 69  TO t9 VALUES('fi
2fa0: 76 65 27 2c 35 29 3b 0a 20 20 20 20 20 20 20 49  ve',5);.       I
2fb0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 39 20 56 41  NSERT INTO t9 VA
2fc0: 4c 55 45 53 28 27 73 69 78 27 2c 36 29 3b 0a 20  LUES('six',6);. 
2fd0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
2fe0: 4f 20 74 39 20 56 41 4c 55 45 53 28 27 73 65 76  O t9 VALUES('sev
2ff0: 65 6e 27 2c 37 29 3b 0a 20 20 20 20 20 20 20 49  en',7);.       I
3000: 4e 53 45 52 54 20 49 4e 54 4f 20 74 39 20 56 41  NSERT INTO t9 VA
3010: 4c 55 45 53 28 27 65 69 67 68 74 27 2c 38 29 3b  LUES('eight',8);
3020: 0a 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  .       INSERT I
3030: 4e 54 4f 20 74 39 20 56 41 4c 55 45 53 28 27 6e  NTO t9 VALUES('n
3040: 69 6e 65 27 2c 39 29 3b 0a 20 20 20 20 20 20 20  ine',9);.       
3050: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 39 20 56  INSERT INTO t9 V
3060: 41 4c 55 45 53 28 27 74 65 6e 27 2c 31 30 29 3b  ALUES('ten',10);
3070: 0a 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  .       INSERT I
3080: 4e 54 4f 20 74 39 20 56 41 4c 55 45 53 28 27 65  NTO t9 VALUES('e
3090: 6c 65 76 65 6e 27 2c 31 31 29 3b 0a 20 20 20 20  leven',11);.    
30a0: 20 20 20 53 45 4c 45 43 54 20 79 20 46 52 4f 4d     SELECT y FROM
30b0: 20 74 39 0a 20 20 20 20 20 20 20 57 48 45 52 45   t9.       WHERE
30c0: 20 78 3d 28 53 45 4c 45 43 54 20 78 20 46 52 4f   x=(SELECT x FRO
30d0: 4d 20 74 39 20 57 48 45 52 45 20 79 3d 31 29 0a  M t9 WHERE y=1).
30e0: 20 20 20 20 20 20 20 20 20 20 4f 52 20 78 3d 28            OR x=(
30f0: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 39  SELECT x FROM t9
3100: 20 57 48 45 52 45 20 79 3d 32 29 0a 20 20 20 20   WHERE y=2).    
3110: 20 20 20 20 20 20 4f 52 20 78 3d 28 53 45 4c 45        OR x=(SELE
3120: 43 54 20 78 20 46 52 4f 4d 20 74 39 20 57 48 45  CT x FROM t9 WHE
3130: 52 45 20 79 3d 33 29 0a 20 20 20 20 20 20 20 20  RE y=3).        
3140: 20 20 4f 52 20 78 3d 28 53 45 4c 45 43 54 20 78    OR x=(SELECT x
3150: 20 46 52 4f 4d 20 74 39 20 57 48 45 52 45 20 79   FROM t9 WHERE y
3160: 3d 34 29 0a 20 20 20 20 20 20 20 20 20 20 4f 52  =4).          OR
3170: 20 78 3d 28 53 45 4c 45 43 54 20 78 20 46 52 4f   x=(SELECT x FRO
3180: 4d 20 74 39 20 57 48 45 52 45 20 79 3d 35 29 0a  M t9 WHERE y=5).
3190: 20 20 20 20 20 20 20 20 20 20 4f 52 20 78 3d 28            OR x=(
31a0: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 39  SELECT x FROM t9
31b0: 20 57 48 45 52 45 20 79 3d 36 29 0a 20 20 20 20   WHERE y=6).    
31c0: 20 20 20 20 20 20 4f 52 20 78 3d 28 53 45 4c 45        OR x=(SELE
31d0: 43 54 20 78 20 46 52 4f 4d 20 74 39 20 57 48 45  CT x FROM t9 WHE
31e0: 52 45 20 79 3d 37 29 0a 20 20 20 20 20 20 20 20  RE y=7).        
31f0: 20 20 4f 52 20 78 3d 28 53 45 4c 45 43 54 20 78    OR x=(SELECT x
3200: 20 46 52 4f 4d 20 74 39 20 57 48 45 52 45 20 79   FROM t9 WHERE y
3210: 3d 38 29 0a 20 20 20 20 20 20 20 20 20 20 4f 52  =8).          OR
3220: 20 78 3d 28 53 45 4c 45 43 54 20 78 20 46 52 4f   x=(SELECT x FRO
3230: 4d 20 74 39 20 57 48 45 52 45 20 79 3d 39 29 0a  M t9 WHERE y=9).
3240: 20 20 20 20 20 20 20 20 20 20 4f 52 20 78 3d 28            OR x=(
3250: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 39  SELECT x FROM t9
3260: 20 57 48 45 52 45 20 79 3d 31 30 29 0a 20 20 20   WHERE y=10).   
3270: 20 20 20 20 20 20 20 4f 52 20 78 3d 28 53 45 4c         OR x=(SEL
3280: 45 43 54 20 78 20 46 52 4f 4d 20 74 39 20 57 48  ECT x FROM t9 WH
3290: 45 52 45 20 79 3d 31 31 29 0a 20 20 20 20 20 20  ERE y=11).      
32a0: 20 20 20 20 4f 52 20 78 3d 28 53 45 4c 45 43 54      OR x=(SELECT
32b0: 20 78 20 46 52 4f 4d 20 74 39 20 57 48 45 52 45   x FROM t9 WHERE
32c0: 20 79 3d 31 32 29 0a 20 20 20 20 20 20 20 20 20   y=12).         
32d0: 20 4f 52 20 78 3d 28 53 45 4c 45 43 54 20 78 20   OR x=(SELECT x 
32e0: 46 52 4f 4d 20 74 39 20 57 48 45 52 45 20 79 3d  FROM t9 WHERE y=
32f0: 31 33 29 0a 20 20 20 20 20 20 20 20 20 20 4f 52  13).          OR
3300: 20 78 3d 28 53 45 4c 45 43 54 20 78 20 46 52 4f   x=(SELECT x FRO
3310: 4d 20 74 39 20 57 48 45 52 45 20 79 3d 31 34 29  M t9 WHERE y=14)
3320: 0a 20 20 20 20 20 20 20 3b 0a 20 20 20 20 20 7d  .       ;.     }
3330: 0a 20 20 7d 20 7b 31 20 32 20 33 20 34 20 35 20  .  } {1 2 3 4 5 
3340: 36 20 37 20 38 20 39 20 31 30 20 31 31 7d 0a 7d  6 7 8 9 10 11}.}
3350: 0a 0a 23 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77  ..#.# The follow
3360: 69 6e 67 20 74 65 73 74 73 20 63 61 6e 20 6f 6e  ing tests can on
3370: 6c 79 20 77 6f 72 6b 20 69 66 20 74 68 65 20 63  ly work if the c
3380: 75 72 72 65 6e 74 20 53 51 4c 69 74 65 20 56 46  urrent SQLite VF
3390: 53 20 68 61 73 20 74 68 65 20 63 6f 6e 63 65 70  S has the concep
33a0: 74 0a 23 20 6f 66 20 61 20 63 75 72 72 65 6e 74  t.# of a current
33b0: 20 64 69 72 65 63 74 6f 72 79 2e 0a 23 0a 69 66   directory..#.if
33c0: 63 61 70 61 62 6c 65 20 63 75 72 64 69 72 20 7b  capable curdir {
33d0: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 61 20 64  .# Make sure a d
33e0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
33f0: 6f 6e 20 73 74 69 6c 6c 20 77 6f 72 6b 73 20 61  on still works a
3400: 66 74 65 72 20 63 68 61 6e 67 69 6e 67 20 74 68  fter changing th
3410: 65 0a 23 20 77 6f 72 6b 69 6e 67 20 64 69 72 65  e.# working dire
3420: 63 74 6f 72 79 2e 0a 23 0a 64 6f 5f 74 65 73 74  ctory..#.do_test
3430: 20 6d 69 73 63 31 2d 31 34 2e 31 20 7b 0a 20 20   misc1-14.1 {.  
3440: 66 69 6c 65 20 6d 6b 64 69 72 20 74 65 6d 70 64  file mkdir tempd
3450: 69 72 0a 20 20 63 64 20 74 65 6d 70 64 69 72 0a  ir.  cd tempdir.
3460: 20 20 65 78 65 63 73 71 6c 20 7b 42 45 47 49 4e    execsql {BEGIN
3470: 7d 0a 20 20 66 69 6c 65 20 65 78 69 73 74 73 20  }.  file exists 
3480: 2e 2f 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61  ./test.db-journa
3490: 6c 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  l.} {0}.do_test 
34a0: 6d 69 73 63 31 2d 31 34 2e 32 61 20 7b 0a 20 20  misc1-14.2a {.  
34b0: 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20  execsql {UPDATE 
34c0: 74 31 20 53 45 54 20 61 3d 61 7c 7c 27 78 27 20  t1 SET a=a||'x' 
34d0: 57 48 45 52 45 20 30 7d 0a 20 20 66 69 6c 65 20  WHERE 0}.  file 
34e0: 65 78 69 73 74 73 20 2e 2e 2f 74 65 73 74 2e 64  exists ../test.d
34f0: 62 2d 6a 6f 75 72 6e 61 6c 0a 7d 20 7b 30 7d 0a  b-journal.} {0}.
3500: 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 34  do_test misc1-14
3510: 2e 32 62 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .2b {.  execsql 
3520: 7b 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61  {UPDATE t1 SET a
3530: 3d 61 7c 7c 27 79 27 20 57 48 45 52 45 20 31 7d  =a||'y' WHERE 1}
3540: 0a 20 20 66 69 6c 65 20 65 78 69 73 74 73 20 2e  .  file exists .
3550: 2e 2f 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61  ./test.db-journa
3560: 6c 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  l.} {1}.do_test 
3570: 6d 69 73 63 31 2d 31 34 2e 33 20 7b 0a 20 20 63  misc1-14.3 {.  c
3580: 64 20 2e 2e 0a 20 20 66 6f 72 63 65 64 65 6c 65  d ...  forcedele
3590: 74 65 20 74 65 6d 70 64 69 72 0a 20 20 65 78 65  te tempdir.  exe
35a0: 63 73 71 6c 20 7b 43 4f 4d 4d 49 54 7d 0a 20 20  csql {COMMIT}.  
35b0: 66 69 6c 65 20 65 78 69 73 74 73 20 2e 2f 74 65  file exists ./te
35c0: 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 7d 20  st.db-journal.} 
35d0: 7b 30 7d 0a 7d 0a 0a 23 20 41 20 66 61 69 6c 65  {0}.}..# A faile
35e0: 64 20 63 72 65 61 74 65 20 74 61 62 6c 65 20 73  d create table s
35f0: 68 6f 75 6c 64 20 6e 6f 74 20 6c 65 61 76 65 20  hould not leave 
3600: 74 68 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65  the table in the
3610: 20 69 6e 74 65 72 6e 61 6c 0a 23 20 64 61 74 61   internal.# data
3620: 20 73 74 72 75 63 74 75 72 65 73 2e 20 20 54 69   structures.  Ti
3630: 63 6b 65 74 20 23 32 33 38 2e 0a 23 0a 64 6f 5f  cket #238..#.do_
3640: 74 65 73 74 20 6d 69 73 63 31 2d 31 35 2e 31 2e  test misc1-15.1.
3650: 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  1 {.  catchsql {
3660: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
3670: 45 20 74 31 30 20 41 53 20 53 45 4c 45 43 54 20  E t10 AS SELECT 
3680: 63 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f  c1;.  }.} {1 {no
3690: 20 73 75 63 68 20 63 6f 6c 75 6d 6e 3a 20 63 31   such column: c1
36a0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31  }}.do_test misc1
36b0: 2d 31 35 2e 31 2e 32 20 7b 0a 20 20 63 61 74 63  -15.1.2 {.  catc
36c0: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
36d0: 45 20 54 41 42 4c 45 20 74 31 30 20 41 53 20 53  E TABLE t10 AS S
36e0: 45 4c 45 43 54 20 74 39 2e 63 31 3b 0a 20 20 7d  ELECT t9.c1;.  }
36f0: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 63  .} {1 {no such c
3700: 6f 6c 75 6d 6e 3a 20 74 39 2e 63 31 7d 7d 0a 64  olumn: t9.c1}}.d
3710: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 35 2e  o_test misc1-15.
3720: 31 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  1.3 {.  catchsql
3730: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
3740: 42 4c 45 20 74 31 30 20 41 53 20 53 45 4c 45 43  BLE t10 AS SELEC
3750: 54 20 6d 61 69 6e 2e 74 39 2e 63 31 3b 0a 20 20  T main.t9.c1;.  
3760: 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20  }.} {1 {no such 
3770: 63 6f 6c 75 6d 6e 3a 20 6d 61 69 6e 2e 74 39 2e  column: main.t9.
3780: 63 31 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73  c1}}.do_test mis
3790: 63 31 2d 31 35 2e 32 20 7b 0a 20 20 63 61 74 63  c1-15.2 {.  catc
37a0: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
37b0: 45 20 54 41 42 4c 45 20 74 31 30 20 41 53 20 53  E TABLE t10 AS S
37c0: 45 4c 45 43 54 20 31 3b 0a 20 20 7d 0a 20 20 23  ELECT 1;.  }.  #
37d0: 20 54 68 65 20 62 75 67 20 69 6e 20 74 69 63 6b   The bug in tick
37e0: 65 74 20 23 32 33 38 20 63 61 75 73 65 73 20 74  et #238 causes t
37f0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  he statement abo
3800: 76 65 20 74 6f 20 66 61 69 6c 20 77 69 74 68 0a  ve to fail with.
3810: 20 20 23 20 74 68 65 20 65 72 72 6f 72 20 22 74    # the error "t
3820: 61 62 6c 65 20 74 31 30 20 61 6c 72 65 61 64 20  able t10 alread 
3830: 65 78 69 73 74 73 22 0a 7d 20 7b 30 20 7b 7d 7d  exists".} {0 {}}
3840: 0a 0a 23 20 54 65 73 74 20 66 6f 72 20 6d 65 6d  ..# Test for mem
3850: 6f 72 79 20 6c 65 61 6b 73 20 77 68 65 6e 20 61  ory leaks when a
3860: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f   CREATE TABLE co
3870: 6e 74 61 69 6e 69 6e 67 20 61 20 70 72 69 6d 61  ntaining a prima
3880: 72 79 20 6b 65 79 0a 23 20 66 61 69 6c 73 2e 20  ry key.# fails. 
3890: 20 54 69 63 6b 65 74 20 23 32 34 39 2e 0a 23 0a   Ticket #249..#.
38a0: 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 36  do_test misc1-16
38b0: 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .1 {.  catchsql 
38c0: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
38d0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
38e0: 4c 49 4d 49 54 20 31 7d 0a 20 20 63 61 74 63 68  LIMIT 1}.  catch
38f0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
3900: 20 54 41 42 4c 45 20 74 65 73 74 28 61 20 69 6e   TABLE test(a in
3910: 74 65 67 65 72 2c 20 70 72 69 6d 61 72 79 20 6b  teger, primary k
3920: 65 79 28 61 29 29 3b 0a 20 20 7d 0a 7d 20 7b 30  ey(a));.  }.} {0
3930: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73   {}}.do_test mis
3940: 63 31 2d 31 36 2e 32 20 7b 0a 20 20 63 61 74 63  c1-16.2 {.  catc
3950: 68 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  hsql {.    CREAT
3960: 45 20 54 41 42 4c 45 20 74 65 73 74 28 61 20 69  E TABLE test(a i
3970: 6e 74 65 67 65 72 2c 20 70 72 69 6d 61 72 79 20  nteger, primary 
3980: 6b 65 79 28 61 29 29 3b 0a 20 20 7d 0a 7d 20 7b  key(a));.  }.} {
3990: 31 20 7b 74 61 62 6c 65 20 74 65 73 74 20 61 6c  1 {table test al
39a0: 72 65 61 64 79 20 65 78 69 73 74 73 7d 7d 0a 64  ready exists}}.d
39b0: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 36 2e  o_test misc1-16.
39c0: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
39d0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
39e0: 45 20 74 65 73 74 32 28 61 20 74 65 78 74 20 70  E test2(a text p
39f0: 72 69 6d 61 72 79 20 6b 65 79 2c 20 62 20 74 65  rimary key, b te
3a00: 78 74 2c 20 70 72 69 6d 61 72 79 20 6b 65 79 28  xt, primary key(
3a10: 61 2c 62 29 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20  a,b));.  }.} {1 
3a20: 7b 74 61 62 6c 65 20 22 74 65 73 74 32 22 20 68  {table "test2" h
3a30: 61 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  as more than one
3a40: 20 70 72 69 6d 61 72 79 20 6b 65 79 7d 7d 0a 64   primary key}}.d
3a50: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 36 2e  o_test misc1-16.
3a60: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
3a70: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3a80: 74 65 73 74 20 56 41 4c 55 45 53 28 31 29 3b 0a  test VALUES(1);.
3a90: 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64      SELECT rowid
3aa0: 2c 20 61 20 46 52 4f 4d 20 74 65 73 74 3b 0a 20  , a FROM test;. 
3ab0: 20 7d 0a 7d 20 7b 31 20 31 7d 0a 64 6f 5f 74 65   }.} {1 1}.do_te
3ac0: 73 74 20 6d 69 73 63 31 2d 31 36 2e 35 20 7b 0a  st misc1-16.5 {.
3ad0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3ae0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 73 74  INSERT INTO test
3af0: 20 56 41 4c 55 45 53 28 35 29 3b 0a 20 20 20 20   VALUES(5);.    
3b00: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20  SELECT rowid, a 
3b10: 46 52 4f 4d 20 74 65 73 74 3b 0a 20 20 7d 0a 7d  FROM test;.  }.}
3b20: 20 7b 31 20 31 20 35 20 35 7d 0a 64 6f 5f 74 65   {1 1 5 5}.do_te
3b30: 73 74 20 6d 69 73 63 31 2d 31 36 2e 36 20 7b 0a  st misc1-16.6 {.
3b40: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3b50: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 73 74  INSERT INTO test
3b60: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20   VALUES(NULL);. 
3b70: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c     SELECT rowid,
3b80: 20 61 20 46 52 4f 4d 20 74 65 73 74 3b 0a 20 20   a FROM test;.  
3b90: 7d 0a 7d 20 7b 31 20 31 20 35 20 35 20 36 20 36  }.} {1 1 5 5 6 6
3ba0: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69  }..ifcapable tri
3bb0: 67 67 65 72 26 26 74 65 6d 70 64 62 20 7b 0a 23  gger&&tempdb {.#
3bc0: 20 54 69 63 6b 65 74 20 23 33 33 33 3a 20 54 65   Ticket #333: Te
3bd0: 6d 70 20 74 72 69 67 67 65 72 73 20 74 68 61 74  mp triggers that
3be0: 20 6d 6f 64 69 66 79 20 70 65 72 73 69 73 74 65   modify persiste
3bf0: 6e 74 20 74 61 62 6c 65 73 2e 0a 23 0a 64 6f 5f  nt tables..#.do_
3c00: 74 65 73 74 20 6d 69 73 63 31 2d 31 37 2e 31 20  test misc1-17.1 
3c10: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3c20: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45    BEGIN;.    CRE
3c30: 41 54 45 20 54 41 42 4c 45 20 52 65 61 6c 54 61  ATE TABLE RealTa
3c40: 62 6c 65 28 54 65 73 74 49 44 20 49 4e 54 45 47  ble(TestID INTEG
3c50: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
3c60: 54 65 73 74 53 74 72 69 6e 67 20 54 45 58 54 29  TestString TEXT)
3c70: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45 4d  ;.    CREATE TEM
3c80: 50 20 54 41 42 4c 45 20 54 65 6d 70 54 61 62 6c  P TABLE TempTabl
3c90: 65 28 54 65 73 74 49 44 20 49 4e 54 45 47 45 52  e(TestID INTEGER
3ca0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 54 65   PRIMARY KEY, Te
3cb0: 73 74 53 74 72 69 6e 67 20 54 45 58 54 29 3b 0a  stString TEXT);.
3cc0: 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20      CREATE TEMP 
3cd0: 54 52 49 47 47 45 52 20 74 72 69 67 54 65 73 74  TRIGGER trigTest
3ce0: 5f 31 20 41 46 54 45 52 20 55 50 44 41 54 45 20  _1 AFTER UPDATE 
3cf0: 4f 4e 20 54 65 6d 70 54 61 62 6c 65 20 42 45 47  ON TempTable BEG
3d00: 49 4e 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  IN.      INSERT 
3d10: 49 4e 54 4f 20 52 65 61 6c 54 61 62 6c 65 28 54  INTO RealTable(T
3d20: 65 73 74 53 74 72 69 6e 67 29 20 0a 20 20 20 20  estString) .    
3d30: 20 20 20 20 20 53 45 4c 45 43 54 20 6e 65 77 2e       SELECT new.
3d40: 54 65 73 74 53 74 72 69 6e 67 20 46 52 4f 4d 20  TestString FROM 
3d50: 54 65 6d 70 54 61 62 6c 65 20 4c 49 4d 49 54 20  TempTable LIMIT 
3d60: 31 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20  1;.    END;.    
3d70: 49 4e 53 45 52 54 20 49 4e 54 4f 20 54 65 6d 70  INSERT INTO Temp
3d80: 54 61 62 6c 65 28 54 65 73 74 53 74 72 69 6e 67  Table(TestString
3d90: 29 20 56 41 4c 55 45 53 20 28 27 31 27 29 3b 0a  ) VALUES ('1');.
3da0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3db0: 54 65 6d 70 54 61 62 6c 65 28 54 65 73 74 53 74  TempTable(TestSt
3dc0: 72 69 6e 67 29 20 56 41 4c 55 45 53 20 28 27 32  ring) VALUES ('2
3dd0: 27 29 3b 0a 20 20 20 20 55 50 44 41 54 45 20 54  ');.    UPDATE T
3de0: 65 6d 70 54 61 62 6c 65 20 53 45 54 20 54 65 73  empTable SET Tes
3df0: 74 53 74 72 69 6e 67 20 3d 20 54 65 73 74 53 74  tString = TestSt
3e00: 72 69 6e 67 20 2b 20 31 20 57 48 45 52 45 20 54  ring + 1 WHERE T
3e10: 65 73 74 49 44 3d 31 20 4f 52 20 54 65 73 74 49  estID=1 OR TestI
3e20: 64 3d 32 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  d=2;.    COMMIT;
3e30: 0a 20 20 20 20 53 45 4c 45 43 54 20 54 65 73 74  .    SELECT Test
3e40: 53 74 72 69 6e 67 20 46 52 4f 4d 20 52 65 61 6c  String FROM Real
3e50: 54 61 62 6c 65 20 4f 52 44 45 52 20 42 59 20 31  Table ORDER BY 1
3e60: 3b 0a 20 20 7d 0a 7d 20 7b 32 20 33 7d 0a 7d 0a  ;.  }.} {2 3}.}.
3e70: 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31  .do_test misc1-1
3e80: 38 2e 31 20 7b 0a 20 20 73 65 74 20 6e 20 5b 73  8.1 {.  set n [s
3e90: 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 31 30 30  qlite3_sleep 100
3ea0: 5d 0a 20 20 65 78 70 72 20 7b 24 6e 3e 3d 31 30  ].  expr {$n>=10
3eb0: 30 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 32 30 31 34  0}.} {1}..# 2014
3ec0: 2d 30 31 2d 31 30 3a 20 20 49 6e 20 61 20 43 52  -01-10:  In a CR
3ed0: 45 41 54 45 20 54 41 42 4c 45 20 41 53 2c 20 69  EATE TABLE AS, i
3ee0: 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66  f one or more of
3ef0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
3f00: 73 0a 23 20 61 72 65 20 61 6e 20 65 6d 70 74 79  s.# are an empty
3f10: 20 73 74 72 69 6e 67 2c 20 74 68 61 74 20 69 73   string, that is
3f20: 20 73 74 69 6c 6c 20 4f 4b 2e 0a 23 0a 64 6f 5f   still OK..#.do_
3f30: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6d 69 73  execsql_test mis
3f40: 63 31 2d 31 39 2e 31 20 7b 0a 20 20 43 52 45 41  c1-19.1 {.  CREA
3f50: 54 45 20 54 41 42 4c 45 20 74 31 39 20 41 53 20  TE TABLE t19 AS 
3f60: 53 45 4c 45 43 54 20 31 2c 20 32 20 41 53 20 27  SELECT 1, 2 AS '
3f70: 27 2c 20 33 3b 0a 20 20 53 45 4c 45 43 54 20 2a  ', 3;.  SELECT *
3f80: 20 46 52 4f 4d 20 74 31 39 3b 0a 7d 20 7b 31 20   FROM t19;.} {1 
3f90: 32 20 33 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  2 3}.do_execsql_
3fa0: 74 65 73 74 20 6d 69 73 63 31 2d 31 39 2e 32 20  test misc1-19.2 
3fb0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
3fc0: 20 74 31 39 62 20 41 53 20 53 45 4c 45 43 54 20   t19b AS SELECT 
3fd0: 34 20 41 53 20 27 27 2c 20 35 20 41 53 20 27 27  4 AS '', 5 AS ''
3fe0: 2c 20 20 36 20 41 53 20 27 27 3b 0a 20 20 53 45  ,  6 AS '';.  SE
3ff0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 39 62  LECT * FROM t19b
4000: 3b 0a 7d 20 7b 34 20 35 20 36 7d 0a 0a 23 20 32  ;.} {4 5 6}..# 2
4010: 30 31 35 2d 30 35 2d 32 30 3a 20 20 43 52 45 41  015-05-20:  CREA
4020: 54 45 20 54 41 42 4c 45 20 41 53 20 73 68 6f 75  TE TABLE AS shou
4030: 6c 64 20 6e 6f 74 20 73 74 6f 72 65 20 49 4e 54  ld not store INT
4040: 20 76 61 6c 75 65 20 69 73 20 61 20 54 45 58 54   value is a TEXT
4050: 0a 23 20 63 6f 6c 75 6d 6e 2e 0a 23 0a 64 6f 5f  .# column..#.do_
4060: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6d 69 73  execsql_test mis
4070: 63 31 2d 31 39 2e 33 20 7b 0a 20 20 43 52 45 41  c1-19.3 {.  CREA
4080: 54 45 20 54 41 42 4c 45 20 74 31 39 63 28 78 20  TE TABLE t19c(x 
4090: 54 45 58 54 29 3b 0a 20 20 43 52 45 41 54 45 20  TEXT);.  CREATE 
40a0: 54 41 42 4c 45 20 74 31 39 64 20 41 53 20 53 45  TABLE t19d AS SE
40b0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 39 63  LECT * FROM t19c
40c0: 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
40d0: 54 20 31 32 33 34 3b 0a 20 20 53 45 4c 45 43 54  T 1234;.  SELECT
40e0: 20 78 2c 20 74 79 70 65 6f 66 28 78 29 20 46 52   x, typeof(x) FR
40f0: 4f 4d 20 74 31 39 64 3b 0a 7d 20 7b 31 32 33 34  OM t19d;.} {1234
4100: 20 74 65 78 74 7d 0a 0a 23 20 32 30 31 34 2d 30   text}..# 2014-0
4110: 35 2d 31 36 3a 20 20 54 65 73 74 73 20 66 6f 72  5-16:  Tests for
4120: 20 74 68 65 20 53 51 4c 49 54 45 5f 54 45 53 54   the SQLITE_TEST
4130: 43 54 52 4c 5f 46 41 55 4c 54 5f 49 4e 53 54 41  CTRL_FAULT_INSTA
4140: 4c 4c 20 66 65 61 74 75 72 65 2e 0a 23 0a 75 6e  LL feature..#.un
4150: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
4160: 66 61 75 6c 74 5f 63 61 6c 6c 62 61 63 6b 73 0a  fault_callbacks.
4170: 73 65 74 20 66 61 75 6c 74 5f 63 61 6c 6c 62 61  set fault_callba
4180: 63 6b 73 20 7b 7d 0a 70 72 6f 63 20 66 61 75 6c  cks {}.proc faul
4190: 74 5f 63 61 6c 6c 62 61 63 6b 20 7b 6e 7d 20 7b  t_callback {n} {
41a0: 0a 20 20 6c 61 70 70 65 6e 64 20 3a 3a 66 61 75  .  lappend ::fau
41b0: 6c 74 5f 63 61 6c 6c 62 61 63 6b 73 20 24 6e 0a  lt_callbacks $n.
41c0: 20 20 72 65 74 75 72 6e 20 30 0a 7d 0a 64 6f 5f    return 0.}.do_
41d0: 74 65 73 74 20 6d 69 73 63 31 2d 31 39 2e 31 20  test misc1-19.1 
41e0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 74 65 73 74  {.  sqlite3_test
41f0: 5f 63 6f 6e 74 72 6f 6c 5f 66 61 75 6c 74 5f 69  _control_fault_i
4200: 6e 73 74 61 6c 6c 20 66 61 75 6c 74 5f 63 61 6c  nstall fault_cal
4210: 6c 62 61 63 6b 0a 20 20 73 65 74 20 66 61 75 6c  lback.  set faul
4220: 74 5f 63 61 6c 6c 62 61 63 6b 73 0a 7d 20 7b 30  t_callbacks.} {0
4230: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d  }.do_test misc1-
4240: 31 39 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  19.2 {.  sqlite3
4250: 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 5f 66 61  _test_control_fa
4260: 75 6c 74 5f 69 6e 73 74 61 6c 6c 0a 20 20 73 65  ult_install.  se
4270: 74 20 66 61 75 6c 74 5f 63 61 6c 6c 62 61 63 6b  t fault_callback
4280: 73 0a 7d 20 7b 30 7d 0a 0a 23 20 32 30 31 35 2d  s.} {0}..# 2015-
4290: 30 31 2d 32 36 3a 20 20 56 61 6c 67 72 69 6e 64  01-26:  Valgrind
42a0: 2d 64 65 74 65 63 74 65 64 20 6f 76 65 72 2d 72  -detected over-r
42b0: 65 61 64 2e 0a 23 20 52 65 70 6f 72 74 65 64 20  ead..# Reported 
42c0: 6f 6e 20 73 71 6c 69 74 65 2d 75 73 65 72 73 40  on sqlite-users@
42d0: 73 71 6c 69 74 65 2e 6f 72 67 20 62 79 20 4d 69  sqlite.org by Mi
42e0: 63 68 61 6c 20 5a 61 6c 65 77 73 6b 69 2e 20 20  chal Zalewski.  
42f0: 46 6f 75 6e 64 20 62 79 20 61 66 6c 2d 66 75 7a  Found by afl-fuz
4300: 7a 0a 23 20 70 72 65 73 75 6d 61 62 6c 79 2e 0a  z.# presumably..
4310: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
4320: 74 20 6d 69 73 63 31 2d 32 30 2e 31 20 7b 0a 20  t misc1-20.1 {. 
4330: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 30   CREATE TABLE t0
4340: 28 78 20 49 4e 54 45 47 45 52 20 44 45 46 41 55  (x INTEGER DEFAU
4350: 4c 54 28 30 3d 3d 30 29 20 4e 4f 54 20 4e 55 4c  LT(0==0) NOT NUL
4360: 4c 29 3b 0a 20 20 52 45 50 4c 41 43 45 20 49 4e  L);.  REPLACE IN
4370: 54 4f 20 74 30 28 78 29 20 56 41 4c 55 45 53 28  TO t0(x) VALUES(
4380: 27 27 29 3b 0a 20 20 53 45 4c 45 43 54 20 72 6f  '');.  SELECT ro
4390: 77 69 64 2c 20 71 75 6f 74 65 28 78 29 20 46 52  wid, quote(x) FR
43a0: 4f 4d 20 74 30 3b 0a 7d 20 7b 31 20 27 27 7d 0a  OM t0;.} {1 ''}.
43b0: 0a 23 20 32 30 31 35 2d 30 33 2d 32 32 3a 20 4e  .# 2015-03-22: N
43c0: 55 4c 4c 20 70 6f 69 6e 74 65 72 20 64 65 72 65  ULL pointer dere
43d0: 66 65 72 65 6e 63 65 20 61 66 74 65 72 20 61 20  ference after a 
43e0: 73 79 6e 74 61 78 20 65 72 72 6f 72 0a 23 0a 64  syntax error.#.d
43f0: 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20  o_catchsql_test 
4400: 6d 69 73 63 31 2d 32 31 2e 31 20 7b 0a 20 20 73  misc1-21.1 {.  s
4410: 65 6c 65 63 74 27 27 6c 69 6b 65 27 27 6c 69 6b  elect''like''lik
4420: 65 27 27 6c 69 6b 65 23 30 3b 0a 7d 20 7b 31 20  e''like#0;.} {1 
4430: 7b 6e 65 61 72 20 22 23 30 22 3a 20 73 79 6e 74  {near "#0": synt
4440: 61 78 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 63 61  ax error}}.do_ca
4450: 74 63 68 73 71 6c 5f 74 65 73 74 20 6d 69 73 63  tchsql_test misc
4460: 31 2d 32 31 2e 32 20 7b 0a 20 20 56 41 4c 55 45  1-21.2 {.  VALUE
4470: 53 28 30 2c 30 78 30 4d 41 54 43 48 23 30 3b 0a  S(0,0x0MATCH#0;.
4480: 7d 20 7b 31 20 7b 6e 65 61 72 20 22 3b 22 3a 20  } {1 {near ";": 
4490: 73 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a 0a  syntax error}}..
44a0: 23 20 32 30 31 35 2d 30 34 2d 31 35 0a 64 6f 5f  # 2015-04-15.do_
44b0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6d 69 73  execsql_test mis
44c0: 63 31 2d 32 32 2e 31 20 7b 0a 20 20 53 45 4c 45  c1-22.1 {.  SELE
44d0: 43 54 20 22 22 2b 33 20 46 52 4f 4d 20 28 53 45  CT ""+3 FROM (SE
44e0: 4c 45 43 54 20 22 22 2b 35 29 3b 0a 7d 20 7b 33  LECT ""+5);.} {3
44f0: 7d 0a 0a 23 20 32 30 31 35 2d 30 34 2d 31 39 3a  }..# 2015-04-19:
4500: 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 20 64 65   NULL pointer de
4510: 72 65 66 65 72 65 6e 63 65 20 6f 6e 20 61 20 63  reference on a c
4520: 6f 72 72 75 70 74 20 73 63 68 65 6d 61 0a 23 0a  orrupt schema.#.
4530: 64 62 20 63 6c 6f 73 65 0a 73 71 6c 69 74 65 33  db close.sqlite3
4540: 20 64 62 20 3a 6d 65 6d 6f 72 79 3a 0a 64 6f 5f   db :memory:.do_
4550: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6d 69 73  execsql_test mis
4560: 63 31 2d 32 33 2e 31 20 7b 0a 20 20 43 52 45 41  c1-23.1 {.  CREA
4570: 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0a  TE TABLE t1(x);.
4580: 20 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c    PRAGMA writabl
4590: 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20 55  e_schema=ON;.  U
45a0: 50 44 41 54 45 20 73 71 6c 69 74 65 5f 6d 61 73  PDATE sqlite_mas
45b0: 74 65 72 20 53 45 54 20 73 71 6c 3d 27 43 52 45  ter SET sql='CRE
45c0: 41 54 45 20 74 61 62 6c 65 20 74 28 64 20 43 48  ATE table t(d CH
45d0: 45 43 4b 28 54 28 23 30 29 27 3b 0a 20 20 42 45  ECK(T(#0)';.  BE
45e0: 47 49 4e 3b 0a 20 20 43 52 45 41 54 45 20 54 41  GIN;.  CREATE TA
45f0: 42 4c 45 20 74 32 28 79 29 3b 0a 20 20 52 4f 4c  BLE t2(y);.  ROL
4600: 4c 42 41 43 4b 3b 0a 20 20 44 52 4f 50 20 54 41  LBACK;.  DROP TA
4610: 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 33  BLE IF EXISTS t3
4620: 3b 0a 7d 20 7b 7d 0a 0a 23 20 32 30 31 35 2d 30  ;.} {}..# 2015-0
4630: 34 2d 31 39 3a 20 20 46 61 75 6c 74 79 20 61 73  4-19:  Faulty as
4640: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
4650: 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 64 61 74 61  .#.db close.data
4660: 62 61 73 65 5f 6d 61 79 5f 62 65 5f 63 6f 72 72  base_may_be_corr
4670: 75 70 74 0a 73 71 6c 69 74 65 33 20 64 62 20 3a  upt.sqlite3 db :
4680: 6d 65 6d 6f 72 79 3a 0a 64 6f 5f 63 61 74 63 68  memory:.do_catch
4690: 73 71 6c 5f 74 65 73 74 20 6d 69 73 63 31 2d 32  sql_test misc1-2
46a0: 33 2e 32 20 7b 0a 20 20 43 52 45 41 54 45 20 54  3.2 {.  CREATE T
46b0: 41 42 4c 45 20 74 31 28 78 20 55 4e 49 51 55 45  ABLE t1(x UNIQUE
46c0: 29 3b 0a 20 20 50 52 41 47 4d 41 20 77 72 69 74  );.  PRAGMA writ
46d0: 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a  able_schema=ON;.
46e0: 20 20 55 50 44 41 54 45 20 73 71 6c 69 74 65 5f    UPDATE sqlite_
46f0: 6d 61 73 74 65 72 20 53 45 54 20 73 71 6c 3d 27  master SET sql='
4700: 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20  CREATE TABLE IF 
4710: 6e 6f 74 20 45 58 49 53 54 53 20 74 28 63 29 27  not EXISTS t(c)'
4720: 3b 0a 20 20 42 45 47 49 4e 3b 0a 20 20 43 52 45  ;.  BEGIN;.  CRE
4730: 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 29 3b  ATE TABLE t2(x);
4740: 0a 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 44  .  ROLLBACK;.  D
4750: 52 4f 50 20 54 41 42 4c 45 20 46 3b 0a 7d 20 7b  ROP TABLE F;.} {
4760: 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  1 {no such table
4770: 3a 20 46 7d 7d 0a 64 62 20 63 6c 6f 73 65 0a 73  : F}}.db close.s
4780: 71 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72  qlite3 db :memor
4790: 79 3a 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74  y:.do_catchsql_t
47a0: 65 73 74 20 6d 69 73 63 31 2d 32 33 2e 33 20 7b  est misc1-23.3 {
47b0: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
47c0: 74 31 28 78 20 55 4e 49 51 55 45 29 3b 0a 20 20  t1(x UNIQUE);.  
47d0: 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f  PRAGMA writable_
47e0: 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20 55 50 44  schema=ON;.  UPD
47f0: 41 54 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ATE sqlite_maste
4800: 72 20 53 45 54 20 73 71 6c 3d 27 43 52 45 41 54  r SET sql='CREAT
4810: 45 20 74 61 62 6c 65 20 79 28 61 20 54 45 58 54  E table y(a TEXT
4820: 2c 20 61 20 54 45 58 54 29 27 3b 0a 20 20 42 45  , a TEXT)';.  BE
4830: 47 49 4e 3b 0a 20 20 43 52 45 41 54 45 20 54 41  GIN;.  CREATE TA
4840: 42 4c 45 20 74 32 28 79 29 3b 0a 20 20 52 4f 4c  BLE t2(y);.  ROL
4850: 4c 42 41 43 4b 3b 0a 20 20 44 52 4f 50 20 54 41  LBACK;.  DROP TA
4860: 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 3b  BLE IF EXISTS t;
4870: 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 0a 23 20 41 74  .} {0 {}}...# At
4880: 20 6f 6e 65 20 70 6f 69 6e 74 2c 20 72 75 6e 6e   one point, runn
4890: 69 6e 67 20 74 68 69 73 20 77 6f 75 6c 64 20 72  ing this would r
48a0: 65 61 64 20 6f 6e 65 20 62 79 74 65 20 70 61 73  ead one byte pas
48b0: 73 65 64 20 74 68 65 20 65 6e 64 20 6f 66 20 61  sed the end of a
48c0: 20 0a 23 20 62 75 66 66 65 72 2c 20 75 70 73 65   .# buffer, upse
48d0: 74 74 69 6e 67 20 76 61 6c 67 72 69 6e 64 2e 0a  tting valgrind..
48e0: 23 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d  #.do_test misc1-
48f0: 32 34 2e 30 20 7b 0a 20 20 6c 69 73 74 20 5b 63  24.0 {.  list [c
4900: 61 74 63 68 20 7b 20 73 71 6c 69 74 65 33 5f 70  atch { sqlite3_p
4910: 72 65 70 61 72 65 5f 76 32 20 64 62 20 21 20 2d  repare_v2 db ! -
4920: 31 20 64 75 6d 6d 79 20 7d 20 6d 73 67 5d 20 24  1 dummy } msg] $
4930: 6d 73 67 0a 7d 20 7b 31 20 7b 28 31 29 20 75 6e  msg.} {1 {(1) un
4940: 72 65 63 6f 67 6e 69 7a 65 64 20 74 6f 6b 65 6e  recognized token
4950: 3a 20 22 21 7d 7d 0a 0a 66 69 6e 69 73 68 5f 74  : "!}}..finish_t
4960: 65 73 74 0a                                      est.