/ Hex Artifact Content
Login

Artifact dff5b20ad989770aface6d714491121172dfe8b0:


0000: 23 20 32 30 30 39 20 4e 6f 76 20 31 31 0a 23 0a  # 2009 Nov 11.#.
0010: 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73  # The author dis
0020: 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74  claims copyright
0030: 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20   to this source 
0040: 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20  code.  In place 
0050: 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74  of.# a legal not
0060: 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62  ice, here is a b
0070: 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20  lessing:.#.#    
0080: 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20  May you do good 
0090: 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20  and not evil..# 
00a0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00b0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00c0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00d0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20  give others..#  
00e0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
00f0: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0100: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0110: 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a  ou give..#.#****
0120: 2a 2a 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 0a 23 0a 23 20 54 68 65 20 66 6f 63 75  ***.#.# The focu
0170: 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69  s of this file i
0180: 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 43 4c  s testing the CL
0190: 49 20 73 68 65 6c 6c 20 74 6f 6f 6c 2e 0a 23 0a  I shell tool..#.
01a0: 23 0a 0a 23 20 54 65 73 74 20 70 6c 61 6e 3a 0a  #..# Test plan:.
01b0: 23 0a 23 20 20 20 73 68 65 6c 6c 31 2d 31 2e 2a  #.#   shell1-1.*
01c0: 3a 20 42 61 73 69 63 20 63 6f 6d 6d 61 6e 64 20  : Basic command 
01d0: 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 68 61 6e 64  line option hand
01e0: 6c 69 6e 67 2e 0a 23 20 20 20 73 68 65 6c 6c 31  ling..#   shell1
01f0: 2d 32 2e 2a 3a 20 42 61 73 69 63 20 22 64 6f 74  -2.*: Basic "dot
0200: 22 20 63 6f 6d 6d 61 6e 64 20 74 6f 6b 65 6e 20  " command token 
0210: 70 61 72 73 69 6e 67 2e 0a 23 20 20 20 73 68 65  parsing..#   she
0220: 6c 6c 31 2d 33 2e 2a 3a 20 42 61 73 69 63 20 74  ll1-3.*: Basic t
0230: 65 73 74 20 74 68 61 74 20 22 64 6f 74 22 20 63  est that "dot" c
0240: 6f 6d 6d 61 6e 64 20 63 61 6e 20 62 65 20 63 61  ommand can be ca
0250: 6c 6c 65 64 2e 0a 23 0a 73 65 74 20 74 65 73 74  lled..#.set test
0260: 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  dir [file dirnam
0270: 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65  e $argv0].source
0280: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
0290: 2e 74 63 6c 0a 73 65 74 20 43 4c 49 20 5b 74 65  .tcl.set CLI [te
02a0: 73 74 5f 66 69 6e 64 5f 63 6c 69 5d 0a 64 62 20  st_find_cli].db 
02b0: 63 6c 6f 73 65 0a 66 6f 72 63 65 64 65 6c 65 74  close.forcedelet
02c0: 65 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64  e test.db test.d
02d0: 62 2d 6a 6f 75 72 6e 61 6c 20 74 65 73 74 2e 64  b-journal test.d
02e0: 62 2d 77 61 6c 0a 73 71 6c 69 74 65 33 20 64 62  b-wal.sqlite3 db
02f0: 20 74 65 73 74 2e 64 62 0a 0a 23 2d 2d 2d 2d 2d   test.db..#-----
0300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0340: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63  -------.# Test c
0350: 61 73 65 73 20 73 68 65 6c 6c 31 2d 31 2e 2a 3a  ases shell1-1.*:
0360: 20 42 61 73 69 63 20 63 6f 6d 6d 61 6e 64 20 6c   Basic command l
0370: 69 6e 65 20 6f 70 74 69 6f 6e 20 68 61 6e 64 6c  ine option handl
0380: 69 6e 67 2e 0a 23 0a 0a 23 20 69 6e 76 61 6c 69  ing..#..# invali
0390: 64 20 6f 70 74 69 6f 6e 0a 64 6f 5f 74 65 73 74  d option.do_test
03a0: 20 73 68 65 6c 6c 31 2d 31 2e 31 2e 31 20 7b 0a   shell1-1.1.1 {.
03b0: 20 20 73 65 74 20 72 65 73 20 5b 63 61 74 63 68    set res [catch
03c0: 63 6d 64 20 22 2d 62 61 64 20 74 65 73 74 2e 64  cmd "-bad test.d
03d0: 62 22 20 22 22 5d 0a 20 20 73 65 74 20 72 63 20  b" ""].  set rc 
03e0: 5b 6c 69 6e 64 65 78 20 24 72 65 73 20 30 5d 0a  [lindex $res 0].
03f0: 20 20 6c 69 73 74 20 24 72 63 20 5c 0a 20 20 20    list $rc \.   
0400: 20 20 20 20 5b 72 65 67 65 78 70 20 7b 45 72 72      [regexp {Err
0410: 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 6f 70 74 69  or: unknown opti
0420: 6f 6e 3a 20 2d 62 61 64 7d 20 24 72 65 73 5d 0a  on: -bad} $res].
0430: 7d 20 7b 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20  } {1 1}.do_test 
0440: 73 68 65 6c 6c 31 2d 31 2e 31 2e 31 62 20 7b 0a  shell1-1.1.1b {.
0450: 20 20 73 65 74 20 72 65 73 20 5b 63 61 74 63 68    set res [catch
0460: 63 6d 64 20 22 74 65 73 74 2e 64 62 20 2d 62 61  cmd "test.db -ba
0470: 64 22 20 22 22 5d 0a 20 20 73 65 74 20 72 63 20  d" ""].  set rc 
0480: 5b 6c 69 6e 64 65 78 20 24 72 65 73 20 30 5d 0a  [lindex $res 0].
0490: 20 20 6c 69 73 74 20 24 72 63 20 5c 0a 20 20 20    list $rc \.   
04a0: 20 20 20 20 5b 72 65 67 65 78 70 20 7b 45 72 72      [regexp {Err
04b0: 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 6f 70 74 69  or: unknown opti
04c0: 6f 6e 3a 20 2d 62 61 64 7d 20 24 72 65 73 5d 0a  on: -bad} $res].
04d0: 7d 20 7b 31 20 31 7d 0a 23 20 65 72 72 6f 72 20  } {1 1}.# error 
04e0: 6f 6e 20 65 78 74 72 61 20 6f 70 74 69 6f 6e 73  on extra options
04f0: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
0500: 31 2e 31 2e 32 20 7b 0a 20 20 63 61 74 63 68 63  1.1.2 {.  catchc
0510: 6d 64 20 22 74 65 73 74 2e 64 62 20 5c 22 73 65  md "test.db \"se
0520: 6c 65 63 74 2b 33 5c 22 20 5c 22 73 65 6c 65 63  lect+3\" \"selec
0530: 74 2b 34 5c 22 22 20 22 22 0a 7d 20 7b 30 20 7b  t+4\"" "".} {0 {
0540: 33 0a 34 7d 7d 0a 23 20 65 72 72 6f 72 20 6f 6e  3.4}}.# error on
0550: 20 65 78 74 72 61 20 6f 70 74 69 6f 6e 73 0a 64   extra options.d
0560: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 31 2e  o_test shell1-1.
0570: 31 2e 33 20 7b 0a 20 20 63 61 74 63 68 63 6d 64  1.3 {.  catchcmd
0580: 20 22 74 65 73 74 2e 64 62 20 46 4f 4f 20 74 65   "test.db FOO te
0590: 73 74 2e 64 62 20 42 41 44 22 20 22 2e 71 75 69  st.db BAD" ".qui
05a0: 74 22 0a 7d 20 7b 31 20 7b 45 72 72 6f 72 3a 20  t".} {1 {Error: 
05b0: 6e 65 61 72 20 22 46 4f 4f 22 3a 20 73 79 6e 74  near "FOO": synt
05c0: 61 78 20 65 72 72 6f 72 7d 7d 0a 0a 23 20 2d 68  ax error}}..# -h
05d0: 65 6c 70 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  elp.do_test shel
05e0: 6c 31 2d 31 2e 32 2e 31 20 7b 0a 20 20 73 65 74  l1-1.2.1 {.  set
05f0: 20 72 65 73 20 5b 63 61 74 63 68 63 6d 64 20 22   res [catchcmd "
0600: 2d 68 65 6c 70 20 74 65 73 74 2e 64 62 22 20 22  -help test.db" "
0610: 22 5d 0a 20 20 73 65 74 20 72 63 20 5b 6c 69 6e  "].  set rc [lin
0620: 64 65 78 20 24 72 65 73 20 30 5d 0a 20 20 6c 69  dex $res 0].  li
0630: 73 74 20 24 72 63 20 5c 0a 20 20 20 20 20 20 20  st $rc \.       
0640: 5b 72 65 67 65 78 70 20 7b 55 73 61 67 65 7d 20  [regexp {Usage} 
0650: 24 72 65 73 5d 20 5c 0a 20 20 20 20 20 20 20 5b  $res] \.       [
0660: 72 65 67 65 78 70 20 7b 5c 2d 69 6e 69 74 7d 20  regexp {\-init} 
0670: 24 72 65 73 5d 20 5c 0a 20 20 20 20 20 20 20 5b  $res] \.       [
0680: 72 65 67 65 78 70 20 7b 5c 2d 76 65 72 73 69 6f  regexp {\-versio
0690: 6e 7d 20 24 72 65 73 5d 0a 7d 20 7b 31 20 31 20  n} $res].} {1 1 
06a0: 31 20 31 7d 0a 0a 23 20 2d 69 6e 69 74 20 66 69  1 1}..# -init fi
06b0: 6c 65 6e 61 6d 65 20 20 20 20 20 20 20 72 65 61  lename       rea
06c0: 64 2f 70 72 6f 63 65 73 73 20 6e 61 6d 65 64 20  d/process named 
06d0: 66 69 6c 65 0a 64 6f 5f 74 65 73 74 20 73 68 65  file.do_test she
06e0: 6c 6c 31 2d 31 2e 33 2e 31 20 7b 0a 20 20 63 61  ll1-1.3.1 {.  ca
06f0: 74 63 68 63 6d 64 20 22 2d 69 6e 69 74 20 46 4f  tchcmd "-init FO
0700: 4f 20 74 65 73 74 2e 64 62 22 20 22 22 0a 7d 20  O test.db" "".} 
0710: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  {0 {}}.do_test s
0720: 68 65 6c 6c 31 2d 31 2e 33 2e 32 20 7b 0a 20 20  hell1-1.3.2 {.  
0730: 63 61 74 63 68 63 6d 64 20 22 2d 69 6e 69 74 20  catchcmd "-init 
0740: 46 4f 4f 20 74 65 73 74 2e 64 62 20 2e 71 75 69  FOO test.db .qui
0750: 74 20 42 41 44 22 20 22 22 0a 7d 20 7b 30 20 7b  t BAD" "".} {0 {
0760: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
0770: 31 2d 31 2e 33 2e 33 20 7b 0a 20 20 63 61 74 63  1-1.3.3 {.  catc
0780: 68 63 6d 64 20 22 2d 69 6e 69 74 20 46 4f 4f 20  hcmd "-init FOO 
0790: 74 65 73 74 2e 64 62 20 42 41 44 20 2e 71 75 69  test.db BAD .qui
07a0: 74 22 20 22 22 0a 7d 20 7b 31 20 7b 45 72 72 6f  t" "".} {1 {Erro
07b0: 72 3a 20 6e 65 61 72 20 22 42 41 44 22 3a 20 73  r: near "BAD": s
07c0: 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a 0a 23  yntax error}}..#
07d0: 20 2d 65 63 68 6f 20 20 20 20 20 20 20 20 20 20   -echo          
07e0: 20 20 20 20 20 20 70 72 69 6e 74 20 63 6f 6d 6d        print comm
07f0: 61 6e 64 73 20 62 65 66 6f 72 65 20 65 78 65 63  ands before exec
0800: 75 74 69 6f 6e 0a 64 6f 5f 74 65 73 74 20 73 68  ution.do_test sh
0810: 65 6c 6c 31 2d 31 2e 34 2e 31 20 7b 0a 20 20 63  ell1-1.4.1 {.  c
0820: 61 74 63 68 63 6d 64 20 22 2d 65 63 68 6f 20 74  atchcmd "-echo t
0830: 65 73 74 2e 64 62 22 20 22 22 20 0a 7d 20 7b 30  est.db" "" .} {0
0840: 20 7b 7d 7d 0a 0a 23 20 2d 5b 6e 6f 5d 68 65 61   {}}..# -[no]hea
0850: 64 65 72 20 20 20 20 20 20 20 20 20 20 74 75 72  der          tur
0860: 6e 20 68 65 61 64 65 72 73 20 6f 6e 20 6f 72 20  n headers on or 
0870: 6f 66 66 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  off.do_test shel
0880: 6c 31 2d 31 2e 35 2e 31 20 7b 0a 20 20 63 61 74  l1-1.5.1 {.  cat
0890: 63 68 63 6d 64 20 22 2d 68 65 61 64 65 72 20 74  chcmd "-header t
08a0: 65 73 74 2e 64 62 22 20 22 22 20 0a 7d 20 7b 30  est.db" "" .} {0
08b0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65   {}}.do_test she
08c0: 6c 6c 31 2d 31 2e 35 2e 32 20 7b 0a 20 20 63 61  ll1-1.5.2 {.  ca
08d0: 74 63 68 63 6d 64 20 22 2d 6e 6f 68 65 61 64 65  tchcmd "-noheade
08e0: 72 20 74 65 73 74 2e 64 62 22 20 22 22 20 0a 7d  r test.db" "" .}
08f0: 20 7b 30 20 7b 7d 7d 0a 0a 23 20 2d 62 61 69 6c   {0 {}}..# -bail
0900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0910: 73 74 6f 70 20 61 66 74 65 72 20 68 69 74 74 69  stop after hitti
0920: 6e 67 20 61 6e 20 65 72 72 6f 72 0a 64 6f 5f 74  ng an error.do_t
0930: 65 73 74 20 73 68 65 6c 6c 31 2d 31 2e 36 2e 31  est shell1-1.6.1
0940: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 2d   {.  catchcmd "-
0950: 62 61 69 6c 20 74 65 73 74 2e 64 62 22 20 22 22  bail test.db" ""
0960: 20 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20 2d 69   .} {0 {}}..# -i
0970: 6e 74 65 72 61 63 74 69 76 65 20 20 20 20 20 20  nteractive      
0980: 20 20 20 66 6f 72 63 65 20 69 6e 74 65 72 61 63     force interac
0990: 74 69 76 65 20 49 2f 4f 0a 64 6f 5f 74 65 73 74  tive I/O.do_test
09a0: 20 73 68 65 6c 6c 31 2d 31 2e 37 2e 31 20 7b 0a   shell1-1.7.1 {.
09b0: 20 20 73 65 74 20 72 65 73 20 5b 63 61 74 63 68    set res [catch
09c0: 63 6d 64 20 22 2d 69 6e 74 65 72 61 63 74 69 76  cmd "-interactiv
09d0: 65 20 74 65 73 74 2e 64 62 22 20 22 2e 71 75 69  e test.db" ".qui
09e0: 74 22 5d 0a 20 20 73 65 74 20 72 63 20 5b 6c 69  t"].  set rc [li
09f0: 6e 64 65 78 20 24 72 65 73 20 30 5d 0a 20 20 6c  ndex $res 0].  l
0a00: 69 73 74 20 24 72 63 20 5c 0a 20 20 20 20 20 20  ist $rc \.      
0a10: 20 5b 72 65 67 65 78 70 20 7b 53 51 4c 69 74 65   [regexp {SQLite
0a20: 20 76 65 72 73 69 6f 6e 7d 20 24 72 65 73 5d 20   version} $res] 
0a30: 5c 0a 20 20 20 20 20 20 20 5b 72 65 67 65 78 70  \.       [regexp
0a40: 20 7b 45 6e 74 65 72 20 22 2e 68 65 6c 70 22 20   {Enter ".help" 
0a50: 66 6f 72 20 75 73 61 67 65 20 68 69 6e 74 73 7d  for usage hints}
0a60: 20 24 72 65 73 5d 0a 7d 20 7b 30 20 31 20 31 7d   $res].} {0 1 1}
0a70: 0a 0a 23 20 2d 62 61 74 63 68 20 20 20 20 20 20  ..# -batch      
0a80: 20 20 20 20 20 20 20 20 20 66 6f 72 63 65 20 62           force b
0a90: 61 74 63 68 20 49 2f 4f 0a 64 6f 5f 74 65 73 74  atch I/O.do_test
0aa0: 20 73 68 65 6c 6c 31 2d 31 2e 38 2e 31 20 7b 0a   shell1-1.8.1 {.
0ab0: 20 20 63 61 74 63 68 63 6d 64 20 22 2d 62 61 74    catchcmd "-bat
0ac0: 63 68 20 74 65 73 74 2e 64 62 22 20 22 22 20 0a  ch test.db" "" .
0ad0: 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20 2d 63 6f 6c  } {0 {}}..# -col
0ae0: 75 6d 6e 20 20 20 20 20 20 20 20 20 20 20 20 20  umn             
0af0: 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64 65   set output mode
0b00: 20 74 6f 20 27 63 6f 6c 75 6d 6e 27 0a 64 6f 5f   to 'column'.do_
0b10: 74 65 73 74 20 73 68 65 6c 6c 31 2d 31 2e 39 2e  test shell1-1.9.
0b20: 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  1 {.  catchcmd "
0b30: 2d 63 6f 6c 75 6d 6e 20 74 65 73 74 2e 64 62 22  -column test.db"
0b40: 20 22 22 20 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23   "" .} {0 {}}..#
0b50: 20 2d 63 73 76 20 20 20 20 20 20 20 20 20 20 20   -csv           
0b60: 20 20 20 20 20 20 73 65 74 20 6f 75 74 70 75 74        set output
0b70: 20 6d 6f 64 65 20 74 6f 20 27 63 73 76 27 0a 64   mode to 'csv'.d
0b80: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 31 2e  o_test shell1-1.
0b90: 31 30 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d  10.1 {.  catchcm
0ba0: 64 20 22 2d 63 73 76 20 74 65 73 74 2e 64 62 22  d "-csv test.db"
0bb0: 20 22 22 20 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23   "" .} {0 {}}..#
0bc0: 20 2d 68 74 6d 6c 20 20 20 20 20 20 20 20 20 20   -html          
0bd0: 20 20 20 20 20 20 73 65 74 20 6f 75 74 70 75 74        set output
0be0: 20 6d 6f 64 65 20 74 6f 20 48 54 4d 4c 0a 64 6f   mode to HTML.do
0bf0: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 31 2e 31  _test shell1-1.1
0c00: 31 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64  1.1 {.  catchcmd
0c10: 20 22 2d 68 74 6d 6c 20 74 65 73 74 2e 64 62 22   "-html test.db"
0c20: 20 22 22 20 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23   "" .} {0 {}}..#
0c30: 20 2d 6c 69 6e 65 20 20 20 20 20 20 20 20 20 20   -line          
0c40: 20 20 20 20 20 20 73 65 74 20 6f 75 74 70 75 74        set output
0c50: 20 6d 6f 64 65 20 74 6f 20 27 6c 69 6e 65 27 0a   mode to 'line'.
0c60: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 31  do_test shell1-1
0c70: 2e 31 32 2e 31 20 7b 0a 20 20 63 61 74 63 68 63  .12.1 {.  catchc
0c80: 6d 64 20 22 2d 6c 69 6e 65 20 74 65 73 74 2e 64  md "-line test.d
0c90: 62 22 20 22 22 20 0a 7d 20 7b 30 20 7b 7d 7d 0a  b" "" .} {0 {}}.
0ca0: 0a 23 20 2d 6c 69 73 74 20 20 20 20 20 20 20 20  .# -list        
0cb0: 20 20 20 20 20 20 20 20 73 65 74 20 6f 75 74 70          set outp
0cc0: 75 74 20 6d 6f 64 65 20 74 6f 20 27 6c 69 73 74  ut mode to 'list
0cd0: 27 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  '.do_test shell1
0ce0: 2d 31 2e 31 33 2e 31 20 7b 0a 20 20 63 61 74 63  -1.13.1 {.  catc
0cf0: 68 63 6d 64 20 22 2d 6c 69 73 74 20 74 65 73 74  hcmd "-list test
0d00: 2e 64 62 22 20 22 22 20 0a 7d 20 7b 30 20 7b 7d  .db" "" .} {0 {}
0d10: 7d 0a 0a 23 20 2d 73 65 70 61 72 61 74 6f 72 20  }..# -separator 
0d20: 27 78 27 20 20 20 20 20 20 20 73 65 74 20 6f 75  'x'       set ou
0d30: 74 70 75 74 20 66 69 65 6c 64 20 73 65 70 61 72  tput field separ
0d40: 61 74 6f 72 20 28 7c 29 0a 64 6f 5f 74 65 73 74  ator (|).do_test
0d50: 20 73 68 65 6c 6c 31 2d 31 2e 31 34 2e 31 20 7b   shell1-1.14.1 {
0d60: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 2d 73 65  .  catchcmd "-se
0d70: 70 61 72 61 74 6f 72 20 27 78 27 20 74 65 73 74  parator 'x' test
0d80: 2e 64 62 22 20 22 22 20 0a 7d 20 7b 30 20 7b 7d  .db" "" .} {0 {}
0d90: 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  }.do_test shell1
0da0: 2d 31 2e 31 34 2e 32 20 7b 0a 20 20 63 61 74 63  -1.14.2 {.  catc
0db0: 68 63 6d 64 20 22 2d 73 65 70 61 72 61 74 6f 72  hcmd "-separator
0dc0: 20 78 20 74 65 73 74 2e 64 62 22 20 22 22 20 0a   x test.db" "" .
0dd0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
0de0: 20 73 68 65 6c 6c 31 2d 31 2e 31 34 2e 33 20 7b   shell1-1.14.3 {
0df0: 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61 74 63  .  set res [catc
0e00: 68 63 6d 64 20 22 2d 73 65 70 61 72 61 74 6f 72  hcmd "-separator
0e10: 22 20 22 22 5d 0a 20 20 73 65 74 20 72 63 20 5b  " ""].  set rc [
0e20: 6c 69 6e 64 65 78 20 24 72 65 73 20 30 5d 0a 20  lindex $res 0]. 
0e30: 20 6c 69 73 74 20 24 72 63 20 5c 0a 20 20 20 20   list $rc \.    
0e40: 20 20 20 5b 72 65 67 65 78 70 20 7b 45 72 72 6f     [regexp {Erro
0e50: 72 3a 20 6d 69 73 73 69 6e 67 20 61 72 67 75 6d  r: missing argum
0e60: 65 6e 74 20 74 6f 20 2d 73 65 70 61 72 61 74 6f  ent to -separato
0e70: 72 7d 20 24 72 65 73 5d 0a 7d 20 7b 31 20 31 7d  r} $res].} {1 1}
0e80: 0a 0a 23 20 2d 73 74 61 74 73 20 20 20 20 20 20  ..# -stats      
0e90: 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 20 6d           print m
0ea0: 65 6d 6f 72 79 20 73 74 61 74 73 20 62 65 66 6f  emory stats befo
0eb0: 72 65 20 65 61 63 68 20 66 69 6e 61 6c 69 7a 65  re each finalize
0ec0: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
0ed0: 31 2e 31 34 62 2e 31 20 7b 0a 20 20 63 61 74 63  1.14b.1 {.  catc
0ee0: 68 63 6d 64 20 22 2d 73 74 61 74 73 20 74 65 73  hcmd "-stats tes
0ef0: 74 2e 64 62 22 20 22 22 20 0a 7d 20 7b 30 20 7b  t.db" "" .} {0 {
0f00: 7d 7d 0a 0a 23 20 2d 6e 75 6c 6c 76 61 6c 75 65  }}..# -nullvalue
0f10: 20 27 74 65 78 74 27 20 20 20 20 73 65 74 20 74   'text'    set t
0f20: 65 78 74 20 73 74 72 69 6e 67 20 66 6f 72 20 4e  ext string for N
0f30: 55 4c 4c 20 76 61 6c 75 65 73 0a 64 6f 5f 74 65  ULL values.do_te
0f40: 73 74 20 73 68 65 6c 6c 31 2d 31 2e 31 35 2e 31  st shell1-1.15.1
0f50: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 2d   {.  catchcmd "-
0f60: 6e 75 6c 6c 76 61 6c 75 65 20 27 78 27 20 74 65  nullvalue 'x' te
0f70: 73 74 2e 64 62 22 20 22 22 0a 7d 20 7b 30 20 7b  st.db" "".} {0 {
0f80: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
0f90: 31 2d 31 2e 31 35 2e 32 20 7b 0a 20 20 63 61 74  1-1.15.2 {.  cat
0fa0: 63 68 63 6d 64 20 22 2d 6e 75 6c 6c 76 61 6c 75  chcmd "-nullvalu
0fb0: 65 20 78 20 74 65 73 74 2e 64 62 22 20 22 22 0a  e x test.db" "".
0fc0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
0fd0: 20 73 68 65 6c 6c 31 2d 31 2e 31 35 2e 33 20 7b   shell1-1.15.3 {
0fe0: 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61 74 63  .  set res [catc
0ff0: 68 63 6d 64 20 22 2d 6e 75 6c 6c 76 61 6c 75 65  hcmd "-nullvalue
1000: 22 20 22 22 5d 0a 20 20 73 65 74 20 72 63 20 5b  " ""].  set rc [
1010: 6c 69 6e 64 65 78 20 24 72 65 73 20 30 5d 0a 20  lindex $res 0]. 
1020: 20 6c 69 73 74 20 24 72 63 20 5c 0a 20 20 20 20   list $rc \.    
1030: 20 20 20 5b 72 65 67 65 78 70 20 7b 45 72 72 6f     [regexp {Erro
1040: 72 3a 20 6d 69 73 73 69 6e 67 20 61 72 67 75 6d  r: missing argum
1050: 65 6e 74 20 74 6f 20 2d 6e 75 6c 6c 76 61 6c 75  ent to -nullvalu
1060: 65 7d 20 24 72 65 73 5d 0a 7d 20 7b 31 20 31 7d  e} $res].} {1 1}
1070: 0a 0a 23 20 2d 76 65 72 73 69 6f 6e 20 20 20 20  ..# -version    
1080: 20 20 20 20 20 20 20 20 20 73 68 6f 77 20 53 51           show SQ
1090: 4c 69 74 65 20 76 65 72 73 69 6f 6e 0a 64 6f 5f  Lite version.do_
10a0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 31 2e 31 36  test shell1-1.16
10b0: 2e 31 20 7b 0a 20 20 73 65 74 20 78 20 5b 63 61  .1 {.  set x [ca
10c0: 74 63 68 63 6d 64 20 22 2d 76 65 72 73 69 6f 6e  tchcmd "-version
10d0: 20 74 65 73 74 2e 64 62 22 20 22 22 5d 0a 7d 20   test.db" ""].} 
10e0: 7b 2f 33 2e 5b 30 2d 39 2e 5d 2b 20 32 30 5c 64  {/3.[0-9.]+ 20\d
10f0: 5c 64 2d 5b 30 31 5d 5c 64 2d 5c 64 5c 64 20 5c  \d-[01]\d-\d\d \
1100: 64 5c 64 3a 5c 64 5c 64 3a 5c 64 5c 64 20 5b 30  d\d:\d\d:\d\d [0
1110: 2d 39 61 2d 66 5d 2b 2f 7d 0a 0a 23 2d 2d 2d 2d  -9a-f]+/}..#----
1120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1160: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20  --------.# Test 
1170: 63 61 73 65 73 20 73 68 65 6c 6c 31 2d 32 2e 2a  cases shell1-2.*
1180: 3a 20 42 61 73 69 63 20 22 64 6f 74 22 20 63 6f  : Basic "dot" co
1190: 6d 6d 61 6e 64 20 74 6f 6b 65 6e 20 70 61 72 73  mmand token pars
11a0: 69 6e 67 2e 0a 23 0a 0a 23 20 63 68 65 63 6b 20  ing..#..# check 
11b0: 66 69 72 73 74 20 74 6f 6b 65 6e 20 68 61 6e 64  first token hand
11c0: 6c 69 6e 67 0a 64 6f 5f 74 65 73 74 20 73 68 65  ling.do_test she
11d0: 6c 6c 31 2d 32 2e 31 2e 31 20 7b 0a 20 20 63 61  ll1-2.1.1 {.  ca
11e0: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
11f0: 20 22 2e 66 6f 6f 22 20 0a 7d 20 7b 31 20 7b 45   ".foo" .} {1 {E
1200: 72 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 63 6f  rror: unknown co
1210: 6d 6d 61 6e 64 20 6f 72 20 69 6e 76 61 6c 69 64  mmand or invalid
1220: 20 61 72 67 75 6d 65 6e 74 73 3a 20 20 22 66 6f   arguments:  "fo
1230: 6f 22 2e 20 45 6e 74 65 72 20 22 2e 68 65 6c 70  o". Enter ".help
1240: 22 20 66 6f 72 20 68 65 6c 70 7d 7d 0a 64 6f 5f  " for help}}.do_
1250: 74 65 73 74 20 73 68 65 6c 6c 31 2d 32 2e 31 2e  test shell1-2.1.
1260: 32 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  2 {.  catchcmd "
1270: 74 65 73 74 2e 64 62 22 20 22 2e 5c 22 66 6f 6f  test.db" ".\"foo
1280: 20 4f 46 46 5c 22 22 0a 7d 20 7b 31 20 7b 45 72   OFF\"".} {1 {Er
1290: 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d  ror: unknown com
12a0: 6d 61 6e 64 20 6f 72 20 69 6e 76 61 6c 69 64 20  mand or invalid 
12b0: 61 72 67 75 6d 65 6e 74 73 3a 20 20 22 66 6f 6f  arguments:  "foo
12c0: 20 4f 46 46 22 2e 20 45 6e 74 65 72 20 22 2e 68   OFF". Enter ".h
12d0: 65 6c 70 22 20 66 6f 72 20 68 65 6c 70 7d 7d 0a  elp" for help}}.
12e0: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 32  do_test shell1-2
12f0: 2e 31 2e 33 20 7b 0a 20 20 63 61 74 63 68 63 6d  .1.3 {.  catchcm
1300: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 5c 27  d "test.db" ".\'
1310: 66 6f 6f 20 4f 46 46 5c 27 22 0a 7d 20 7b 31 20  foo OFF\'".} {1 
1320: 7b 45 72 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20  {Error: unknown 
1330: 63 6f 6d 6d 61 6e 64 20 6f 72 20 69 6e 76 61 6c  command or inval
1340: 69 64 20 61 72 67 75 6d 65 6e 74 73 3a 20 20 22  id arguments:  "
1350: 66 6f 6f 20 4f 46 46 22 2e 20 45 6e 74 65 72 20  foo OFF". Enter 
1360: 22 2e 68 65 6c 70 22 20 66 6f 72 20 68 65 6c 70  ".help" for help
1370: 7d 7d 0a 0a 23 20 75 6e 62 61 6c 61 6e 63 65 64  }}..# unbalanced
1380: 20 71 75 6f 74 65 73 0a 64 6f 5f 74 65 73 74 20   quotes.do_test 
1390: 73 68 65 6c 6c 31 2d 32 2e 32 2e 31 20 7b 0a 20  shell1-2.2.1 {. 
13a0: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
13b0: 64 62 22 20 22 2e 5c 22 66 6f 6f 20 4f 46 46 22  db" ".\"foo OFF"
13c0: 0a 7d 20 7b 31 20 7b 45 72 72 6f 72 3a 20 75 6e  .} {1 {Error: un
13d0: 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64 20 6f 72  known command or
13e0: 20 69 6e 76 61 6c 69 64 20 61 72 67 75 6d 65 6e   invalid argumen
13f0: 74 73 3a 20 20 22 66 6f 6f 20 4f 46 46 22 2e 20  ts:  "foo OFF". 
1400: 45 6e 74 65 72 20 22 2e 68 65 6c 70 22 20 66 6f  Enter ".help" fo
1410: 72 20 68 65 6c 70 7d 7d 0a 64 6f 5f 74 65 73 74  r help}}.do_test
1420: 20 73 68 65 6c 6c 31 2d 32 2e 32 2e 32 20 7b 0a   shell1-2.2.2 {.
1430: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
1440: 2e 64 62 22 20 22 2e 5c 27 66 6f 6f 20 4f 46 46  .db" ".\'foo OFF
1450: 22 0a 7d 20 7b 31 20 7b 45 72 72 6f 72 3a 20 75  ".} {1 {Error: u
1460: 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64 20 6f  nknown command o
1470: 72 20 69 6e 76 61 6c 69 64 20 61 72 67 75 6d 65  r invalid argume
1480: 6e 74 73 3a 20 20 22 66 6f 6f 20 4f 46 46 22 2e  nts:  "foo OFF".
1490: 20 45 6e 74 65 72 20 22 2e 68 65 6c 70 22 20 66   Enter ".help" f
14a0: 6f 72 20 68 65 6c 70 7d 7d 0a 64 6f 5f 74 65 73  or help}}.do_tes
14b0: 74 20 73 68 65 6c 6c 31 2d 32 2e 32 2e 33 20 7b  t shell1-2.2.3 {
14c0: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
14d0: 74 2e 64 62 22 20 22 2e 65 78 70 6c 61 69 6e 20  t.db" ".explain 
14e0: 5c 22 4f 46 46 22 0a 7d 20 7b 30 20 7b 7d 7d 0a  \"OFF".} {0 {}}.
14f0: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 32  do_test shell1-2
1500: 2e 32 2e 34 20 7b 0a 20 20 63 61 74 63 68 63 6d  .2.4 {.  catchcm
1510: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 65 78  d "test.db" ".ex
1520: 70 6c 61 69 6e 20 5c 27 4f 46 46 22 0a 7d 20 7b  plain \'OFF".} {
1530: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  0 {}}.do_test sh
1540: 65 6c 6c 31 2d 32 2e 32 2e 35 20 7b 0a 20 20 63  ell1-2.2.5 {.  c
1550: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
1560: 22 20 22 2e 6d 6f 64 65 20 5c 22 69 6e 73 65 72  " ".mode \"inser
1570: 74 20 46 4f 4f 22 0a 7d 20 7b 31 20 7b 45 72 72  t FOO".} {1 {Err
1580: 6f 72 3a 20 6d 6f 64 65 20 73 68 6f 75 6c 64 20  or: mode should 
1590: 62 65 20 6f 6e 65 20 6f 66 3a 20 61 73 63 69 69  be one of: ascii
15a0: 20 63 6f 6c 75 6d 6e 20 63 73 76 20 68 74 6d 6c   column csv html
15b0: 20 69 6e 73 65 72 74 20 6c 69 6e 65 20 6c 69 73   insert line lis
15c0: 74 20 74 61 62 73 20 74 63 6c 7d 7d 0a 64 6f 5f  t tabs tcl}}.do_
15d0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 32 2e 32 2e  test shell1-2.2.
15e0: 36 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  6 {.  catchcmd "
15f0: 74 65 73 74 2e 64 62 22 20 22 2e 6d 6f 64 65 20  test.db" ".mode 
1600: 5c 27 69 6e 73 65 72 74 20 46 4f 4f 22 0a 7d 20  \'insert FOO".} 
1610: 7b 31 20 7b 45 72 72 6f 72 3a 20 6d 6f 64 65 20  {1 {Error: mode 
1620: 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66  should be one of
1630: 3a 20 61 73 63 69 69 20 63 6f 6c 75 6d 6e 20 63  : ascii column c
1640: 73 76 20 68 74 6d 6c 20 69 6e 73 65 72 74 20 6c  sv html insert l
1650: 69 6e 65 20 6c 69 73 74 20 74 61 62 73 20 74 63  ine list tabs tc
1660: 6c 7d 7d 0a 0a 23 20 63 68 65 63 6b 20 6d 75 6c  l}}..# check mul
1670: 74 69 70 6c 65 20 74 6f 6b 65 6e 73 2c 20 61 6e  tiple tokens, an
1680: 64 20 71 75 6f 74 65 64 20 74 6f 6b 65 6e 73 0a  d quoted tokens.
1690: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 32  do_test shell1-2
16a0: 2e 33 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d  .3.1 {.  catchcm
16b0: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 65 78  d "test.db" ".ex
16c0: 70 6c 61 69 6e 20 31 22 0a 7d 20 7b 30 20 7b 7d  plain 1".} {0 {}
16d0: 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  }.do_test shell1
16e0: 2d 32 2e 33 2e 32 20 7b 0a 20 20 63 61 74 63 68  -2.3.2 {.  catch
16f0: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
1700: 65 78 70 6c 61 69 6e 20 6f 6e 22 0a 7d 20 7b 30  explain on".} {0
1710: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65   {}}.do_test she
1720: 6c 6c 31 2d 32 2e 33 2e 33 20 7b 0a 20 20 63 61  ll1-2.3.3 {.  ca
1730: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
1740: 20 22 2e 65 78 70 6c 61 69 6e 20 5c 22 31 20 32   ".explain \"1 2
1750: 20 33 5c 22 22 0a 7d 20 7b 31 20 7b 45 52 52 4f   3\"".} {1 {ERRO
1760: 52 3a 20 4e 6f 74 20 61 20 62 6f 6f 6c 65 61 6e  R: Not a boolean
1770: 20 76 61 6c 75 65 3a 20 22 31 20 32 20 33 22 2e   value: "1 2 3".
1780: 20 41 73 73 75 6d 69 6e 67 20 22 6e 6f 22 2e 7d   Assuming "no".}
1790: 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  }.do_test shell1
17a0: 2d 32 2e 33 2e 34 20 7b 0a 20 20 63 61 74 63 68  -2.3.4 {.  catch
17b0: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
17c0: 65 78 70 6c 61 69 6e 20 5c 22 4f 46 46 5c 22 22  explain \"OFF\""
17d0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
17e0: 74 20 73 68 65 6c 6c 31 2d 32 2e 33 2e 35 20 7b  t shell1-2.3.5 {
17f0: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
1800: 74 2e 64 62 22 20 22 2e 5c 27 65 78 70 6c 61 69  t.db" ".\'explai
1810: 6e 5c 27 20 5c 27 4f 46 46 5c 27 22 0a 7d 20 7b  n\' \'OFF\'".} {
1820: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  0 {}}.do_test sh
1830: 65 6c 6c 31 2d 32 2e 33 2e 36 20 7b 0a 20 20 63  ell1-2.3.6 {.  c
1840: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
1850: 22 20 22 2e 65 78 70 6c 61 69 6e 20 5c 27 4f 46  " ".explain \'OF
1860: 46 5c 27 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  F\'".} {0 {}}.do
1870: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 32 2e 33  _test shell1-2.3
1880: 2e 37 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .7 {.  catchcmd 
1890: 22 74 65 73 74 2e 64 62 22 20 22 2e 5c 27 65 78  "test.db" ".\'ex
18a0: 70 6c 61 69 6e 5c 27 20 5c 27 4f 46 46 5c 27 22  plain\' \'OFF\'"
18b0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20 63 68 65  .} {0 {}}..# che
18c0: 63 6b 20 71 75 6f 74 65 64 20 61 72 67 73 20 61  ck quoted args a
18d0: 72 65 20 75 6e 71 75 6f 74 65 64 0a 64 6f 5f 74  re unquoted.do_t
18e0: 65 73 74 20 73 68 65 6c 6c 31 2d 32 2e 34 2e 31  est shell1-2.4.1
18f0: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
1900: 65 73 74 2e 64 62 22 20 22 2e 6d 6f 64 65 20 46  est.db" ".mode F
1910: 4f 4f 22 0a 7d 20 7b 31 20 7b 45 72 72 6f 72 3a  OO".} {1 {Error:
1920: 20 6d 6f 64 65 20 73 68 6f 75 6c 64 20 62 65 20   mode should be 
1930: 6f 6e 65 20 6f 66 3a 20 61 73 63 69 69 20 63 6f  one of: ascii co
1940: 6c 75 6d 6e 20 63 73 76 20 68 74 6d 6c 20 69 6e  lumn csv html in
1950: 73 65 72 74 20 6c 69 6e 65 20 6c 69 73 74 20 74  sert line list t
1960: 61 62 73 20 74 63 6c 7d 7d 0a 64 6f 5f 74 65 73  abs tcl}}.do_tes
1970: 74 20 73 68 65 6c 6c 31 2d 32 2e 34 2e 32 20 7b  t shell1-2.4.2 {
1980: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
1990: 74 2e 64 62 22 20 22 2e 6d 6f 64 65 20 63 73 76  t.db" ".mode csv
19a0: 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  ".} {0 {}}.do_te
19b0: 73 74 20 73 68 65 6c 6c 31 2d 32 2e 34 2e 32 20  st shell1-2.4.2 
19c0: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
19d0: 73 74 2e 64 62 22 20 22 2e 6d 6f 64 65 20 5c 22  st.db" ".mode \"
19e0: 63 73 76 5c 22 22 0a 7d 20 7b 30 20 7b 7d 7d 0a  csv\"".} {0 {}}.
19f0: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
1a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
1a40: 23 20 54 65 73 74 20 63 61 73 65 73 20 73 68 65  # Test cases she
1a50: 6c 6c 31 2d 33 2e 2a 3a 20 42 61 73 69 63 20 74  ll1-3.*: Basic t
1a60: 65 73 74 20 74 68 61 74 20 22 64 6f 74 22 20 63  est that "dot" c
1a70: 6f 6d 6d 61 6e 64 20 63 61 6e 20 62 65 20 63 61  ommand can be ca
1a80: 6c 6c 65 64 2e 0a 23 0a 0a 23 20 2e 62 61 63 6b  lled..#..# .back
1a90: 75 70 20 3f 44 42 3f 20 46 49 4c 45 20 20 20 20  up ?DB? FILE    
1aa0: 20 20 42 61 63 6b 75 70 20 44 42 20 28 64 65 66    Backup DB (def
1ab0: 61 75 6c 74 20 22 6d 61 69 6e 22 29 20 74 6f 20  ault "main") to 
1ac0: 46 49 4c 45 0a 64 6f 5f 74 65 73 74 20 73 68 65  FILE.do_test she
1ad0: 6c 6c 31 2d 33 2e 31 2e 31 20 7b 0a 20 20 63 61  ll1-3.1.1 {.  ca
1ae0: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
1af0: 20 22 2e 62 61 63 6b 75 70 22 0a 7d 20 7b 31 20   ".backup".} {1 
1b00: 7b 6d 69 73 73 69 6e 67 20 46 49 4c 45 4e 41 4d  {missing FILENAM
1b10: 45 20 61 72 67 75 6d 65 6e 74 20 6f 6e 20 2e 62  E argument on .b
1b20: 61 63 6b 75 70 7d 7d 0a 64 6f 5f 74 65 73 74 20  ackup}}.do_test 
1b30: 73 68 65 6c 6c 31 2d 33 2e 31 2e 32 20 7b 0a 20  shell1-3.1.2 {. 
1b40: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
1b50: 64 62 22 20 22 2e 62 61 63 6b 75 70 20 46 4f 4f  db" ".backup FOO
1b60: 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  ".} {0 {}}.do_te
1b70: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 2e 33 20  st shell1-3.1.3 
1b80: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
1b90: 73 74 2e 64 62 22 20 22 2e 62 61 63 6b 75 70 20  st.db" ".backup 
1ba0: 46 4f 4f 20 42 41 52 22 0a 7d 20 7b 31 20 7b 45  FOO BAR".} {1 {E
1bb0: 72 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 64 61  rror: unknown da
1bc0: 74 61 62 61 73 65 20 46 4f 4f 7d 7d 0a 64 6f 5f  tabase FOO}}.do_
1bd0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 2e  test shell1-3.1.
1be0: 34 20 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e 79  4 {.  # too many
1bf0: 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 63 61 74   arguments.  cat
1c00: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
1c10: 22 2e 62 61 63 6b 75 70 20 46 4f 4f 20 42 41 52  ".backup FOO BAR
1c20: 20 42 41 44 22 0a 7d 20 7b 31 20 7b 74 6f 6f 20   BAD".} {1 {too 
1c30: 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73 20 74  many arguments t
1c40: 6f 20 2e 62 61 63 6b 75 70 7d 7d 0a 0a 23 20 2e  o .backup}}..# .
1c50: 62 61 69 6c 20 4f 4e 7c 4f 46 46 20 20 20 20 20  bail ON|OFF     
1c60: 20 20 20 20 20 20 53 74 6f 70 20 61 66 74 65 72        Stop after
1c70: 20 68 69 74 74 69 6e 67 20 61 6e 20 65 72 72 6f   hitting an erro
1c80: 72 2e 20 20 44 65 66 61 75 6c 74 20 4f 46 46 0a  r.  Default OFF.
1c90: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33  do_test shell1-3
1ca0: 2e 32 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d  .2.1 {.  catchcm
1cb0: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 62 61  d "test.db" ".ba
1cc0: 69 6c 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a  il".} {1 {Usage:
1cd0: 20 2e 62 61 69 6c 20 6f 6e 7c 6f 66 66 7d 7d 0a   .bail on|off}}.
1ce0: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33  do_test shell1-3
1cf0: 2e 32 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d  .2.2 {.  catchcm
1d00: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 62 61  d "test.db" ".ba
1d10: 69 6c 20 4f 4e 22 0a 7d 20 7b 30 20 7b 7d 7d 0a  il ON".} {0 {}}.
1d20: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33  do_test shell1-3
1d30: 2e 32 2e 33 20 7b 0a 20 20 63 61 74 63 68 63 6d  .2.3 {.  catchcm
1d40: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 62 61  d "test.db" ".ba
1d50: 69 6c 20 4f 46 46 22 0a 7d 20 7b 30 20 7b 7d 7d  il OFF".} {0 {}}
1d60: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
1d70: 33 2e 32 2e 34 20 7b 0a 20 20 23 20 74 6f 6f 20  3.2.4 {.  # too 
1d80: 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73 0a 20  many arguments. 
1d90: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
1da0: 64 62 22 20 22 2e 62 61 69 6c 20 4f 46 46 20 42  db" ".bail OFF B
1db0: 41 44 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a  AD".} {1 {Usage:
1dc0: 20 2e 62 61 69 6c 20 6f 6e 7c 6f 66 66 7d 7d 0a   .bail on|off}}.
1dd0: 0a 23 20 2e 64 61 74 61 62 61 73 65 73 20 20 20  .# .databases   
1de0: 20 20 20 20 20 20 20 20 20 20 4c 69 73 74 20 6e            List n
1df0: 61 6d 65 73 20 61 6e 64 20 66 69 6c 65 73 20 6f  ames and files o
1e00: 66 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  f attached datab
1e10: 61 73 65 73 0a 64 6f 5f 74 65 73 74 20 73 68 65  ases.do_test she
1e20: 6c 6c 31 2d 33 2e 33 2e 31 20 7b 0a 20 20 63 61  ll1-3.3.1 {.  ca
1e30: 74 63 68 63 6d 64 20 22 2d 63 73 76 20 74 65 73  tchcmd "-csv tes
1e40: 74 2e 64 62 22 20 22 2e 64 61 74 61 62 61 73 65  t.db" ".database
1e50: 73 22 0a 7d 20 22 2f 30 2e 2b 6d 61 69 6e 2e 2b  s".} "/0.+main.+
1e60: 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 2f 20 22  [string map {/ "
1e70: 2e 7b 31 2c 32 7d 22 7d 20 5b 73 74 72 69 6e 67  .{1,2}"} [string
1e80: 20 72 61 6e 67 65 20 5b 67 65 74 5f 70 77 64 5d   range [get_pwd]
1e90: 20 30 20 31 30 5d 5d 2e 2a 2f 22 0a 64 6f 5f 74   0 10]].*/".do_t
1ea0: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 33 2e 32  est shell1-3.3.2
1eb0: 20 7b 0a 20 20 23 20 65 78 74 72 61 20 61 72 67   {.  # extra arg
1ec0: 75 6d 65 6e 74 73 20 69 67 6e 6f 72 65 64 0a 20  uments ignored. 
1ed0: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
1ee0: 64 62 22 20 22 2e 64 61 74 61 62 61 73 65 73 20  db" ".databases 
1ef0: 42 41 44 22 0a 7d 20 22 2f 30 2e 2b 6d 61 69 6e  BAD".} "/0.+main
1f00: 2e 2b 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 2f  .+[string map {/
1f10: 20 22 2e 7b 31 2c 32 7d 22 7d 20 5b 73 74 72 69   ".{1,2}"} [stri
1f20: 6e 67 20 72 61 6e 67 65 20 5b 67 65 74 5f 70 77  ng range [get_pw
1f30: 64 5d 20 30 20 31 30 5d 5d 2e 2a 2f 22 0a 0a 23  d] 0 10]].*/"..#
1f40: 20 2e 64 75 6d 70 20 3f 54 41 42 4c 45 3f 20 2e   .dump ?TABLE? .
1f50: 2e 2e 20 20 20 20 20 20 44 75 6d 70 20 74 68 65  ..      Dump the
1f60: 20 64 61 74 61 62 61 73 65 20 69 6e 20 61 6e 20   database in an 
1f70: 53 51 4c 20 74 65 78 74 20 66 6f 72 6d 61 74 0a  SQL text format.
1f80: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
1f90: 20 20 20 20 20 20 20 20 20 20 20 49 66 20 54 41             If TA
1fa0: 42 4c 45 20 73 70 65 63 69 66 69 65 64 2c 20 6f  BLE specified, o
1fb0: 6e 6c 79 20 64 75 6d 70 20 74 61 62 6c 65 73 20  nly dump tables 
1fc0: 6d 61 74 63 68 69 6e 67 0a 23 20 20 20 20 20 20  matching.#      
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe0: 20 20 20 20 4c 49 4b 45 20 70 61 74 74 65 72 6e      LIKE pattern
1ff0: 20 54 41 42 4c 45 2e 0a 64 6f 5f 74 65 73 74 20   TABLE..do_test 
2000: 73 68 65 6c 6c 31 2d 33 2e 34 2e 31 20 7b 0a 20  shell1-3.4.1 {. 
2010: 20 73 65 74 20 72 65 73 20 5b 63 61 74 63 68 63   set res [catchc
2020: 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 64  md "test.db" ".d
2030: 75 6d 70 22 5d 0a 20 20 6c 69 73 74 20 5b 72 65  ump"].  list [re
2040: 67 65 78 70 20 7b 42 45 47 49 4e 20 54 52 41 4e  gexp {BEGIN TRAN
2050: 53 41 43 54 49 4f 4e 3b 7d 20 24 72 65 73 5d 20  SACTION;} $res] 
2060: 5c 0a 20 20 20 20 20 20 20 5b 72 65 67 65 78 70  \.       [regexp
2070: 20 7b 43 4f 4d 4d 49 54 3b 7d 20 24 72 65 73 5d   {COMMIT;} $res]
2080: 0a 7d 20 7b 31 20 31 7d 0a 64 6f 5f 74 65 73 74  .} {1 1}.do_test
2090: 20 73 68 65 6c 6c 31 2d 33 2e 34 2e 32 20 7b 0a   shell1-3.4.2 {.
20a0: 20 20 73 65 74 20 72 65 73 20 5b 63 61 74 63 68    set res [catch
20b0: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
20c0: 64 75 6d 70 20 46 4f 4f 22 5d 0a 20 20 6c 69 73  dump FOO"].  lis
20d0: 74 20 5b 72 65 67 65 78 70 20 7b 42 45 47 49 4e  t [regexp {BEGIN
20e0: 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 7d 20 24   TRANSACTION;} $
20f0: 72 65 73 5d 20 5c 0a 20 20 20 20 20 20 20 5b 72  res] \.       [r
2100: 65 67 65 78 70 20 7b 43 4f 4d 4d 49 54 3b 7d 20  egexp {COMMIT;} 
2110: 24 72 65 73 5d 0a 7d 20 7b 31 20 31 7d 0a 64 6f  $res].} {1 1}.do
2120: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 34  _test shell1-3.4
2130: 2e 33 20 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e  .3 {.  # too man
2140: 79 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 63 61  y arguments.  ca
2150: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
2160: 20 22 2e 64 75 6d 70 20 46 4f 4f 20 42 41 44 22   ".dump FOO BAD"
2170: 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 64  .} {1 {Usage: .d
2180: 75 6d 70 20 3f 4c 49 4b 45 2d 50 41 54 54 45 52  ump ?LIKE-PATTER
2190: 4e 3f 7d 7d 0a 0a 23 20 2e 65 63 68 6f 20 4f 4e  N?}}..# .echo ON
21a0: 7c 4f 46 46 20 20 20 20 20 20 20 20 20 20 20 54  |OFF           T
21b0: 75 72 6e 20 63 6f 6d 6d 61 6e 64 20 65 63 68 6f  urn command echo
21c0: 20 6f 6e 20 6f 72 20 6f 66 66 0a 64 6f 5f 74 65   on or off.do_te
21d0: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 35 2e 31 20  st shell1-3.5.1 
21e0: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
21f0: 73 74 2e 64 62 22 20 22 2e 65 63 68 6f 22 0a 7d  st.db" ".echo".}
2200: 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 65 63 68   {1 {Usage: .ech
2210: 6f 20 6f 6e 7c 6f 66 66 7d 7d 0a 64 6f 5f 74 65  o on|off}}.do_te
2220: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 35 2e 32 20  st shell1-3.5.2 
2230: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
2240: 73 74 2e 64 62 22 20 22 2e 65 63 68 6f 20 4f 4e  st.db" ".echo ON
2250: 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  ".} {0 {}}.do_te
2260: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 35 2e 33 20  st shell1-3.5.3 
2270: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
2280: 73 74 2e 64 62 22 20 22 2e 65 63 68 6f 20 4f 46  st.db" ".echo OF
2290: 46 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  F".} {0 {}}.do_t
22a0: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 35 2e 34  est shell1-3.5.4
22b0: 20 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e 79 20   {.  # too many 
22c0: 61 72 67 75 6d 65 6e 74 73 0a 20 20 63 61 74 63  arguments.  catc
22d0: 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22  hcmd "test.db" "
22e0: 2e 65 63 68 6f 20 4f 46 46 20 42 41 44 22 0a 7d  .echo OFF BAD".}
22f0: 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 65 63 68   {1 {Usage: .ech
2300: 6f 20 6f 6e 7c 6f 66 66 7d 7d 0a 0a 23 20 2e 65  o on|off}}..# .e
2310: 78 69 74 20 20 20 20 20 20 20 20 20 20 20 20 20  xit             
2320: 20 20 20 20 20 45 78 69 74 20 74 68 69 73 20 70       Exit this p
2330: 72 6f 67 72 61 6d 0a 64 6f 5f 74 65 73 74 20 73  rogram.do_test s
2340: 68 65 6c 6c 31 2d 33 2e 36 2e 31 20 7b 0a 20 20  hell1-3.6.1 {.  
2350: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
2360: 62 22 20 22 2e 65 78 69 74 22 0a 7d 20 7b 30 20  b" ".exit".} {0 
2370: 7b 7d 7d 0a 0a 23 20 2e 65 78 70 6c 61 69 6e 20  {}}..# .explain 
2380: 4f 4e 7c 4f 46 46 20 20 20 20 20 20 20 20 54 75  ON|OFF        Tu
2390: 72 6e 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 73  rn output mode s
23a0: 75 69 74 61 62 6c 65 20 66 6f 72 20 45 58 50 4c  uitable for EXPL
23b0: 41 49 4e 20 6f 6e 20 6f 72 20 6f 66 66 2e 0a 64  AIN on or off..d
23c0: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e  o_test shell1-3.
23d0: 37 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64  7.1 {.  catchcmd
23e0: 20 22 74 65 73 74 2e 64 62 22 20 22 2e 65 78 70   "test.db" ".exp
23f0: 6c 61 69 6e 22 0a 20 20 23 20 65 78 70 6c 61 69  lain".  # explai
2400: 6e 20 69 73 20 74 68 65 20 65 78 63 65 70 74 69  n is the excepti
2410: 6f 6e 20 74 6f 20 74 68 65 20 62 6f 6f 6c 65 61  on to the boolea
2420: 6e 73 2e 20 20 77 69 74 68 6f 75 74 20 61 6e 20  ns.  without an 
2430: 6f 70 74 69 6f 6e 2c 20 69 74 20 74 75 72 6e 73  option, it turns
2440: 20 69 74 20 6f 6e 2e 0a 7d 20 7b 30 20 7b 7d 7d   it on..} {0 {}}
2450: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
2460: 33 2e 37 2e 32 20 7b 0a 20 20 63 61 74 63 68 63  3.7.2 {.  catchc
2470: 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 65  md "test.db" ".e
2480: 78 70 6c 61 69 6e 20 4f 4e 22 0a 7d 20 7b 30 20  xplain ON".} {0 
2490: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  {}}.do_test shel
24a0: 6c 31 2d 33 2e 37 2e 33 20 7b 0a 20 20 63 61 74  l1-3.7.3 {.  cat
24b0: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
24c0: 22 2e 65 78 70 6c 61 69 6e 20 4f 46 46 22 0a 7d  ".explain OFF".}
24d0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
24e0: 73 68 65 6c 6c 31 2d 33 2e 37 2e 34 20 7b 0a 20  shell1-3.7.4 {. 
24f0: 20 23 20 65 78 74 72 61 20 61 72 67 75 6d 65 6e   # extra argumen
2500: 74 73 20 69 67 6e 6f 72 65 64 0a 20 20 63 61 74  ts ignored.  cat
2510: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
2520: 22 2e 65 78 70 6c 61 69 6e 20 4f 46 46 20 42 41  ".explain OFF BA
2530: 44 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 0a 23 20  D".} {0 {}}...# 
2540: 2e 68 65 61 64 65 72 28 73 29 20 4f 4e 7c 4f 46  .header(s) ON|OF
2550: 46 20 20 20 20 20 20 54 75 72 6e 20 64 69 73 70  F      Turn disp
2560: 6c 61 79 20 6f 66 20 68 65 61 64 65 72 73 20 6f  lay of headers o
2570: 6e 20 6f 72 20 6f 66 66 0a 64 6f 5f 74 65 73 74  n or off.do_test
2580: 20 73 68 65 6c 6c 31 2d 33 2e 39 2e 31 20 7b 0a   shell1-3.9.1 {.
2590: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
25a0: 2e 64 62 22 20 22 2e 68 65 61 64 65 72 22 0a 7d  .db" ".header".}
25b0: 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 68 65 61   {1 {Usage: .hea
25c0: 64 65 72 73 20 6f 6e 7c 6f 66 66 7d 7d 0a 64 6f  ders on|off}}.do
25d0: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 39  _test shell1-3.9
25e0: 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .2 {.  catchcmd 
25f0: 22 74 65 73 74 2e 64 62 22 20 22 2e 68 65 61 64  "test.db" ".head
2600: 65 72 20 4f 4e 22 0a 7d 20 7b 30 20 7b 7d 7d 0a  er ON".} {0 {}}.
2610: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33  do_test shell1-3
2620: 2e 39 2e 33 20 7b 0a 20 20 63 61 74 63 68 63 6d  .9.3 {.  catchcm
2630: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 68 65  d "test.db" ".he
2640: 61 64 65 72 20 4f 46 46 22 0a 7d 20 7b 30 20 7b  ader OFF".} {0 {
2650: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
2660: 31 2d 33 2e 39 2e 34 20 7b 0a 20 20 23 20 74 6f  1-3.9.4 {.  # to
2670: 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73  o many arguments
2680: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
2690: 74 2e 64 62 22 20 22 2e 68 65 61 64 65 72 20 4f  t.db" ".header O
26a0: 46 46 20 42 41 44 22 0a 7d 20 7b 31 20 7b 55 73  FF BAD".} {1 {Us
26b0: 61 67 65 3a 20 2e 68 65 61 64 65 72 73 20 6f 6e  age: .headers on
26c0: 7c 6f 66 66 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20  |off}}..do_test 
26d0: 73 68 65 6c 6c 31 2d 33 2e 39 2e 35 20 7b 0a 20  shell1-3.9.5 {. 
26e0: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
26f0: 64 62 22 20 22 2e 68 65 61 64 65 72 73 22 0a 7d  db" ".headers".}
2700: 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 68 65 61   {1 {Usage: .hea
2710: 64 65 72 73 20 6f 6e 7c 6f 66 66 7d 7d 0a 64 6f  ders on|off}}.do
2720: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 39  _test shell1-3.9
2730: 2e 36 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .6 {.  catchcmd 
2740: 22 74 65 73 74 2e 64 62 22 20 22 2e 68 65 61 64  "test.db" ".head
2750: 65 72 73 20 4f 4e 22 0a 7d 20 7b 30 20 7b 7d 7d  ers ON".} {0 {}}
2760: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
2770: 33 2e 39 2e 37 20 7b 0a 20 20 63 61 74 63 68 63  3.9.7 {.  catchc
2780: 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 68  md "test.db" ".h
2790: 65 61 64 65 72 73 20 4f 46 46 22 0a 7d 20 7b 30  eaders OFF".} {0
27a0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65   {}}.do_test she
27b0: 6c 6c 31 2d 33 2e 39 2e 38 20 7b 0a 20 20 23 20  ll1-3.9.8 {.  # 
27c0: 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e  too many argumen
27d0: 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74  ts.  catchcmd "t
27e0: 65 73 74 2e 64 62 22 20 22 2e 68 65 61 64 65 72  est.db" ".header
27f0: 73 20 4f 46 46 20 42 41 44 22 0a 7d 20 7b 31 20  s OFF BAD".} {1 
2800: 7b 55 73 61 67 65 3a 20 2e 68 65 61 64 65 72 73  {Usage: .headers
2810: 20 6f 6e 7c 6f 66 66 7d 7d 0a 0a 23 20 2e 68 65   on|off}}..# .he
2820: 6c 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  lp              
2830: 20 20 20 20 53 68 6f 77 20 74 68 69 73 20 6d 65      Show this me
2840: 73 73 61 67 65 0a 64 6f 5f 74 65 73 74 20 73 68  ssage.do_test sh
2850: 65 6c 6c 31 2d 33 2e 31 30 2e 31 20 7b 0a 20 20  ell1-3.10.1 {.  
2860: 73 65 74 20 72 65 73 20 5b 63 61 74 63 68 63 6d  set res [catchcm
2870: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 68 65  d "test.db" ".he
2880: 6c 70 22 5d 0a 20 20 23 20 6c 6f 6f 6b 20 66 6f  lp"].  # look fo
2890: 72 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 70  r a few of the p
28a0: 6f 73 73 69 62 6c 65 20 68 65 6c 70 20 63 6f 6d  ossible help com
28b0: 6d 61 6e 64 73 0a 20 20 6c 69 73 74 20 5b 72 65  mands.  list [re
28c0: 67 65 78 70 20 7b 2e 68 65 6c 70 7d 20 24 72 65  gexp {.help} $re
28d0: 73 5d 20 5c 0a 20 20 20 20 20 20 20 5b 72 65 67  s] \.       [reg
28e0: 65 78 70 20 7b 2e 71 75 69 74 7d 20 24 72 65 73  exp {.quit} $res
28f0: 5d 20 5c 0a 20 20 20 20 20 20 20 5b 72 65 67 65  ] \.       [rege
2900: 78 70 20 7b 2e 73 68 6f 77 7d 20 24 72 65 73 5d  xp {.show} $res]
2910: 0a 7d 20 7b 31 20 31 20 31 7d 0a 64 6f 5f 74 65  .} {1 1 1}.do_te
2920: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 30 2e 32  st shell1-3.10.2
2930: 20 7b 0a 20 20 23 20 77 65 20 61 6c 6c 6f 77 20   {.  # we allow 
2940: 2e 68 65 6c 70 20 74 6f 20 74 61 6b 65 20 65 78  .help to take ex
2950: 74 72 61 20 61 72 67 73 20 28 69 74 20 69 73 20  tra args (it is 
2960: 68 65 6c 70 20 61 66 74 65 72 20 61 6c 6c 29 0a  help after all).
2970: 20 20 73 65 74 20 72 65 73 20 5b 63 61 74 63 68    set res [catch
2980: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
2990: 68 65 6c 70 20 42 41 44 22 5d 0a 20 20 23 20 6c  help BAD"].  # l
29a0: 6f 6f 6b 20 66 6f 72 20 61 20 66 65 77 20 6f 66  ook for a few of
29b0: 20 74 68 65 20 70 6f 73 73 69 62 6c 65 20 68 65   the possible he
29c0: 6c 70 20 63 6f 6d 6d 61 6e 64 73 0a 20 20 6c 69  lp commands.  li
29d0: 73 74 20 5b 72 65 67 65 78 70 20 7b 2e 68 65 6c  st [regexp {.hel
29e0: 70 7d 20 24 72 65 73 5d 20 5c 0a 20 20 20 20 20  p} $res] \.     
29f0: 20 20 5b 72 65 67 65 78 70 20 7b 2e 71 75 69 74    [regexp {.quit
2a00: 7d 20 24 72 65 73 5d 20 5c 0a 20 20 20 20 20 20  } $res] \.      
2a10: 20 5b 72 65 67 65 78 70 20 7b 2e 73 68 6f 77 7d   [regexp {.show}
2a20: 20 24 72 65 73 5d 0a 7d 20 7b 31 20 31 20 31 7d   $res].} {1 1 1}
2a30: 0a 0a 23 20 2e 69 6d 70 6f 72 74 20 46 49 4c 45  ..# .import FILE
2a40: 20 54 41 42 4c 45 20 20 20 20 20 49 6d 70 6f 72   TABLE     Impor
2a50: 74 20 64 61 74 61 20 66 72 6f 6d 20 46 49 4c 45  t data from FILE
2a60: 20 69 6e 74 6f 20 54 41 42 4c 45 0a 64 6f 5f 74   into TABLE.do_t
2a70: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 31 2e  est shell1-3.11.
2a80: 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  1 {.  catchcmd "
2a90: 74 65 73 74 2e 64 62 22 20 22 2e 69 6d 70 6f 72  test.db" ".impor
2aa0: 74 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20  t".} {1 {Usage: 
2ab0: 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42  .import FILE TAB
2ac0: 4c 45 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65  LE}}.do_test she
2ad0: 6c 6c 31 2d 33 2e 31 31 2e 32 20 7b 0a 20 20 63  ll1-3.11.2 {.  c
2ae0: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
2af0: 22 20 22 2e 69 6d 70 6f 72 74 20 46 4f 4f 22 0a  " ".import FOO".
2b00: 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 69 6d  } {1 {Usage: .im
2b10: 70 6f 72 74 20 46 49 4c 45 20 54 41 42 4c 45 7d  port FILE TABLE}
2b20: 7d 0a 23 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }.#do_test shell
2b30: 31 2d 33 2e 31 31 2e 32 20 7b 0a 23 20 20 63 61  1-3.11.2 {.#  ca
2b40: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
2b50: 20 22 2e 69 6d 70 6f 72 74 20 46 4f 4f 20 42 41   ".import FOO BA
2b60: 52 22 0a 23 7d 20 7b 31 20 7b 45 72 72 6f 72 3a  R".#} {1 {Error:
2b70: 20 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20   no such table: 
2b80: 42 41 52 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  BAR}}.do_test sh
2b90: 65 6c 6c 31 2d 33 2e 31 31 2e 33 20 7b 0a 20 20  ell1-3.11.3 {.  
2ba0: 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d  # too many argum
2bb0: 65 6e 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20  ents.  catchcmd 
2bc0: 22 74 65 73 74 2e 64 62 22 20 22 2e 69 6d 70 6f  "test.db" ".impo
2bd0: 72 74 20 46 4f 4f 20 42 41 52 20 42 41 44 22 0a  rt FOO BAR BAD".
2be0: 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 69 6d  } {1 {Usage: .im
2bf0: 70 6f 72 74 20 46 49 4c 45 20 54 41 42 4c 45 7d  port FILE TABLE}
2c00: 7d 0a 0a 23 20 2e 69 6e 64 65 78 65 73 20 3f 54  }..# .indexes ?T
2c10: 41 42 4c 45 3f 20 20 20 20 20 20 20 53 68 6f 77  ABLE?       Show
2c20: 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 69 6e   names of all in
2c30: 64 65 78 65 73 0a 23 20 20 20 20 20 20 20 20 20  dexes.#         
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c50: 20 49 66 20 54 41 42 4c 45 20 73 70 65 63 69 66   If TABLE specif
2c60: 69 65 64 2c 20 6f 6e 6c 79 20 73 68 6f 77 20 69  ied, only show i
2c70: 6e 64 65 78 65 73 20 66 6f 72 20 74 61 62 6c 65  ndexes for table
2c80: 73 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  s.#             
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 74               mat
2ca0: 63 68 69 6e 67 20 4c 49 4b 45 20 70 61 74 74 65  ching LIKE patte
2cb0: 72 6e 20 54 41 42 4c 45 2e 0a 64 6f 5f 74 65 73  rn TABLE..do_tes
2cc0: 74 20 73 68 65 6c 6c 31 2d 33 2e 31 32 2e 31 20  t shell1-3.12.1 
2cd0: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
2ce0: 73 74 2e 64 62 22 20 22 2e 69 6e 64 65 78 65 73  st.db" ".indexes
2cf0: 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  ".} {0 {}}.do_te
2d00: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 32 2e 32  st shell1-3.12.2
2d10: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
2d20: 65 73 74 2e 64 62 22 20 22 2e 69 6e 64 65 78 65  est.db" ".indexe
2d30: 73 20 46 4f 4f 22 0a 7d 20 7b 30 20 7b 7d 7d 0a  s FOO".} {0 {}}.
2d40: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33  do_test shell1-3
2d50: 2e 31 32 2e 32 2d 6c 65 67 61 63 79 20 7b 0a 20  .12.2-legacy {. 
2d60: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
2d70: 64 62 22 20 22 2e 69 6e 64 69 63 65 73 20 46 4f  db" ".indices FO
2d80: 4f 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  O".} {0 {}}.do_t
2d90: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 32 2e  est shell1-3.12.
2da0: 33 20 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e 79  3 {.  # too many
2db0: 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 63 61 74   arguments.  cat
2dc0: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
2dd0: 22 2e 69 6e 64 65 78 65 73 20 46 4f 4f 20 42 41  ".indexes FOO BA
2de0: 44 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20  D".} {1 {Usage: 
2df0: 2e 69 6e 64 65 78 65 73 20 3f 4c 49 4b 45 2d 50  .indexes ?LIKE-P
2e00: 41 54 54 45 52 4e 3f 7d 7d 0a 0a 23 20 2e 6d 6f  ATTERN?}}..# .mo
2e10: 64 65 20 4d 4f 44 45 20 3f 54 41 42 4c 45 3f 20  de MODE ?TABLE? 
2e20: 20 20 20 20 53 65 74 20 6f 75 74 70 75 74 20 6d      Set output m
2e30: 6f 64 65 20 77 68 65 72 65 20 4d 4f 44 45 20 69  ode where MODE i
2e40: 73 20 6f 6e 65 20 6f 66 3a 0a 23 20 20 20 20 20  s one of:.#     
2e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e60: 20 20 20 20 20 61 73 63 69 69 20 20 20 20 43 6f       ascii    Co
2e70: 6c 75 6d 6e 73 2f 72 6f 77 73 20 64 65 6c 69 6d  lumns/rows delim
2e80: 69 74 65 64 20 62 79 20 30 78 31 46 20 61 6e 64  ited by 0x1F and
2e90: 20 30 78 31 45 0a 23 20 20 20 20 20 20 20 20 20   0x1E.#         
2ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb0: 20 63 73 76 20 20 20 20 20 20 43 6f 6d 6d 61 2d   csv      Comma-
2ec0: 73 65 70 61 72 61 74 65 64 20 76 61 6c 75 65 73  separated values
2ed0: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .#              
2ee0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 75              colu
2ef0: 6d 6e 20 20 20 4c 65 66 74 2d 61 6c 69 67 6e 65  mn   Left-aligne
2f00: 64 20 63 6f 6c 75 6d 6e 73 2e 20 20 28 53 65 65  d columns.  (See
2f10: 20 2e 77 69 64 74 68 29 0a 23 20 20 20 20 20 20   .width).#      
2f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f30: 20 20 20 20 68 74 6d 6c 20 20 20 20 20 48 54 4d      html     HTM
2f40: 4c 20 3c 74 61 62 6c 65 3e 20 63 6f 64 65 0a 23  L <table> code.#
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f60: 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74            insert
2f70: 20 20 20 53 51 4c 20 69 6e 73 65 72 74 20 73 74     SQL insert st
2f80: 61 74 65 6d 65 6e 74 73 20 66 6f 72 20 54 41 42  atements for TAB
2f90: 4c 45 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  LE.#            
2fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
2fb0: 6e 65 20 20 20 20 20 4f 6e 65 20 76 61 6c 75 65  ne     One value
2fc0: 20 70 65 72 20 6c 69 6e 65 0a 23 20 20 20 20 20   per line.#     
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe0: 20 20 20 20 20 6c 69 73 74 20 20 20 20 20 56 61       list     Va
2ff0: 6c 75 65 73 20 64 65 6c 69 6d 69 74 65 64 20 62  lues delimited b
3000: 79 20 2e 73 65 70 61 72 61 74 6f 72 20 73 74 72  y .separator str
3010: 69 6e 67 73 0a 23 20 20 20 20 20 20 20 20 20 20  ings.#          
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3030: 74 61 62 73 20 20 20 20 20 54 61 62 2d 73 65 70  tabs     Tab-sep
3040: 61 72 61 74 65 64 20 76 61 6c 75 65 73 0a 23 20  arated values.# 
3050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3060: 20 20 20 20 20 20 20 20 20 74 63 6c 20 20 20 20           tcl    
3070: 20 20 54 43 4c 20 6c 69 73 74 20 65 6c 65 6d 65    TCL list eleme
3080: 6e 74 73 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  nts.do_test shel
3090: 6c 31 2d 33 2e 31 33 2e 31 20 7b 0a 20 20 63 61  l1-3.13.1 {.  ca
30a0: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
30b0: 20 22 2e 6d 6f 64 65 22 0a 7d 20 7b 31 20 7b 45   ".mode".} {1 {E
30c0: 72 72 6f 72 3a 20 6d 6f 64 65 20 73 68 6f 75 6c  rror: mode shoul
30d0: 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20 61 73 63  d be one of: asc
30e0: 69 69 20 63 6f 6c 75 6d 6e 20 63 73 76 20 68 74  ii column csv ht
30f0: 6d 6c 20 69 6e 73 65 72 74 20 6c 69 6e 65 20 6c  ml insert line l
3100: 69 73 74 20 74 61 62 73 20 74 63 6c 7d 7d 0a 64  ist tabs tcl}}.d
3110: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e  o_test shell1-3.
3120: 31 33 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d  13.2 {.  catchcm
3130: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 6d 6f  d "test.db" ".mo
3140: 64 65 20 46 4f 4f 22 0a 7d 20 7b 31 20 7b 45 72  de FOO".} {1 {Er
3150: 72 6f 72 3a 20 6d 6f 64 65 20 73 68 6f 75 6c 64  ror: mode should
3160: 20 62 65 20 6f 6e 65 20 6f 66 3a 20 61 73 63 69   be one of: asci
3170: 69 20 63 6f 6c 75 6d 6e 20 63 73 76 20 68 74 6d  i column csv htm
3180: 6c 20 69 6e 73 65 72 74 20 6c 69 6e 65 20 6c 69  l insert line li
3190: 73 74 20 74 61 62 73 20 74 63 6c 7d 7d 0a 64 6f  st tabs tcl}}.do
31a0: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31  _test shell1-3.1
31b0: 33 2e 33 20 7b 0a 20 20 63 61 74 63 68 63 6d 64  3.3 {.  catchcmd
31c0: 20 22 74 65 73 74 2e 64 62 22 20 22 2e 6d 6f 64   "test.db" ".mod
31d0: 65 20 63 73 76 22 0a 7d 20 7b 30 20 7b 7d 7d 0a  e csv".} {0 {}}.
31e0: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33  do_test shell1-3
31f0: 2e 31 33 2e 34 20 7b 0a 20 20 63 61 74 63 68 63  .13.4 {.  catchc
3200: 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 6d  md "test.db" ".m
3210: 6f 64 65 20 63 6f 6c 75 6d 6e 22 0a 7d 20 7b 30  ode column".} {0
3220: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65   {}}.do_test she
3230: 6c 6c 31 2d 33 2e 31 33 2e 35 20 7b 0a 20 20 63  ll1-3.13.5 {.  c
3240: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
3250: 22 20 22 2e 6d 6f 64 65 20 68 74 6d 6c 22 0a 7d  " ".mode html".}
3260: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
3270: 73 68 65 6c 6c 31 2d 33 2e 31 33 2e 36 20 7b 0a  shell1-3.13.6 {.
3280: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
3290: 2e 64 62 22 20 22 2e 6d 6f 64 65 20 69 6e 73 65  .db" ".mode inse
32a0: 72 74 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  rt".} {0 {}}.do_
32b0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 33  test shell1-3.13
32c0: 2e 37 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .7 {.  catchcmd 
32d0: 22 74 65 73 74 2e 64 62 22 20 22 2e 6d 6f 64 65  "test.db" ".mode
32e0: 20 6c 69 6e 65 22 0a 7d 20 7b 30 20 7b 7d 7d 0a   line".} {0 {}}.
32f0: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33  do_test shell1-3
3300: 2e 31 33 2e 38 20 7b 0a 20 20 63 61 74 63 68 63  .13.8 {.  catchc
3310: 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 6d  md "test.db" ".m
3320: 6f 64 65 20 6c 69 73 74 22 0a 7d 20 7b 30 20 7b  ode list".} {0 {
3330: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
3340: 31 2d 33 2e 31 33 2e 39 20 7b 0a 20 20 63 61 74  1-3.13.9 {.  cat
3350: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
3360: 22 2e 6d 6f 64 65 20 74 61 62 73 22 0a 7d 20 7b  ".mode tabs".} {
3370: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  0 {}}.do_test sh
3380: 65 6c 6c 31 2d 33 2e 31 33 2e 31 30 20 7b 0a 20  ell1-3.13.10 {. 
3390: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
33a0: 64 62 22 20 22 2e 6d 6f 64 65 20 74 63 6c 22 0a  db" ".mode tcl".
33b0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
33c0: 20 73 68 65 6c 6c 31 2d 33 2e 31 33 2e 31 31 20   shell1-3.13.11 
33d0: 7b 0a 20 20 23 20 65 78 74 72 61 20 61 72 67 75  {.  # extra argu
33e0: 6d 65 6e 74 73 20 69 67 6e 6f 72 65 64 0a 20 20  ments ignored.  
33f0: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
3400: 62 22 20 22 2e 6d 6f 64 65 20 74 63 6c 20 42 41  b" ".mode tcl BA
3410: 44 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20 64  D".} {0 {}}..# d
3420: 6f 6e 27 74 20 61 6c 6c 6f 77 20 70 61 72 74 69  on't allow parti
3430: 61 6c 20 6d 6f 64 65 20 74 79 70 65 20 6d 61 74  al mode type mat
3440: 63 68 65 73 0a 64 6f 5f 74 65 73 74 20 73 68 65  ches.do_test she
3450: 6c 6c 31 2d 33 2e 31 33 2e 31 32 20 7b 0a 20 20  ll1-3.13.12 {.  
3460: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
3470: 62 22 20 22 2e 6d 6f 64 65 20 6c 22 0a 7d 20 7b  b" ".mode l".} {
3480: 31 20 7b 45 72 72 6f 72 3a 20 6d 6f 64 65 20 73  1 {Error: mode s
3490: 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a  hould be one of:
34a0: 20 61 73 63 69 69 20 63 6f 6c 75 6d 6e 20 63 73   ascii column cs
34b0: 76 20 68 74 6d 6c 20 69 6e 73 65 72 74 20 6c 69  v html insert li
34c0: 6e 65 20 6c 69 73 74 20 74 61 62 73 20 74 63 6c  ne list tabs tcl
34d0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
34e0: 31 2d 33 2e 31 33 2e 31 33 20 7b 0a 20 20 63 61  1-3.13.13 {.  ca
34f0: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
3500: 20 22 2e 6d 6f 64 65 20 6c 69 22 0a 7d 20 7b 31   ".mode li".} {1
3510: 20 7b 45 72 72 6f 72 3a 20 6d 6f 64 65 20 73 68   {Error: mode sh
3520: 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20  ould be one of: 
3530: 61 73 63 69 69 20 63 6f 6c 75 6d 6e 20 63 73 76  ascii column csv
3540: 20 68 74 6d 6c 20 69 6e 73 65 72 74 20 6c 69 6e   html insert lin
3550: 65 20 6c 69 73 74 20 74 61 62 73 20 74 63 6c 7d  e list tabs tcl}
3560: 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  }.do_test shell1
3570: 2d 33 2e 31 33 2e 31 34 20 7b 0a 20 20 63 61 74  -3.13.14 {.  cat
3580: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
3590: 22 2e 6d 6f 64 65 20 6c 69 6e 22 0a 7d 20 7b 30  ".mode lin".} {0
35a0: 20 7b 7d 7d 0a 0a 23 20 2e 6e 75 6c 6c 76 61 6c   {}}..# .nullval
35b0: 75 65 20 53 54 52 49 4e 47 20 20 20 20 20 20 50  ue STRING      P
35c0: 72 69 6e 74 20 53 54 52 49 4e 47 20 69 6e 20 70  rint STRING in p
35d0: 6c 61 63 65 20 6f 66 20 4e 55 4c 4c 20 76 61 6c  lace of NULL val
35e0: 75 65 73 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  ues.do_test shel
35f0: 6c 31 2d 33 2e 31 34 2e 31 20 7b 0a 20 20 63 61  l1-3.14.1 {.  ca
3600: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
3610: 20 22 2e 6e 75 6c 6c 76 61 6c 75 65 22 0a 7d 20   ".nullvalue".} 
3620: 7b 31 20 7b 55 73 61 67 65 3a 20 2e 6e 75 6c 6c  {1 {Usage: .null
3630: 76 61 6c 75 65 20 53 54 52 49 4e 47 7d 7d 0a 64  value STRING}}.d
3640: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e  o_test shell1-3.
3650: 31 34 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d  14.2 {.  catchcm
3660: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 6e 75  d "test.db" ".nu
3670: 6c 6c 76 61 6c 75 65 20 46 4f 4f 22 0a 7d 20 7b  llvalue FOO".} {
3680: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  0 {}}.do_test sh
3690: 65 6c 6c 31 2d 33 2e 31 34 2e 33 20 7b 0a 20 20  ell1-3.14.3 {.  
36a0: 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d  # too many argum
36b0: 65 6e 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20  ents.  catchcmd 
36c0: 22 74 65 73 74 2e 64 62 22 20 22 2e 6e 75 6c 6c  "test.db" ".null
36d0: 76 61 6c 75 65 20 46 4f 4f 20 42 41 44 22 0a 7d  value FOO BAD".}
36e0: 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 6e 75 6c   {1 {Usage: .nul
36f0: 6c 76 61 6c 75 65 20 53 54 52 49 4e 47 7d 7d 0a  lvalue STRING}}.
3700: 0a 23 20 2e 6f 75 74 70 75 74 20 46 49 4c 45 4e  .# .output FILEN
3710: 41 4d 45 20 20 20 20 20 20 20 53 65 6e 64 20 6f  AME       Send o
3720: 75 74 70 75 74 20 74 6f 20 46 49 4c 45 4e 41 4d  utput to FILENAM
3730: 45 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  E.do_test shell1
3740: 2d 33 2e 31 35 2e 31 20 7b 0a 20 20 63 61 74 63  -3.15.1 {.  catc
3750: 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22  hcmd "test.db" "
3760: 2e 6f 75 74 70 75 74 22 0a 7d 20 7b 30 20 7b 7d  .output".} {0 {}
3770: 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  }.do_test shell1
3780: 2d 33 2e 31 35 2e 32 20 7b 0a 20 20 63 61 74 63  -3.15.2 {.  catc
3790: 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22  hcmd "test.db" "
37a0: 2e 6f 75 74 70 75 74 20 46 4f 4f 22 0a 7d 20 7b  .output FOO".} {
37b0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  0 {}}.do_test sh
37c0: 65 6c 6c 31 2d 33 2e 31 35 2e 33 20 7b 0a 20 20  ell1-3.15.3 {.  
37d0: 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d  # too many argum
37e0: 65 6e 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20  ents.  catchcmd 
37f0: 22 74 65 73 74 2e 64 62 22 20 22 2e 6f 75 74 70  "test.db" ".outp
3800: 75 74 20 46 4f 4f 20 42 41 44 22 0a 7d 20 7b 31  ut FOO BAD".} {1
3810: 20 7b 55 73 61 67 65 3a 20 2e 6f 75 74 70 75 74   {Usage: .output
3820: 20 46 49 4c 45 7d 7d 0a 0a 23 20 2e 6f 75 74 70   FILE}}..# .outp
3830: 75 74 20 73 74 64 6f 75 74 20 20 20 20 20 20 20  ut stdout       
3840: 20 20 53 65 6e 64 20 6f 75 74 70 75 74 20 74 6f    Send output to
3850: 20 74 68 65 20 73 63 72 65 65 6e 0a 64 6f 5f 74   the screen.do_t
3860: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 36 2e  est shell1-3.16.
3870: 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  1 {.  catchcmd "
3880: 74 65 73 74 2e 64 62 22 20 22 2e 6f 75 74 70 75  test.db" ".outpu
3890: 74 20 73 74 64 6f 75 74 22 0a 7d 20 7b 30 20 7b  t stdout".} {0 {
38a0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
38b0: 31 2d 33 2e 31 36 2e 32 20 7b 0a 20 20 23 20 74  1-3.16.2 {.  # t
38c0: 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74  oo many argument
38d0: 73 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  s.  catchcmd "te
38e0: 73 74 2e 64 62 22 20 22 2e 6f 75 74 70 75 74 20  st.db" ".output 
38f0: 73 74 64 6f 75 74 20 42 41 44 22 0a 7d 20 7b 31  stdout BAD".} {1
3900: 20 7b 55 73 61 67 65 3a 20 2e 6f 75 74 70 75 74   {Usage: .output
3910: 20 46 49 4c 45 7d 7d 0a 0a 23 20 2e 70 72 6f 6d   FILE}}..# .prom
3920: 70 74 20 4d 41 49 4e 20 43 4f 4e 54 49 4e 55 45  pt MAIN CONTINUE
3930: 20 20 52 65 70 6c 61 63 65 20 74 68 65 20 73 74    Replace the st
3940: 61 6e 64 61 72 64 20 70 72 6f 6d 70 74 73 0a 64  andard prompts.d
3950: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e  o_test shell1-3.
3960: 31 37 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d  17.1 {.  catchcm
3970: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 70 72  d "test.db" ".pr
3980: 6f 6d 70 74 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ompt".} {0 {}}.d
3990: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e  o_test shell1-3.
39a0: 31 37 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d  17.2 {.  catchcm
39b0: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 70 72  d "test.db" ".pr
39c0: 6f 6d 70 74 20 46 4f 4f 22 0a 7d 20 7b 30 20 7b  ompt FOO".} {0 {
39d0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
39e0: 31 2d 33 2e 31 37 2e 33 20 7b 0a 20 20 63 61 74  1-3.17.3 {.  cat
39f0: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
3a00: 22 2e 70 72 6f 6d 70 74 20 46 4f 4f 20 42 41 52  ".prompt FOO BAR
3a10: 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  ".} {0 {}}.do_te
3a20: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 37 2e 34  st shell1-3.17.4
3a30: 20 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e 79 20   {.  # too many 
3a40: 61 72 67 75 6d 65 6e 74 73 0a 20 20 63 61 74 63  arguments.  catc
3a50: 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22  hcmd "test.db" "
3a60: 2e 70 72 6f 6d 70 74 20 46 4f 4f 20 42 41 52 20  .prompt FOO BAR 
3a70: 42 41 44 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23  BAD".} {0 {}}..#
3a80: 20 2e 71 75 69 74 20 20 20 20 20 20 20 20 20 20   .quit          
3a90: 20 20 20 20 20 20 20 20 45 78 69 74 20 74 68 69          Exit thi
3aa0: 73 20 70 72 6f 67 72 61 6d 0a 64 6f 5f 74 65 73  s program.do_tes
3ab0: 74 20 73 68 65 6c 6c 31 2d 33 2e 31 38 2e 31 20  t shell1-3.18.1 
3ac0: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
3ad0: 73 74 2e 64 62 22 20 22 2e 71 75 69 74 22 0a 7d  st.db" ".quit".}
3ae0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
3af0: 73 68 65 6c 6c 31 2d 33 2e 31 38 2e 32 20 7b 0a  shell1-3.18.2 {.
3b00: 20 20 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67    # too many arg
3b10: 75 6d 65 6e 74 73 0a 20 20 63 61 74 63 68 63 6d  uments.  catchcm
3b20: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 71 75  d "test.db" ".qu
3b30: 69 74 20 42 41 44 22 0a 7d 20 7b 30 20 7b 7d 7d  it BAD".} {0 {}}
3b40: 0a 0a 23 20 2e 72 65 61 64 20 46 49 4c 45 4e 41  ..# .read FILENA
3b50: 4d 45 20 20 20 20 20 20 20 20 20 45 78 65 63 75  ME         Execu
3b60: 74 65 20 53 51 4c 20 69 6e 20 46 49 4c 45 4e 41  te SQL in FILENA
3b70: 4d 45 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  ME.do_test shell
3b80: 31 2d 33 2e 31 39 2e 31 20 7b 0a 20 20 63 61 74  1-3.19.1 {.  cat
3b90: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
3ba0: 22 2e 72 65 61 64 22 0a 7d 20 7b 31 20 7b 55 73  ".read".} {1 {Us
3bb0: 61 67 65 3a 20 2e 72 65 61 64 20 46 49 4c 45 7d  age: .read FILE}
3bc0: 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  }.do_test shell1
3bd0: 2d 33 2e 31 39 2e 32 20 7b 0a 20 20 66 6f 72 63  -3.19.2 {.  forc
3be0: 65 64 65 6c 65 74 65 20 46 4f 4f 0a 20 20 63 61  edelete FOO.  ca
3bf0: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
3c00: 20 22 2e 72 65 61 64 20 46 4f 4f 22 0a 7d 20 7b   ".read FOO".} {
3c10: 31 20 7b 45 72 72 6f 72 3a 20 63 61 6e 6e 6f 74  1 {Error: cannot
3c20: 20 6f 70 65 6e 20 22 46 4f 4f 22 7d 7d 0a 64 6f   open "FOO"}}.do
3c30: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31  _test shell1-3.1
3c40: 39 2e 33 20 7b 0a 20 20 23 20 74 6f 6f 20 6d 61  9.3 {.  # too ma
3c50: 6e 79 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 63  ny arguments.  c
3c60: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
3c70: 22 20 22 2e 72 65 61 64 20 46 4f 4f 20 42 41 44  " ".read FOO BAD
3c80: 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e  ".} {1 {Usage: .
3c90: 72 65 61 64 20 46 49 4c 45 7d 7d 0a 0a 23 20 2e  read FILE}}..# .
3ca0: 72 65 73 74 6f 72 65 20 3f 44 42 3f 20 46 49 4c  restore ?DB? FIL
3cb0: 45 20 20 20 20 20 52 65 73 74 6f 72 65 20 63 6f  E     Restore co
3cc0: 6e 74 65 6e 74 20 6f 66 20 44 42 20 28 64 65 66  ntent of DB (def
3cd0: 61 75 6c 74 20 22 6d 61 69 6e 22 29 20 66 72 6f  ault "main") fro
3ce0: 6d 20 46 49 4c 45 0a 64 6f 5f 74 65 73 74 20 73  m FILE.do_test s
3cf0: 68 65 6c 6c 31 2d 33 2e 32 30 2e 31 20 7b 0a 20  hell1-3.20.1 {. 
3d00: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
3d10: 64 62 22 20 22 2e 72 65 73 74 6f 72 65 22 0a 7d  db" ".restore".}
3d20: 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 72 65 73   {1 {Usage: .res
3d30: 74 6f 72 65 20 3f 44 42 3f 20 46 49 4c 45 7d 7d  tore ?DB? FILE}}
3d40: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
3d50: 33 2e 32 30 2e 32 20 7b 0a 20 20 63 61 74 63 68  3.20.2 {.  catch
3d60: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
3d70: 72 65 73 74 6f 72 65 20 46 4f 4f 22 0a 7d 20 7b  restore FOO".} {
3d80: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  0 {}}.do_test sh
3d90: 65 6c 6c 31 2d 33 2e 32 30 2e 33 20 7b 0a 20 20  ell1-3.20.3 {.  
3da0: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
3db0: 62 22 20 22 2e 72 65 73 74 6f 72 65 20 46 4f 4f  b" ".restore FOO
3dc0: 20 42 41 52 22 0a 7d 20 7b 31 20 7b 45 72 72 6f   BAR".} {1 {Erro
3dd0: 72 3a 20 75 6e 6b 6e 6f 77 6e 20 64 61 74 61 62  r: unknown datab
3de0: 61 73 65 20 46 4f 4f 7d 7d 0a 64 6f 5f 74 65 73  ase FOO}}.do_tes
3df0: 74 20 73 68 65 6c 6c 31 2d 33 2e 32 30 2e 34 20  t shell1-3.20.4 
3e00: 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e 79 20 61  {.  # too many a
3e10: 72 67 75 6d 65 6e 74 73 0a 20 20 63 61 74 63 68  rguments.  catch
3e20: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
3e30: 72 65 73 74 6f 72 65 20 46 4f 4f 20 42 41 52 20  restore FOO BAR 
3e40: 42 41 44 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65  BAD".} {1 {Usage
3e50: 3a 20 2e 72 65 73 74 6f 72 65 20 3f 44 42 3f 20  : .restore ?DB? 
3e60: 46 49 4c 45 7d 7d 0a 0a 23 20 2e 73 63 68 65 6d  FILE}}..# .schem
3e70: 61 20 3f 54 41 42 4c 45 3f 20 20 20 20 20 20 20  a ?TABLE?       
3e80: 20 53 68 6f 77 20 74 68 65 20 43 52 45 41 54 45   Show the CREATE
3e90: 20 73 74 61 74 65 6d 65 6e 74 73 0a 23 20 20 20   statements.#   
3ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3eb0: 20 20 20 20 20 20 20 49 66 20 54 41 42 4c 45 20         If TABLE 
3ec0: 73 70 65 63 69 66 69 65 64 2c 20 6f 6e 6c 79 20  specified, only 
3ed0: 73 68 6f 77 20 74 61 62 6c 65 73 20 6d 61 74 63  show tables matc
3ee0: 68 69 6e 67 0a 23 20 20 20 20 20 20 20 20 20 20  hing.#          
3ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f00: 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 54 41 42  LIKE pattern TAB
3f10: 4c 45 2e 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  LE..do_test shel
3f20: 6c 31 2d 33 2e 32 31 2e 31 20 7b 0a 20 20 63 61  l1-3.21.1 {.  ca
3f30: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
3f40: 20 22 2e 73 63 68 65 6d 61 22 0a 7d 20 7b 30 20   ".schema".} {0 
3f50: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  {}}.do_test shel
3f60: 6c 31 2d 33 2e 32 31 2e 32 20 7b 0a 20 20 63 61  l1-3.21.2 {.  ca
3f70: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
3f80: 20 22 2e 73 63 68 65 6d 61 20 46 4f 4f 22 0a 7d   ".schema FOO".}
3f90: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
3fa0: 73 68 65 6c 6c 31 2d 33 2e 32 31 2e 33 20 7b 0a  shell1-3.21.3 {.
3fb0: 20 20 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67    # too many arg
3fc0: 75 6d 65 6e 74 73 0a 20 20 63 61 74 63 68 63 6d  uments.  catchcm
3fd0: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 73 63  d "test.db" ".sc
3fe0: 68 65 6d 61 20 46 4f 4f 20 42 41 44 22 0a 7d 20  hema FOO BAD".} 
3ff0: 7b 31 20 7b 55 73 61 67 65 3a 20 2e 73 63 68 65  {1 {Usage: .sche
4000: 6d 61 20 3f 4c 49 4b 45 2d 50 41 54 54 45 52 4e  ma ?LIKE-PATTERN
4010: 3f 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 68 65  ?}}..do_test she
4020: 6c 6c 31 2d 33 2e 32 31 2e 34 20 7b 0a 20 20 63  ll1-3.21.4 {.  c
4030: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
4040: 22 20 7b 0a 20 20 20 20 20 43 52 45 41 54 45 20  " {.     CREATE 
4050: 54 41 42 4c 45 20 74 31 28 78 29 3b 0a 20 20 20  TABLE t1(x);.   
4060: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76 32    CREATE VIEW v2
4070: 20 41 53 20 53 45 4c 45 43 54 20 78 2b 31 20 41   AS SELECT x+1 A
4080: 53 20 79 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20  S y FROM t1;.   
4090: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76 31    CREATE VIEW v1
40a0: 20 41 53 20 53 45 4c 45 43 54 20 79 2b 31 20 46   AS SELECT y+1 F
40b0: 52 4f 4d 20 76 32 3b 0a 20 20 7d 0a 20 20 63 61  ROM v2;.  }.  ca
40c0: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
40d0: 20 22 2e 73 63 68 65 6d 61 22 0a 7d 20 7b 30 20   ".schema".} {0 
40e0: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  {CREATE TABLE t1
40f0: 28 78 29 3b 0a 43 52 45 41 54 45 20 56 49 45 57  (x);.CREATE VIEW
4100: 20 76 32 20 41 53 20 53 45 4c 45 43 54 20 78 2b   v2 AS SELECT x+
4110: 31 20 41 53 20 79 20 46 52 4f 4d 20 74 31 3b 0a  1 AS y FROM t1;.
4120: 43 52 45 41 54 45 20 56 49 45 57 20 76 31 20 41  CREATE VIEW v1 A
4130: 53 20 53 45 4c 45 43 54 20 79 2b 31 20 46 52 4f  S SELECT y+1 FRO
4140: 4d 20 76 32 3b 7d 7d 0a 64 62 20 65 76 61 6c 20  M v2;}}.db eval 
4150: 7b 44 52 4f 50 20 56 49 45 57 20 76 31 3b 20 44  {DROP VIEW v1; D
4160: 52 4f 50 20 56 49 45 57 20 76 32 3b 20 44 52 4f  ROP VIEW v2; DRO
4170: 50 20 54 41 42 4c 45 20 74 31 3b 7d 0a 0a 23 20  P TABLE t1;}..# 
4180: 2e 73 65 70 61 72 61 74 6f 72 20 53 54 52 49 4e  .separator STRIN
4190: 47 20 20 43 68 61 6e 67 65 20 63 6f 6c 75 6d 6e  G  Change column
41a0: 20 73 65 70 61 72 61 74 6f 72 20 75 73 65 64 20   separator used 
41b0: 62 79 20 6f 75 74 70 75 74 20 61 6e 64 20 2e 69  by output and .i
41c0: 6d 70 6f 72 74 0a 64 6f 5f 74 65 73 74 20 73 68  mport.do_test sh
41d0: 65 6c 6c 31 2d 33 2e 32 32 2e 31 20 7b 0a 20 20  ell1-3.22.1 {.  
41e0: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
41f0: 62 22 20 22 2e 73 65 70 61 72 61 74 6f 72 22 0a  b" ".separator".
4200: 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 73 65  } {1 {Usage: .se
4210: 70 61 72 61 74 6f 72 20 43 4f 4c 20 3f 52 4f 57  parator COL ?ROW
4220: 3f 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  ?}}.do_test shel
4230: 6c 31 2d 33 2e 32 32 2e 32 20 7b 0a 20 20 63 61  l1-3.22.2 {.  ca
4240: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
4250: 20 22 2e 73 65 70 61 72 61 74 6f 72 20 46 4f 4f   ".separator FOO
4260: 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  ".} {0 {}}.do_te
4270: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 32 2e 33  st shell1-3.22.3
4280: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
4290: 65 73 74 2e 64 62 22 20 22 2e 73 65 70 61 72 61  est.db" ".separa
42a0: 74 6f 72 20 41 42 43 20 58 59 5a 22 0a 7d 20 7b  tor ABC XYZ".} {
42b0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  0 {}}.do_test sh
42c0: 65 6c 6c 31 2d 33 2e 32 32 2e 34 20 7b 0a 20 20  ell1-3.22.4 {.  
42d0: 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d  # too many argum
42e0: 65 6e 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20  ents.  catchcmd 
42f0: 22 74 65 73 74 2e 64 62 22 20 22 2e 73 65 70 61  "test.db" ".sepa
4300: 72 61 74 6f 72 20 46 4f 4f 20 42 41 44 20 42 41  rator FOO BAD BA
4310: 44 32 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a  D2".} {1 {Usage:
4320: 20 2e 73 65 70 61 72 61 74 6f 72 20 43 4f 4c 20   .separator COL 
4330: 3f 52 4f 57 3f 7d 7d 0a 0a 23 20 2e 73 68 6f 77  ?ROW?}}..# .show
4340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4350: 20 20 53 68 6f 77 20 74 68 65 20 63 75 72 72 65    Show the curre
4360: 6e 74 20 76 61 6c 75 65 73 20 66 6f 72 20 76 61  nt values for va
4370: 72 69 6f 75 73 20 73 65 74 74 69 6e 67 73 0a 64  rious settings.d
4380: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e  o_test shell1-3.
4390: 32 33 2e 31 20 7b 0a 20 20 73 65 74 20 72 65 73  23.1 {.  set res
43a0: 20 5b 63 61 74 63 68 63 6d 64 20 22 74 65 73 74   [catchcmd "test
43b0: 2e 64 62 22 20 22 2e 73 68 6f 77 22 5d 0a 20 20  .db" ".show"].  
43c0: 6c 69 73 74 20 5b 72 65 67 65 78 70 20 7b 65 63  list [regexp {ec
43d0: 68 6f 3a 7d 20 24 72 65 73 5d 20 5c 0a 20 20 20  ho:} $res] \.   
43e0: 20 20 20 20 5b 72 65 67 65 78 70 20 7b 65 78 70      [regexp {exp
43f0: 6c 61 69 6e 3a 7d 20 24 72 65 73 5d 20 5c 0a 20  lain:} $res] \. 
4400: 20 20 20 20 20 20 5b 72 65 67 65 78 70 20 7b 68        [regexp {h
4410: 65 61 64 65 72 73 3a 7d 20 24 72 65 73 5d 20 5c  eaders:} $res] \
4420: 0a 20 20 20 20 20 20 20 5b 72 65 67 65 78 70 20  .       [regexp 
4430: 7b 6d 6f 64 65 3a 7d 20 24 72 65 73 5d 20 5c 0a  {mode:} $res] \.
4440: 20 20 20 20 20 20 20 5b 72 65 67 65 78 70 20 7b         [regexp {
4450: 6e 75 6c 6c 76 61 6c 75 65 3a 7d 20 24 72 65 73  nullvalue:} $res
4460: 5d 20 5c 0a 20 20 20 20 20 20 20 5b 72 65 67 65  ] \.       [rege
4470: 78 70 20 7b 6f 75 74 70 75 74 3a 7d 20 24 72 65  xp {output:} $re
4480: 73 5d 20 5c 0a 20 20 20 20 20 20 20 5b 72 65 67  s] \.       [reg
4490: 65 78 70 20 7b 63 6f 6c 73 65 70 61 72 61 74 6f  exp {colseparato
44a0: 72 3a 7d 20 24 72 65 73 5d 20 5c 0a 20 20 20 20  r:} $res] \.    
44b0: 20 20 20 5b 72 65 67 65 78 70 20 7b 72 6f 77 73     [regexp {rows
44c0: 65 70 61 72 61 74 6f 72 3a 7d 20 24 72 65 73 5d  eparator:} $res]
44d0: 20 5c 0a 20 20 20 20 20 20 20 5b 72 65 67 65 78   \.       [regex
44e0: 70 20 7b 73 74 61 74 73 3a 7d 20 24 72 65 73 5d  p {stats:} $res]
44f0: 20 5c 0a 20 20 20 20 20 20 20 5b 72 65 67 65 78   \.       [regex
4500: 70 20 7b 77 69 64 74 68 3a 7d 20 24 72 65 73 5d  p {width:} $res]
4510: 0a 7d 20 7b 31 20 31 20 31 20 31 20 31 20 31 20  .} {1 1 1 1 1 1 
4520: 31 20 31 20 31 20 31 7d 0a 64 6f 5f 74 65 73 74  1 1 1 1}.do_test
4530: 20 73 68 65 6c 6c 31 2d 33 2e 32 33 2e 32 20 7b   shell1-3.23.2 {
4540: 0a 20 20 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72  .  # too many ar
4550: 67 75 6d 65 6e 74 73 0a 20 20 63 61 74 63 68 63  guments.  catchc
4560: 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 73  md "test.db" ".s
4570: 68 6f 77 20 42 41 44 22 0a 7d 20 7b 31 20 7b 55  how BAD".} {1 {U
4580: 73 61 67 65 3a 20 2e 73 68 6f 77 7d 7d 0a 0a 23  sage: .show}}..#
4590: 20 2e 73 74 61 74 73 20 4f 4e 7c 4f 46 46 20 20   .stats ON|OFF  
45a0: 20 20 20 20 20 20 20 20 54 75 72 6e 20 73 74 61          Turn sta
45b0: 74 73 20 6f 6e 20 6f 72 20 6f 66 66 0a 23 64 6f  ts on or off.#do
45c0: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32  _test shell1-3.2
45d0: 33 62 2e 31 20 7b 0a 23 20 20 63 61 74 63 68 63  3b.1 {.#  catchc
45e0: 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 73  md "test.db" ".s
45f0: 74 61 74 73 22 0a 23 7d 20 7b 31 20 7b 55 73 61  tats".#} {1 {Usa
4600: 67 65 3a 20 2e 73 74 61 74 73 20 6f 6e 7c 6f 66  ge: .stats on|of
4610: 66 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  f}}.do_test shel
4620: 6c 31 2d 33 2e 32 33 62 2e 32 20 7b 0a 20 20 63  l1-3.23b.2 {.  c
4630: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
4640: 22 20 22 2e 73 74 61 74 73 20 4f 4e 22 0a 7d 20  " ".stats ON".} 
4650: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  {0 {}}.do_test s
4660: 68 65 6c 6c 31 2d 33 2e 32 33 62 2e 33 20 7b 0a  hell1-3.23b.3 {.
4670: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
4680: 2e 64 62 22 20 22 2e 73 74 61 74 73 20 4f 46 46  .db" ".stats OFF
4690: 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  ".} {0 {}}.do_te
46a0: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 33 62 2e  st shell1-3.23b.
46b0: 34 20 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e 79  4 {.  # too many
46c0: 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 63 61 74   arguments.  cat
46d0: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
46e0: 22 2e 73 74 61 74 73 20 4f 46 46 20 42 41 44 22  ".stats OFF BAD"
46f0: 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 73  .} {1 {Usage: .s
4700: 74 61 74 73 20 3f 6f 6e 7c 6f 66 66 3f 7d 7d 0a  tats ?on|off?}}.
4710: 0a 23 20 2e 74 61 62 6c 65 73 20 3f 54 41 42 4c  .# .tables ?TABL
4720: 45 3f 20 20 20 20 20 20 20 20 4c 69 73 74 20 6e  E?        List n
4730: 61 6d 65 73 20 6f 66 20 74 61 62 6c 65 73 0a 23  ames of tables.#
4740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4750: 20 20 20 20 20 20 20 20 20 20 49 66 20 54 41 42            If TAB
4760: 4c 45 20 73 70 65 63 69 66 69 65 64 2c 20 6f 6e  LE specified, on
4770: 6c 79 20 6c 69 73 74 20 74 61 62 6c 65 73 20 6d  ly list tables m
4780: 61 74 63 68 69 6e 67 0a 23 20 20 20 20 20 20 20  atching.#       
4790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47a0: 20 20 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20     LIKE pattern 
47b0: 54 41 42 4c 45 2e 0a 64 6f 5f 74 65 73 74 20 73  TABLE..do_test s
47c0: 68 65 6c 6c 31 2d 33 2e 32 34 2e 31 20 7b 0a 20  hell1-3.24.1 {. 
47d0: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
47e0: 64 62 22 20 22 2e 74 61 62 6c 65 73 22 0a 7d 20  db" ".tables".} 
47f0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  {0 {}}.do_test s
4800: 68 65 6c 6c 31 2d 33 2e 32 34 2e 32 20 7b 0a 20  hell1-3.24.2 {. 
4810: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
4820: 64 62 22 20 22 2e 74 61 62 6c 65 73 20 46 4f 4f  db" ".tables FOO
4830: 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  ".} {0 {}}.do_te
4840: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 34 2e 33  st shell1-3.24.3
4850: 20 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e 79 20   {.  # too many 
4860: 61 72 67 75 6d 65 6e 74 73 0a 20 20 63 61 74 63  arguments.  catc
4870: 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22  hcmd "test.db" "
4880: 2e 74 61 62 6c 65 73 20 46 4f 4f 20 42 41 44 22  .tables FOO BAD"
4890: 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20 2e 74 69  .} {0 {}}..# .ti
48a0: 6d 65 6f 75 74 20 4d 53 20 20 20 20 20 20 20 20  meout MS        
48b0: 20 20 20 20 54 72 79 20 6f 70 65 6e 69 6e 67 20      Try opening 
48c0: 6c 6f 63 6b 65 64 20 74 61 62 6c 65 73 20 66 6f  locked tables fo
48d0: 72 20 4d 53 20 6d 69 6c 6c 69 73 65 63 6f 6e 64  r MS millisecond
48e0: 73 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  s.do_test shell1
48f0: 2d 33 2e 32 35 2e 31 20 7b 0a 20 20 63 61 74 63  -3.25.1 {.  catc
4900: 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22  hcmd "test.db" "
4910: 2e 74 69 6d 65 6f 75 74 22 0a 7d 20 7b 30 20 7b  .timeout".} {0 {
4920: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
4930: 31 2d 33 2e 32 35 2e 32 20 7b 0a 20 20 63 61 74  1-3.25.2 {.  cat
4940: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
4950: 22 2e 74 69 6d 65 6f 75 74 20 7a 7a 7a 22 0a 20  ".timeout zzz". 
4960: 20 23 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62   # this should b
4970: 65 20 74 72 65 61 74 65 64 20 74 68 65 20 73 61  e treated the sa
4980: 6d 65 20 61 73 20 61 20 27 30 27 20 74 69 6d 65  me as a '0' time
4990: 6f 75 74 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  out.} {0 {}}.do_
49a0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 35  test shell1-3.25
49b0: 2e 33 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .3 {.  catchcmd 
49c0: 22 74 65 73 74 2e 64 62 22 20 22 2e 74 69 6d 65  "test.db" ".time
49d0: 6f 75 74 20 31 22 0a 7d 20 7b 30 20 7b 7d 7d 0a  out 1".} {0 {}}.
49e0: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33  do_test shell1-3
49f0: 2e 32 35 2e 34 20 7b 0a 20 20 23 20 74 6f 6f 20  .25.4 {.  # too 
4a00: 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73 0a 20  many arguments. 
4a10: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
4a20: 64 62 22 20 22 2e 74 69 6d 65 6f 75 74 20 31 20  db" ".timeout 1 
4a30: 42 41 44 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23  BAD".} {0 {}}..#
4a40: 20 2e 77 69 64 74 68 20 4e 55 4d 20 4e 55 4d 20   .width NUM NUM 
4a50: 2e 2e 2e 20 20 20 20 20 53 65 74 20 63 6f 6c 75  ...     Set colu
4a60: 6d 6e 20 77 69 64 74 68 73 20 66 6f 72 20 22 63  mn widths for "c
4a70: 6f 6c 75 6d 6e 22 20 6d 6f 64 65 0a 64 6f 5f 74  olumn" mode.do_t
4a80: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 36 2e  est shell1-3.26.
4a90: 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  1 {.  catchcmd "
4aa0: 74 65 73 74 2e 64 62 22 20 22 2e 77 69 64 74 68  test.db" ".width
4ab0: 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  ".} {0 {}}.do_te
4ac0: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 36 2e 32  st shell1-3.26.2
4ad0: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
4ae0: 65 73 74 2e 64 62 22 20 22 2e 77 69 64 74 68 20  est.db" ".width 
4af0: 78 78 78 22 0a 20 20 23 20 74 68 69 73 20 73 68  xxx".  # this sh
4b00: 6f 75 6c 64 20 62 65 20 74 72 65 61 74 65 64 20  ould be treated 
4b10: 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 27 30  the same as a '0
4b20: 27 20 77 69 64 74 68 20 66 6f 72 20 63 6f 6c 20  ' width for col 
4b30: 31 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  1.} {0 {}}.do_te
4b40: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 36 2e 33  st shell1-3.26.3
4b50: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
4b60: 65 73 74 2e 64 62 22 20 22 2e 77 69 64 74 68 20  est.db" ".width 
4b70: 78 78 78 20 79 79 79 22 0a 20 20 23 20 74 68 69  xxx yyy".  # thi
4b80: 73 20 73 68 6f 75 6c 64 20 62 65 20 74 72 65 61  s should be trea
4b90: 74 65 64 20 74 68 65 20 73 61 6d 65 20 61 73 20  ted the same as 
4ba0: 61 20 27 30 27 20 77 69 64 74 68 20 66 6f 72 20  a '0' width for 
4bb0: 63 6f 6c 20 31 20 61 6e 64 20 32 0a 7d 20 7b 30  col 1 and 2.} {0
4bc0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65   {}}.do_test she
4bd0: 6c 6c 31 2d 33 2e 32 36 2e 34 20 7b 0a 20 20 63  ll1-3.26.4 {.  c
4be0: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
4bf0: 22 20 22 2e 77 69 64 74 68 20 31 20 31 22 0a 20  " ".width 1 1". 
4c00: 20 23 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62   # this should b
4c10: 65 20 74 72 65 61 74 65 64 20 74 68 65 20 73 61  e treated the sa
4c20: 6d 65 20 61 73 20 61 20 27 31 27 20 77 69 64 74  me as a '1' widt
4c30: 68 20 66 6f 72 20 63 6f 6c 20 31 20 61 6e 64 20  h for col 1 and 
4c40: 32 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  2.} {0 {}}.do_te
4c50: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 36 2e 35  st shell1-3.26.5
4c60: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
4c70: 65 73 74 2e 64 62 22 20 22 2e 6d 6f 64 65 20 63  est.db" ".mode c
4c80: 6f 6c 75 6d 6e 5c 6e 2e 77 69 64 74 68 20 31 30  olumn\n.width 10
4c90: 20 2d 31 30 5c 6e 53 45 4c 45 43 54 20 27 61 62   -10\nSELECT 'ab
4ca0: 63 64 65 66 67 27 2c 20 31 32 33 34 35 36 3b 22  cdefg', 123456;"
4cb0: 0a 20 20 23 20 74 68 69 73 20 73 68 6f 75 6c 64  .  # this should
4cc0: 20 62 65 20 74 72 65 61 74 65 64 20 74 68 65 20   be treated the 
4cd0: 73 61 6d 65 20 61 73 20 61 20 27 31 27 20 77 69  same as a '1' wi
4ce0: 64 74 68 20 66 6f 72 20 63 6f 6c 20 31 20 61 6e  dth for col 1 an
4cf0: 64 20 32 0a 7d 20 7b 30 20 7b 61 62 63 64 65 66  d 2.} {0 {abcdef
4d00: 67 20 20 20 20 20 20 20 20 20 31 32 33 34 35 36  g         123456
4d10: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
4d20: 31 2d 33 2e 32 36 2e 36 20 7b 0a 20 20 63 61 74  1-3.26.6 {.  cat
4d30: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
4d40: 22 2e 6d 6f 64 65 20 63 6f 6c 75 6d 6e 5c 6e 2e  ".mode column\n.
4d50: 77 69 64 74 68 20 2d 31 30 20 31 30 5c 6e 53 45  width -10 10\nSE
4d60: 4c 45 43 54 20 27 61 62 63 64 65 66 67 27 2c 20  LECT 'abcdefg', 
4d70: 31 32 33 34 35 36 3b 22 0a 20 20 23 20 74 68 69  123456;".  # thi
4d80: 73 20 73 68 6f 75 6c 64 20 62 65 20 74 72 65 61  s should be trea
4d90: 74 65 64 20 74 68 65 20 73 61 6d 65 20 61 73 20  ted the same as 
4da0: 61 20 27 31 27 20 77 69 64 74 68 20 66 6f 72 20  a '1' width for 
4db0: 63 6f 6c 20 31 20 61 6e 64 20 32 0a 7d 20 7b 30  col 1 and 2.} {0
4dc0: 20 7b 20 20 20 61 62 63 64 65 66 67 20 20 31 32   {   abcdefg  12
4dd0: 33 34 35 36 20 20 20 20 7d 7d 0a 0a 0a 23 20 2e  3456    }}...# .
4de0: 74 69 6d 65 72 20 4f 4e 7c 4f 46 46 20 20 20 20  timer ON|OFF    
4df0: 20 20 20 20 20 20 54 75 72 6e 20 74 68 65 20 43        Turn the C
4e00: 50 55 20 74 69 6d 65 72 20 6d 65 61 73 75 72 65  PU timer measure
4e10: 6d 65 6e 74 20 6f 6e 20 6f 72 20 6f 66 66 0a 64  ment on or off.d
4e20: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e  o_test shell1-3.
4e30: 32 37 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d  27.1 {.  catchcm
4e40: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 74 69  d "test.db" ".ti
4e50: 6d 65 72 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65  mer".} {1 {Usage
4e60: 3a 20 2e 74 69 6d 65 72 20 6f 6e 7c 6f 66 66 7d  : .timer on|off}
4e70: 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  }.do_test shell1
4e80: 2d 33 2e 32 37 2e 32 20 7b 0a 20 20 63 61 74 63  -3.27.2 {.  catc
4e90: 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22  hcmd "test.db" "
4ea0: 2e 74 69 6d 65 72 20 4f 4e 22 0a 7d 20 7b 30 20  .timer ON".} {0 
4eb0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  {}}.do_test shel
4ec0: 6c 31 2d 33 2e 32 37 2e 33 20 7b 0a 20 20 63 61  l1-3.27.3 {.  ca
4ed0: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
4ee0: 20 22 2e 74 69 6d 65 72 20 4f 46 46 22 0a 7d 20   ".timer OFF".} 
4ef0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  {0 {}}.do_test s
4f00: 68 65 6c 6c 31 2d 33 2e 32 37 2e 34 20 7b 0a 20  hell1-3.27.4 {. 
4f10: 20 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75   # too many argu
4f20: 6d 65 6e 74 73 0a 20 20 63 61 74 63 68 63 6d 64  ments.  catchcmd
4f30: 20 22 74 65 73 74 2e 64 62 22 20 22 2e 74 69 6d   "test.db" ".tim
4f40: 65 72 20 4f 46 46 20 42 41 44 22 0a 7d 20 7b 31  er OFF BAD".} {1
4f50: 20 7b 55 73 61 67 65 3a 20 2e 74 69 6d 65 72 20   {Usage: .timer 
4f60: 6f 6e 7c 6f 66 66 7d 7d 0a 0a 64 6f 5f 74 65 73  on|off}}..do_tes
4f70: 74 20 73 68 65 6c 6c 31 2d 33 2d 32 38 2e 31 20  t shell1-3-28.1 
4f80: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 74 65 73  {.  catchcmd tes
4f90: 74 2e 64 62 20 5c 0a 20 20 20 20 20 22 2e 6c 6f  t.db \.     ".lo
4fa0: 67 20 73 74 64 6f 75 74 5c 6e 53 45 4c 45 43 54  g stdout\nSELECT
4fb0: 20 63 6f 61 6c 65 73 63 65 28 73 71 6c 69 74 65   coalesce(sqlite
4fc0: 5f 6c 6f 67 28 31 32 33 2c 27 68 65 6c 6c 6f 27  _log(123,'hello'
4fd0: 29 2c 27 34 35 36 27 29 3b 22 0a 7d 20 22 30 20  ),'456');".} "0 
4fe0: 7b 28 31 32 33 29 20 68 65 6c 6c 6f 5c 6e 34 35  {(123) hello\n45
4ff0: 36 7d 22 0a 0a 64 6f 5f 74 65 73 74 20 73 68 65  6}"..do_test she
5000: 6c 6c 31 2d 33 2d 32 39 2e 31 20 7b 0a 20 20 63  ll1-3-29.1 {.  c
5010: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
5020: 22 20 22 2e 70 72 69 6e 74 20 74 68 69 73 20 69  " ".print this i
5030: 73 20 61 20 74 65 73 74 22 0a 7d 20 7b 30 20 7b  s a test".} {0 {
5040: 74 68 69 73 20 69 73 20 61 20 74 65 73 74 7d 7d  this is a test}}
5050: 0a 0a 23 20 64 6f 74 2d 63 6f 6d 6d 61 6e 64 20  ..# dot-command 
5060: 61 72 67 75 6d 65 6e 74 20 71 75 6f 74 69 6e 67  argument quoting
5070: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
5080: 33 2d 33 30 2e 31 20 7b 0a 20 20 63 61 74 63 68  3-30.1 {.  catch
5090: 63 6d 64 20 7b 74 65 73 74 2e 64 62 7d 20 7b 2e  cmd {test.db} {.
50a0: 70 72 69 6e 74 20 22 74 68 69 73 5c 22 69 73 27  print "this\"is'
50b0: 61 5c 30 35 35 74 65 73 74 22 20 27 74 68 69 73  a\055test" 'this
50c0: 5c 22 69 73 5c 5c 61 5c 30 35 35 74 65 73 74 27  \"is\\a\055test'
50d0: 7d 0a 7d 20 7b 30 20 7b 74 68 69 73 22 69 73 27  }.} {0 {this"is'
50e0: 61 2d 74 65 73 74 20 74 68 69 73 5c 22 69 73 5c  a-test this\"is\
50f0: 5c 61 5c 30 35 35 74 65 73 74 7d 7d 0a 64 6f 5f  \a\055test}}.do_
5100: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2d 33 31  test shell1-3-31
5110: 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .1 {.  catchcmd 
5120: 7b 74 65 73 74 2e 64 62 7d 20 7b 2e 70 72 69 6e  {test.db} {.prin
5130: 74 20 22 74 68 69 73 5c 6e 69 73 5c 74 61 5c 5c  t "this\nis\ta\\
5140: 74 65 73 74 22 20 27 74 68 69 73 5c 6e 69 73 5c  test" 'this\nis\
5150: 74 61 5c 5c 74 65 73 74 27 7d 0a 7d 20 5b 6c 69  ta\\test'}.} [li
5160: 73 74 20 30 20 22 74 68 69 73 5c 6e 69 73 5c 74  st 0 "this\nis\t
5170: 61 5c 5c 74 65 73 74 20 74 68 69 73 5c 5c 6e 69  a\\test this\\ni
5180: 73 5c 5c 74 61 5c 5c 5c 5c 74 65 73 74 22 5d 0a  s\\ta\\\\test"].
5190: 0a 0a 23 20 54 65 73 74 20 74 68 65 20 6f 75 74  ..# Test the out
51a0: 70 75 74 20 6f 66 20 74 68 65 20 22 2e 64 75 6d  put of the ".dum
51b0: 70 22 20 63 6f 6d 6d 61 6e 64 0a 23 0a 64 6f 5f  p" command.#.do_
51c0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 34 2e 31 20  test shell1-4.1 
51d0: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66  {.  db close.  f
51e0: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e  orcedelete test.
51f0: 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  db.  sqlite3 db 
5200: 74 65 73 74 2e 64 62 0a 20 20 64 62 20 65 76 61  test.db.  db eva
5210: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 65  l {.    PRAGMA e
5220: 6e 63 6f 64 69 6e 67 3d 55 54 46 31 36 3b 0a 20  ncoding=UTF16;. 
5230: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
5240: 74 31 28 78 29 3b 0a 20 20 20 20 49 4e 53 45 52  t1(x);.    INSER
5250: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
5260: 28 6e 75 6c 6c 29 2c 20 28 27 27 29 2c 20 28 31  (null), (''), (1
5270: 29 2c 20 28 32 2e 32 35 29 2c 20 28 27 68 65 6c  ), (2.25), ('hel
5280: 6c 6f 27 29 2c 20 28 78 27 38 30 37 66 27 29 3b  lo'), (x'807f');
5290: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
52a0: 45 20 74 33 28 78 2c 79 29 3b 0a 20 20 20 20 49  E t3(x,y);.    I
52b0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
52c0: 4c 55 45 53 28 31 2c 6e 75 6c 6c 29 2c 20 28 32  LUES(1,null), (2
52d0: 2c 27 27 29 2c 20 28 33 2c 31 29 2c 0a 20 20 20  ,''), (3,1),.   
52e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52f0: 20 20 20 20 20 20 28 34 2c 32 2e 32 35 29 2c 20        (4,2.25), 
5300: 28 35 2c 27 68 65 6c 6c 6f 27 29 2c 20 28 36 2c  (5,'hello'), (6,
5310: 78 27 38 30 37 66 27 29 3b 0a 20 20 7d 0a 20 20  x'807f');.  }.  
5320: 63 61 74 63 68 63 6d 64 20 74 65 73 74 2e 64 62  catchcmd test.db
5330: 20 7b 2e 64 75 6d 70 7d 0a 7d 20 7b 30 20 7b 50   {.dump}.} {0 {P
5340: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
5350: 79 73 3d 4f 46 46 3b 0a 42 45 47 49 4e 20 54 52  ys=OFF;.BEGIN TR
5360: 41 4e 53 41 43 54 49 4f 4e 3b 0a 43 52 45 41 54  ANSACTION;.CREAT
5370: 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0a 49  E TABLE t1(x);.I
5380: 4e 53 45 52 54 20 49 4e 54 4f 20 22 74 31 22 20  NSERT INTO "t1" 
5390: 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 49 4e  VALUES(NULL);.IN
53a0: 53 45 52 54 20 49 4e 54 4f 20 22 74 31 22 20 56  SERT INTO "t1" V
53b0: 41 4c 55 45 53 28 27 27 29 3b 0a 49 4e 53 45 52  ALUES('');.INSER
53c0: 54 20 49 4e 54 4f 20 22 74 31 22 20 56 41 4c 55  T INTO "t1" VALU
53d0: 45 53 28 31 29 3b 0a 49 4e 53 45 52 54 20 49 4e  ES(1);.INSERT IN
53e0: 54 4f 20 22 74 31 22 20 56 41 4c 55 45 53 28 32  TO "t1" VALUES(2
53f0: 2e 32 35 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  .25);.INSERT INT
5400: 4f 20 22 74 31 22 20 56 41 4c 55 45 53 28 27 68  O "t1" VALUES('h
5410: 65 6c 6c 6f 27 29 3b 0a 49 4e 53 45 52 54 20 49  ello');.INSERT I
5420: 4e 54 4f 20 22 74 31 22 20 56 41 4c 55 45 53 28  NTO "t1" VALUES(
5430: 58 27 38 30 37 46 27 29 3b 0a 43 52 45 41 54 45  X'807F');.CREATE
5440: 20 54 41 42 4c 45 20 74 33 28 78 2c 79 29 3b 0a   TABLE t3(x,y);.
5450: 49 4e 53 45 52 54 20 49 4e 54 4f 20 22 74 33 22  INSERT INTO "t3"
5460: 20 56 41 4c 55 45 53 28 31 2c 4e 55 4c 4c 29 3b   VALUES(1,NULL);
5470: 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 22 74 33  .INSERT INTO "t3
5480: 22 20 56 41 4c 55 45 53 28 32 2c 27 27 29 3b 0a  " VALUES(2,'');.
5490: 49 4e 53 45 52 54 20 49 4e 54 4f 20 22 74 33 22  INSERT INTO "t3"
54a0: 20 56 41 4c 55 45 53 28 33 2c 31 29 3b 0a 49 4e   VALUES(3,1);.IN
54b0: 53 45 52 54 20 49 4e 54 4f 20 22 74 33 22 20 56  SERT INTO "t3" V
54c0: 41 4c 55 45 53 28 34 2c 32 2e 32 35 29 3b 0a 49  ALUES(4,2.25);.I
54d0: 4e 53 45 52 54 20 49 4e 54 4f 20 22 74 33 22 20  NSERT INTO "t3" 
54e0: 56 41 4c 55 45 53 28 35 2c 27 68 65 6c 6c 6f 27  VALUES(5,'hello'
54f0: 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 22  );.INSERT INTO "
5500: 74 33 22 20 56 41 4c 55 45 53 28 36 2c 58 27 38  t3" VALUES(6,X'8
5510: 30 37 46 27 29 3b 0a 43 4f 4d 4d 49 54 3b 7d 7d  07F');.COMMIT;}}
5520: 0a 0a 23 20 54 65 73 74 20 74 68 65 20 6f 75 74  ..# Test the out
5530: 70 75 74 20 6f 66 20 22 2e 6d 6f 64 65 20 69 6e  put of ".mode in
5540: 73 65 72 74 22 0a 23 0a 64 6f 5f 74 65 73 74 20  sert".#.do_test 
5550: 73 68 65 6c 6c 31 2d 34 2e 32 2e 31 20 7b 0a 20  shell1-4.2.1 {. 
5560: 20 63 61 74 63 68 63 6d 64 20 74 65 73 74 2e 64   catchcmd test.d
5570: 62 20 22 2e 6d 6f 64 65 20 69 6e 73 65 72 74 20  b ".mode insert 
5580: 74 31 5c 6e 73 65 6c 65 63 74 20 2a 20 66 72 6f  t1\nselect * fro
5590: 6d 20 74 31 3b 22 0a 7d 20 7b 30 20 7b 49 4e 53  m t1;".} {0 {INS
55a0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
55b0: 45 53 28 4e 55 4c 4c 29 3b 0a 49 4e 53 45 52 54  ES(NULL);.INSERT
55c0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
55d0: 27 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  '');.INSERT INTO
55e0: 20 74 31 20 56 41 4c 55 45 53 28 31 29 3b 0a 49   t1 VALUES(1);.I
55f0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
5600: 4c 55 45 53 28 32 2e 32 35 29 3b 0a 49 4e 53 45  LUES(2.25);.INSE
5610: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
5620: 53 28 27 68 65 6c 6c 6f 27 29 3b 0a 49 4e 53 45  S('hello');.INSE
5630: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
5640: 53 28 58 27 38 30 37 66 27 29 3b 7d 7d 0a 0a 23  S(X'807f');}}..#
5650: 20 54 65 73 74 20 74 68 65 20 6f 75 74 70 75 74   Test the output
5660: 20 6f 66 20 22 2e 6d 6f 64 65 20 69 6e 73 65 72   of ".mode inser
5670: 74 22 20 77 69 74 68 20 68 65 61 64 65 72 73 0a  t" with headers.
5680: 23 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  #.do_test shell1
5690: 2d 34 2e 32 2e 32 20 7b 0a 20 20 63 61 74 63 68  -4.2.2 {.  catch
56a0: 63 6d 64 20 74 65 73 74 2e 64 62 20 22 2e 6d 6f  cmd test.db ".mo
56b0: 64 65 20 69 6e 73 65 72 74 20 74 31 5c 6e 2e 68  de insert t1\n.h
56c0: 65 61 64 65 72 73 20 6f 6e 5c 6e 73 65 6c 65 63  eaders on\nselec
56d0: 74 20 2a 20 66 72 6f 6d 20 74 31 3b 22 0a 7d 20  t * from t1;".} 
56e0: 7b 30 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20  {0 {INSERT INTO 
56f0: 74 31 28 78 29 20 56 41 4c 55 45 53 28 4e 55 4c  t1(x) VALUES(NUL
5700: 4c 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20  L);.INSERT INTO 
5710: 74 31 28 78 29 20 56 41 4c 55 45 53 28 27 27 29  t1(x) VALUES('')
5720: 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31  ;.INSERT INTO t1
5730: 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 0a 49  (x) VALUES(1);.I
5740: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 78 29  NSERT INTO t1(x)
5750: 20 56 41 4c 55 45 53 28 32 2e 32 35 29 3b 0a 49   VALUES(2.25);.I
5760: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 78 29  NSERT INTO t1(x)
5770: 20 56 41 4c 55 45 53 28 27 68 65 6c 6c 6f 27 29   VALUES('hello')
5780: 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31  ;.INSERT INTO t1
5790: 28 78 29 20 56 41 4c 55 45 53 28 58 27 38 30 37  (x) VALUES(X'807
57a0: 66 27 29 3b 7d 7d 0a 0a 23 20 54 65 73 74 20 74  f');}}..# Test t
57b0: 68 65 20 6f 75 74 70 75 74 20 6f 66 20 22 2e 6d  he output of ".m
57c0: 6f 64 65 20 69 6e 73 65 72 74 22 0a 23 0a 64 6f  ode insert".#.do
57d0: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 34 2e 32  _test shell1-4.2
57e0: 2e 33 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .3 {.  catchcmd 
57f0: 74 65 73 74 2e 64 62 20 22 2e 6d 6f 64 65 20 69  test.db ".mode i
5800: 6e 73 65 72 74 20 74 33 5c 6e 73 65 6c 65 63 74  nsert t3\nselect
5810: 20 2a 20 66 72 6f 6d 20 74 33 3b 22 0a 7d 20 7b   * from t3;".} {
5820: 30 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  0 {INSERT INTO t
5830: 33 20 56 41 4c 55 45 53 28 31 2c 4e 55 4c 4c 29  3 VALUES(1,NULL)
5840: 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33  ;.INSERT INTO t3
5850: 20 56 41 4c 55 45 53 28 32 2c 27 27 29 3b 0a 49   VALUES(2,'');.I
5860: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
5870: 4c 55 45 53 28 33 2c 31 29 3b 0a 49 4e 53 45 52  LUES(3,1);.INSER
5880: 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53  T INTO t3 VALUES
5890: 28 34 2c 32 2e 32 35 29 3b 0a 49 4e 53 45 52 54  (4,2.25);.INSERT
58a0: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
58b0: 35 2c 27 68 65 6c 6c 6f 27 29 3b 0a 49 4e 53 45  5,'hello');.INSE
58c0: 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45  RT INTO t3 VALUE
58d0: 53 28 36 2c 58 27 38 30 37 66 27 29 3b 7d 7d 0a  S(6,X'807f');}}.
58e0: 0a 23 20 54 65 73 74 20 74 68 65 20 6f 75 74 70  .# Test the outp
58f0: 75 74 20 6f 66 20 22 2e 6d 6f 64 65 20 69 6e 73  ut of ".mode ins
5900: 65 72 74 22 20 77 69 74 68 20 68 65 61 64 65 72  ert" with header
5910: 73 0a 23 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  s.#.do_test shel
5920: 6c 31 2d 34 2e 32 2e 34 20 7b 0a 20 20 63 61 74  l1-4.2.4 {.  cat
5930: 63 68 63 6d 64 20 74 65 73 74 2e 64 62 20 22 2e  chcmd test.db ".
5940: 6d 6f 64 65 20 69 6e 73 65 72 74 20 74 33 5c 6e  mode insert t3\n
5950: 2e 68 65 61 64 65 72 73 20 6f 6e 5c 6e 73 65 6c  .headers on\nsel
5960: 65 63 74 20 2a 20 66 72 6f 6d 20 74 33 3b 22 0a  ect * from t3;".
5970: 7d 20 7b 30 20 7b 49 4e 53 45 52 54 20 49 4e 54  } {0 {INSERT INT
5980: 4f 20 74 33 28 78 2c 79 29 20 56 41 4c 55 45 53  O t3(x,y) VALUES
5990: 28 31 2c 4e 55 4c 4c 29 3b 0a 49 4e 53 45 52 54  (1,NULL);.INSERT
59a0: 20 49 4e 54 4f 20 74 33 28 78 2c 79 29 20 56 41   INTO t3(x,y) VA
59b0: 4c 55 45 53 28 32 2c 27 27 29 3b 0a 49 4e 53 45  LUES(2,'');.INSE
59c0: 52 54 20 49 4e 54 4f 20 74 33 28 78 2c 79 29 20  RT INTO t3(x,y) 
59d0: 56 41 4c 55 45 53 28 33 2c 31 29 3b 0a 49 4e 53  VALUES(3,1);.INS
59e0: 45 52 54 20 49 4e 54 4f 20 74 33 28 78 2c 79 29  ERT INTO t3(x,y)
59f0: 20 56 41 4c 55 45 53 28 34 2c 32 2e 32 35 29 3b   VALUES(4,2.25);
5a00: 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 28  .INSERT INTO t3(
5a10: 78 2c 79 29 20 56 41 4c 55 45 53 28 35 2c 27 68  x,y) VALUES(5,'h
5a20: 65 6c 6c 6f 27 29 3b 0a 49 4e 53 45 52 54 20 49  ello');.INSERT I
5a30: 4e 54 4f 20 74 33 28 78 2c 79 29 20 56 41 4c 55  NTO t3(x,y) VALU
5a40: 45 53 28 36 2c 58 27 38 30 37 66 27 29 3b 7d 7d  ES(6,X'807f');}}
5a50: 0a 0a 23 20 54 65 73 74 20 74 68 65 20 6f 75 74  ..# Test the out
5a60: 70 75 74 20 6f 66 20 22 2e 6d 6f 64 65 20 74 63  put of ".mode tc
5a70: 6c 22 0a 23 0a 64 6f 5f 74 65 73 74 20 73 68 65  l".#.do_test she
5a80: 6c 6c 31 2d 34 2e 33 20 7b 0a 20 20 64 62 20 63  ll1-4.3 {.  db c
5a90: 6c 6f 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65  lose.  forcedele
5aa0: 74 65 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c  te test.db.  sql
5ab0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
5ac0: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
5ad0: 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 3d  PRAGMA encoding=
5ae0: 55 54 46 38 3b 0a 20 20 20 20 43 52 45 41 54 45  UTF8;.    CREATE
5af0: 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0a 20 20   TABLE t1(x);.  
5b00: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
5b10: 20 56 41 4c 55 45 53 28 6e 75 6c 6c 29 2c 20 28   VALUES(null), (
5b20: 27 27 29 2c 20 28 31 29 2c 20 28 32 2e 32 35 29  ''), (1), (2.25)
5b30: 2c 20 28 27 68 65 6c 6c 6f 27 29 2c 20 28 78 27  , ('hello'), (x'
5b40: 38 30 37 66 27 29 3b 0a 20 20 7d 0a 20 20 63 61  807f');.  }.  ca
5b50: 74 63 68 63 6d 64 20 74 65 73 74 2e 64 62 20 22  tchcmd test.db "
5b60: 2e 6d 6f 64 65 20 74 63 6c 5c 6e 73 65 6c 65 63  .mode tcl\nselec
5b70: 74 20 2a 20 66 72 6f 6d 20 74 31 3b 22 0a 7d 20  t * from t1;".} 
5b80: 7b 30 20 7b 22 22 0a 22 22 0a 22 31 22 0a 22 32  {0 {"".""."1"."2
5b90: 2e 32 35 22 0a 22 68 65 6c 6c 6f 22 0a 22 5c 32  .25"."hello"."\2
5ba0: 30 30 5c 31 37 37 22 7d 7d 0a 0a 23 20 54 65 73  00\177"}}..# Tes
5bb0: 74 20 74 68 65 20 6f 75 74 70 75 74 20 6f 66 20  t the output of 
5bc0: 22 2e 6d 6f 64 65 20 74 63 6c 22 20 77 69 74 68  ".mode tcl" with
5bd0: 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e   multiple column
5be0: 73 0a 23 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  s.#.do_test shel
5bf0: 6c 31 2d 34 2e 34 20 7b 0a 20 20 64 62 20 65 76  l1-4.4 {.  db ev
5c00: 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  al {.    CREATE 
5c10: 54 41 42 4c 45 20 74 32 28 78 2c 79 29 3b 0a 20  TABLE t2(x,y);. 
5c20: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5c30: 32 20 56 41 4c 55 45 53 28 6e 75 6c 6c 2c 20 27  2 VALUES(null, '
5c40: 27 29 2c 20 28 31 2c 20 32 2e 32 35 29 2c 20 28  '), (1, 2.25), (
5c50: 27 68 65 6c 6c 6f 27 2c 20 78 27 38 30 37 66 27  'hello', x'807f'
5c60: 29 3b 0a 20 20 7d 0a 20 20 63 61 74 63 68 63 6d  );.  }.  catchcm
5c70: 64 20 74 65 73 74 2e 64 62 20 22 2e 6d 6f 64 65  d test.db ".mode
5c80: 20 74 63 6c 5c 6e 73 65 6c 65 63 74 20 2a 20 66   tcl\nselect * f
5c90: 72 6f 6d 20 74 32 3b 22 0a 7d 20 7b 30 20 7b 22  rom t2;".} {0 {"
5ca0: 22 20 22 22 0a 22 31 22 20 22 32 2e 32 35 22 0a  " ""."1" "2.25".
5cb0: 22 68 65 6c 6c 6f 22 20 22 5c 32 30 30 5c 31 37  "hello" "\200\17
5cc0: 37 22 7d 7d 0a 0a 23 20 54 65 73 74 20 74 68 65  7"}}..# Test the
5cd0: 20 6f 75 74 70 75 74 20 6f 66 20 22 2e 6d 6f 64   output of ".mod
5ce0: 65 20 74 63 6c 22 20 77 69 74 68 20 22 2e 6e 75  e tcl" with ".nu
5cf0: 6c 6c 76 61 6c 75 65 22 0a 23 0a 64 6f 5f 74 65  llvalue".#.do_te
5d00: 73 74 20 73 68 65 6c 6c 31 2d 34 2e 35 20 7b 0a  st shell1-4.5 {.
5d10: 20 20 63 61 74 63 68 63 6d 64 20 74 65 73 74 2e    catchcmd test.
5d20: 64 62 20 22 2e 6d 6f 64 65 20 74 63 6c 5c 6e 2e  db ".mode tcl\n.
5d30: 6e 75 6c 6c 76 61 6c 75 65 20 4e 55 4c 4c 5c 6e  nullvalue NULL\n
5d40: 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 74 32  select * from t2
5d50: 3b 22 0a 7d 20 7b 30 20 7b 22 4e 55 4c 4c 22 20  ;".} {0 {"NULL" 
5d60: 22 22 0a 22 31 22 20 22 32 2e 32 35 22 0a 22 68  ""."1" "2.25"."h
5d70: 65 6c 6c 6f 22 20 22 5c 32 30 30 5c 31 37 37 22  ello" "\200\177"
5d80: 7d 7d 0a 0a 23 20 54 65 73 74 20 74 68 65 20 6f  }}..# Test the o
5d90: 75 74 70 75 74 20 6f 66 20 22 2e 6d 6f 64 65 20  utput of ".mode 
5da0: 74 63 6c 22 20 77 69 74 68 20 54 63 6c 20 72 65  tcl" with Tcl re
5db0: 73 65 72 76 65 64 20 63 68 61 72 61 63 74 65 72  served character
5dc0: 73 0a 23 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  s.#.do_test shel
5dd0: 6c 31 2d 34 2e 36 20 7b 0a 20 20 64 62 20 65 76  l1-4.6 {.  db ev
5de0: 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  al {.    CREATE 
5df0: 54 41 42 4c 45 20 74 63 6c 31 28 78 29 3b 0a 20  TABLE tcl1(x);. 
5e00: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5e10: 63 6c 31 20 56 41 4c 55 45 53 28 27 22 27 29 2c  cl1 VALUES('"'),
5e20: 20 28 27 5b 27 29 2c 20 28 27 5d 27 29 2c 20 28   ('['), (']'), (
5e30: 27 5c 7b 27 29 2c 20 28 27 5c 7d 27 29 2c 20 28  '\{'), ('\}'), (
5e40: 27 3b 27 29 2c 20 28 27 24 27 29 3b 0a 20 20 7d  ';'), ('$');.  }
5e50: 0a 20 20 66 6f 72 65 61 63 68 20 7b 78 20 79 7d  .  foreach {x y}
5e60: 20 5b 63 61 74 63 68 63 6d 64 20 74 65 73 74 2e   [catchcmd test.
5e70: 64 62 20 22 2e 6d 6f 64 65 20 74 63 6c 5c 6e 73  db ".mode tcl\ns
5e80: 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 74 63 6c  elect * from tcl
5e90: 31 3b 22 5d 20 62 72 65 61 6b 0a 20 20 6c 69 73  1;"] break.  lis
5ea0: 74 20 24 78 20 24 79 20 5b 6c 6c 65 6e 67 74 68  t $x $y [llength
5eb0: 20 24 79 5d 0a 7d 20 7b 30 20 7b 22 5c 22 22 0a   $y].} {0 {"\"".
5ec0: 22 5b 22 0a 22 5d 22 0a 22 5c 5c 7b 22 0a 22 5c  "["."]"."\\{"."\
5ed0: 5c 7d 22 0a 22 3b 22 0a 22 24 22 7d 20 37 7d 0a  \}".";"."$"} 7}.
5ee0: 0a 23 20 54 65 73 74 20 75 73 69 6e 67 20 61 72  .# Test using ar
5ef0: 62 69 74 72 61 72 79 20 62 79 74 65 20 64 61 74  bitrary byte dat
5f00: 61 20 77 69 74 68 20 74 68 65 20 73 68 65 6c 6c  a with the shell
5f10: 20 76 69 61 20 73 74 61 6e 64 61 72 64 20 69 6e   via standard in
5f20: 70 75 74 2f 6f 75 74 70 75 74 2e 0a 23 0a 64 6f  put/output..#.do
5f30: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 35 2e 30  _test shell1-5.0
5f40: 20 7b 0a 20 20 23 0a 20 20 23 20 4e 4f 54 45 3a   {.  #.  # NOTE:
5f50: 20 53 6b 69 70 20 4e 55 4c 20 62 79 74 65 20 62   Skip NUL byte b
5f60: 65 63 61 75 73 65 20 69 74 20 61 70 70 65 61 72  ecause it appear
5f70: 73 20 74 6f 20 62 65 20 69 6e 63 6f 6d 70 61 74  s to be incompat
5f80: 69 62 6c 65 20 77 69 74 68 20 63 6f 6d 6d 61 6e  ible with comman
5f90: 64 0a 20 20 23 20 20 20 20 20 20 20 73 68 65 6c  d.  #       shel
5fa0: 6c 20 61 72 67 75 6d 65 6e 74 20 70 61 72 73 69  l argument parsi
5fb0: 6e 67 2e 0a 20 20 23 0a 20 20 66 6f 72 20 7b 73  ng..  #.  for {s
5fc0: 65 74 20 69 20 31 7d 20 7b 24 69 20 3c 20 32 35  et i 1} {$i < 25
5fd0: 36 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  6} {incr i} {.  
5fe0: 20 20 23 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20    #.    # NOTE: 
5ff0: 44 75 65 20 74 6f 20 68 6f 77 20 74 68 65 20 54  Due to how the T
6000: 63 6c 20 5b 65 78 65 63 5d 20 63 6f 6d 6d 61 6e  cl [exec] comman
6010: 64 20 77 6f 72 6b 73 20 28 69 2e 65 2e 20 77 68  d works (i.e. wh
6020: 65 72 65 20 69 74 20 74 72 65 61 74 73 0a 20 20  ere it treats.  
6030: 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e    #       comman
6040: 64 20 63 68 61 6e 6e 65 6c 73 20 6f 70 65 6e 65  d channels opene
6050: 64 20 66 6f 72 20 69 74 20 61 73 20 74 65 78 74  d for it as text
6060: 75 61 6c 20 6f 6e 65 73 29 2c 20 74 68 65 20 63  ual ones), the c
6070: 61 72 72 69 61 67 65 0a 20 20 20 20 23 20 20 20  arriage.    #   
6080: 20 20 20 20 72 65 74 75 72 6e 20 63 68 61 72 61      return chara
6090: 63 74 65 72 20 28 61 6e 64 20 6f 6e 20 57 69 6e  cter (and on Win
60a0: 64 6f 77 73 2c 20 74 68 65 20 65 6e 64 2d 6f 66  dows, the end-of
60b0: 2d 66 69 6c 65 20 63 68 61 72 61 63 74 65 72 29  -file character)
60c0: 0a 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6e  .    #       can
60d0: 6e 6f 74 20 62 65 20 75 73 65 64 20 68 65 72 65  not be used here
60e0: 2e 0a 20 20 20 20 23 0a 20 20 20 20 69 66 20 7b  ..    #.    if {
60f0: 24 69 3d 3d 30 78 30 44 20 7c 7c 20 28 24 74 63  $i==0x0D || ($tc
6100: 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66  l_platform(platf
6110: 6f 72 6d 29 3d 3d 22 77 69 6e 64 6f 77 73 22 20  orm)=="windows" 
6120: 26 26 20 24 69 3d 3d 30 78 31 41 29 7d 20 7b 0a  && $i==0x1A)} {.
6130: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20        continue. 
6140: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 68 65 78     }.    set hex
6150: 20 5b 66 6f 72 6d 61 74 20 25 30 32 58 20 24 69   [format %02X $i
6160: 5d 0a 20 20 20 20 73 65 74 20 63 68 61 72 20 5b  ].    set char [
6170: 73 75 62 73 74 20 5c 5c 78 24 68 65 78 5d 3b 20  subst \\x$hex]; 
6180: 73 65 74 20 6f 6c 64 43 68 61 72 20 24 63 68 61  set oldChar $cha
6190: 72 0a 20 20 20 20 73 65 74 20 65 73 63 61 70 65  r.    set escape
61a0: 73 20 5b 6c 69 73 74 5d 0a 20 20 20 20 69 66 20  s [list].    if 
61b0: 7b 24 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70  {$tcl_platform(p
61c0: 6c 61 74 66 6f 72 6d 29 3d 3d 22 77 69 6e 64 6f  latform)=="windo
61d0: 77 73 22 7d 20 7b 0a 20 20 20 20 20 20 23 0a 20  ws"} {.      #. 
61e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 6e 20       # NOTE: On 
61f0: 57 69 6e 64 6f 77 73 2c 20 77 65 20 6e 65 65 64  Windows, we need
6200: 20 74 6f 20 65 73 63 61 70 65 20 61 6c 6c 20 74   to escape all t
6210: 68 65 20 77 68 69 74 65 73 70 61 63 65 20 63 68  he whitespace ch
6220: 61 72 61 63 74 65 72 73 2c 0a 20 20 20 20 20 20  aracters,.      
6230: 23 20 20 20 20 20 20 20 74 68 65 20 61 6c 61 72  #       the alar
6240: 6d 20 28 5c 61 29 20 63 68 61 72 61 63 74 65 72  m (\a) character
6250: 2c 20 61 6e 64 20 74 68 6f 73 65 20 77 69 74 68  , and those with
6260: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
6270: 20 74 6f 0a 20 20 20 20 20 20 23 20 20 20 20 20   to.      #     
6280: 20 20 74 68 65 20 53 51 4c 69 74 65 20 73 68 65    the SQLite she
6290: 6c 6c 20 69 74 73 65 6c 66 2e 0a 20 20 20 20 20  ll itself..     
62a0: 20 23 0a 20 20 20 20 20 20 73 65 74 20 65 73 63   #.      set esc
62b0: 61 70 65 73 20 5b 6c 69 73 74 20 5c 0a 20 20 20  apes [list \.   
62c0: 20 20 20 20 20 20 20 5c 61 20 5c 5c 61 20 5c 62         \a \\a \b
62d0: 20 5c 5c 62 20 5c 74 20 5c 5c 74 20 5c 6e 20 5c   \\b \t \\t \n \
62e0: 5c 6e 20 5c 76 20 5c 5c 76 20 5c 66 20 5c 5c 66  \n \v \\v \f \\f
62f0: 20 5c 72 20 5c 5c 72 20 5c 0a 20 20 20 20 20 20   \r \\r \.      
6300: 20 20 20 20 22 20 22 20 22 5c 22 20 5c 22 22 20      " " "\" \"" 
6310: 5c 22 20 5c 5c 5c 22 20 27 20 5c 22 27 5c 22 20  \" \\\" ' \"'\" 
6320: 5c 5c 20 5c 5c 5c 5c 5d 0a 20 20 20 20 7d 20 65  \\ \\\\].    } e
6330: 6c 73 65 20 7b 0a 20 20 20 20 20 20 23 0a 20 20  lse {.      #.  
6340: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 6e 20 55      # NOTE: On U
6350: 6e 69 78 2c 20 77 65 20 6e 65 65 64 20 74 6f 20  nix, we need to 
6360: 65 73 63 61 70 65 20 6d 6f 73 74 20 6f 66 20 74  escape most of t
6370: 68 65 20 77 68 69 74 65 73 70 61 63 65 20 63 68  he whitespace ch
6380: 61 72 61 63 74 65 72 73 0a 20 20 20 20 20 20 23  aracters.      #
6390: 20 20 20 20 20 20 20 61 6e 64 20 74 68 6f 73 65         and those
63a0: 20 77 69 74 68 20 73 70 65 63 69 61 6c 20 6d 65   with special me
63b0: 61 6e 69 6e 67 20 74 6f 20 74 68 65 20 53 51 4c  aning to the SQL
63c0: 69 74 65 20 73 68 65 6c 6c 20 69 74 73 65 6c 66  ite shell itself
63d0: 2e 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #       
63e0: 54 68 65 20 61 6c 61 72 6d 20 28 5c 61 29 2c 20  The alarm (\a), 
63f0: 62 61 63 6b 73 70 61 63 65 20 28 5c 62 29 2c 20  backspace (\b), 
6400: 61 6e 64 20 63 61 72 72 69 61 67 65 2d 72 65 74  and carriage-ret
6410: 75 72 6e 20 28 5c 72 29 0a 20 20 20 20 20 20 23  urn (\r).      #
6420: 20 20 20 20 20 20 20 63 68 61 72 61 63 74 65 72         character
6430: 73 20 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20  s do not appear 
6440: 74 6f 20 72 65 71 75 69 72 65 20 65 73 63 61 70  to require escap
6450: 69 6e 67 20 6f 6e 20 55 6e 69 78 2e 20 20 46 6f  ing on Unix.  Fo
6460: 72 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  r.      #       
6470: 74 68 65 20 61 6c 61 72 6d 20 61 6e 64 20 62 61  the alarm and ba
6480: 63 6b 73 70 61 63 65 20 63 68 61 72 61 63 74 65  ckspace characte
6490: 72 73 2c 20 74 68 69 73 20 69 73 20 70 72 6f 62  rs, this is prob
64a0: 61 62 6c 79 20 64 75 65 20 74 6f 0a 20 20 20 20  ably due to.    
64b0: 20 20 23 20 20 20 20 20 20 20 64 69 66 66 65 72    #       differ
64c0: 65 6e 63 65 73 20 69 6e 20 74 68 65 20 63 6f 6d  ences in the com
64d0: 6d 61 6e 64 20 73 68 65 6c 6c 2e 20 20 46 6f 72  mand shell.  For
64e0: 20 74 68 65 20 63 61 72 72 69 61 67 65 2d 72 65   the carriage-re
64f0: 74 75 72 6e 2c 0a 20 20 20 20 20 20 23 20 20 20  turn,.      #   
6500: 20 20 20 20 69 74 20 69 73 20 70 72 6f 62 61 62      it is probab
6510: 6c 79 20 64 75 65 20 74 6f 20 64 69 66 66 65 72  ly due to differ
6520: 65 6e 63 65 73 20 69 6e 20 68 6f 77 20 54 63 6c  ences in how Tcl
6530: 20 68 61 6e 64 6c 65 73 20 63 6f 6d 6d 61 6e 64   handles command
6540: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
6550: 68 61 6e 6e 65 6c 20 65 6e 64 2d 6f 66 2d 6c 69  hannel end-of-li
6560: 6e 65 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73 2e  ne translations.
6570: 0a 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 73  .      #.      s
6580: 65 74 20 65 73 63 61 70 65 73 20 5b 6c 69 73 74  et escapes [list
6590: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 5c 74 20   \.          \t 
65a0: 5c 5c 74 20 5c 6e 20 5c 5c 6e 20 5c 76 20 5c 5c  \\t \n \\n \v \\
65b0: 76 20 5c 66 20 5c 5c 66 20 5c 0a 20 20 20 20 20  v \f \\f \.     
65c0: 20 20 20 20 20 22 20 22 20 22 5c 22 20 5c 22 22       " " "\" \""
65d0: 20 5c 22 20 5c 5c 5c 22 20 27 20 5c 22 27 5c 22   \" \\\" ' \"'\"
65e0: 20 5c 5c 20 5c 5c 5c 5c 5d 0a 20 20 20 20 7d 0a   \\ \\\\].    }.
65f0: 20 20 20 20 73 65 74 20 63 68 61 72 20 5b 73 74      set char [st
6600: 72 69 6e 67 20 6d 61 70 20 24 65 73 63 61 70 65  ring map $escape
6610: 73 20 24 63 68 61 72 5d 0a 20 20 20 20 73 65 74  s $char].    set
6620: 20 78 20 5b 63 61 74 63 68 63 6d 64 65 78 20 74   x [catchcmdex t
6630: 65 73 74 2e 64 62 20 22 2e 70 72 69 6e 74 20 24  est.db ".print $
6640: 63 68 61 72 5c 6e 22 5d 0a 20 20 20 20 73 65 74  char\n"].    set
6650: 20 63 6f 64 65 20 5b 6c 69 6e 64 65 78 20 24 78   code [lindex $x
6660: 20 30 5d 0a 20 20 20 20 73 65 74 20 72 65 73 20   0].    set res 
6670: 5b 6c 69 6e 64 65 78 20 24 78 20 31 5d 0a 20 20  [lindex $x 1].  
6680: 20 20 69 66 20 7b 24 63 6f 64 65 20 6e 65 20 22    if {$code ne "
6690: 30 22 7d 20 7b 0a 20 20 20 20 20 20 65 72 72 6f  0"} {.      erro
66a0: 72 20 22 66 61 69 6c 65 64 20 77 69 74 68 20 65  r "failed with e
66b0: 72 72 6f 72 3a 20 24 72 65 73 22 0a 20 20 20 20  rror: $res".    
66c0: 7d 0a 20 20 20 20 69 66 20 7b 24 72 65 73 20 6e  }.    if {$res n
66d0: 65 20 22 24 6f 6c 64 43 68 61 72 5c 6e 22 7d 20  e "$oldChar\n"} 
66e0: 7b 0a 20 20 20 20 20 20 65 72 72 6f 72 20 22 66  {.      error "f
66f0: 61 69 6c 65 64 20 77 69 74 68 20 62 79 74 65 20  ailed with byte 
6700: 24 68 65 78 20 6d 69 73 6d 61 74 63 68 22 0a 20  $hex mismatch". 
6710: 20 20 20 7d 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 66     }.  }.} {}..f
6720: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.