/ Hex Artifact Content
Login

Artifact 889b40722442380a2f6575f30831b32b2372d70e:


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 23 20 24 49  st files..#.# $I
0210: 64 3a 20 6d 69 73 63 31 2e 74 65 73 74 2c 76 20  d: misc1.test,v 
0220: 31 2e 34 32 20 32 30 30 37 2f 31 31 2f 30 35 20  1.42 2007/11/05 
0230: 31 34 3a 35 38 3a 32 33 20 64 72 68 20 45 78 70  14:58:23 drh Exp
0240: 20 24 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20   $..set testdir 
0250: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61  [file dirname $a
0260: 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65  rgv0].source $te
0270: 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c  stdir/tester.tcl
0280: 0a 0a 23 20 4d 69 6d 69 63 20 74 68 65 20 53 51  ..# Mimic the SQ
0290: 4c 69 74 65 20 32 20 63 6f 6c 6c 61 74 69 6f 6e  Lite 2 collation
02a0: 20 74 79 70 65 20 4e 55 4d 45 52 49 43 2e 0a 64   type NUMERIC..d
02b0: 62 20 63 6f 6c 6c 61 74 65 20 6e 75 6d 65 72 69  b collate numeri
02c0: 63 20 6e 75 6d 65 72 69 63 5f 63 6f 6c 6c 61 74  c numeric_collat
02d0: 65 0a 70 72 6f 63 20 6e 75 6d 65 72 69 63 5f 63  e.proc numeric_c
02e0: 6f 6c 6c 61 74 65 20 7b 6c 68 73 20 72 68 73 7d  ollate {lhs rhs}
02f0: 20 7b 0a 20 20 69 66 20 7b 24 6c 68 73 20 3d 3d   {.  if {$lhs ==
0300: 20 24 72 68 73 7d 20 7b 72 65 74 75 72 6e 20 30   $rhs} {return 0
0310: 7d 20 0a 20 20 72 65 74 75 72 6e 20 5b 65 78 70  } .  return [exp
0320: 72 20 28 24 6c 68 73 3e 24 72 68 73 29 3f 31 3a  r ($lhs>$rhs)?1:
0330: 2d 31 5d 0a 7d 0a 0a 23 20 4d 69 6d 69 63 20 74  -1].}..# Mimic t
0340: 68 65 20 53 51 4c 69 74 65 20 32 20 63 6f 6c 6c  he SQLite 2 coll
0350: 61 74 69 6f 6e 20 74 79 70 65 20 54 45 58 54 2e  ation type TEXT.
0360: 0a 64 62 20 63 6f 6c 6c 61 74 65 20 74 65 78 74  .db collate text
0370: 20 74 65 78 74 5f 63 6f 6c 6c 61 74 65 0a 70 72   text_collate.pr
0380: 6f 63 20 6e 75 6d 65 72 69 63 5f 63 6f 6c 6c 61  oc numeric_colla
0390: 74 65 20 7b 6c 68 73 20 72 68 73 7d 20 7b 0a 20  te {lhs rhs} {. 
03a0: 20 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67 20   return [string 
03b0: 63 6f 6d 70 61 72 65 20 24 6c 68 73 20 24 72 68  compare $lhs $rh
03c0: 73 5d 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68 65  s].}..# Test the
03d0: 20 63 72 65 61 74 69 6f 6e 20 61 6e 64 20 75 73   creation and us
03e0: 65 20 6f 66 20 74 61 62 6c 65 73 20 74 68 61 74  e of tables that
03f0: 20 68 61 76 65 20 61 20 6c 61 72 67 65 20 6e 75   have a large nu
0400: 6d 62 65 72 0a 23 20 6f 66 20 63 6f 6c 75 6d 6e  mber.# of column
0410: 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 6d 69 73  s..#.do_test mis
0420: 63 31 2d 31 2e 31 20 7b 0a 20 20 73 65 74 20 63  c1-1.1 {.  set c
0430: 6d 64 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  md "CREATE TABLE
0440: 20 6d 61 6e 79 63 6f 6c 28 78 30 20 74 65 78 74   manycol(x0 text
0450: 22 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31  ".  for {set i 1
0460: 7d 20 7b 24 69 3c 3d 39 39 7d 20 7b 69 6e 63 72  } {$i<=99} {incr
0470: 20 69 7d 20 7b 0a 20 20 20 20 61 70 70 65 6e 64   i} {.    append
0480: 20 63 6d 64 20 22 2c 78 24 69 20 74 65 78 74 22   cmd ",x$i text"
0490: 0a 20 20 7d 0a 20 20 61 70 70 65 6e 64 20 63 6d  .  }.  append cm
04a0: 64 20 22 29 22 3b 0a 20 20 65 78 65 63 73 71 6c  d ")";.  execsql
04b0: 20 24 63 6d 64 0a 20 20 73 65 74 20 63 6d 64 20   $cmd.  set cmd 
04c0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 6d 61 6e  "INSERT INTO man
04d0: 79 63 6f 6c 20 56 41 4c 55 45 53 28 30 22 0a 20  ycol VALUES(0". 
04e0: 20 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b   for {set i 1} {
04f0: 24 69 3c 3d 39 39 7d 20 7b 69 6e 63 72 20 69 7d  $i<=99} {incr i}
0500: 20 7b 0a 20 20 20 20 61 70 70 65 6e 64 20 63 6d   {.    append cm
0510: 64 20 22 2c 24 69 22 0a 20 20 7d 0a 20 20 61 70  d ",$i".  }.  ap
0520: 70 65 6e 64 20 63 6d 64 20 22 29 22 3b 0a 20 20  pend cmd ")";.  
0530: 65 78 65 63 73 71 6c 20 24 63 6d 64 0a 20 20 65  execsql $cmd.  e
0540: 78 65 63 73 71 6c 20 22 53 45 4c 45 43 54 20 78  xecsql "SELECT x
0550: 39 39 20 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c 22  99 FROM manycol"
0560: 0a 7d 20 39 39 0a 64 6f 5f 74 65 73 74 20 6d 69  .} 99.do_test mi
0570: 73 63 31 2d 31 2e 32 20 7b 0a 20 20 65 78 65 63  sc1-1.2 {.  exec
0580: 73 71 6c 20 7b 53 45 4c 45 43 54 20 78 30 2c 20  sql {SELECT x0, 
0590: 78 31 30 2c 20 78 32 35 2c 20 78 35 30 2c 20 78  x10, x25, x50, x
05a0: 37 35 20 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c 7d  75 FROM manycol}
05b0: 0a 7d 20 7b 30 20 31 30 20 32 35 20 35 30 20 37  .} {0 10 25 50 7
05c0: 35 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31  5}.do_test misc1
05d0: 2d 31 2e 33 2e 31 20 7b 0a 20 20 66 6f 72 20 7b  -1.3.1 {.  for {
05e0: 73 65 74 20 6a 20 31 30 30 7d 20 7b 24 6a 3c 3d  set j 100} {$j<=
05f0: 31 30 30 30 7d 20 7b 69 6e 63 72 20 6a 20 31 30  1000} {incr j 10
0600: 30 7d 20 7b 0a 20 20 20 20 73 65 74 20 63 6d 64  0} {.    set cmd
0610: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 6d 61   "INSERT INTO ma
0620: 6e 79 63 6f 6c 20 56 41 4c 55 45 53 28 24 6a 22  nycol VALUES($j"
0630: 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20  .    for {set i 
0640: 31 7d 20 7b 24 69 3c 3d 39 39 7d 20 7b 69 6e 63  1} {$i<=99} {inc
0650: 72 20 69 7d 20 7b 0a 20 20 20 20 20 20 61 70 70  r i} {.      app
0660: 65 6e 64 20 63 6d 64 20 22 2c 5b 65 78 70 72 20  end cmd ",[expr 
0670: 7b 24 69 2b 24 6a 7d 5d 22 0a 20 20 20 20 7d 0a  {$i+$j}]".    }.
0680: 20 20 20 20 61 70 70 65 6e 64 20 63 6d 64 20 22      append cmd "
0690: 29 22 0a 20 20 20 20 65 78 65 63 73 71 6c 20 24  )".    execsql $
06a0: 63 6d 64 0a 20 20 7d 0a 20 20 65 78 65 63 73 71  cmd.  }.  execsq
06b0: 6c 20 7b 53 45 4c 45 43 54 20 78 35 30 20 46 52  l {SELECT x50 FR
06c0: 4f 4d 20 6d 61 6e 79 63 6f 6c 20 4f 52 44 45 52  OM manycol ORDER
06d0: 20 42 59 20 78 38 30 2b 30 7d 0a 7d 20 7b 35 30   BY x80+0}.} {50
06e0: 20 31 35 30 20 32 35 30 20 33 35 30 20 34 35 30   150 250 350 450
06f0: 20 35 35 30 20 36 35 30 20 37 35 30 20 38 35 30   550 650 750 850
0700: 20 39 35 30 20 31 30 35 30 7d 0a 64 6f 5f 74 65   950 1050}.do_te
0710: 73 74 20 6d 69 73 63 31 2d 31 2e 33 2e 32 20 7b  st misc1-1.3.2 {
0720: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0730: 43 54 20 78 35 30 20 46 52 4f 4d 20 6d 61 6e 79  CT x50 FROM many
0740: 63 6f 6c 20 4f 52 44 45 52 20 42 59 20 78 38 30  col ORDER BY x80
0750: 7d 0a 7d 20 7b 31 30 35 30 20 31 35 30 20 32 35  }.} {1050 150 25
0760: 30 20 33 35 30 20 34 35 30 20 35 35 30 20 36 35  0 350 450 550 65
0770: 30 20 37 35 30 20 35 30 20 38 35 30 20 39 35 30  0 750 50 850 950
0780: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d  }.do_test misc1-
0790: 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.4 {.  execsql 
07a0: 7b 53 45 4c 45 43 54 20 78 37 35 20 46 52 4f 4d  {SELECT x75 FROM
07b0: 20 6d 61 6e 79 63 6f 6c 20 57 48 45 52 45 20 78   manycol WHERE x
07c0: 35 30 3d 33 35 30 7d 0a 7d 20 33 37 35 0a 64 6f  50=350}.} 375.do
07d0: 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 2e 35 20  _test misc1-1.5 
07e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
07f0: 45 43 54 20 78 35 30 20 46 52 4f 4d 20 6d 61 6e  ECT x50 FROM man
0800: 79 63 6f 6c 20 57 48 45 52 45 20 78 39 39 3d 35  ycol WHERE x99=5
0810: 39 39 7d 0a 7d 20 35 35 30 0a 64 6f 5f 74 65 73  99}.} 550.do_tes
0820: 74 20 6d 69 73 63 31 2d 31 2e 36 20 7b 0a 20 20  t misc1-1.6 {.  
0830: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
0840: 49 4e 44 45 58 20 6d 61 6e 79 63 6f 6c 5f 69 64  INDEX manycol_id
0850: 78 31 20 4f 4e 20 6d 61 6e 79 63 6f 6c 28 78 39  x1 ON manycol(x9
0860: 39 29 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  9)}.  execsql {S
0870: 45 4c 45 43 54 20 78 35 30 20 46 52 4f 4d 20 6d  ELECT x50 FROM m
0880: 61 6e 79 63 6f 6c 20 57 48 45 52 45 20 78 39 39  anycol WHERE x99
0890: 3d 38 39 39 7d 0a 7d 20 38 35 30 0a 64 6f 5f 74  =899}.} 850.do_t
08a0: 65 73 74 20 6d 69 73 63 31 2d 31 2e 37 20 7b 0a  est misc1-1.7 {.
08b0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
08c0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
08d0: 6d 61 6e 79 63 6f 6c 7d 0a 7d 20 31 31 0a 64 6f  manycol}.} 11.do
08e0: 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 2e 38 20  _test misc1-1.8 
08f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c  {.  execsql {DEL
0900: 45 54 45 20 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c  ETE FROM manycol
0910: 20 57 48 45 52 45 20 78 39 38 3d 31 32 33 34 7d   WHERE x98=1234}
0920: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0930: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
0940: 20 6d 61 6e 79 63 6f 6c 7d 0a 7d 20 31 31 0a 64   manycol}.} 11.d
0950: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 2e 39  o_test misc1-1.9
0960: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 44 45   {.  execsql {DE
0970: 4c 45 54 45 20 46 52 4f 4d 20 6d 61 6e 79 63 6f  LETE FROM manyco
0980: 6c 20 57 48 45 52 45 20 78 39 38 3d 39 39 38 7d  l WHERE x98=998}
0990: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
09a0: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
09b0: 20 6d 61 6e 79 63 6f 6c 7d 0a 7d 20 31 30 0a 64   manycol}.} 10.d
09c0: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 2e 31  o_test misc1-1.1
09d0: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 44  0 {.  execsql {D
09e0: 45 4c 45 54 45 20 46 52 4f 4d 20 6d 61 6e 79 63  ELETE FROM manyc
09f0: 6f 6c 20 57 48 45 52 45 20 78 39 39 3d 35 30 30  ol WHERE x99=500
0a00: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
0a10: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
0a20: 4d 20 6d 61 6e 79 63 6f 6c 7d 0a 7d 20 31 30 0a  M manycol}.} 10.
0a30: 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 2e  do_test misc1-1.
0a40: 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  11 {.  execsql {
0a50: 44 45 4c 45 54 45 20 46 52 4f 4d 20 6d 61 6e 79  DELETE FROM many
0a60: 63 6f 6c 20 57 48 45 52 45 20 78 39 39 3d 35 39  col WHERE x99=59
0a70: 39 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  9}.  execsql {SE
0a80: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
0a90: 4f 4d 20 6d 61 6e 79 63 6f 6c 7d 0a 7d 20 39 0a  OM manycol}.} 9.
0aa0: 0a 23 20 43 68 65 63 6b 20 47 52 4f 55 50 20 42  .# Check GROUP B
0ab0: 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68  Y expressions th
0ac0: 61 74 20 6e 61 6d 65 20 74 77 6f 20 6f 72 20 6d  at name two or m
0ad0: 6f 72 65 20 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 64  ore columns..#.d
0ae0: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 32 2e 31  o_test misc1-2.1
0af0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0b00: 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43     BEGIN TRANSAC
0b10: 54 49 4f 4e 3b 0a 20 20 20 20 43 52 45 41 54 45  TION;.    CREATE
0b20: 20 54 41 42 4c 45 20 61 67 67 65 72 28 6f 6e 65   TABLE agger(one
0b30: 20 74 65 78 74 2c 20 74 77 6f 20 74 65 78 74 2c   text, two text,
0b40: 20 74 68 72 65 65 20 74 65 78 74 2c 20 66 6f 75   three text, fou
0b50: 72 20 74 65 78 74 29 3b 0a 20 20 20 20 49 4e 53  r text);.    INS
0b60: 45 52 54 20 49 4e 54 4f 20 61 67 67 65 72 20 56  ERT INTO agger V
0b70: 41 4c 55 45 53 28 31 2c 20 27 6f 6e 65 27 2c 20  ALUES(1, 'one', 
0b80: 27 68 65 6c 6c 6f 27 2c 20 27 79 65 73 27 29 3b  'hello', 'yes');
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 32 2c   agger VALUES(2,
0bb0: 20 27 74 77 6f 27 2c 20 27 68 6f 77 64 79 27 2c   'two', 'howdy',
0bc0: 20 27 6e 6f 27 29 3b 0a 20 20 20 20 49 4e 53 45   'no');.    INSE
0bd0: 52 54 20 49 4e 54 4f 20 61 67 67 65 72 20 56 41  RT INTO agger VA
0be0: 4c 55 45 53 28 33 2c 20 27 74 68 72 27 2c 20 27  LUES(3, 'thr', '
0bf0: 68 6f 77 61 72 65 79 61 27 2c 20 27 79 65 73 27  howareya', 'yes'
0c00: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0c10: 54 4f 20 61 67 67 65 72 20 56 41 4c 55 45 53 28  TO agger VALUES(
0c20: 34 2c 20 27 74 77 6f 27 2c 20 27 6c 6f 74 68 65  4, 'two', 'lothe
0c30: 72 65 27 2c 20 27 79 65 73 27 29 3b 0a 20 20 20  re', 'yes');.   
0c40: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 67 67   INSERT INTO agg
0c50: 65 72 20 56 41 4c 55 45 53 28 35 2c 20 27 6f 6e  er VALUES(5, 'on
0c60: 65 27 2c 20 27 61 74 63 68 61 27 2c 20 27 79 65  e', 'atcha', 'ye
0c70: 73 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  s');.    INSERT 
0c80: 49 4e 54 4f 20 61 67 67 65 72 20 56 41 4c 55 45  INTO agger VALUE
0c90: 53 28 36 2c 20 27 74 77 6f 27 2c 20 27 68 65 6c  S(6, 'two', 'hel
0ca0: 6c 6f 27 2c 20 27 6e 6f 27 29 3b 0a 20 20 20 20  lo', 'no');.    
0cb0: 43 4f 4d 4d 49 54 0a 20 20 7d 0a 20 20 65 78 65  COMMIT.  }.  exe
0cc0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75  csql {SELECT cou
0cd0: 6e 74 28 2a 29 20 46 52 4f 4d 20 61 67 67 65 72  nt(*) FROM agger
0ce0: 7d 0a 7d 20 36 0a 64 6f 5f 74 65 73 74 20 6d 69  }.} 6.do_test mi
0cf0: 73 63 31 2d 32 2e 32 20 7b 0a 20 20 65 78 65 63  sc1-2.2 {.  exec
0d00: 73 71 6c 20 7b 53 45 4c 45 43 54 20 73 75 6d 28  sql {SELECT sum(
0d10: 6f 6e 65 29 2c 20 74 77 6f 2c 20 66 6f 75 72 20  one), two, four 
0d20: 46 52 4f 4d 20 61 67 67 65 72 0a 20 20 20 20 20  FROM agger.     
0d30: 20 20 20 20 20 20 47 52 4f 55 50 20 42 59 20 74        GROUP BY t
0d40: 77 6f 2c 20 66 6f 75 72 20 4f 52 44 45 52 20 42  wo, four ORDER B
0d50: 59 20 73 75 6d 28 6f 6e 65 29 20 64 65 73 63 7d  Y sum(one) desc}
0d60: 0a 7d 20 7b 38 20 74 77 6f 20 6e 6f 20 36 20 6f  .} {8 two no 6 o
0d70: 6e 65 20 79 65 73 20 34 20 74 77 6f 20 79 65 73  ne yes 4 two yes
0d80: 20 33 20 74 68 72 20 79 65 73 7d 0a 64 6f 5f 74   3 thr yes}.do_t
0d90: 65 73 74 20 6d 69 73 63 31 2d 32 2e 33 20 7b 0a  est misc1-2.3 {.
0da0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0db0: 54 20 73 75 6d 28 28 6f 6e 65 29 29 2c 20 28 74  T sum((one)), (t
0dc0: 77 6f 29 2c 20 28 66 6f 75 72 29 20 46 52 4f 4d  wo), (four) FROM
0dd0: 20 61 67 67 65 72 0a 20 20 20 20 20 20 20 20 20   agger.         
0de0: 20 20 47 52 4f 55 50 20 42 59 20 28 74 77 6f 29    GROUP BY (two)
0df0: 2c 20 28 66 6f 75 72 29 20 4f 52 44 45 52 20 42  , (four) ORDER B
0e00: 59 20 73 75 6d 28 6f 6e 65 29 20 64 65 73 63 7d  Y sum(one) desc}
0e10: 0a 7d 20 7b 38 20 74 77 6f 20 6e 6f 20 36 20 6f  .} {8 two no 6 o
0e20: 6e 65 20 79 65 73 20 34 20 74 77 6f 20 79 65 73  ne yes 4 two yes
0e30: 20 33 20 74 68 72 20 79 65 73 7d 0a 0a 23 20 48   3 thr yes}..# H
0e40: 65 72 65 27 73 20 61 20 74 65 73 74 20 66 6f 72  ere's a test for
0e50: 20 61 20 62 75 67 20 66 6f 75 6e 64 20 62 79 20   a bug found by 
0e60: 4a 6f 65 6c 20 4c 75 63 73 79 2e 20 20 54 68 65  Joel Lucsy.  The
0e70: 20 63 6f 64 65 20 62 65 6c 6f 77 0a 23 20 77 61   code below.# wa
0e80: 73 20 63 61 75 73 69 6e 67 20 61 6e 20 61 73 73  s causing an ass
0e90: 65 72 74 69 6f 6e 20 66 61 69 6c 75 72 65 2e 0a  ertion failure..
0ea0: 23 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d  #.do_test misc1-
0eb0: 33 2e 31 20 7b 0a 20 20 73 65 74 20 72 20 5b 65  3.1 {.  set r [e
0ec0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
0ed0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 29 3b  ATE TABLE t1(a);
0ee0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0ef0: 20 74 31 20 56 41 4c 55 45 53 28 27 68 69 27 29   t1 VALUES('hi')
0f00: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 66 75 6c  ;.    PRAGMA ful
0f10: 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f  l_column_names=o
0f20: 6e 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f  n;.    SELECT ro
0f30: 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  wid, * FROM t1;.
0f40: 20 20 7d 5d 0a 20 20 6c 69 6e 64 65 78 20 24 72    }].  lindex $r
0f50: 20 31 0a 7d 20 7b 68 69 7d 0a 0a 23 20 48 65 72   1.} {hi}..# Her
0f60: 65 27 73 20 61 20 74 65 73 74 20 66 6f 72 20 79  e's a test for y
0f70: 65 74 20 61 6e 6f 74 68 65 72 20 62 75 67 20 66  et another bug f
0f80: 6f 75 6e 64 20 62 79 20 4a 6f 65 6c 20 4c 75 63  ound by Joel Luc
0f90: 73 79 2e 20 20 54 68 65 20 63 6f 64 65 0a 23 20  sy.  The code.# 
0fa0: 62 65 6c 6f 77 20 77 61 73 20 63 61 75 73 69 6e  below was causin
0fb0: 67 20 61 6e 20 61 73 73 65 72 74 69 6f 6e 20 66  g an assertion f
0fc0: 61 69 6c 75 72 65 2e 0a 23 0a 64 6f 5f 74 65 73  ailure..#.do_tes
0fd0: 74 20 6d 69 73 63 31 2d 34 2e 31 20 7b 0a 20 20  t misc1-4.1 {.  
0fe0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45  execsql {.    BE
0ff0: 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20  GIN;.    CREATE 
1000: 54 41 42 4c 45 20 74 32 28 61 29 3b 0a 20 20 20  TABLE t2(a);.   
1010: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
1020: 56 41 4c 55 45 53 28 27 54 68 69 73 20 69 73 20  VALUES('This is 
1030: 61 20 6c 6f 6e 67 20 73 74 72 69 6e 67 20 74 6f  a long string to
1040: 20 75 73 65 20 75 70 20 61 20 6c 6f 74 20 6f 66   use up a lot of
1050: 20 64 69 73 6b 20 2d 27 29 3b 0a 20 20 20 20 55   disk -');.    U
1060: 50 44 41 54 45 20 74 32 20 53 45 54 20 61 3d 61  PDATE t2 SET a=a
1070: 7c 7c 61 7c 7c 61 7c 7c 61 3b 0a 20 20 20 20 49  ||a||a||a;.    I
1080: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45  NSERT INTO t2 SE
1090: 4c 45 43 54 20 27 31 20 2d 20 27 20 7c 7c 20 61  LECT '1 - ' || a
10a0: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e   FROM t2;.    IN
10b0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c  SERT INTO t2 SEL
10c0: 45 43 54 20 27 32 20 2d 20 27 20 7c 7c 20 61 20  ECT '2 - ' || a 
10d0: 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53  FROM t2;.    INS
10e0: 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45  ERT INTO t2 SELE
10f0: 43 54 20 27 33 20 2d 20 27 20 7c 7c 20 61 20 46  CT '3 - ' || a F
1100: 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45  ROM t2;.    INSE
1110: 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43  RT INTO t2 SELEC
1120: 54 20 27 34 20 2d 20 27 20 7c 7c 20 61 20 46 52  T '4 - ' || a FR
1130: 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45 52  OM t2;.    INSER
1140: 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54  T INTO t2 SELECT
1150: 20 27 35 20 2d 20 27 20 7c 7c 20 61 20 46 52 4f   '5 - ' || a FRO
1160: 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45 52 54  M t2;.    INSERT
1170: 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54 20   INTO t2 SELECT 
1180: 27 36 20 2d 20 27 20 7c 7c 20 61 20 46 52 4f 4d  '6 - ' || a FROM
1190: 20 74 32 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b   t2;.    COMMIT;
11a0: 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e  .    SELECT coun
11b0: 74 28 2a 29 20 46 52 4f 4d 20 74 32 3b 0a 20 20  t(*) FROM t2;.  
11c0: 7d 0a 7d 20 7b 36 34 7d 0a 0a 23 20 4d 61 6b 65  }.} {64}..# Make
11d0: 20 73 75 72 65 20 77 65 20 61 63 74 75 61 6c 6c   sure we actuall
11e0: 79 20 73 65 65 20 61 20 73 65 6d 69 63 6f 6c 6f  y see a semicolo
11f0: 6e 20 6f 72 20 65 6e 64 2d 6f 66 2d 66 69 6c 65  n or end-of-file
1200: 20 69 6e 20 74 68 65 20 53 51 4c 20 69 6e 70 75   in the SQL inpu
1210: 74 0a 23 20 62 65 66 6f 72 65 20 65 78 65 63 75  t.# before execu
1220: 74 69 6e 67 20 61 20 63 6f 6d 6d 61 6e 64 2e 20  ting a command. 
1230: 20 54 68 75 73 20 69 66 20 22 57 48 45 52 45 22   Thus if "WHERE"
1240: 20 69 73 20 6d 69 73 73 70 65 6c 6c 65 64 20 6f   is misspelled o
1250: 6e 20 61 6e 20 55 50 44 41 54 45 2c 0a 23 20 74  n an UPDATE,.# t
1260: 68 65 20 75 73 65 72 20 77 6f 6e 27 74 20 61 63  he user won't ac
1270: 63 69 64 65 6e 74 6c 79 20 75 70 64 61 74 65 20  cidently update 
1280: 65 76 65 72 79 20 72 65 63 6f 72 64 2e 0a 23 0a  every record..#.
1290: 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 35 2e  do_test misc1-5.
12a0: 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  1 {.  catchsql {
12b0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
12c0: 45 20 74 33 28 61 2c 62 29 3b 0a 20 20 20 20 49  E t3(a,b);.    I
12d0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
12e0: 4c 55 45 53 28 31 2c 32 29 3b 0a 20 20 20 20 49  LUES(1,2);.    I
12f0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
1300: 4c 55 45 53 28 33 2c 34 29 3b 0a 20 20 20 20 55  LUES(3,4);.    U
1310: 50 44 41 54 45 20 74 33 20 53 45 54 20 61 3d 30  PDATE t3 SET a=0
1320: 20 57 48 45 52 45 77 77 77 20 62 3d 32 3b 0a 20   WHEREwww b=2;. 
1330: 20 7d 0a 7d 20 7b 31 20 7b 6e 65 61 72 20 22 57   }.} {1 {near "W
1340: 48 45 52 45 77 77 77 22 3a 20 73 79 6e 74 61 78  HEREwww": syntax
1350: 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74   error}}.do_test
1360: 20 6d 69 73 63 31 2d 35 2e 32 20 7b 0a 20 20 65   misc1-5.2 {.  e
1370: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1380: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 4f 52  ECT * FROM t3 OR
1390: 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20  DER BY a;.  }.} 
13a0: 7b 31 20 32 20 33 20 34 7d 0a 0a 23 20 43 65 72  {1 2 3 4}..# Cer
13b0: 74 61 69 6e 20 6b 65 79 77 6f 72 64 73 20 28 65  tain keywords (e
13c0: 73 70 65 63 69 61 6c 6c 79 20 6e 6f 6e 2d 73 74  specially non-st
13d0: 61 6e 64 61 72 64 20 6b 65 79 77 6f 72 64 73 20  andard keywords 
13e0: 6c 69 6b 65 20 22 52 45 50 4c 41 43 45 22 29 20  like "REPLACE") 
13f0: 63 61 6e 0a 23 20 61 6c 73 6f 20 62 65 20 75 73  can.# also be us
1400: 65 64 20 61 73 20 69 64 65 6e 74 69 66 69 65 72  ed as identifier
1410: 73 2e 20 20 54 68 65 20 77 61 79 20 74 68 69 73  s.  The way this
1420: 20 77 6f 72 6b 73 20 69 6e 20 74 68 65 20 70 61   works in the pa
1430: 72 73 65 72 20 69 73 20 74 68 61 74 0a 23 20 74  rser is that.# t
1440: 68 65 20 70 61 72 73 65 72 20 66 69 72 73 74 20  he parser first 
1450: 64 65 74 65 63 74 73 20 61 20 73 79 6e 74 61 78  detects a syntax
1460: 20 65 72 72 6f 72 2c 20 74 68 65 20 65 72 72 6f   error, the erro
1470: 72 20 68 61 6e 64 6c 69 6e 67 20 72 6f 75 74 69  r handling routi
1480: 6e 65 0a 23 20 73 65 65 73 20 74 68 61 74 20 74  ne.# sees that t
1490: 68 65 20 73 70 65 63 69 61 6c 20 6b 65 79 77 6f  he special keywo
14a0: 72 64 20 63 61 75 73 65 64 20 74 68 65 20 65 72  rd caused the er
14b0: 72 6f 72 2c 20 74 68 65 6e 20 72 65 70 6c 61 63  ror, then replac
14c0: 65 73 20 74 68 65 20 6b 65 79 77 6f 72 64 0a 23  es the keyword.#
14d0: 20 77 69 74 68 20 22 49 44 22 20 61 6e 64 20 74   with "ID" and t
14e0: 72 69 65 73 20 61 67 61 69 6e 2e 0a 23 0a 23 20  ries again..#.# 
14f0: 43 68 65 63 6b 20 74 68 65 20 6f 70 65 72 61 74  Check the operat
1500: 69 6f 6e 20 6f 66 20 74 68 69 73 20 6c 6f 67 69  ion of this logi
1510: 63 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 6d 69 73  c..#.do_test mis
1520: 63 31 2d 36 2e 31 20 7b 0a 20 20 63 61 74 63 68  c1-6.1 {.  catch
1530: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
1540: 20 54 41 42 4c 45 20 74 34 28 0a 20 20 20 20 20   TABLE t4(.     
1550: 20 61 62 6f 72 74 2c 20 61 73 63 2c 20 62 65 67   abort, asc, beg
1560: 69 6e 2c 20 63 6c 75 73 74 65 72 2c 20 63 6f 6e  in, cluster, con
1570: 66 6c 69 63 74 2c 20 63 6f 70 79 2c 20 64 65 6c  flict, copy, del
1580: 69 6d 69 74 65 72 73 2c 20 64 65 73 63 2c 20 65  imiters, desc, e
1590: 6e 64 2c 0a 20 20 20 20 20 20 65 78 70 6c 61 69  nd,.      explai
15a0: 6e 2c 20 66 61 69 6c 2c 20 69 67 6e 6f 72 65 2c  n, fail, ignore,
15b0: 20 6b 65 79 2c 20 6f 66 66 73 65 74 2c 20 70 72   key, offset, pr
15c0: 61 67 6d 61 2c 20 72 65 70 6c 61 63 65 2c 20 74  agma, replace, t
15d0: 65 6d 70 2c 0a 20 20 20 20 20 20 76 61 63 75 75  emp,.      vacuu
15e0: 6d 2c 20 76 69 65 77 0a 20 20 20 20 29 3b 0a 20  m, view.    );. 
15f0: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
1600: 65 73 74 20 6d 69 73 63 31 2d 36 2e 32 20 7b 0a  est misc1-6.2 {.
1610: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
1620: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 0a   INSERT INTO t4.
1630: 20 20 20 20 20 20 20 56 41 4c 55 45 53 28 31 2c         VALUES(1,
1640: 32 2c 33 2c 34 2c 35 2c 36 2c 37 2c 38 2c 39 2c  2,3,4,5,6,7,8,9,
1650: 31 30 2c 31 31 2c 31 32 2c 31 33 2c 31 34 2c 31  10,11,12,13,14,1
1660: 35 2c 31 36 2c 31 37 2c 31 38 2c 31 39 29 3b 0a  5,16,17,18,19);.
1670: 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f    }.} {0 {}}.do_
1680: 74 65 73 74 20 6d 69 73 63 31 2d 36 2e 33 20 7b  test misc1-6.3 {
1690: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
16a0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
16b0: 34 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34  4.  }.} {1 2 3 4
16c0: 20 35 20 36 20 37 20 38 20 39 20 31 30 20 31 31   5 6 7 8 9 10 11
16d0: 20 31 32 20 31 33 20 31 34 20 31 35 20 31 36 20   12 13 14 15 16 
16e0: 31 37 20 31 38 20 31 39 7d 0a 64 6f 5f 74 65 73  17 18 19}.do_tes
16f0: 74 20 6d 69 73 63 31 2d 36 2e 34 20 7b 0a 20 20  t misc1-6.4 {.  
1700: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1710: 4c 45 43 54 20 61 62 6f 72 74 2b 61 73 63 2c 6d  LECT abort+asc,m
1720: 61 78 28 6b 65 79 2c 70 72 61 67 6d 61 2c 74 65  ax(key,pragma,te
1730: 6d 70 29 20 46 52 4f 4d 20 74 34 0a 20 20 7d 0a  mp) FROM t4.  }.
1740: 7d 20 7b 33 20 31 37 7d 0a 0a 23 20 54 65 73 74  } {3 17}..# Test
1750: 20 66 6f 72 20 6d 75 6c 74 69 2d 63 6f 6c 75 6d   for multi-colum
1760: 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 73 2c 20  n primary keys, 
1770: 61 6e 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65  and for multiple
1780: 20 70 72 69 6d 61 72 79 20 6b 65 79 73 2e 0a 23   primary keys..#
1790: 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 37  .do_test misc1-7
17a0: 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .1 {.  catchsql 
17b0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
17c0: 4c 45 20 65 72 72 6f 72 31 28 0a 20 20 20 20 20  LE error1(.     
17d0: 20 61 20 54 59 50 45 20 50 52 49 4d 41 52 59 20   a TYPE PRIMARY 
17e0: 4b 45 59 2c 0a 20 20 20 20 20 20 62 20 54 59 50  KEY,.      b TYP
17f0: 45 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 20 20  E PRIMARY KEY.  
1800: 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 74    );.  }.} {1 {t
1810: 61 62 6c 65 20 22 65 72 72 6f 72 31 22 20 68 61  able "error1" ha
1820: 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  s more than one 
1830: 70 72 69 6d 61 72 79 20 6b 65 79 7d 7d 0a 64 6f  primary key}}.do
1840: 5f 74 65 73 74 20 6d 69 73 63 31 2d 37 2e 32 20  _test misc1-7.2 
1850: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
1860: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
1870: 65 72 72 6f 72 31 28 0a 20 20 20 20 20 20 61 20  error1(.      a 
1880: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1890: 4b 45 59 2c 0a 20 20 20 20 20 20 62 20 54 59 50  KEY,.      b TYP
18a0: 45 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 20 20  E PRIMARY KEY.  
18b0: 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 74    );.  }.} {1 {t
18c0: 61 62 6c 65 20 22 65 72 72 6f 72 31 22 20 68 61  able "error1" ha
18d0: 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  s more than one 
18e0: 70 72 69 6d 61 72 79 20 6b 65 79 7d 7d 0a 64 6f  primary key}}.do
18f0: 5f 74 65 73 74 20 6d 69 73 63 31 2d 37 2e 33 20  _test misc1-7.3 
1900: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1910: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1920: 35 28 61 2c 62 2c 63 2c 50 52 49 4d 41 52 59 20  5(a,b,c,PRIMARY 
1930: 4b 45 59 28 61 2c 62 29 29 3b 0a 20 20 20 20 49  KEY(a,b));.    I
1940: 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41  NSERT INTO t5 VA
1950: 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20 20  LUES(1,2,3);.   
1960: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1970: 35 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20  5 ORDER BY a;.  
1980: 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74  }.} {1 2 3}.do_t
1990: 65 73 74 20 6d 69 73 63 31 2d 37 2e 34 20 7b 0a  est misc1-7.4 {.
19a0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
19b0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20   INSERT INTO t5 
19c0: 56 41 4c 55 45 53 28 31 2c 32 2c 34 29 3b 0a 20  VALUES(1,2,4);. 
19d0: 20 7d 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e 73   }.} {1 {columns
19e0: 20 61 2c 20 62 20 61 72 65 20 6e 6f 74 20 75 6e   a, b are not un
19f0: 69 71 75 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d  ique}}.do_test m
1a00: 69 73 63 31 2d 37 2e 35 20 7b 0a 20 20 63 61 74  isc1-7.5 {.  cat
1a10: 63 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  chsql {.    INSE
1a20: 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45  RT INTO t5 VALUE
1a30: 53 28 30 2c 32 2c 34 29 3b 0a 20 20 7d 0a 7d 20  S(0,2,4);.  }.} 
1a40: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d  {0 {}}.do_test m
1a50: 69 73 63 31 2d 37 2e 36 20 7b 0a 20 20 65 78 65  isc1-7.6 {.  exe
1a60: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1a70: 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f 52 44 45  T * FROM t5 ORDE
1a80: 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 30  R BY a;.  }.} {0
1a90: 20 32 20 34 20 31 20 32 20 33 7d 0a 0a 64 6f 5f   2 4 1 2 3}..do_
1aa0: 74 65 73 74 20 6d 69 73 63 31 2d 38 2e 31 20 7b  test misc1-8.1 {
1ab0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
1ac0: 20 20 53 45 4c 45 43 54 20 2a 3b 0a 20 20 7d 0a    SELECT *;.  }.
1ad0: 7d 20 7b 31 20 7b 6e 6f 20 74 61 62 6c 65 73 20  } {1 {no tables 
1ae0: 73 70 65 63 69 66 69 65 64 7d 7d 0a 64 6f 5f 74  specified}}.do_t
1af0: 65 73 74 20 6d 69 73 63 31 2d 38 2e 32 20 7b 0a  est misc1-8.2 {.
1b00: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
1b10: 20 53 45 4c 45 43 54 20 74 31 2e 2a 3b 0a 20 20   SELECT t1.*;.  
1b20: 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20  }.} {1 {no such 
1b30: 74 61 62 6c 65 3a 20 74 31 7d 7d 0a 0a 65 78 65  table: t1}}..exe
1b40: 63 73 71 6c 20 7b 0a 20 20 44 52 4f 50 20 54 41  csql {.  DROP TA
1b50: 42 4c 45 20 74 31 3b 0a 20 20 44 52 4f 50 20 54  BLE t1;.  DROP T
1b60: 41 42 4c 45 20 74 32 3b 0a 20 20 44 52 4f 50 20  ABLE t2;.  DROP 
1b70: 54 41 42 4c 45 20 74 33 3b 0a 20 20 44 52 4f 50  TABLE t3;.  DROP
1b80: 20 54 41 42 4c 45 20 74 34 3b 0a 7d 0a 0a 23 20   TABLE t4;.}..# 
1b90: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 73 20  64-bit integers 
1ba0: 61 72 65 20 72 65 70 72 65 73 65 6e 74 65 64 20  are represented 
1bb0: 65 78 61 63 74 6c 79 2e 0a 23 0a 64 6f 5f 74 65  exactly..#.do_te
1bc0: 73 74 20 6d 69 73 63 31 2d 39 2e 31 20 7b 0a 20  st misc1-9.1 {. 
1bd0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
1be0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
1bf0: 61 20 75 6e 69 71 75 65 20 6e 6f 74 20 6e 75 6c  a unique not nul
1c00: 6c 2c 20 62 20 75 6e 69 71 75 65 20 6e 6f 74 20  l, b unique not 
1c10: 6e 75 6c 6c 29 3b 0a 20 20 20 20 49 4e 53 45 52  null);.    INSER
1c20: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
1c30: 28 27 61 27 2c 31 32 33 34 35 36 37 38 39 30 31  ('a',12345678901
1c40: 32 33 34 35 36 37 38 39 29 3b 0a 20 20 20 20 49  23456789);.    I
1c50: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
1c60: 4c 55 45 53 28 27 62 27 2c 31 32 33 34 35 36 37  LUES('b',1234567
1c70: 38 39 31 31 32 33 34 35 36 37 38 39 29 3b 0a 20  891123456789);. 
1c80: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1c90: 31 20 56 41 4c 55 45 53 28 27 63 27 2c 31 32 33  1 VALUES('c',123
1ca0: 34 35 36 37 38 39 32 31 32 33 34 35 36 37 38 39  4567892123456789
1cb0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
1cc0: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
1cd0: 30 20 7b 61 20 31 32 33 34 35 36 37 38 39 30 31  0 {a 12345678901
1ce0: 32 33 34 35 36 37 38 39 20 62 20 31 32 33 34 35  23456789 b 12345
1cf0: 36 37 38 39 31 31 32 33 34 35 36 37 38 39 20 63  67891123456789 c
1d00: 20 31 32 33 34 35 36 37 38 39 32 31 32 33 34 35   123456789212345
1d10: 36 37 38 39 7d 7d 0a 0a 23 20 41 20 57 48 45 52  6789}}..# A WHER
1d20: 45 20 63 6c 61 75 73 65 20 69 73 20 6e 6f 74 20  E clause is not 
1d30: 61 6c 6c 6f 77 65 64 20 74 6f 20 63 6f 6e 74 61  allowed to conta
1d40: 69 6e 20 6d 6f 72 65 20 74 68 61 6e 20 39 39 20  in more than 99 
1d50: 74 65 72 6d 73 2e 20 20 43 68 65 63 6b 20 74 6f  terms.  Check to
1d60: 0a 23 20 6d 61 6b 65 20 73 75 72 65 20 74 68 69  .# make sure thi
1d70: 73 20 6c 69 6d 69 74 20 69 73 20 65 6e 66 6f 72  s limit is enfor
1d80: 63 65 64 2e 0a 23 0a 23 20 32 30 30 35 2d 30 37  ced..#.# 2005-07
1d90: 2d 31 36 3a 20 54 68 65 72 65 20 69 73 20 6e 6f  -16: There is no
1da0: 20 6c 6f 6e 67 65 72 20 61 20 6c 69 6d 69 74 20   longer a limit 
1db0: 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  on the number of
1dc0: 20 74 65 72 6d 73 20 69 6e 20 61 0a 23 20 57 48   terms in a.# WH
1dd0: 45 52 45 20 63 6c 61 75 73 65 2e 20 20 42 75 74  ERE clause.  But
1de0: 20 6b 65 65 70 20 74 68 65 73 65 20 74 65 73 74   keep these test
1df0: 73 20 6a 75 73 74 20 73 6f 20 74 68 61 74 20 77  s just so that w
1e00: 65 20 68 61 76 65 20 73 6f 6d 65 20 74 65 73 74  e have some test
1e10: 73 0a 23 20 74 68 61 74 20 75 73 65 20 61 20 6c  s.# that use a l
1e20: 61 72 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  arge number of t
1e30: 65 72 6d 73 20 69 6e 20 74 68 65 20 57 48 45 52  erms in the WHER
1e40: 45 20 63 6c 61 75 73 65 2e 0a 23 0a 64 6f 5f 74  E clause..#.do_t
1e50: 65 73 74 20 6d 69 73 63 31 2d 31 30 2e 30 20 7b  est misc1-10.0 {
1e60: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1e70: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
1e80: 20 6d 61 6e 79 63 6f 6c 7d 0a 7d 20 7b 39 7d 0a   manycol}.} {9}.
1e90: 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 30  do_test misc1-10
1ea0: 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a 77 68 65  .1 {.  set ::whe
1eb0: 72 65 20 7b 57 48 45 52 45 20 78 30 3e 3d 30 7d  re {WHERE x0>=0}
1ec0: 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31 7d  .  for {set i 1}
1ed0: 20 7b 24 69 3c 3d 39 39 7d 20 7b 69 6e 63 72 20   {$i<=99} {incr 
1ee0: 69 7d 20 7b 0a 20 20 20 20 61 70 70 65 6e 64 20  i} {.    append 
1ef0: 3a 3a 77 68 65 72 65 20 22 20 41 4e 44 20 78 24  ::where " AND x$
1f00: 69 3c 3e 30 22 0a 20 20 7d 0a 20 20 63 61 74 63  i<>0".  }.  catc
1f10: 68 73 71 6c 20 22 53 45 4c 45 43 54 20 63 6f 75  hsql "SELECT cou
1f20: 6e 74 28 2a 29 20 46 52 4f 4d 20 6d 61 6e 79 63  nt(*) FROM manyc
1f30: 6f 6c 20 24 3a 3a 77 68 65 72 65 22 0a 7d 20 7b  ol $::where".} {
1f40: 30 20 39 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73  0 9}.do_test mis
1f50: 63 31 2d 31 30 2e 32 20 7b 0a 20 20 63 61 74 63  c1-10.2 {.  catc
1f60: 68 73 71 6c 20 22 53 45 4c 45 43 54 20 63 6f 75  hsql "SELECT cou
1f70: 6e 74 28 2a 29 20 46 52 4f 4d 20 6d 61 6e 79 63  nt(*) FROM manyc
1f80: 6f 6c 20 24 3a 3a 77 68 65 72 65 20 41 4e 44 20  ol $::where AND 
1f90: 72 6f 77 69 64 3e 30 22 0a 7d 20 7b 30 20 39 7d  rowid>0".} {0 9}
1fa0: 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31  .do_test misc1-1
1fb0: 30 2e 33 20 7b 0a 20 20 72 65 67 73 75 62 20 22  0.3 {.  regsub "
1fc0: 78 30 3e 3d 30 22 20 24 3a 3a 77 68 65 72 65 20  x0>=0" $::where 
1fd0: 22 78 30 3d 30 22 20 3a 3a 77 68 65 72 65 0a 20  "x0=0" ::where. 
1fe0: 20 63 61 74 63 68 73 71 6c 20 22 44 45 4c 45 54   catchsql "DELET
1ff0: 45 20 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c 20 24  E FROM manycol $
2000: 3a 3a 77 68 65 72 65 22 0a 7d 20 7b 30 20 7b 7d  ::where".} {0 {}
2010: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d  }.do_test misc1-
2020: 31 30 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  10.4 {.  execsql
2030: 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   {SELECT count(*
2040: 29 20 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c 7d 0a  ) FROM manycol}.
2050: 7d 20 7b 38 7d 0a 64 6f 5f 74 65 73 74 20 6d 69  } {8}.do_test mi
2060: 73 63 31 2d 31 30 2e 35 20 7b 0a 20 20 63 61 74  sc1-10.5 {.  cat
2070: 63 68 73 71 6c 20 22 44 45 4c 45 54 45 20 46 52  chsql "DELETE FR
2080: 4f 4d 20 6d 61 6e 79 63 6f 6c 20 24 3a 3a 77 68  OM manycol $::wh
2090: 65 72 65 20 41 4e 44 20 72 6f 77 69 64 3e 30 22  ere AND rowid>0"
20a0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
20b0: 74 20 6d 69 73 63 31 2d 31 30 2e 36 20 7b 0a 20  t misc1-10.6 {. 
20c0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
20d0: 20 78 31 20 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c   x1 FROM manycol
20e0: 20 57 48 45 52 45 20 78 30 3d 31 30 30 7d 0a 7d   WHERE x0=100}.}
20f0: 20 7b 31 30 31 7d 0a 64 6f 5f 74 65 73 74 20 6d   {101}.do_test m
2100: 69 73 63 31 2d 31 30 2e 37 20 7b 0a 20 20 72 65  isc1-10.7 {.  re
2110: 67 73 75 62 20 22 78 30 3d 30 22 20 24 3a 3a 77  gsub "x0=0" $::w
2120: 68 65 72 65 20 22 78 30 3d 31 30 30 22 20 3a 3a  here "x0=100" ::
2130: 77 68 65 72 65 0a 20 20 63 61 74 63 68 73 71 6c  where.  catchsql
2140: 20 22 55 50 44 41 54 45 20 6d 61 6e 79 63 6f 6c   "UPDATE manycol
2150: 20 53 45 54 20 78 31 3d 78 31 2b 31 20 24 3a 3a   SET x1=x1+1 $::
2160: 77 68 65 72 65 22 0a 7d 20 7b 30 20 7b 7d 7d 0a  where".} {0 {}}.
2170: 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 30  do_test misc1-10
2180: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
2190: 53 45 4c 45 43 54 20 78 31 20 46 52 4f 4d 20 6d  SELECT x1 FROM m
21a0: 61 6e 79 63 6f 6c 20 57 48 45 52 45 20 78 30 3d  anycol WHERE x0=
21b0: 31 30 30 7d 0a 7d 20 7b 31 30 32 7d 0a 64 6f 5f  100}.} {102}.do_
21c0: 74 65 73 74 20 6d 69 73 63 31 2d 31 30 2e 39 20  test misc1-10.9 
21d0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 22 55 50  {.  catchsql "UP
21e0: 44 41 54 45 20 6d 61 6e 79 63 6f 6c 20 53 45 54  DATE manycol SET
21f0: 20 78 31 3d 78 31 2b 31 20 24 3a 3a 77 68 65 72   x1=x1+1 $::wher
2200: 65 20 41 4e 44 20 72 6f 77 69 64 3e 30 22 0a 7d  e AND rowid>0".}
2210: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
2220: 6d 69 73 63 31 2d 31 30 2e 31 30 20 7b 0a 20 20  misc1-10.10 {.  
2230: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
2240: 78 31 20 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c 20  x1 FROM manycol 
2250: 57 48 45 52 45 20 78 30 3d 31 30 30 7d 0a 7d 20  WHERE x0=100}.} 
2260: 7b 31 30 33 7d 0a 0a 23 20 4d 61 6b 65 20 73 75  {103}..# Make su
2270: 72 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  re the initializ
2280: 61 74 69 6f 6e 20 77 6f 72 6b 73 20 65 76 65 6e  ation works even
2290: 20 69 66 20 61 20 64 61 74 61 62 61 73 65 20 69   if a database i
22a0: 73 20 6f 70 65 6e 65 64 20 77 68 69 6c 65 0a 23  s opened while.#
22b0: 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73   another process
22c0: 20 68 61 73 20 74 68 65 20 64 61 74 61 62 61 73   has the databas
22d0: 65 20 6c 6f 63 6b 65 64 2e 0a 23 0a 23 20 55 70  e locked..#.# Up
22e0: 64 61 74 65 20 66 6f 72 20 76 33 3a 20 54 68 65  date for v3: The
22f0: 20 42 45 47 49 4e 20 64 6f 65 73 6e 27 74 20 6c   BEGIN doesn't l
2300: 6f 63 6b 20 74 68 65 20 64 61 74 61 62 61 73 65  ock the database
2310: 20 73 6f 20 74 68 65 20 73 63 68 65 6d 61 20 69   so the schema i
2320: 73 20 72 65 61 64 0a 23 20 61 6e 64 20 74 68 65  s read.# and the
2330: 20 53 45 4c 45 43 54 20 72 65 74 75 72 6e 73 20   SELECT returns 
2340: 73 75 63 63 65 73 73 66 75 6c 6c 79 2e 0a 64 6f  successfully..do
2350: 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 31 2e 31  _test misc1-11.1
2360: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 42 45   {.  execsql {BE
2370: 47 49 4e 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  GIN}.  execsql {
2380: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61 3d  UPDATE t1 SET a=
2390: 30 20 57 48 45 52 45 20 30 7d 0a 20 20 73 71 6c  0 WHERE 0}.  sql
23a0: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
23b0: 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68  .  set rc [catch
23c0: 20 7b 64 62 32 20 65 76 61 6c 20 7b 53 45 4c 45   {db2 eval {SELE
23d0: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
23e0: 20 74 31 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70   t1}} msg].  lap
23f0: 70 65 6e 64 20 72 63 20 24 6d 73 67 0a 23 20 76  pend rc $msg.# v
2400: 32 20 72 65 73 75 6c 74 3a 20 7b 31 20 7b 64 61  2 result: {1 {da
2410: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
2420: 7d 7d 0a 7d 20 7b 30 20 33 7d 0a 64 6f 5f 74 65  }}.} {0 3}.do_te
2430: 73 74 20 6d 69 73 63 31 2d 31 31 2e 32 20 7b 0a  st misc1-11.2 {.
2440: 20 20 65 78 65 63 73 71 6c 20 7b 43 4f 4d 4d 49    execsql {COMMI
2450: 54 7d 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74  T}.  set rc [cat
2460: 63 68 20 7b 64 62 32 20 65 76 61 6c 20 7b 53 45  ch {db2 eval {SE
2470: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
2480: 4f 4d 20 74 31 7d 7d 20 6d 73 67 5d 0a 20 20 64  OM t1}} msg].  d
2490: 62 32 20 63 6c 6f 73 65 0a 20 20 6c 61 70 70 65  b2 close.  lappe
24a0: 6e 64 20 72 63 20 24 6d 73 67 0a 7d 20 7b 30 20  nd rc $msg.} {0 
24b0: 33 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20  3}..# Make sure 
24c0: 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f  string compariso
24d0: 6e 73 20 72 65 61 6c 6c 79 20 64 6f 20 63 6f 6d  ns really do com
24e0: 70 61 72 65 20 73 74 72 69 6e 67 73 20 69 6e 20  pare strings in 
24f0: 66 6f 72 6d 61 74 34 2b 2e 0a 23 20 53 69 6d 69  format4+..# Simi
2500: 6c 61 72 20 74 65 73 74 73 20 69 6e 20 74 68 65  lar tests in the
2510: 20 66 6f 72 6d 61 74 33 2e 74 65 73 74 20 66 69   format3.test fi
2520: 6c 65 20 73 68 6f 77 20 74 68 61 74 20 66 6f 72  le show that for
2530: 20 66 6f 72 6d 61 74 33 20 61 6e 64 20 65 61 72   format3 and ear
2540: 6c 69 65 72 0a 23 20 61 6c 6c 20 63 6f 6d 70 61  lier.# all compa
2550: 72 69 73 69 6f 6e 73 20 77 68 65 72 65 20 6e 75  risions where nu
2560: 6d 65 72 69 63 20 69 66 20 65 69 74 68 65 72 20  meric if either 
2570: 6f 70 65 72 61 6e 64 20 6c 6f 6f 6b 65 64 20 6c  operand looked l
2580: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2e 0a 23 0a  ike a number..#.
2590: 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 32  do_test misc1-12
25a0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
25b0: 53 45 4c 45 43 54 20 27 30 27 3d 3d 27 30 2e 30  SELECT '0'=='0.0
25c0: 27 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74  '}.} {0}.do_test
25d0: 20 6d 69 73 63 31 2d 31 32 2e 32 20 7b 0a 20 20   misc1-12.2 {.  
25e0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
25f0: 27 30 27 3d 3d 30 2e 30 7d 0a 7d 20 7b 30 7d 0a  '0'==0.0}.} {0}.
2600: 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 32  do_test misc1-12
2610: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
2620: 53 45 4c 45 43 54 20 27 31 32 33 34 35 36 37 38  SELECT '12345678
2630: 39 30 31 32 33 34 35 36 37 38 39 30 27 3d 3d 27  901234567890'=='
2640: 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36  1234567890123456
2650: 37 38 39 31 27 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f  7891'}.} {0}.do_
2660: 74 65 73 74 20 6d 69 73 63 31 2d 31 32 2e 34 20  test misc1-12.4 
2670: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2680: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
2690: 36 28 61 20 49 4e 54 20 55 4e 49 51 55 45 2c 20  6(a INT UNIQUE, 
26a0: 62 20 54 45 58 54 20 55 4e 49 51 55 45 29 3b 0a  b TEXT UNIQUE);.
26b0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
26c0: 74 36 20 56 41 4c 55 45 53 28 27 30 27 2c 27 30  t6 VALUES('0','0
26d0: 2e 30 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  .0');.    SELECT
26e0: 20 2a 20 46 52 4f 4d 20 74 36 3b 0a 20 20 7d 0a   * FROM t6;.  }.
26f0: 7d 20 7b 30 20 30 2e 30 7d 0a 69 66 63 61 70 61  } {0 0.0}.ifcapa
2700: 62 6c 65 20 63 6f 6e 66 6c 69 63 74 20 7b 0a 20  ble conflict {. 
2710: 20 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31   do_test misc1-1
2720: 32 2e 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71  2.5 {.    execsq
2730: 6c 20 7b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  l {.      INSERT
2740: 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20   OR IGNORE INTO 
2750: 74 36 20 56 41 4c 55 45 53 28 30 2e 30 2c 27 78  t6 VALUES(0.0,'x
2760: 27 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  ');.      SELECT
2770: 20 2a 20 46 52 4f 4d 20 74 36 3b 0a 20 20 20 20   * FROM t6;.    
2780: 7d 0a 20 20 7d 20 7b 30 20 30 2e 30 7d 0a 20 20  }.  } {0 0.0}.  
2790: 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 32  do_test misc1-12
27a0: 2e 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .6 {.    execsql
27b0: 20 7b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20   {.      INSERT 
27c0: 4f 52 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20 74  OR IGNORE INTO t
27d0: 36 20 56 41 4c 55 45 53 28 27 79 27 2c 30 29 3b  6 VALUES('y',0);
27e0: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20  .      SELECT * 
27f0: 46 52 4f 4d 20 74 36 3b 0a 20 20 20 20 7d 0a 20  FROM t6;.    }. 
2800: 20 7d 20 7b 30 20 30 2e 30 20 79 20 30 7d 0a 7d   } {0 0.0 y 0}.}
2810: 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31  .do_test misc1-1
2820: 32 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.7 {.  execsql 
2830: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
2840: 4c 45 20 74 37 28 78 20 49 4e 54 45 47 45 52 2c  LE t7(x INTEGER,
2850: 20 79 20 54 45 58 54 2c 20 7a 29 3b 0a 20 20 20   y TEXT, z);.   
2860: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 20   INSERT INTO t7 
2870: 56 41 4c 55 45 53 28 30 2c 30 2c 31 29 3b 0a 20  VALUES(0,0,1);. 
2880: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2890: 37 20 56 41 4c 55 45 53 28 30 2e 30 2c 30 2c 32  7 VALUES(0.0,0,2
28a0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
28b0: 54 4f 20 74 37 20 56 41 4c 55 45 53 28 30 2c 30  TO t7 VALUES(0,0
28c0: 2e 30 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52  .0,3);.    INSER
28d0: 54 20 49 4e 54 4f 20 74 37 20 56 41 4c 55 45 53  T INTO t7 VALUES
28e0: 28 30 2e 30 2c 30 2e 30 2c 34 29 3b 0a 20 20 20  (0.0,0.0,4);.   
28f0: 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54   SELECT DISTINCT
2900: 20 78 2c 20 79 20 46 52 4f 4d 20 74 37 20 4f 52   x, y FROM t7 OR
2910: 44 45 52 20 42 59 20 7a 3b 0a 20 20 7d 0a 7d 20  DER BY z;.  }.} 
2920: 7b 30 20 30 20 30 20 30 2e 30 7d 0a 64 6f 5f 74  {0 0 0 0.0}.do_t
2930: 65 73 74 20 6d 69 73 63 31 2d 31 32 2e 38 20 7b  est misc1-12.8 {
2940: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2950: 20 53 45 4c 45 43 54 20 6d 69 6e 28 7a 29 2c 20   SELECT min(z), 
2960: 6d 61 78 28 7a 29 2c 20 63 6f 75 6e 74 28 7a 29  max(z), count(z)
2970: 20 46 52 4f 4d 20 74 37 20 47 52 4f 55 50 20 42   FROM t7 GROUP B
2980: 59 20 78 20 4f 52 44 45 52 20 42 59 20 31 3b 0a  Y x ORDER BY 1;.
2990: 20 20 7d 0a 7d 20 7b 31 20 34 20 34 7d 0a 64 6f    }.} {1 4 4}.do
29a0: 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 32 2e 39  _test misc1-12.9
29b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
29c0: 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28 7a 29     SELECT min(z)
29d0: 2c 20 6d 61 78 28 7a 29 2c 20 63 6f 75 6e 74 28  , max(z), count(
29e0: 7a 29 20 46 52 4f 4d 20 74 37 20 47 52 4f 55 50  z) FROM t7 GROUP
29f0: 20 42 59 20 79 20 4f 52 44 45 52 20 42 59 20 31   BY y ORDER BY 1
2a00: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 32 20 33  ;.  }.} {1 2 2 3
2a10: 20 34 20 32 7d 0a 0a 23 20 54 68 69 73 20 75 73   4 2}..# This us
2a20: 65 64 20 74 6f 20 62 65 20 61 6e 20 65 72 72 6f  ed to be an erro
2a30: 72 2e 20 20 42 75 74 20 77 65 20 63 68 61 6e 67  r.  But we chang
2a40: 65 64 20 74 68 65 20 63 6f 64 65 20 73 6f 20 74  ed the code so t
2a50: 68 61 74 20 61 72 62 69 74 72 61 72 79 0a 23 20  hat arbitrary.# 
2a60: 69 64 65 6e 74 69 66 69 65 72 73 20 63 61 6e 20  identifiers can 
2a70: 62 65 20 75 73 65 64 20 61 73 20 61 20 63 6f 6c  be used as a col
2a80: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
2a90: 20 20 43 6f 6c 6c 61 74 69 6f 6e 20 69 73 20 62    Collation is b
2aa0: 79 20 74 65 78 74 0a 23 20 69 66 20 74 68 65 20  y text.# if the 
2ab0: 69 64 65 6e 74 69 66 69 65 72 20 63 6f 6e 74 61  identifier conta
2ac0: 69 6e 73 20 22 74 65 78 74 22 2c 20 22 62 6c 6f  ins "text", "blo
2ad0: 62 22 2c 20 6f 72 20 22 63 6c 6f 62 22 20 61 6e  b", or "clob" an
2ae0: 64 20 69 73 20 6e 75 6d 65 72 69 63 0a 23 20 6f  d is numeric.# o
2af0: 74 68 65 72 77 69 73 65 2e 0a 23 0a 23 20 55 70  therwise..#.# Up
2b00: 64 61 74 65 3a 20 49 6e 20 76 33 2c 20 69 74 20  date: In v3, it 
2b10: 69 73 20 61 6e 20 65 72 72 6f 72 20 61 67 61 69  is an error agai
2b20: 6e 2e 0a 23 0a 23 64 6f 5f 74 65 73 74 20 6d 69  n..#.#do_test mi
2b30: 73 63 31 2d 31 32 2e 31 30 20 7b 0a 23 20 20 63  sc1-12.10 {.#  c
2b40: 61 74 63 68 73 71 6c 20 7b 0a 23 20 20 20 20 53  atchsql {.#    S
2b50: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 36 20  ELECT * FROM t6 
2b60: 4f 52 44 45 52 20 42 59 20 61 20 43 4f 4c 4c 41  ORDER BY a COLLA
2b70: 54 45 20 75 6e 6b 6e 6f 77 6e 3b 0a 23 20 20 7d  TE unknown;.#  }
2b80: 0a 23 7d 20 7b 30 20 7b 30 20 30 20 79 20 30 7d  .#} {0 {0 0 y 0}
2b90: 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d  }.do_test misc1-
2ba0: 31 32 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71  12.11 {.  execsq
2bb0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
2bc0: 41 42 4c 45 20 74 38 28 78 20 54 45 58 54 20 43  ABLE t8(x TEXT C
2bd0: 4f 4c 4c 41 54 45 20 6e 75 6d 65 72 69 63 2c 20  OLLATE numeric, 
2be0: 79 20 49 4e 54 45 47 45 52 20 43 4f 4c 4c 41 54  y INTEGER COLLAT
2bf0: 45 20 74 65 78 74 2c 20 7a 29 3b 0a 20 20 20 20  E text, z);.    
2c00: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56  INSERT INTO t8 V
2c10: 41 4c 55 45 53 28 30 2c 30 2c 31 29 3b 0a 20 20  ALUES(0,0,1);.  
2c20: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38    INSERT INTO t8
2c30: 20 56 41 4c 55 45 53 28 30 2e 30 2c 30 2c 32 29   VALUES(0.0,0,2)
2c40: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2c50: 4f 20 74 38 20 56 41 4c 55 45 53 28 30 2c 30 2e  O t8 VALUES(0,0.
2c60: 30 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  0,3);.    INSERT
2c70: 20 49 4e 54 4f 20 74 38 20 56 41 4c 55 45 53 28   INTO t8 VALUES(
2c80: 30 2e 30 2c 30 2e 30 2c 34 29 3b 0a 20 20 20 20  0.0,0.0,4);.    
2c90: 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20  SELECT DISTINCT 
2ca0: 78 2c 20 79 20 46 52 4f 4d 20 74 38 20 4f 52 44  x, y FROM t8 ORD
2cb0: 45 52 20 42 59 20 7a 3b 0a 20 20 7d 0a 7d 20 7b  ER BY z;.  }.} {
2cc0: 30 20 30 20 30 2e 30 20 30 7d 0a 64 6f 5f 74 65  0 0 0.0 0}.do_te
2cd0: 73 74 20 6d 69 73 63 31 2d 31 32 2e 31 32 20 7b  st misc1-12.12 {
2ce0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2cf0: 20 53 45 4c 45 43 54 20 6d 69 6e 28 7a 29 2c 20   SELECT min(z), 
2d00: 6d 61 78 28 7a 29 2c 20 63 6f 75 6e 74 28 7a 29  max(z), count(z)
2d10: 20 46 52 4f 4d 20 74 38 20 47 52 4f 55 50 20 42   FROM t8 GROUP B
2d20: 59 20 78 20 4f 52 44 45 52 20 42 59 20 31 3b 0a  Y x ORDER BY 1;.
2d30: 20 20 7d 0a 7d 20 7b 31 20 33 20 32 20 32 20 34    }.} {1 3 2 2 4
2d40: 20 32 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63   2}.do_test misc
2d50: 31 2d 31 32 2e 31 33 20 7b 0a 20 20 65 78 65 63  1-12.13 {.  exec
2d60: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
2d70: 20 6d 69 6e 28 7a 29 2c 20 6d 61 78 28 7a 29 2c   min(z), max(z),
2d80: 20 63 6f 75 6e 74 28 7a 29 20 46 52 4f 4d 20 74   count(z) FROM t
2d90: 38 20 47 52 4f 55 50 20 42 59 20 79 20 4f 52 44  8 GROUP BY y ORD
2da0: 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b  ER BY 1;.  }.} {
2db0: 31 20 34 20 34 7d 0a 0a 23 20 54 68 65 72 65 20  1 4 4}..# There 
2dc0: 77 61 73 20 61 20 70 72 6f 62 6c 65 6d 20 77 69  was a problem wi
2dd0: 74 68 20 72 65 61 6c 6c 6f 63 28 29 20 69 6e 20  th realloc() in 
2de0: 74 68 65 20 4f 50 5f 4d 65 6d 53 74 6f 72 65 20  the OP_MemStore 
2df0: 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 23 20 74  operation of.# t
2e00: 68 65 20 56 44 42 45 2e 20 20 41 20 62 75 66 66  he VDBE.  A buff
2e10: 65 72 20 77 61 73 20 62 65 69 6e 67 20 72 65 61  er was being rea
2e20: 6c 6c 6f 63 61 74 65 64 20 62 75 74 20 73 6f 6d  llocated but som
2e30: 65 20 70 6f 69 6e 74 65 72 73 20 69 6e 74 6f 20  e pointers into 
2e40: 0a 23 20 74 68 65 20 6f 6c 64 20 63 6f 70 79 20  .# the old copy 
2e50: 6f 66 20 74 68 65 20 62 75 66 66 65 72 20 77 65  of the buffer we
2e60: 72 65 20 6e 6f 74 20 62 65 69 6e 67 20 6d 6f 76  re not being mov
2e70: 65 64 20 6f 76 65 72 20 74 6f 20 74 68 65 20 6e  ed over to the n
2e80: 65 77 20 63 6f 70 79 2e 0a 23 20 54 68 65 20 66  ew copy..# The f
2e90: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 74 65  ollowing code te
2ea0: 73 74 73 20 66 6f 72 20 74 68 65 20 70 72 6f 62  sts for the prob
2eb0: 6c 65 6d 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65  lem..#.ifcapable
2ec0: 20 73 75 62 71 75 65 72 79 20 7b 0a 20 20 64 6f   subquery {.  do
2ed0: 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 33 2e 31  _test misc1-13.1
2ee0: 20 7b 0a 20 20 20 20 20 65 78 65 63 73 71 6c 20   {.     execsql 
2ef0: 7b 0a 20 20 20 20 20 20 20 43 52 45 41 54 45 20  {.       CREATE 
2f00: 54 41 42 4c 45 20 74 39 28 78 2c 79 29 3b 0a 20  TABLE t9(x,y);. 
2f10: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
2f20: 4f 20 74 39 20 56 41 4c 55 45 53 28 27 6f 6e 65  O t9 VALUES('one
2f30: 27 2c 31 29 3b 0a 20 20 20 20 20 20 20 49 4e 53  ',1);.       INS
2f40: 45 52 54 20 49 4e 54 4f 20 74 39 20 56 41 4c 55  ERT INTO t9 VALU
2f50: 45 53 28 27 74 77 6f 27 2c 32 29 3b 0a 20 20 20  ES('two',2);.   
2f60: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2f70: 74 39 20 56 41 4c 55 45 53 28 27 74 68 72 65 65  t9 VALUES('three
2f80: 27 2c 33 29 3b 0a 20 20 20 20 20 20 20 49 4e 53  ',3);.       INS
2f90: 45 52 54 20 49 4e 54 4f 20 74 39 20 56 41 4c 55  ERT INTO t9 VALU
2fa0: 45 53 28 27 66 6f 75 72 27 2c 34 29 3b 0a 20 20  ES('four',4);.  
2fb0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
2fc0: 20 74 39 20 56 41 4c 55 45 53 28 27 66 69 76 65   t9 VALUES('five
2fd0: 27 2c 35 29 3b 0a 20 20 20 20 20 20 20 49 4e 53  ',5);.       INS
2fe0: 45 52 54 20 49 4e 54 4f 20 74 39 20 56 41 4c 55  ERT INTO t9 VALU
2ff0: 45 53 28 27 73 69 78 27 2c 36 29 3b 0a 20 20 20  ES('six',6);.   
3000: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3010: 74 39 20 56 41 4c 55 45 53 28 27 73 65 76 65 6e  t9 VALUES('seven
3020: 27 2c 37 29 3b 0a 20 20 20 20 20 20 20 49 4e 53  ',7);.       INS
3030: 45 52 54 20 49 4e 54 4f 20 74 39 20 56 41 4c 55  ERT INTO t9 VALU
3040: 45 53 28 27 65 69 67 68 74 27 2c 38 29 3b 0a 20  ES('eight',8);. 
3050: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
3060: 4f 20 74 39 20 56 41 4c 55 45 53 28 27 6e 69 6e  O t9 VALUES('nin
3070: 65 27 2c 39 29 3b 0a 20 20 20 20 20 20 20 49 4e  e',9);.       IN
3080: 53 45 52 54 20 49 4e 54 4f 20 74 39 20 56 41 4c  SERT INTO t9 VAL
3090: 55 45 53 28 27 74 65 6e 27 2c 31 30 29 3b 0a 20  UES('ten',10);. 
30a0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
30b0: 4f 20 74 39 20 56 41 4c 55 45 53 28 27 65 6c 65  O t9 VALUES('ele
30c0: 76 65 6e 27 2c 31 31 29 3b 0a 20 20 20 20 20 20  ven',11);.      
30d0: 20 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74   SELECT y FROM t
30e0: 39 0a 20 20 20 20 20 20 20 57 48 45 52 45 20 78  9.       WHERE x
30f0: 3d 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20  =(SELECT x FROM 
3100: 74 39 20 57 48 45 52 45 20 79 3d 31 29 0a 20 20  t9 WHERE y=1).  
3110: 20 20 20 20 20 20 20 20 4f 52 20 78 3d 28 53 45          OR x=(SE
3120: 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 39 20 57  LECT x FROM t9 W
3130: 48 45 52 45 20 79 3d 32 29 0a 20 20 20 20 20 20  HERE y=2).      
3140: 20 20 20 20 4f 52 20 78 3d 28 53 45 4c 45 43 54      OR x=(SELECT
3150: 20 78 20 46 52 4f 4d 20 74 39 20 57 48 45 52 45   x FROM t9 WHERE
3160: 20 79 3d 33 29 0a 20 20 20 20 20 20 20 20 20 20   y=3).          
3170: 4f 52 20 78 3d 28 53 45 4c 45 43 54 20 78 20 46  OR x=(SELECT x F
3180: 52 4f 4d 20 74 39 20 57 48 45 52 45 20 79 3d 34  ROM t9 WHERE y=4
3190: 29 0a 20 20 20 20 20 20 20 20 20 20 4f 52 20 78  ).          OR x
31a0: 3d 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20  =(SELECT x FROM 
31b0: 74 39 20 57 48 45 52 45 20 79 3d 35 29 0a 20 20  t9 WHERE y=5).  
31c0: 20 20 20 20 20 20 20 20 4f 52 20 78 3d 28 53 45          OR x=(SE
31d0: 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 39 20 57  LECT x FROM t9 W
31e0: 48 45 52 45 20 79 3d 36 29 0a 20 20 20 20 20 20  HERE y=6).      
31f0: 20 20 20 20 4f 52 20 78 3d 28 53 45 4c 45 43 54      OR x=(SELECT
3200: 20 78 20 46 52 4f 4d 20 74 39 20 57 48 45 52 45   x FROM t9 WHERE
3210: 20 79 3d 37 29 0a 20 20 20 20 20 20 20 20 20 20   y=7).          
3220: 4f 52 20 78 3d 28 53 45 4c 45 43 54 20 78 20 46  OR x=(SELECT x F
3230: 52 4f 4d 20 74 39 20 57 48 45 52 45 20 79 3d 38  ROM t9 WHERE y=8
3240: 29 0a 20 20 20 20 20 20 20 20 20 20 4f 52 20 78  ).          OR x
3250: 3d 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20  =(SELECT x FROM 
3260: 74 39 20 57 48 45 52 45 20 79 3d 39 29 0a 20 20  t9 WHERE y=9).  
3270: 20 20 20 20 20 20 20 20 4f 52 20 78 3d 28 53 45          OR x=(SE
3280: 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 39 20 57  LECT x FROM t9 W
3290: 48 45 52 45 20 79 3d 31 30 29 0a 20 20 20 20 20  HERE y=10).     
32a0: 20 20 20 20 20 4f 52 20 78 3d 28 53 45 4c 45 43       OR x=(SELEC
32b0: 54 20 78 20 46 52 4f 4d 20 74 39 20 57 48 45 52  T x FROM t9 WHER
32c0: 45 20 79 3d 31 31 29 0a 20 20 20 20 20 20 20 20  E y=11).        
32d0: 20 20 4f 52 20 78 3d 28 53 45 4c 45 43 54 20 78    OR x=(SELECT x
32e0: 20 46 52 4f 4d 20 74 39 20 57 48 45 52 45 20 79   FROM t9 WHERE y
32f0: 3d 31 32 29 0a 20 20 20 20 20 20 20 20 20 20 4f  =12).          O
3300: 52 20 78 3d 28 53 45 4c 45 43 54 20 78 20 46 52  R x=(SELECT x FR
3310: 4f 4d 20 74 39 20 57 48 45 52 45 20 79 3d 31 33  OM t9 WHERE y=13
3320: 29 0a 20 20 20 20 20 20 20 20 20 20 4f 52 20 78  ).          OR x
3330: 3d 28 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20  =(SELECT x FROM 
3340: 74 39 20 57 48 45 52 45 20 79 3d 31 34 29 0a 20  t9 WHERE y=14). 
3350: 20 20 20 20 20 20 3b 0a 20 20 20 20 20 7d 0a 20        ;.     }. 
3360: 20 7d 20 7b 31 20 32 20 33 20 34 20 35 20 36 20   } {1 2 3 4 5 6 
3370: 37 20 38 20 39 20 31 30 20 31 31 7d 0a 7d 0a 0a  7 8 9 10 11}.}..
3380: 23 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  #.# The followin
3390: 67 20 74 65 73 74 73 20 63 61 6e 20 6f 6e 6c 79  g tests can only
33a0: 20 77 6f 72 6b 20 69 66 20 74 68 65 20 63 75 72   work if the cur
33b0: 72 65 6e 74 20 53 51 4c 69 74 65 20 56 46 53 20  rent SQLite VFS 
33c0: 68 61 73 20 74 68 65 20 63 6f 6e 63 65 70 74 0a  has the concept.
33d0: 23 20 6f 66 20 61 20 63 75 72 72 65 6e 74 20 64  # of a current d
33e0: 69 72 65 63 74 6f 72 79 2e 0a 23 0a 69 66 63 61  irectory..#.ifca
33f0: 70 61 62 6c 65 20 63 75 72 64 69 72 20 7b 0a 23  pable curdir {.#
3400: 20 4d 61 6b 65 20 73 75 72 65 20 61 20 64 61 74   Make sure a dat
3410: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
3420: 20 73 74 69 6c 6c 20 77 6f 72 6b 73 20 61 66 74   still works aft
3430: 65 72 20 63 68 61 6e 67 69 6e 67 20 74 68 65 0a  er changing the.
3440: 23 20 77 6f 72 6b 69 6e 67 20 64 69 72 65 63 74  # working direct
3450: 6f 72 79 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 6d  ory..#.do_test m
3460: 69 73 63 31 2d 31 34 2e 31 20 7b 0a 20 20 66 69  isc1-14.1 {.  fi
3470: 6c 65 20 6d 6b 64 69 72 20 74 65 6d 70 64 69 72  le mkdir tempdir
3480: 0a 20 20 63 64 20 74 65 6d 70 64 69 72 0a 20 20  .  cd tempdir.  
3490: 65 78 65 63 73 71 6c 20 7b 42 45 47 49 4e 7d 0a  execsql {BEGIN}.
34a0: 20 20 66 69 6c 65 20 65 78 69 73 74 73 20 2e 2f    file exists ./
34b0: 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  test.db-journal.
34c0: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 6d 69  } {0}.do_test mi
34d0: 73 63 31 2d 31 34 2e 32 61 20 7b 0a 20 20 65 78  sc1-14.2a {.  ex
34e0: 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 31  ecsql {UPDATE t1
34f0: 20 53 45 54 20 61 3d 61 7c 7c 27 78 27 20 57 48   SET a=a||'x' WH
3500: 45 52 45 20 30 7d 0a 20 20 66 69 6c 65 20 65 78  ERE 0}.  file ex
3510: 69 73 74 73 20 2e 2e 2f 74 65 73 74 2e 64 62 2d  ists ../test.db-
3520: 6a 6f 75 72 6e 61 6c 0a 7d 20 7b 30 7d 0a 64 6f  journal.} {0}.do
3530: 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 34 2e 32  _test misc1-14.2
3540: 62 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 55  b {.  execsql {U
3550: 50 44 41 54 45 20 74 31 20 53 45 54 20 61 3d 61  PDATE t1 SET a=a
3560: 7c 7c 27 79 27 20 57 48 45 52 45 20 31 7d 0a 20  ||'y' WHERE 1}. 
3570: 20 66 69 6c 65 20 65 78 69 73 74 73 20 2e 2e 2f   file exists ../
3580: 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  test.db-journal.
3590: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 6d 69  } {1}.do_test mi
35a0: 73 63 31 2d 31 34 2e 33 20 7b 0a 20 20 63 64 20  sc1-14.3 {.  cd 
35b0: 2e 2e 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65  ...  forcedelete
35c0: 20 74 65 6d 70 64 69 72 0a 20 20 65 78 65 63 73   tempdir.  execs
35d0: 71 6c 20 7b 43 4f 4d 4d 49 54 7d 0a 20 20 66 69  ql {COMMIT}.  fi
35e0: 6c 65 20 65 78 69 73 74 73 20 2e 2f 74 65 73 74  le exists ./test
35f0: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 7d 20 7b 30  .db-journal.} {0
3600: 7d 0a 7d 0a 0a 23 20 41 20 66 61 69 6c 65 64 20  }.}..# A failed 
3610: 63 72 65 61 74 65 20 74 61 62 6c 65 20 73 68 6f  create table sho
3620: 75 6c 64 20 6e 6f 74 20 6c 65 61 76 65 20 74 68  uld not leave th
3630: 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 69  e table in the i
3640: 6e 74 65 72 6e 61 6c 0a 23 20 64 61 74 61 20 73  nternal.# data s
3650: 74 72 75 63 74 75 72 65 73 2e 20 20 54 69 63 6b  tructures.  Tick
3660: 65 74 20 23 32 33 38 2e 0a 23 0a 64 6f 5f 74 65  et #238..#.do_te
3670: 73 74 20 6d 69 73 63 31 2d 31 35 2e 31 2e 31 20  st misc1-15.1.1 
3680: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
3690: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
36a0: 74 31 30 20 41 53 20 53 45 4c 45 43 54 20 63 31  t10 AS SELECT c1
36b0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73  ;.  }.} {1 {no s
36c0: 75 63 68 20 63 6f 6c 75 6d 6e 3a 20 63 31 7d 7d  uch column: c1}}
36d0: 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31  .do_test misc1-1
36e0: 35 2e 31 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  5.1.2 {.  catchs
36f0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
3700: 54 41 42 4c 45 20 74 31 30 20 41 53 20 53 45 4c  TABLE t10 AS SEL
3710: 45 43 54 20 74 39 2e 63 31 3b 0a 20 20 7d 0a 7d  ECT t9.c1;.  }.}
3720: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 63 6f 6c   {1 {no such col
3730: 75 6d 6e 3a 20 74 39 2e 63 31 7d 7d 0a 64 6f 5f  umn: t9.c1}}.do_
3740: 74 65 73 74 20 6d 69 73 63 31 2d 31 35 2e 31 2e  test misc1-15.1.
3750: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
3760: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
3770: 45 20 74 31 30 20 41 53 20 53 45 4c 45 43 54 20  E t10 AS SELECT 
3780: 6d 61 69 6e 2e 74 39 2e 63 31 3b 0a 20 20 7d 0a  main.t9.c1;.  }.
3790: 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 63 6f  } {1 {no such co
37a0: 6c 75 6d 6e 3a 20 6d 61 69 6e 2e 74 39 2e 63 31  lumn: main.t9.c1
37b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31  }}.do_test misc1
37c0: 2d 31 35 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  -15.2 {.  catchs
37d0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
37e0: 54 41 42 4c 45 20 74 31 30 20 41 53 20 53 45 4c  TABLE t10 AS SEL
37f0: 45 43 54 20 31 3b 0a 20 20 7d 0a 20 20 23 20 54  ECT 1;.  }.  # T
3800: 68 65 20 62 75 67 20 69 6e 20 74 69 63 6b 65 74  he bug in ticket
3810: 20 23 32 33 38 20 63 61 75 73 65 73 20 74 68 65   #238 causes the
3820: 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65   statement above
3830: 20 74 6f 20 66 61 69 6c 20 77 69 74 68 0a 20 20   to fail with.  
3840: 23 20 74 68 65 20 65 72 72 6f 72 20 22 74 61 62  # the error "tab
3850: 6c 65 20 74 31 30 20 61 6c 72 65 61 64 20 65 78  le t10 alread ex
3860: 69 73 74 73 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a  ists".} {0 {}}..
3870: 23 20 54 65 73 74 20 66 6f 72 20 6d 65 6d 6f 72  # Test for memor
3880: 79 20 6c 65 61 6b 73 20 77 68 65 6e 20 61 20 43  y leaks when a C
3890: 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6e 74  REATE TABLE cont
38a0: 61 69 6e 69 6e 67 20 61 20 70 72 69 6d 61 72 79  aining a primary
38b0: 20 6b 65 79 0a 23 20 66 61 69 6c 73 2e 20 20 54   key.# fails.  T
38c0: 69 63 6b 65 74 20 23 32 34 39 2e 0a 23 0a 64 6f  icket #249..#.do
38d0: 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 36 2e 31  _test misc1-16.1
38e0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53   {.  catchsql {S
38f0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
3900: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 4c 49  sqlite_master LI
3910: 4d 49 54 20 31 7d 0a 20 20 63 61 74 63 68 73 71  MIT 1}.  catchsq
3920: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
3930: 41 42 4c 45 20 74 65 73 74 28 61 20 69 6e 74 65  ABLE test(a inte
3940: 67 65 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79  ger, primary key
3950: 28 61 29 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b  (a));.  }.} {0 {
3960: 7d 7d 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31  }}.do_test misc1
3970: 2d 31 36 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  -16.2 {.  catchs
3980: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
3990: 54 41 42 4c 45 20 74 65 73 74 28 61 20 69 6e 74  TABLE test(a int
39a0: 65 67 65 72 2c 20 70 72 69 6d 61 72 79 20 6b 65  eger, primary ke
39b0: 79 28 61 29 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20  y(a));.  }.} {1 
39c0: 7b 74 61 62 6c 65 20 74 65 73 74 20 61 6c 72 65  {table test alre
39d0: 61 64 79 20 65 78 69 73 74 73 7d 7d 0a 64 6f 5f  ady exists}}.do_
39e0: 74 65 73 74 20 6d 69 73 63 31 2d 31 36 2e 33 20  test misc1-16.3 
39f0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
3a00: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
3a10: 74 65 73 74 32 28 61 20 74 65 78 74 20 70 72 69  test2(a text pri
3a20: 6d 61 72 79 20 6b 65 79 2c 20 62 20 74 65 78 74  mary key, b text
3a30: 2c 20 70 72 69 6d 61 72 79 20 6b 65 79 28 61 2c  , primary key(a,
3a40: 62 29 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 74  b));.  }.} {1 {t
3a50: 61 62 6c 65 20 22 74 65 73 74 32 22 20 68 61 73  able "test2" has
3a60: 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 70   more than one p
3a70: 72 69 6d 61 72 79 20 6b 65 79 7d 7d 0a 64 6f 5f  rimary key}}.do_
3a80: 74 65 73 74 20 6d 69 73 63 31 2d 31 36 2e 34 20  test misc1-16.4 
3a90: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3aa0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65    INSERT INTO te
3ab0: 73 74 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20  st VALUES(1);.  
3ac0: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20    SELECT rowid, 
3ad0: 61 20 46 52 4f 4d 20 74 65 73 74 3b 0a 20 20 7d  a FROM test;.  }
3ae0: 0a 7d 20 7b 31 20 31 7d 0a 64 6f 5f 74 65 73 74  .} {1 1}.do_test
3af0: 20 6d 69 73 63 31 2d 31 36 2e 35 20 7b 0a 20 20   misc1-16.5 {.  
3b00: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
3b10: 53 45 52 54 20 49 4e 54 4f 20 74 65 73 74 20 56  SERT INTO test V
3b20: 41 4c 55 45 53 28 35 29 3b 0a 20 20 20 20 53 45  ALUES(5);.    SE
3b30: 4c 45 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52  LECT rowid, a FR
3b40: 4f 4d 20 74 65 73 74 3b 0a 20 20 7d 0a 7d 20 7b  OM test;.  }.} {
3b50: 31 20 31 20 35 20 35 7d 0a 64 6f 5f 74 65 73 74  1 1 5 5}.do_test
3b60: 20 6d 69 73 63 31 2d 31 36 2e 36 20 7b 0a 20 20   misc1-16.6 {.  
3b70: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
3b80: 53 45 52 54 20 49 4e 54 4f 20 74 65 73 74 20 56  SERT INTO test V
3b90: 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20 20 20  ALUES(NULL);.   
3ba0: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 61   SELECT rowid, a
3bb0: 20 46 52 4f 4d 20 74 65 73 74 3b 0a 20 20 7d 0a   FROM test;.  }.
3bc0: 7d 20 7b 31 20 31 20 35 20 35 20 36 20 36 7d 0a  } {1 1 5 5 6 6}.
3bd0: 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67  .ifcapable trigg
3be0: 65 72 26 26 74 65 6d 70 64 62 20 7b 0a 23 20 54  er&&tempdb {.# T
3bf0: 69 63 6b 65 74 20 23 33 33 33 3a 20 54 65 6d 70  icket #333: Temp
3c00: 20 74 72 69 67 67 65 72 73 20 74 68 61 74 20 6d   triggers that m
3c10: 6f 64 69 66 79 20 70 65 72 73 69 73 74 65 6e 74  odify persistent
3c20: 20 74 61 62 6c 65 73 2e 0a 23 0a 64 6f 5f 74 65   tables..#.do_te
3c30: 73 74 20 6d 69 73 63 31 2d 31 37 2e 31 20 7b 0a  st misc1-17.1 {.
3c40: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3c50: 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54  BEGIN;.    CREAT
3c60: 45 20 54 41 42 4c 45 20 52 65 61 6c 54 61 62 6c  E TABLE RealTabl
3c70: 65 28 54 65 73 74 49 44 20 49 4e 54 45 47 45 52  e(TestID INTEGER
3c80: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 54 65   PRIMARY KEY, Te
3c90: 73 74 53 74 72 69 6e 67 20 54 45 58 54 29 3b 0a  stString TEXT);.
3ca0: 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20      CREATE TEMP 
3cb0: 54 41 42 4c 45 20 54 65 6d 70 54 61 62 6c 65 28  TABLE TempTable(
3cc0: 54 65 73 74 49 44 20 49 4e 54 45 47 45 52 20 50  TestID INTEGER P
3cd0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 54 65 73 74  RIMARY KEY, Test
3ce0: 53 74 72 69 6e 67 20 54 45 58 54 29 3b 0a 20 20  String TEXT);.  
3cf0: 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 52    CREATE TEMP TR
3d00: 49 47 47 45 52 20 74 72 69 67 54 65 73 74 5f 31  IGGER trigTest_1
3d10: 20 41 46 54 45 52 20 55 50 44 41 54 45 20 4f 4e   AFTER UPDATE ON
3d20: 20 54 65 6d 70 54 61 62 6c 65 20 42 45 47 49 4e   TempTable BEGIN
3d30: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
3d40: 54 4f 20 52 65 61 6c 54 61 62 6c 65 28 54 65 73  TO RealTable(Tes
3d50: 74 53 74 72 69 6e 67 29 20 0a 20 20 20 20 20 20  tString) .      
3d60: 20 20 20 53 45 4c 45 43 54 20 6e 65 77 2e 54 65     SELECT new.Te
3d70: 73 74 53 74 72 69 6e 67 20 46 52 4f 4d 20 54 65  stString FROM Te
3d80: 6d 70 54 61 62 6c 65 20 4c 49 4d 49 54 20 31 3b  mpTable LIMIT 1;
3d90: 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 49 4e  .    END;.    IN
3da0: 53 45 52 54 20 49 4e 54 4f 20 54 65 6d 70 54 61  SERT INTO TempTa
3db0: 62 6c 65 28 54 65 73 74 53 74 72 69 6e 67 29 20  ble(TestString) 
3dc0: 56 41 4c 55 45 53 20 28 27 31 27 29 3b 0a 20 20  VALUES ('1');.  
3dd0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 54 65    INSERT INTO Te
3de0: 6d 70 54 61 62 6c 65 28 54 65 73 74 53 74 72 69  mpTable(TestStri
3df0: 6e 67 29 20 56 41 4c 55 45 53 20 28 27 32 27 29  ng) VALUES ('2')
3e00: 3b 0a 20 20 20 20 55 50 44 41 54 45 20 54 65 6d  ;.    UPDATE Tem
3e10: 70 54 61 62 6c 65 20 53 45 54 20 54 65 73 74 53  pTable SET TestS
3e20: 74 72 69 6e 67 20 3d 20 54 65 73 74 53 74 72 69  tring = TestStri
3e30: 6e 67 20 2b 20 31 20 57 48 45 52 45 20 54 65 73  ng + 1 WHERE Tes
3e40: 74 49 44 3d 31 20 4f 52 20 54 65 73 74 49 64 3d  tID=1 OR TestId=
3e50: 32 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20  2;.    COMMIT;. 
3e60: 20 20 20 53 45 4c 45 43 54 20 54 65 73 74 53 74     SELECT TestSt
3e70: 72 69 6e 67 20 46 52 4f 4d 20 52 65 61 6c 54 61  ring FROM RealTa
3e80: 62 6c 65 20 4f 52 44 45 52 20 42 59 20 31 3b 0a  ble ORDER BY 1;.
3e90: 20 20 7d 0a 7d 20 7b 32 20 33 7d 0a 7d 0a 0a 64    }.} {2 3}.}..d
3ea0: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 38 2e  o_test misc1-18.
3eb0: 31 20 7b 0a 20 20 73 65 74 20 6e 20 5b 73 71 6c  1 {.  set n [sql
3ec0: 69 74 65 33 5f 73 6c 65 65 70 20 31 30 30 5d 0a  ite3_sleep 100].
3ed0: 20 20 65 78 70 72 20 7b 24 6e 3e 3d 31 30 30 7d    expr {$n>=100}
3ee0: 0a 7d 20 7b 31 7d 0a 0a 66 69 6e 69 73 68 5f 74  .} {1}..finish_t
3ef0: 65 73 74 0a                                      est.