/ Hex Artifact Content
Login

Artifact a03214118429b40ca5548bc1fae0ebd5c34dabe6:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 2a 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 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 0a 23 0a 23 20 54 68 69 73 20 66  rary..#.# This f
01b0: 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  ile implements t
01c0: 65 73 74 73 20 66 6f 72 20 6d 69 73 63 65 6c 6c  ests for miscell
01d0: 61 6e 6f 75 73 20 66 65 61 74 75 72 65 73 20 74  anous features t
01e0: 68 61 74 20 77 65 72 65 0a 23 20 6c 65 66 74 20  hat were.# left 
01f0: 6f 75 74 20 6f 66 20 6f 74 68 65 72 20 74 65 73  out of other tes
0200: 74 20 66 69 6c 65 73 2e 0a 23 0a 23 20 24 49 64  t files..#.# $Id
0210: 3a 20 6d 69 73 63 31 2e 74 65 73 74 2c 76 20 31  : misc1.test,v 1
0220: 2e 35 20 32 30 30 32 2f 30 33 2f 33 30 20 31 35  .5 2002/03/30 15
0230: 3a 32 36 3a 35 32 20 64 72 68 20 45 78 70 20 24  :26:52 drh Exp $
0240: 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66  ..set testdir [f
0250: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67  ile dirname $arg
0260: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74  v0].source $test
0270: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a  dir/tester.tcl..
0280: 23 20 54 65 73 74 20 74 68 65 20 63 72 65 61 74  # Test the creat
0290: 69 6f 6e 20 61 6e 64 20 75 73 65 20 6f 66 20 74  ion and use of t
02a0: 61 62 6c 65 73 20 74 68 61 74 20 68 61 76 65 20  ables that have 
02b0: 61 20 6c 61 72 67 65 20 6e 75 6d 62 65 72 0a 23  a large number.#
02c0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 64   of columns..#.d
02d0: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 2e 31  o_test misc1-1.1
02e0: 20 7b 0a 20 20 73 65 74 20 63 6d 64 20 22 43 52   {.  set cmd "CR
02f0: 45 41 54 45 20 54 41 42 4c 45 20 6d 61 6e 79 63  EATE TABLE manyc
0300: 6f 6c 28 78 30 20 74 65 78 74 22 0a 20 20 66 6f  ol(x0 text".  fo
0310: 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c  r {set i 1} {$i<
0320: 3d 39 39 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  =99} {incr i} {.
0330: 20 20 20 20 61 70 70 65 6e 64 20 63 6d 64 20 22      append cmd "
0340: 2c 78 24 69 20 74 65 78 74 22 0a 20 20 7d 0a 20  ,x$i text".  }. 
0350: 20 61 70 70 65 6e 64 20 63 6d 64 20 22 29 22 3b   append cmd ")";
0360: 0a 20 20 65 78 65 63 73 71 6c 20 24 63 6d 64 0a  .  execsql $cmd.
0370: 20 20 73 65 74 20 63 6d 64 20 22 49 4e 53 45 52    set cmd "INSER
0380: 54 20 49 4e 54 4f 20 6d 61 6e 79 63 6f 6c 20 56  T INTO manycol V
0390: 41 4c 55 45 53 28 30 22 0a 20 20 66 6f 72 20 7b  ALUES(0".  for {
03a0: 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d 39 39  set i 1} {$i<=99
03b0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
03c0: 20 61 70 70 65 6e 64 20 63 6d 64 20 22 2c 24 69   append cmd ",$i
03d0: 22 0a 20 20 7d 0a 20 20 61 70 70 65 6e 64 20 63  ".  }.  append c
03e0: 6d 64 20 22 29 22 3b 0a 20 20 65 78 65 63 73 71  md ")";.  execsq
03f0: 6c 20 24 63 6d 64 0a 20 20 65 78 65 63 73 71 6c  l $cmd.  execsql
0400: 20 22 53 45 4c 45 43 54 20 78 39 39 20 46 52 4f   "SELECT x99 FRO
0410: 4d 20 6d 61 6e 79 63 6f 6c 22 0a 7d 20 39 39 0a  M manycol".} 99.
0420: 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 2e  do_test misc1-1.
0430: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
0440: 45 4c 45 43 54 20 78 30 2c 20 78 31 30 2c 20 78  ELECT x0, x10, x
0450: 32 35 2c 20 78 35 30 2c 20 78 37 35 20 46 52 4f  25, x50, x75 FRO
0460: 4d 20 6d 61 6e 79 63 6f 6c 7d 0a 7d 20 7b 30 20  M manycol}.} {0 
0470: 31 30 20 32 35 20 35 30 20 37 35 7d 0a 64 6f 5f  10 25 50 75}.do_
0480: 74 65 73 74 20 6d 69 73 63 31 2d 31 2e 33 20 7b  test misc1-1.3 {
0490: 0a 20 20 66 6f 72 20 7b 73 65 74 20 6a 20 31 30  .  for {set j 10
04a0: 30 7d 20 7b 24 6a 3c 3d 31 30 30 30 7d 20 7b 69  0} {$j<=1000} {i
04b0: 6e 63 72 20 6a 20 31 30 30 7d 20 7b 0a 20 20 20  ncr j 100} {.   
04c0: 20 73 65 74 20 63 6d 64 20 22 49 4e 53 45 52 54   set cmd "INSERT
04d0: 20 49 4e 54 4f 20 6d 61 6e 79 63 6f 6c 20 56 41   INTO manycol VA
04e0: 4c 55 45 53 28 24 6a 22 0a 20 20 20 20 66 6f 72  LUES($j".    for
04f0: 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d   {set i 1} {$i<=
0500: 39 39 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20  99} {incr i} {. 
0510: 20 20 20 20 20 61 70 70 65 6e 64 20 63 6d 64 20       append cmd 
0520: 22 2c 5b 65 78 70 72 20 7b 24 69 2b 24 6a 7d 5d  ",[expr {$i+$j}]
0530: 22 0a 20 20 20 20 7d 0a 20 20 20 20 61 70 70 65  ".    }.    appe
0540: 6e 64 20 63 6d 64 20 22 29 22 0a 20 20 20 20 65  nd cmd ")".    e
0550: 78 65 63 73 71 6c 20 24 63 6d 64 0a 20 20 7d 0a  xecsql $cmd.  }.
0560: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0570: 54 20 78 35 30 20 46 52 4f 4d 20 6d 61 6e 79 63  T x50 FROM manyc
0580: 6f 6c 20 4f 52 44 45 52 20 42 59 20 78 38 30 7d  ol ORDER BY x80}
0590: 0a 7d 20 7b 35 30 20 31 35 30 20 32 35 30 20 33  .} {50 150 250 3
05a0: 35 30 20 34 35 30 20 35 35 30 20 36 35 30 20 37  50 450 550 650 7
05b0: 35 30 20 38 35 30 20 39 35 30 20 31 30 35 30 7d  50 850 950 1050}
05c0: 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31  .do_test misc1-1
05d0: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
05e0: 53 45 4c 45 43 54 20 78 37 35 20 46 52 4f 4d 20  SELECT x75 FROM 
05f0: 6d 61 6e 79 63 6f 6c 20 57 48 45 52 45 20 78 35  manycol WHERE x5
0600: 30 3d 33 35 30 7d 0a 7d 20 33 37 35 0a 64 6f 5f  0=350}.} 375.do_
0610: 74 65 73 74 20 6d 69 73 63 31 2d 31 2e 35 20 7b  test misc1-1.5 {
0620: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0630: 43 54 20 78 35 30 20 46 52 4f 4d 20 6d 61 6e 79  CT x50 FROM many
0640: 63 6f 6c 20 57 48 45 52 45 20 78 39 39 3d 35 39  col WHERE x99=59
0650: 39 7d 0a 7d 20 35 35 30 0a 64 6f 5f 74 65 73 74  9}.} 550.do_test
0660: 20 6d 69 73 63 31 2d 31 2e 36 20 7b 0a 20 20 65   misc1-1.6 {.  e
0670: 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 49  xecsql {CREATE I
0680: 4e 44 45 58 20 6d 61 6e 79 63 6f 6c 5f 69 64 78  NDEX manycol_idx
0690: 31 20 4f 4e 20 6d 61 6e 79 63 6f 6c 28 78 39 39  1 ON manycol(x99
06a0: 29 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  )}.  execsql {SE
06b0: 4c 45 43 54 20 78 35 30 20 46 52 4f 4d 20 6d 61  LECT x50 FROM ma
06c0: 6e 79 63 6f 6c 20 57 48 45 52 45 20 78 39 39 3d  nycol WHERE x99=
06d0: 38 39 39 7d 0a 7d 20 38 35 30 0a 64 6f 5f 74 65  899}.} 850.do_te
06e0: 73 74 20 6d 69 73 63 31 2d 31 2e 37 20 7b 0a 20  st misc1-1.7 {. 
06f0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0700: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 6d   count(*) FROM m
0710: 61 6e 79 63 6f 6c 7d 0a 7d 20 31 31 0a 64 6f 5f  anycol}.} 11.do_
0720: 74 65 73 74 20 6d 69 73 63 31 2d 31 2e 38 20 7b  test misc1-1.8 {
0730: 0a 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45  .  execsql {DELE
0740: 54 45 20 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c 20  TE FROM manycol 
0750: 57 48 45 52 45 20 78 39 38 3d 31 32 33 34 7d 0a  WHERE x98=1234}.
0760: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0770: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
0780: 6d 61 6e 79 63 6f 6c 7d 0a 7d 20 31 31 0a 64 6f  manycol}.} 11.do
0790: 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 2e 39 20  _test misc1-1.9 
07a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c  {.  execsql {DEL
07b0: 45 54 45 20 46 52 4f 4d 20 6d 61 6e 79 63 6f 6c  ETE FROM manycol
07c0: 20 57 48 45 52 45 20 78 39 38 3d 39 39 38 7d 0a   WHERE x98=998}.
07d0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
07e0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
07f0: 6d 61 6e 79 63 6f 6c 7d 0a 7d 20 31 30 0a 64 6f  manycol}.} 10.do
0800: 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 2e 31 30  _test misc1-1.10
0810: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 44 45   {.  execsql {DE
0820: 4c 45 54 45 20 46 52 4f 4d 20 6d 61 6e 79 63 6f  LETE FROM manyco
0830: 6c 20 57 48 45 52 45 20 78 39 39 3d 35 30 30 7d  l WHERE x99=500}
0840: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0850: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
0860: 20 6d 61 6e 79 63 6f 6c 7d 0a 7d 20 31 30 0a 64   manycol}.} 10.d
0870: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 31 2e 31  o_test misc1-1.1
0880: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 44  1 {.  execsql {D
0890: 45 4c 45 54 45 20 46 52 4f 4d 20 6d 61 6e 79 63  ELETE FROM manyc
08a0: 6f 6c 20 57 48 45 52 45 20 78 39 39 3d 35 39 39  ol WHERE x99=599
08b0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
08c0: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
08d0: 4d 20 6d 61 6e 79 63 6f 6c 7d 0a 7d 20 39 0a 0a  M manycol}.} 9..
08e0: 23 20 43 68 65 63 6b 20 47 52 4f 55 50 20 42 59  # Check GROUP BY
08f0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
0900: 74 20 6e 61 6d 65 20 74 77 6f 20 6f 72 20 6d 6f  t name two or mo
0910: 72 65 20 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 64 6f  re columns..#.do
0920: 5f 74 65 73 74 20 6d 69 73 63 31 2d 32 2e 31 20  _test misc1-2.1 
0930: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0940: 20 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54    BEGIN TRANSACT
0950: 49 4f 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20  ION;.    CREATE 
0960: 54 41 42 4c 45 20 61 67 67 65 72 28 6f 6e 65 20  TABLE agger(one 
0970: 74 65 78 74 2c 20 74 77 6f 20 74 65 78 74 2c 20  text, two text, 
0980: 74 68 72 65 65 20 74 65 78 74 2c 20 66 6f 75 72  three text, four
0990: 20 74 65 78 74 29 3b 0a 20 20 20 20 49 4e 53 45   text);.    INSE
09a0: 52 54 20 49 4e 54 4f 20 61 67 67 65 72 20 56 41  RT INTO agger VA
09b0: 4c 55 45 53 28 31 2c 20 27 6f 6e 65 27 2c 20 27  LUES(1, 'one', '
09c0: 68 65 6c 6c 6f 27 2c 20 27 79 65 73 27 29 3b 0a  hello', 'yes');.
09d0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
09e0: 61 67 67 65 72 20 56 41 4c 55 45 53 28 32 2c 20  agger VALUES(2, 
09f0: 27 74 77 6f 27 2c 20 27 68 6f 77 64 79 27 2c 20  'two', 'howdy', 
0a00: 27 6e 6f 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  'no');.    INSER
0a10: 54 20 49 4e 54 4f 20 61 67 67 65 72 20 56 41 4c  T INTO agger VAL
0a20: 55 45 53 28 33 2c 20 27 74 68 72 27 2c 20 27 68  UES(3, 'thr', 'h
0a30: 6f 77 61 72 65 79 61 27 2c 20 27 79 65 73 27 29  owareya', 'yes')
0a40: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0a50: 4f 20 61 67 67 65 72 20 56 41 4c 55 45 53 28 34  O agger VALUES(4
0a60: 2c 20 27 74 77 6f 27 2c 20 27 6c 6f 74 68 65 72  , 'two', 'lother
0a70: 65 27 2c 20 27 79 65 73 27 29 3b 0a 20 20 20 20  e', 'yes');.    
0a80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 67 67 65  INSERT INTO agge
0a90: 72 20 56 41 4c 55 45 53 28 35 2c 20 27 6f 6e 65  r VALUES(5, 'one
0aa0: 27 2c 20 27 61 74 63 68 61 27 2c 20 27 79 65 73  ', 'atcha', 'yes
0ab0: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
0ac0: 4e 54 4f 20 61 67 67 65 72 20 56 41 4c 55 45 53  NTO agger VALUES
0ad0: 28 36 2c 20 27 74 77 6f 27 2c 20 27 68 65 6c 6c  (6, 'two', 'hell
0ae0: 6f 27 2c 20 27 6e 6f 27 29 3b 0a 20 20 20 20 43  o', 'no');.    C
0af0: 4f 4d 4d 49 54 0a 20 20 7d 0a 20 20 65 78 65 63  OMMIT.  }.  exec
0b00: 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e  sql {SELECT coun
0b10: 74 28 2a 29 20 46 52 4f 4d 20 61 67 67 65 72 7d  t(*) FROM agger}
0b20: 0a 7d 20 36 0a 64 6f 5f 74 65 73 74 20 6d 69 73  .} 6.do_test mis
0b30: 63 31 2d 32 2e 32 20 7b 0a 20 20 65 78 65 63 73  c1-2.2 {.  execs
0b40: 71 6c 20 7b 53 45 4c 45 43 54 20 73 75 6d 28 6f  ql {SELECT sum(o
0b50: 6e 65 29 2c 20 74 77 6f 2c 20 66 6f 75 72 20 46  ne), two, four F
0b60: 52 4f 4d 20 61 67 67 65 72 0a 20 20 20 20 20 20  ROM agger.      
0b70: 20 20 20 20 20 47 52 4f 55 50 20 42 59 20 74 77       GROUP BY tw
0b80: 6f 2c 20 66 6f 75 72 20 4f 52 44 45 52 20 42 59  o, four ORDER BY
0b90: 20 73 75 6d 28 6f 6e 65 29 20 64 65 73 63 7d 0a   sum(one) desc}.
0ba0: 7d 20 7b 38 20 74 77 6f 20 6e 6f 20 36 20 6f 6e  } {8 two no 6 on
0bb0: 65 20 79 65 73 20 34 20 74 77 6f 20 79 65 73 20  e yes 4 two yes 
0bc0: 33 20 74 68 72 20 79 65 73 7d 0a 0a 23 20 48 65  3 thr yes}..# He
0bd0: 72 65 27 73 20 61 20 74 65 73 74 20 66 6f 72 20  re's a test for 
0be0: 61 20 62 75 67 20 66 6f 75 6e 64 20 62 79 20 4a  a bug found by J
0bf0: 6f 65 6c 20 4c 75 63 73 79 2e 20 20 54 68 65 20  oel Lucsy.  The 
0c00: 63 6f 64 65 20 62 65 6c 6f 77 0a 23 20 77 61 73  code below.# was
0c10: 20 63 61 75 73 69 6e 67 20 61 6e 20 61 73 73 65   causing an asse
0c20: 72 74 69 6f 6e 20 66 61 69 6c 75 72 65 2e 0a 23  rtion failure..#
0c30: 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 33  .do_test misc1-3
0c40: 2e 31 20 7b 0a 20 20 73 65 74 20 72 20 5b 65 78  .1 {.  set r [ex
0c50: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
0c60: 54 45 20 54 41 42 4c 45 20 74 31 28 61 29 3b 0a  TE TABLE t1(a);.
0c70: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0c80: 74 31 20 56 41 4c 55 45 53 28 27 68 69 27 29 3b  t1 VALUES('hi');
0c90: 0a 20 20 20 20 50 52 41 47 4d 41 20 66 75 6c 6c  .    PRAGMA full
0ca0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 3d 6f 6e  _column_names=on
0cb0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77  ;.    SELECT row
0cc0: 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  id, * FROM t1;. 
0cd0: 20 7d 5d 0a 20 20 6c 69 6e 64 65 78 20 24 72 20   }].  lindex $r 
0ce0: 31 0a 7d 20 7b 68 69 7d 0a 0a 23 20 48 65 72 65  1.} {hi}..# Here
0cf0: 27 73 20 61 20 74 65 73 74 20 66 6f 72 20 79 65  's a test for ye
0d00: 74 20 61 6e 6f 74 68 65 72 20 62 75 67 20 66 6f  t another bug fo
0d10: 75 6e 64 20 62 79 20 4a 6f 65 6c 20 4c 75 63 73  und by Joel Lucs
0d20: 79 2e 20 20 54 68 65 20 63 6f 64 65 0a 23 20 62  y.  The code.# b
0d30: 65 6c 6f 77 20 77 61 73 20 63 61 75 73 69 6e 67  elow was causing
0d40: 20 61 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   an assertion fa
0d50: 69 6c 75 72 65 2e 0a 23 0a 64 6f 5f 74 65 73 74  ilure..#.do_test
0d60: 20 6d 69 73 63 31 2d 34 2e 31 20 7b 0a 20 20 65   misc1-4.1 {.  e
0d70: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
0d80: 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  IN;.    CREATE T
0d90: 41 42 4c 45 20 74 32 28 61 29 3b 0a 20 20 20 20  ABLE t2(a);.    
0da0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
0db0: 41 4c 55 45 53 28 27 54 68 69 73 20 69 73 20 61  ALUES('This is a
0dc0: 20 6c 6f 6e 67 20 73 74 72 69 6e 67 20 74 6f 20   long string to 
0dd0: 75 73 65 20 75 70 20 61 20 6c 6f 74 20 6f 66 20  use up a lot of 
0de0: 64 69 73 6b 20 2d 27 29 3b 0a 20 20 20 20 55 50  disk -');.    UP
0df0: 44 41 54 45 20 74 32 20 53 45 54 20 61 3d 61 7c  DATE t2 SET a=a|
0e00: 7c 61 7c 7c 61 7c 7c 61 3b 0a 20 20 20 20 49 4e  |a||a||a;.    IN
0e10: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c  SERT INTO t2 SEL
0e20: 45 43 54 20 27 31 20 2d 20 27 20 7c 7c 20 61 20  ECT '1 - ' || a 
0e30: 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53  FROM t2;.    INS
0e40: 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45  ERT INTO t2 SELE
0e50: 43 54 20 27 32 20 2d 20 27 20 7c 7c 20 61 20 46  CT '2 - ' || a F
0e60: 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45  ROM t2;.    INSE
0e70: 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43  RT INTO t2 SELEC
0e80: 54 20 27 33 20 2d 20 27 20 7c 7c 20 61 20 46 52  T '3 - ' || a FR
0e90: 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45 52  OM t2;.    INSER
0ea0: 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54  T INTO t2 SELECT
0eb0: 20 27 34 20 2d 20 27 20 7c 7c 20 61 20 46 52 4f   '4 - ' || a FRO
0ec0: 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45 52 54  M t2;.    INSERT
0ed0: 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54 20   INTO t2 SELECT 
0ee0: 27 35 20 2d 20 27 20 7c 7c 20 61 20 46 52 4f 4d  '5 - ' || a FROM
0ef0: 20 74 32 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   t2;.    INSERT 
0f00: 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54 20 27  INTO t2 SELECT '
0f10: 36 20 2d 20 27 20 7c 7c 20 61 20 46 52 4f 4d 20  6 - ' || a FROM 
0f20: 74 32 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a  t2;.    COMMIT;.
0f30: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
0f40: 28 2a 29 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d  (*) FROM t2;.  }
0f50: 0a 7d 20 7b 36 34 7d 0a 0a 23 20 4d 61 6b 65 20  .} {64}..# Make 
0f60: 73 75 72 65 20 77 65 20 61 63 74 75 61 6c 6c 79  sure we actually
0f70: 20 73 65 65 20 61 20 73 65 6d 69 63 6f 6c 6f 6e   see a semicolon
0f80: 20 6f 72 20 65 6e 64 2d 6f 66 2d 66 69 6c 65 20   or end-of-file 
0f90: 69 6e 20 74 68 65 20 53 51 4c 20 69 6e 70 75 74  in the SQL input
0fa0: 0a 23 20 62 65 66 6f 72 65 20 65 78 65 63 75 74  .# before execut
0fb0: 69 6e 67 20 61 20 63 6f 6d 6d 61 6e 64 2e 20 20  ing a command.  
0fc0: 54 68 75 73 20 69 66 20 22 57 48 45 52 45 22 20  Thus if "WHERE" 
0fd0: 69 73 20 6d 69 73 73 70 65 6c 6c 65 64 20 6f 6e  is misspelled on
0fe0: 20 61 6e 20 55 50 44 41 54 45 2c 0a 23 20 74 68   an UPDATE,.# th
0ff0: 65 20 75 73 65 72 20 77 6f 6e 27 74 20 61 63 63  e user won't acc
1000: 69 64 65 6e 74 6c 79 20 75 70 64 61 74 65 20 65  idently update e
1010: 76 65 72 79 20 72 65 63 6f 72 64 2e 0a 23 0a 64  very record..#.d
1020: 6f 5f 74 65 73 74 20 6d 69 73 63 31 2d 35 2e 31  o_test misc1-5.1
1030: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
1040: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
1050: 20 74 33 28 61 2c 62 29 3b 0a 20 20 20 20 49 4e   t3(a,b);.    IN
1060: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
1070: 55 45 53 28 31 2c 32 29 3b 0a 20 20 20 20 49 4e  UES(1,2);.    IN
1080: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
1090: 55 45 53 28 33 2c 34 29 3b 0a 20 20 20 20 55 50  UES(3,4);.    UP
10a0: 44 41 54 45 20 74 33 20 53 45 54 20 61 3d 30 20  DATE t3 SET a=0 
10b0: 57 48 45 52 45 77 77 77 20 62 3d 32 3b 0a 20 20  WHEREwww b=2;.  
10c0: 7d 0a 7d 20 7b 31 20 7b 6e 65 61 72 20 22 57 48  }.} {1 {near "WH
10d0: 45 52 45 77 77 77 22 3a 20 73 79 6e 74 61 78 20  EREwww": syntax 
10e0: 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74 20  error}}.do_test 
10f0: 6d 69 73 63 31 2d 35 2e 32 20 7b 0a 20 20 65 78  misc1-5.2 {.  ex
1100: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1110: 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 4f 52 44  CT * FROM t3 ORD
1120: 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b  ER BY a;.  }.} {
1130: 31 20 32 20 33 20 34 7d 0a 0a 23 20 43 65 72 74  1 2 3 4}..# Cert
1140: 61 69 6e 20 6b 65 79 77 6f 72 64 73 20 28 65 73  ain keywords (es
1150: 70 65 63 69 61 6c 6c 79 20 6e 6f 6e 2d 73 74 61  pecially non-sta
1160: 6e 64 61 72 64 20 6b 65 79 77 6f 72 64 73 20 6c  ndard keywords l
1170: 69 6b 65 20 22 52 45 50 4c 41 43 45 22 29 20 63  ike "REPLACE") c
1180: 61 6e 0a 23 20 61 6c 73 6f 20 62 65 20 75 73 65  an.# also be use
1190: 64 20 61 73 20 69 64 65 6e 74 69 66 69 65 72 73  d as identifiers
11a0: 2e 20 20 54 68 65 20 77 61 79 20 74 68 69 73 20  .  The way this 
11b0: 77 6f 72 6b 73 20 69 6e 20 74 68 65 20 70 61 72  works in the par
11c0: 73 65 72 20 69 73 20 74 68 61 74 0a 23 20 74 68  ser is that.# th
11d0: 65 20 70 61 72 73 65 72 20 66 69 72 73 74 20 64  e parser first d
11e0: 65 74 65 63 74 73 20 61 20 73 79 6e 74 61 78 20  etects a syntax 
11f0: 65 72 72 6f 72 2c 20 74 68 65 20 65 72 72 6f 72  error, the error
1200: 20 68 61 6e 64 6c 69 6e 67 20 72 6f 75 74 69 6e   handling routin
1210: 65 0a 23 20 73 65 65 73 20 74 68 61 74 20 74 68  e.# sees that th
1220: 65 20 73 70 65 63 69 61 6c 20 6b 65 79 77 6f 72  e special keywor
1230: 64 20 63 61 75 73 65 64 20 74 68 65 20 65 72 72  d caused the err
1240: 6f 72 2c 20 74 68 65 6e 20 72 65 70 6c 61 63 65  or, then replace
1250: 73 20 74 68 65 20 6b 65 79 77 6f 72 64 0a 23 20  s the keyword.# 
1260: 77 69 74 68 20 22 49 44 22 20 61 6e 64 20 74 72  with "ID" and tr
1270: 69 65 73 20 61 67 61 69 6e 2e 0a 23 0a 23 20 43  ies again..#.# C
1280: 68 65 63 6b 20 74 68 65 20 6f 70 65 72 61 74 69  heck the operati
1290: 6f 6e 20 6f 66 20 74 68 69 73 20 6c 6f 67 69 63  on of this logic
12a0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 6d 69 73 63  ..#.do_test misc
12b0: 31 2d 36 2e 31 20 7b 0a 20 20 63 61 74 63 68 73  1-6.1 {.  catchs
12c0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
12d0: 54 41 42 4c 45 20 74 34 28 0a 20 20 20 20 20 20  TABLE t4(.      
12e0: 61 62 6f 72 74 2c 20 61 73 63 2c 20 62 65 67 69  abort, asc, begi
12f0: 6e 2c 20 63 6c 75 73 74 65 72 2c 20 63 6f 6e 66  n, cluster, conf
1300: 6c 69 63 74 2c 20 63 6f 70 79 2c 20 64 65 6c 69  lict, copy, deli
1310: 6d 69 74 65 72 73 2c 20 64 65 73 63 2c 20 65 6e  miters, desc, en
1320: 64 2c 0a 20 20 20 20 20 20 65 78 70 6c 61 69 6e  d,.      explain
1330: 2c 20 66 61 69 6c 2c 20 69 67 6e 6f 72 65 2c 20  , fail, ignore, 
1340: 6b 65 79 2c 20 6f 66 66 73 65 74 2c 20 70 72 61  key, offset, pra
1350: 67 6d 61 2c 20 72 65 70 6c 61 63 65 2c 20 74 65  gma, replace, te
1360: 6d 70 2c 0a 20 20 20 20 20 20 76 61 63 75 75 6d  mp,.      vacuum
1370: 2c 20 76 69 65 77 0a 20 20 20 20 29 3b 0a 20 20  , view.    );.  
1380: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
1390: 73 74 20 6d 69 73 63 31 2d 36 2e 32 20 7b 0a 20  st misc1-6.2 {. 
13a0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
13b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 0a 20  INSERT INTO t4. 
13c0: 20 20 20 20 20 20 56 41 4c 55 45 53 28 31 2c 32        VALUES(1,2
13d0: 2c 33 2c 34 2c 35 2c 36 2c 37 2c 38 2c 39 2c 31  ,3,4,5,6,7,8,9,1
13e0: 30 2c 31 31 2c 31 32 2c 31 33 2c 31 34 2c 31 35  0,11,12,13,14,15
13f0: 2c 31 36 2c 31 37 2c 31 38 2c 31 39 29 3b 0a 20  ,16,17,18,19);. 
1400: 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74   }.} {0 {}}.do_t
1410: 65 73 74 20 6d 69 73 63 31 2d 36 2e 33 20 7b 0a  est misc1-6.3 {.
1420: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1430: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34  SELECT * FROM t4
1440: 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20  .  }.} {1 2 3 4 
1450: 35 20 36 20 37 20 38 20 39 20 31 30 20 31 31 20  5 6 7 8 9 10 11 
1460: 31 32 20 31 33 20 31 34 20 31 35 20 31 36 20 31  12 13 14 15 16 1
1470: 37 20 31 38 20 31 39 7d 0a 64 6f 5f 74 65 73 74  7 18 19}.do_test
1480: 20 6d 69 73 63 31 2d 36 2e 34 20 7b 0a 20 20 65   misc1-6.4 {.  e
1490: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
14a0: 45 43 54 20 61 62 6f 72 74 2b 61 73 63 2c 6d 61  ECT abort+asc,ma
14b0: 78 28 6b 65 79 2c 70 72 61 67 6d 61 2c 74 65 6d  x(key,pragma,tem
14c0: 70 29 20 46 52 4f 4d 20 74 34 0a 20 20 7d 0a 7d  p) FROM t4.  }.}
14d0: 20 7b 33 20 31 37 7d 0a 20 20 20 20 20 0a 0a 66   {3 17}.     ..f
14e0: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.