/ Hex Artifact Content
Login

Artifact d13ff516e3fcd4061bd072f56fd1551f2bf7fe52:


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 69 66 20 7b 24 74 63 6c 5f 70 6c  .tcl.if {$tcl_pl
02a0: 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29  atform(platform)
02b0: 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 20  =="windows"} {. 
02c0: 20 73 65 74 20 43 4c 49 20 22 73 71 6c 69 74 65   set CLI "sqlite
02d0: 33 2e 65 78 65 22 0a 7d 20 65 6c 73 65 20 7b 0a  3.exe".} else {.
02e0: 20 20 73 65 74 20 43 4c 49 20 22 2e 2f 73 71 6c    set CLI "./sql
02f0: 69 74 65 33 22 0a 7d 0a 69 66 20 7b 21 5b 66 69  ite3".}.if {![fi
0300: 6c 65 20 65 78 65 63 75 74 61 62 6c 65 20 24 43  le executable $C
0310: 4c 49 5d 7d 20 7b 0a 20 20 66 69 6e 69 73 68 5f  LI]} {.  finish_
0320: 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a  test.  return.}.
0330: 64 62 20 63 6c 6f 73 65 0a 66 6f 72 63 65 64 65  db close.forcede
0340: 6c 65 74 65 20 74 65 73 74 2e 64 62 20 74 65 73  lete test.db tes
0350: 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 20 74 65 73  t.db-journal tes
0360: 74 2e 64 62 2d 77 61 6c 0a 73 71 6c 69 74 65 33  t.db-wal.sqlite3
0370: 20 64 62 20 74 65 73 74 2e 64 62 0a 0a 23 2d 2d   db test.db..#--
0380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73  ----------.# Tes
03d0: 74 20 63 61 73 65 73 20 73 68 65 6c 6c 31 2d 31  t cases shell1-1
03e0: 2e 2a 3a 20 42 61 73 69 63 20 63 6f 6d 6d 61 6e  .*: Basic comman
03f0: 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 68 61  d line option ha
0400: 6e 64 6c 69 6e 67 2e 0a 23 0a 0a 23 20 69 6e 76  ndling..#..# inv
0410: 61 6c 69 64 20 6f 70 74 69 6f 6e 0a 64 6f 5f 74  alid option.do_t
0420: 65 73 74 20 73 68 65 6c 6c 31 2d 31 2e 31 2e 31  est shell1-1.1.1
0430: 20 7b 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61   {.  set res [ca
0440: 74 63 68 63 6d 64 20 22 2d 62 61 64 20 74 65 73  tchcmd "-bad tes
0450: 74 2e 64 62 22 20 22 22 5d 0a 20 20 73 65 74 20  t.db" ""].  set 
0460: 72 63 20 5b 6c 69 6e 64 65 78 20 24 72 65 73 20  rc [lindex $res 
0470: 30 5d 0a 20 20 6c 69 73 74 20 24 72 63 20 5c 0a  0].  list $rc \.
0480: 20 20 20 20 20 20 20 5b 72 65 67 65 78 70 20 7b         [regexp {
0490: 45 72 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 6f  Error: unknown o
04a0: 70 74 69 6f 6e 3a 20 2d 62 61 64 7d 20 24 72 65  ption: -bad} $re
04b0: 73 5d 0a 7d 20 7b 31 20 31 7d 0a 23 20 65 72 72  s].} {1 1}.# err
04c0: 6f 72 20 6f 6e 20 65 78 74 72 61 20 6f 70 74 69  or on extra opti
04d0: 6f 6e 73 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  ons.do_test shel
04e0: 6c 31 2d 31 2e 31 2e 32 20 7b 0a 20 20 73 65 74  l1-1.1.2 {.  set
04f0: 20 72 65 73 20 5b 63 61 74 63 68 63 6d 64 20 22   res [catchcmd "
0500: 2d 62 61 64 20 74 65 73 74 2e 64 62 20 5c 22 73  -bad test.db \"s
0510: 65 6c 65 63 74 20 33 5c 22 20 5c 22 73 65 6c 65  elect 3\" \"sele
0520: 63 74 20 34 5c 22 22 20 22 22 5d 0a 20 20 73 65  ct 4\"" ""].  se
0530: 74 20 72 63 20 5b 6c 69 6e 64 65 78 20 24 72 65  t rc [lindex $re
0540: 73 20 30 5d 0a 20 20 6c 69 73 74 20 24 72 63 20  s 0].  list $rc 
0550: 5c 0a 20 20 20 20 20 20 20 5b 72 65 67 65 78 70  \.       [regexp
0560: 20 7b 45 72 72 6f 72 3a 20 74 6f 6f 20 6d 61 6e   {Error: too man
0570: 79 20 6f 70 74 69 6f 6e 73 3a 20 22 73 65 6c 65  y options: "sele
0580: 63 74 20 34 22 7d 20 24 72 65 73 5d 0a 7d 20 7b  ct 4"} $res].} {
0590: 31 20 31 7d 0a 23 20 65 72 72 6f 72 20 6f 6e 20  1 1}.# error on 
05a0: 65 78 74 72 61 20 6f 70 74 69 6f 6e 73 0a 64 6f  extra options.do
05b0: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 31 2e 31  _test shell1-1.1
05c0: 2e 33 20 7b 0a 20 20 73 65 74 20 72 65 73 20 5b  .3 {.  set res [
05d0: 63 61 74 63 68 63 6d 64 20 22 2d 62 61 64 20 46  catchcmd "-bad F
05e0: 4f 4f 20 74 65 73 74 2e 64 62 20 42 41 44 22 20  OO test.db BAD" 
05f0: 22 2e 71 75 69 74 22 5d 0a 20 20 73 65 74 20 72  ".quit"].  set r
0600: 63 20 5b 6c 69 6e 64 65 78 20 24 72 65 73 20 30  c [lindex $res 0
0610: 5d 0a 20 20 6c 69 73 74 20 24 72 63 20 5c 0a 20  ].  list $rc \. 
0620: 20 20 20 20 20 20 5b 72 65 67 65 78 70 20 7b 45        [regexp {E
0630: 72 72 6f 72 3a 20 74 6f 6f 20 6d 61 6e 79 20 6f  rror: too many o
0640: 70 74 69 6f 6e 73 3a 20 22 42 41 44 22 7d 20 24  ptions: "BAD"} $
0650: 72 65 73 5d 0a 7d 20 7b 31 20 31 7d 0a 0a 23 20  res].} {1 1}..# 
0660: 2d 68 65 6c 70 0a 64 6f 5f 74 65 73 74 20 73 68  -help.do_test sh
0670: 65 6c 6c 31 2d 31 2e 32 2e 31 20 7b 0a 20 20 73  ell1-1.2.1 {.  s
0680: 65 74 20 72 65 73 20 5b 63 61 74 63 68 63 6d 64  et res [catchcmd
0690: 20 22 2d 68 65 6c 70 20 74 65 73 74 2e 64 62 22   "-help test.db"
06a0: 20 22 22 5d 0a 20 20 73 65 74 20 72 63 20 5b 6c   ""].  set rc [l
06b0: 69 6e 64 65 78 20 24 72 65 73 20 30 5d 0a 20 20  index $res 0].  
06c0: 6c 69 73 74 20 24 72 63 20 5c 0a 20 20 20 20 20  list $rc \.     
06d0: 20 20 5b 72 65 67 65 78 70 20 7b 55 73 61 67 65    [regexp {Usage
06e0: 7d 20 24 72 65 73 5d 20 5c 0a 20 20 20 20 20 20  } $res] \.      
06f0: 20 5b 72 65 67 65 78 70 20 7b 5c 2d 69 6e 69 74   [regexp {\-init
0700: 7d 20 24 72 65 73 5d 20 5c 0a 20 20 20 20 20 20  } $res] \.      
0710: 20 5b 72 65 67 65 78 70 20 7b 5c 2d 76 65 72 73   [regexp {\-vers
0720: 69 6f 6e 7d 20 24 72 65 73 5d 0a 7d 20 7b 31 20  ion} $res].} {1 
0730: 31 20 31 20 31 7d 0a 0a 23 20 2d 69 6e 69 74 20  1 1 1}..# -init 
0740: 66 69 6c 65 6e 61 6d 65 20 20 20 20 20 20 20 72  filename       r
0750: 65 61 64 2f 70 72 6f 63 65 73 73 20 6e 61 6d 65  ead/process name
0760: 64 20 66 69 6c 65 0a 64 6f 5f 74 65 73 74 20 73  d file.do_test s
0770: 68 65 6c 6c 31 2d 31 2e 33 2e 31 20 7b 0a 20 20  hell1-1.3.1 {.  
0780: 63 61 74 63 68 63 6d 64 20 22 2d 69 6e 69 74 20  catchcmd "-init 
0790: 46 4f 4f 20 74 65 73 74 2e 64 62 22 20 22 22 0a  FOO test.db" "".
07a0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
07b0: 20 73 68 65 6c 6c 31 2d 31 2e 33 2e 32 20 7b 0a   shell1-1.3.2 {.
07c0: 20 20 73 65 74 20 72 65 73 20 5b 63 61 74 63 68    set res [catch
07d0: 63 6d 64 20 22 2d 69 6e 69 74 20 46 4f 4f 20 74  cmd "-init FOO t
07e0: 65 73 74 2e 64 62 20 2e 71 75 69 74 20 42 41 44  est.db .quit BAD
07f0: 22 20 22 22 5d 0a 20 20 73 65 74 20 72 63 20 5b  " ""].  set rc [
0800: 6c 69 6e 64 65 78 20 24 72 65 73 20 30 5d 0a 20  lindex $res 0]. 
0810: 20 6c 69 73 74 20 24 72 63 20 5c 0a 20 20 20 20   list $rc \.    
0820: 20 20 20 5b 72 65 67 65 78 70 20 7b 45 72 72 6f     [regexp {Erro
0830: 72 3a 20 74 6f 6f 20 6d 61 6e 79 20 6f 70 74 69  r: too many opti
0840: 6f 6e 73 3a 20 22 42 41 44 22 7d 20 24 72 65 73  ons: "BAD"} $res
0850: 5d 0a 7d 20 7b 31 20 31 7d 0a 0a 23 20 2d 65 63  ].} {1 1}..# -ec
0860: 68 6f 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ho              
0870: 20 20 70 72 69 6e 74 20 63 6f 6d 6d 61 6e 64 73    print commands
0880: 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6f   before executio
0890: 6e 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  n.do_test shell1
08a0: 2d 31 2e 34 2e 31 20 7b 0a 20 20 63 61 74 63 68  -1.4.1 {.  catch
08b0: 63 6d 64 20 22 2d 65 63 68 6f 20 74 65 73 74 2e  cmd "-echo test.
08c0: 64 62 22 20 22 22 20 0a 7d 20 7b 30 20 7b 7d 7d  db" "" .} {0 {}}
08d0: 0a 0a 23 20 2d 5b 6e 6f 5d 68 65 61 64 65 72 20  ..# -[no]header 
08e0: 20 20 20 20 20 20 20 20 20 74 75 72 6e 20 68 65           turn he
08f0: 61 64 65 72 73 20 6f 6e 20 6f 72 20 6f 66 66 0a  aders on or off.
0900: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 31  do_test shell1-1
0910: 2e 35 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d  .5.1 {.  catchcm
0920: 64 20 22 2d 68 65 61 64 65 72 20 74 65 73 74 2e  d "-header test.
0930: 64 62 22 20 22 22 20 0a 7d 20 7b 30 20 7b 7d 7d  db" "" .} {0 {}}
0940: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
0950: 31 2e 35 2e 32 20 7b 0a 20 20 63 61 74 63 68 63  1.5.2 {.  catchc
0960: 6d 64 20 22 2d 6e 6f 68 65 61 64 65 72 20 74 65  md "-noheader te
0970: 73 74 2e 64 62 22 20 22 22 20 0a 7d 20 7b 30 20  st.db" "" .} {0 
0980: 7b 7d 7d 0a 0a 23 20 2d 62 61 69 6c 20 20 20 20  {}}..# -bail    
0990: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6f 70              stop
09a0: 20 61 66 74 65 72 20 68 69 74 74 69 6e 67 20 61   after hitting a
09b0: 6e 20 65 72 72 6f 72 0a 64 6f 5f 74 65 73 74 20  n error.do_test 
09c0: 73 68 65 6c 6c 31 2d 31 2e 36 2e 31 20 7b 0a 20  shell1-1.6.1 {. 
09d0: 20 63 61 74 63 68 63 6d 64 20 22 2d 62 61 69 6c   catchcmd "-bail
09e0: 20 74 65 73 74 2e 64 62 22 20 22 22 20 0a 7d 20   test.db" "" .} 
09f0: 7b 30 20 7b 7d 7d 0a 0a 23 20 2d 69 6e 74 65 72  {0 {}}..# -inter
0a00: 61 63 74 69 76 65 20 20 20 20 20 20 20 20 20 66  active         f
0a10: 6f 72 63 65 20 69 6e 74 65 72 61 63 74 69 76 65  orce interactive
0a20: 20 49 2f 4f 0a 64 6f 5f 74 65 73 74 20 73 68 65   I/O.do_test she
0a30: 6c 6c 31 2d 31 2e 37 2e 31 20 7b 0a 20 20 73 65  ll1-1.7.1 {.  se
0a40: 74 20 72 65 73 20 5b 63 61 74 63 68 63 6d 64 20  t res [catchcmd 
0a50: 22 2d 69 6e 74 65 72 61 63 74 69 76 65 20 74 65  "-interactive te
0a60: 73 74 2e 64 62 22 20 22 2e 71 75 69 74 22 5d 0a  st.db" ".quit"].
0a70: 20 20 73 65 74 20 72 63 20 5b 6c 69 6e 64 65 78    set rc [lindex
0a80: 20 24 72 65 73 20 30 5d 0a 20 20 6c 69 73 74 20   $res 0].  list 
0a90: 24 72 63 20 5c 0a 20 20 20 20 20 20 20 5b 72 65  $rc \.       [re
0aa0: 67 65 78 70 20 7b 53 51 4c 69 74 65 20 76 65 72  gexp {SQLite ver
0ab0: 73 69 6f 6e 7d 20 24 72 65 73 5d 20 5c 0a 20 20  sion} $res] \.  
0ac0: 20 20 20 20 20 5b 72 65 67 65 78 70 20 7b 45 6e       [regexp {En
0ad0: 74 65 72 20 22 2e 68 65 6c 70 22 20 66 6f 72 20  ter ".help" for 
0ae0: 75 73 61 67 65 20 68 69 6e 74 73 7d 20 24 72 65  usage hints} $re
0af0: 73 5d 0a 7d 20 7b 30 20 31 20 31 7d 0a 0a 23 20  s].} {0 1 1}..# 
0b00: 2d 62 61 74 63 68 20 20 20 20 20 20 20 20 20 20  -batch          
0b10: 20 20 20 20 20 66 6f 72 63 65 20 62 61 74 63 68       force batch
0b20: 20 49 2f 4f 0a 64 6f 5f 74 65 73 74 20 73 68 65   I/O.do_test she
0b30: 6c 6c 31 2d 31 2e 38 2e 31 20 7b 0a 20 20 63 61  ll1-1.8.1 {.  ca
0b40: 74 63 68 63 6d 64 20 22 2d 62 61 74 63 68 20 74  tchcmd "-batch t
0b50: 65 73 74 2e 64 62 22 20 22 22 20 0a 7d 20 7b 30  est.db" "" .} {0
0b60: 20 7b 7d 7d 0a 0a 23 20 2d 63 6f 6c 75 6d 6e 20   {}}..# -column 
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
0b80: 20 6f 75 74 70 75 74 20 6d 6f 64 65 20 74 6f 20   output mode to 
0b90: 27 63 6f 6c 75 6d 6e 27 0a 64 6f 5f 74 65 73 74  'column'.do_test
0ba0: 20 73 68 65 6c 6c 31 2d 31 2e 39 2e 31 20 7b 0a   shell1-1.9.1 {.
0bb0: 20 20 63 61 74 63 68 63 6d 64 20 22 2d 63 6f 6c    catchcmd "-col
0bc0: 75 6d 6e 20 74 65 73 74 2e 64 62 22 20 22 22 20  umn test.db" "" 
0bd0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20 2d 63 73  .} {0 {}}..# -cs
0be0: 76 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v               
0bf0: 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64    set output mod
0c00: 65 20 74 6f 20 27 63 73 76 27 0a 64 6f 5f 74 65  e to 'csv'.do_te
0c10: 73 74 20 73 68 65 6c 6c 31 2d 31 2e 31 30 2e 31  st shell1-1.10.1
0c20: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 2d   {.  catchcmd "-
0c30: 63 73 76 20 74 65 73 74 2e 64 62 22 20 22 22 20  csv test.db" "" 
0c40: 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20 2d 68 74  .} {0 {}}..# -ht
0c50: 6d 6c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ml              
0c60: 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64    set output mod
0c70: 65 20 74 6f 20 48 54 4d 4c 0a 64 6f 5f 74 65 73  e to HTML.do_tes
0c80: 74 20 73 68 65 6c 6c 31 2d 31 2e 31 31 2e 31 20  t shell1-1.11.1 
0c90: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 2d 68  {.  catchcmd "-h
0ca0: 74 6d 6c 20 74 65 73 74 2e 64 62 22 20 22 22 20  tml test.db" "" 
0cb0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20 2d 6c 69  .} {0 {}}..# -li
0cc0: 6e 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ne              
0cd0: 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d 6f 64    set output mod
0ce0: 65 20 74 6f 20 27 6c 69 6e 65 27 0a 64 6f 5f 74  e to 'line'.do_t
0cf0: 65 73 74 20 73 68 65 6c 6c 31 2d 31 2e 31 32 2e  est shell1-1.12.
0d00: 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  1 {.  catchcmd "
0d10: 2d 6c 69 6e 65 20 74 65 73 74 2e 64 62 22 20 22  -line test.db" "
0d20: 22 20 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20 2d  " .} {0 {}}..# -
0d30: 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20 20  list            
0d40: 20 20 20 20 73 65 74 20 6f 75 74 70 75 74 20 6d      set output m
0d50: 6f 64 65 20 74 6f 20 27 6c 69 73 74 27 0a 64 6f  ode to 'list'.do
0d60: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 31 2e 31  _test shell1-1.1
0d70: 33 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64  3.1 {.  catchcmd
0d80: 20 22 2d 6c 69 73 74 20 74 65 73 74 2e 64 62 22   "-list test.db"
0d90: 20 22 22 20 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23   "" .} {0 {}}..#
0da0: 20 2d 73 65 70 61 72 61 74 6f 72 20 27 78 27 20   -separator 'x' 
0db0: 20 20 20 20 20 20 73 65 74 20 6f 75 74 70 75 74        set output
0dc0: 20 66 69 65 6c 64 20 73 65 70 61 72 61 74 6f 72   field separator
0dd0: 20 28 7c 29 0a 64 6f 5f 74 65 73 74 20 73 68 65   (|).do_test she
0de0: 6c 6c 31 2d 31 2e 31 34 2e 31 20 7b 0a 20 20 63  ll1-1.14.1 {.  c
0df0: 61 74 63 68 63 6d 64 20 22 2d 73 65 70 61 72 61  atchcmd "-separa
0e00: 74 6f 72 20 27 78 27 20 74 65 73 74 2e 64 62 22  tor 'x' test.db"
0e10: 20 22 22 20 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f   "" .} {0 {}}.do
0e20: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 31 2e 31  _test shell1-1.1
0e30: 34 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d 64  4.2 {.  catchcmd
0e40: 20 22 2d 73 65 70 61 72 61 74 6f 72 20 78 20 74   "-separator x t
0e50: 65 73 74 2e 64 62 22 20 22 22 20 0a 7d 20 7b 30  est.db" "" .} {0
0e60: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65   {}}.do_test she
0e70: 6c 6c 31 2d 31 2e 31 34 2e 33 20 7b 0a 20 20 73  ll1-1.14.3 {.  s
0e80: 65 74 20 72 65 73 20 5b 63 61 74 63 68 63 6d 64  et res [catchcmd
0e90: 20 22 2d 73 65 70 61 72 61 74 6f 72 22 20 22 22   "-separator" ""
0ea0: 5d 0a 20 20 73 65 74 20 72 63 20 5b 6c 69 6e 64  ].  set rc [lind
0eb0: 65 78 20 24 72 65 73 20 30 5d 0a 20 20 6c 69 73  ex $res 0].  lis
0ec0: 74 20 24 72 63 20 5c 0a 20 20 20 20 20 20 20 5b  t $rc \.       [
0ed0: 72 65 67 65 78 70 20 7b 45 72 72 6f 72 3a 20 6d  regexp {Error: m
0ee0: 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 20  issing argument 
0ef0: 74 6f 20 2d 73 65 70 61 72 61 74 6f 72 7d 20 24  to -separator} $
0f00: 72 65 73 5d 0a 7d 20 7b 31 20 31 7d 0a 0a 23 20  res].} {1 1}..# 
0f10: 2d 73 74 61 74 73 20 20 20 20 20 20 20 20 20 20  -stats          
0f20: 20 20 20 20 20 70 72 69 6e 74 20 6d 65 6d 6f 72       print memor
0f30: 79 20 73 74 61 74 73 20 62 65 66 6f 72 65 20 65  y stats before e
0f40: 61 63 68 20 66 69 6e 61 6c 69 7a 65 0a 64 6f 5f  ach finalize.do_
0f50: 74 65 73 74 20 73 68 65 6c 6c 31 2d 31 2e 31 34  test shell1-1.14
0f60: 62 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64  b.1 {.  catchcmd
0f70: 20 22 2d 73 74 61 74 73 20 74 65 73 74 2e 64 62   "-stats test.db
0f80: 22 20 22 22 20 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a  " "" .} {0 {}}..
0f90: 23 20 2d 6e 75 6c 6c 76 61 6c 75 65 20 27 74 65  # -nullvalue 'te
0fa0: 78 74 27 20 20 20 20 73 65 74 20 74 65 78 74 20  xt'    set text 
0fb0: 73 74 72 69 6e 67 20 66 6f 72 20 4e 55 4c 4c 20  string for NULL 
0fc0: 76 61 6c 75 65 73 0a 64 6f 5f 74 65 73 74 20 73  values.do_test s
0fd0: 68 65 6c 6c 31 2d 31 2e 31 35 2e 31 20 7b 0a 20  hell1-1.15.1 {. 
0fe0: 20 63 61 74 63 68 63 6d 64 20 22 2d 6e 75 6c 6c   catchcmd "-null
0ff0: 76 61 6c 75 65 20 27 78 27 20 74 65 73 74 2e 64  value 'x' test.d
1000: 62 22 20 22 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  b" "".} {0 {}}.d
1010: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 31 2e  o_test shell1-1.
1020: 31 35 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d  15.2 {.  catchcm
1030: 64 20 22 2d 6e 75 6c 6c 76 61 6c 75 65 20 78 20  d "-nullvalue x 
1040: 74 65 73 74 2e 64 62 22 20 22 22 0a 7d 20 7b 30  test.db" "".} {0
1050: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65   {}}.do_test she
1060: 6c 6c 31 2d 31 2e 31 35 2e 33 20 7b 0a 20 20 73  ll1-1.15.3 {.  s
1070: 65 74 20 72 65 73 20 5b 63 61 74 63 68 63 6d 64  et res [catchcmd
1080: 20 22 2d 6e 75 6c 6c 76 61 6c 75 65 22 20 22 22   "-nullvalue" ""
1090: 5d 0a 20 20 73 65 74 20 72 63 20 5b 6c 69 6e 64  ].  set rc [lind
10a0: 65 78 20 24 72 65 73 20 30 5d 0a 20 20 6c 69 73  ex $res 0].  lis
10b0: 74 20 24 72 63 20 5c 0a 20 20 20 20 20 20 20 5b  t $rc \.       [
10c0: 72 65 67 65 78 70 20 7b 45 72 72 6f 72 3a 20 6d  regexp {Error: m
10d0: 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 20  issing argument 
10e0: 74 6f 20 2d 6e 75 6c 6c 76 61 6c 75 65 7d 20 24  to -nullvalue} $
10f0: 72 65 73 5d 0a 7d 20 7b 31 20 31 7d 0a 0a 23 20  res].} {1 1}..# 
1100: 2d 76 65 72 73 69 6f 6e 20 20 20 20 20 20 20 20  -version        
1110: 20 20 20 20 20 73 68 6f 77 20 53 51 4c 69 74 65       show SQLite
1120: 20 76 65 72 73 69 6f 6e 0a 64 6f 5f 74 65 73 74   version.do_test
1130: 20 73 68 65 6c 6c 31 2d 31 2e 31 36 2e 31 20 7b   shell1-1.16.1 {
1140: 0a 20 20 73 65 74 20 78 20 5b 63 61 74 63 68 63  .  set x [catchc
1150: 6d 64 20 22 2d 76 65 72 73 69 6f 6e 20 74 65 73  md "-version tes
1160: 74 2e 64 62 22 20 22 22 5d 0a 7d 20 7b 2f 33 2e  t.db" ""].} {/3.
1170: 5b 30 2d 39 2e 5d 2b 20 32 30 5c 64 5c 64 2d 5b  [0-9.]+ 20\d\d-[
1180: 30 31 5d 5c 64 2d 5c 64 5c 64 20 5c 64 5c 64 3a  01]\d-\d\d \d\d:
1190: 5c 64 5c 64 3a 5c 64 5c 64 20 5b 30 2d 39 61 2d  \d\d:\d\d [0-9a-
11a0: 66 5d 2b 2f 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  f]+/}..#--------
11b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11f0: 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65  ----.# Test case
1200: 73 20 73 68 65 6c 6c 31 2d 32 2e 2a 3a 20 42 61  s shell1-2.*: Ba
1210: 73 69 63 20 22 64 6f 74 22 20 63 6f 6d 6d 61 6e  sic "dot" comman
1220: 64 20 74 6f 6b 65 6e 20 70 61 72 73 69 6e 67 2e  d token parsing.
1230: 0a 23 0a 0a 23 20 63 68 65 63 6b 20 66 69 72 73  .#..# check firs
1240: 74 20 74 6f 6b 65 6e 20 68 61 6e 64 6c 69 6e 67  t token handling
1250: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
1260: 32 2e 31 2e 31 20 7b 0a 20 20 63 61 74 63 68 63  2.1.1 {.  catchc
1270: 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 66  md "test.db" ".f
1280: 6f 6f 22 20 0a 7d 20 7b 31 20 7b 45 72 72 6f 72  oo" .} {1 {Error
1290: 3a 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e  : unknown comman
12a0: 64 20 6f 72 20 69 6e 76 61 6c 69 64 20 61 72 67  d or invalid arg
12b0: 75 6d 65 6e 74 73 3a 20 20 22 66 6f 6f 22 2e 20  uments:  "foo". 
12c0: 45 6e 74 65 72 20 22 2e 68 65 6c 70 22 20 66 6f  Enter ".help" fo
12d0: 72 20 68 65 6c 70 7d 7d 0a 64 6f 5f 74 65 73 74  r help}}.do_test
12e0: 20 73 68 65 6c 6c 31 2d 32 2e 31 2e 32 20 7b 0a   shell1-2.1.2 {.
12f0: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
1300: 2e 64 62 22 20 22 2e 5c 22 66 6f 6f 20 4f 46 46  .db" ".\"foo OFF
1310: 5c 22 22 0a 7d 20 7b 31 20 7b 45 72 72 6f 72 3a  \"".} {1 {Error:
1320: 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61 6e 64   unknown command
1330: 20 6f 72 20 69 6e 76 61 6c 69 64 20 61 72 67 75   or invalid argu
1340: 6d 65 6e 74 73 3a 20 20 22 66 6f 6f 20 4f 46 46  ments:  "foo OFF
1350: 22 2e 20 45 6e 74 65 72 20 22 2e 68 65 6c 70 22  ". Enter ".help"
1360: 20 66 6f 72 20 68 65 6c 70 7d 7d 0a 64 6f 5f 74   for help}}.do_t
1370: 65 73 74 20 73 68 65 6c 6c 31 2d 32 2e 31 2e 33  est shell1-2.1.3
1380: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
1390: 65 73 74 2e 64 62 22 20 22 2e 5c 27 66 6f 6f 20  est.db" ".\'foo 
13a0: 4f 46 46 5c 27 22 0a 7d 20 7b 31 20 7b 45 72 72  OFF\'".} {1 {Err
13b0: 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d  or: unknown comm
13c0: 61 6e 64 20 6f 72 20 69 6e 76 61 6c 69 64 20 61  and or invalid a
13d0: 72 67 75 6d 65 6e 74 73 3a 20 20 22 66 6f 6f 20  rguments:  "foo 
13e0: 4f 46 46 22 2e 20 45 6e 74 65 72 20 22 2e 68 65  OFF". Enter ".he
13f0: 6c 70 22 20 66 6f 72 20 68 65 6c 70 7d 7d 0a 0a  lp" for help}}..
1400: 23 20 75 6e 62 61 6c 61 6e 63 65 64 20 71 75 6f  # unbalanced quo
1410: 74 65 73 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  tes.do_test shel
1420: 6c 31 2d 32 2e 32 2e 31 20 7b 0a 20 20 63 61 74  l1-2.2.1 {.  cat
1430: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
1440: 22 2e 5c 22 66 6f 6f 20 4f 46 46 22 0a 7d 20 7b  ".\"foo OFF".} {
1450: 31 20 7b 45 72 72 6f 72 3a 20 75 6e 6b 6e 6f 77  1 {Error: unknow
1460: 6e 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 69 6e 76  n command or inv
1470: 61 6c 69 64 20 61 72 67 75 6d 65 6e 74 73 3a 20  alid arguments: 
1480: 20 22 66 6f 6f 20 4f 46 46 22 2e 20 45 6e 74 65   "foo OFF". Ente
1490: 72 20 22 2e 68 65 6c 70 22 20 66 6f 72 20 68 65  r ".help" for he
14a0: 6c 70 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65  lp}}.do_test she
14b0: 6c 6c 31 2d 32 2e 32 2e 32 20 7b 0a 20 20 63 61  ll1-2.2.2 {.  ca
14c0: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
14d0: 20 22 2e 5c 27 66 6f 6f 20 4f 46 46 22 0a 7d 20   ".\'foo OFF".} 
14e0: 7b 31 20 7b 45 72 72 6f 72 3a 20 75 6e 6b 6e 6f  {1 {Error: unkno
14f0: 77 6e 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 69 6e  wn command or in
1500: 76 61 6c 69 64 20 61 72 67 75 6d 65 6e 74 73 3a  valid arguments:
1510: 20 20 22 66 6f 6f 20 4f 46 46 22 2e 20 45 6e 74    "foo OFF". Ent
1520: 65 72 20 22 2e 68 65 6c 70 22 20 66 6f 72 20 68  er ".help" for h
1530: 65 6c 70 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  elp}}.do_test sh
1540: 65 6c 6c 31 2d 32 2e 32 2e 33 20 7b 0a 20 20 63  ell1-2.2.3 {.  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 65 78 70 6c 61 69 6e 20 5c 22 4f 46  " ".explain \"OF
1570: 46 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  F".} {0 {}}.do_t
1580: 65 73 74 20 73 68 65 6c 6c 31 2d 32 2e 32 2e 34  est shell1-2.2.4
1590: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
15a0: 65 73 74 2e 64 62 22 20 22 2e 65 78 70 6c 61 69  est.db" ".explai
15b0: 6e 20 5c 27 4f 46 46 22 0a 7d 20 7b 30 20 7b 7d  n \'OFF".} {0 {}
15c0: 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  }.do_test shell1
15d0: 2d 32 2e 32 2e 35 20 7b 0a 20 20 63 61 74 63 68  -2.2.5 {.  catch
15e0: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
15f0: 6d 6f 64 65 20 5c 22 69 6e 73 65 72 74 20 46 4f  mode \"insert FO
1600: 4f 22 0a 7d 20 7b 31 20 7b 45 72 72 6f 72 3a 20  O".} {1 {Error: 
1610: 6d 6f 64 65 20 73 68 6f 75 6c 64 20 62 65 20 6f  mode should be o
1620: 6e 65 20 6f 66 3a 20 61 73 63 69 69 20 63 6f 6c  ne of: ascii col
1630: 75 6d 6e 20 63 73 76 20 68 74 6d 6c 20 69 6e 73  umn csv html ins
1640: 65 72 74 20 6c 69 6e 65 20 6c 69 73 74 20 74 61  ert line list ta
1650: 62 73 20 74 63 6c 7d 7d 0a 64 6f 5f 74 65 73 74  bs tcl}}.do_test
1660: 20 73 68 65 6c 6c 31 2d 32 2e 32 2e 36 20 7b 0a   shell1-2.2.6 {.
1670: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
1680: 2e 64 62 22 20 22 2e 6d 6f 64 65 20 5c 27 69 6e  .db" ".mode \'in
1690: 73 65 72 74 20 46 4f 4f 22 0a 7d 20 7b 31 20 7b  sert FOO".} {1 {
16a0: 45 72 72 6f 72 3a 20 6d 6f 64 65 20 73 68 6f 75  Error: mode shou
16b0: 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20 61 73  ld be one of: as
16c0: 63 69 69 20 63 6f 6c 75 6d 6e 20 63 73 76 20 68  cii column csv h
16d0: 74 6d 6c 20 69 6e 73 65 72 74 20 6c 69 6e 65 20  tml insert line 
16e0: 6c 69 73 74 20 74 61 62 73 20 74 63 6c 7d 7d 0a  list tabs tcl}}.
16f0: 0a 23 20 63 68 65 63 6b 20 6d 75 6c 74 69 70 6c  .# check multipl
1700: 65 20 74 6f 6b 65 6e 73 2c 20 61 6e 64 20 71 75  e tokens, and qu
1710: 6f 74 65 64 20 74 6f 6b 65 6e 73 0a 64 6f 5f 74  oted tokens.do_t
1720: 65 73 74 20 73 68 65 6c 6c 31 2d 32 2e 33 2e 31  est shell1-2.3.1
1730: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
1740: 65 73 74 2e 64 62 22 20 22 2e 65 78 70 6c 61 69  est.db" ".explai
1750: 6e 20 31 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  n 1".} {0 {}}.do
1760: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 32 2e 33  _test shell1-2.3
1770: 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .2 {.  catchcmd 
1780: 22 74 65 73 74 2e 64 62 22 20 22 2e 65 78 70 6c  "test.db" ".expl
1790: 61 69 6e 20 6f 6e 22 0a 7d 20 7b 30 20 7b 7d 7d  ain on".} {0 {}}
17a0: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
17b0: 32 2e 33 2e 33 20 7b 0a 20 20 63 61 74 63 68 63  2.3.3 {.  catchc
17c0: 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 65  md "test.db" ".e
17d0: 78 70 6c 61 69 6e 20 5c 22 31 20 32 20 33 5c 22  xplain \"1 2 3\"
17e0: 22 0a 7d 20 7b 31 20 7b 45 52 52 4f 52 3a 20 4e  ".} {1 {ERROR: N
17f0: 6f 74 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  ot a boolean val
1800: 75 65 3a 20 22 31 20 32 20 33 22 2e 20 41 73 73  ue: "1 2 3". Ass
1810: 75 6d 69 6e 67 20 22 6e 6f 22 2e 7d 7d 0a 64 6f  uming "no".}}.do
1820: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 32 2e 33  _test shell1-2.3
1830: 2e 34 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .4 {.  catchcmd 
1840: 22 74 65 73 74 2e 64 62 22 20 22 2e 65 78 70 6c  "test.db" ".expl
1850: 61 69 6e 20 5c 22 4f 46 46 5c 22 22 0a 7d 20 7b  ain \"OFF\"".} {
1860: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  0 {}}.do_test sh
1870: 65 6c 6c 31 2d 32 2e 33 2e 35 20 7b 0a 20 20 63  ell1-2.3.5 {.  c
1880: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
1890: 22 20 22 2e 5c 27 65 78 70 6c 61 69 6e 5c 27 20  " ".\'explain\' 
18a0: 5c 27 4f 46 46 5c 27 22 0a 7d 20 7b 30 20 7b 7d  \'OFF\'".} {0 {}
18b0: 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  }.do_test shell1
18c0: 2d 32 2e 33 2e 36 20 7b 0a 20 20 63 61 74 63 68  -2.3.6 {.  catch
18d0: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
18e0: 65 78 70 6c 61 69 6e 20 5c 27 4f 46 46 5c 27 22  explain \'OFF\'"
18f0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
1900: 74 20 73 68 65 6c 6c 31 2d 32 2e 33 2e 37 20 7b  t shell1-2.3.7 {
1910: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
1920: 74 2e 64 62 22 20 22 2e 5c 27 65 78 70 6c 61 69  t.db" ".\'explai
1930: 6e 5c 27 20 5c 27 4f 46 46 5c 27 22 0a 7d 20 7b  n\' \'OFF\'".} {
1940: 30 20 7b 7d 7d 0a 0a 23 20 63 68 65 63 6b 20 71  0 {}}..# check q
1950: 75 6f 74 65 64 20 61 72 67 73 20 61 72 65 20 75  uoted args are u
1960: 6e 71 75 6f 74 65 64 0a 64 6f 5f 74 65 73 74 20  nquoted.do_test 
1970: 73 68 65 6c 6c 31 2d 32 2e 34 2e 31 20 7b 0a 20  shell1-2.4.1 {. 
1980: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
1990: 64 62 22 20 22 2e 6d 6f 64 65 20 46 4f 4f 22 0a  db" ".mode FOO".
19a0: 7d 20 7b 31 20 7b 45 72 72 6f 72 3a 20 6d 6f 64  } {1 {Error: mod
19b0: 65 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20  e should be one 
19c0: 6f 66 3a 20 61 73 63 69 69 20 63 6f 6c 75 6d 6e  of: ascii column
19d0: 20 63 73 76 20 68 74 6d 6c 20 69 6e 73 65 72 74   csv html insert
19e0: 20 6c 69 6e 65 20 6c 69 73 74 20 74 61 62 73 20   line list tabs 
19f0: 74 63 6c 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  tcl}}.do_test sh
1a00: 65 6c 6c 31 2d 32 2e 34 2e 32 20 7b 0a 20 20 63  ell1-2.4.2 {.  c
1a10: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
1a20: 22 20 22 2e 6d 6f 64 65 20 63 73 76 22 0a 7d 20  " ".mode csv".} 
1a30: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  {0 {}}.do_test s
1a40: 68 65 6c 6c 31 2d 32 2e 34 2e 32 20 7b 0a 20 20  hell1-2.4.2 {.  
1a50: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
1a60: 62 22 20 22 2e 6d 6f 64 65 20 5c 22 63 73 76 5c  b" ".mode \"csv\
1a70: 22 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 0a 23 2d  "".} {0 {}}...#-
1a80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1aa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ab0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65  -----------.# Te
1ad0: 73 74 20 63 61 73 65 73 20 73 68 65 6c 6c 31 2d  st cases shell1-
1ae0: 33 2e 2a 3a 20 42 61 73 69 63 20 74 65 73 74 20  3.*: Basic test 
1af0: 74 68 61 74 20 22 64 6f 74 22 20 63 6f 6d 6d 61  that "dot" comma
1b00: 6e 64 20 63 61 6e 20 62 65 20 63 61 6c 6c 65 64  nd can be called
1b10: 2e 0a 23 0a 0a 23 20 2e 62 61 63 6b 75 70 20 3f  ..#..# .backup ?
1b20: 44 42 3f 20 46 49 4c 45 20 20 20 20 20 20 42 61  DB? FILE      Ba
1b30: 63 6b 75 70 20 44 42 20 28 64 65 66 61 75 6c 74  ckup DB (default
1b40: 20 22 6d 61 69 6e 22 29 20 74 6f 20 46 49 4c 45   "main") to FILE
1b50: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
1b60: 33 2e 31 2e 31 20 7b 0a 20 20 63 61 74 63 68 63  3.1.1 {.  catchc
1b70: 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 62  md "test.db" ".b
1b80: 61 63 6b 75 70 22 0a 7d 20 7b 31 20 7b 6d 69 73  ackup".} {1 {mis
1b90: 73 69 6e 67 20 46 49 4c 45 4e 41 4d 45 20 61 72  sing FILENAME ar
1ba0: 67 75 6d 65 6e 74 20 6f 6e 20 2e 62 61 63 6b 75  gument on .backu
1bb0: 70 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  p}}.do_test shel
1bc0: 6c 31 2d 33 2e 31 2e 32 20 7b 0a 20 20 63 61 74  l1-3.1.2 {.  cat
1bd0: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
1be0: 22 2e 62 61 63 6b 75 70 20 46 4f 4f 22 0a 7d 20  ".backup FOO".} 
1bf0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  {0 {}}.do_test s
1c00: 68 65 6c 6c 31 2d 33 2e 31 2e 33 20 7b 0a 20 20  hell1-3.1.3 {.  
1c10: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
1c20: 62 22 20 22 2e 62 61 63 6b 75 70 20 46 4f 4f 20  b" ".backup FOO 
1c30: 42 41 52 22 0a 7d 20 7b 31 20 7b 45 72 72 6f 72  BAR".} {1 {Error
1c40: 3a 20 75 6e 6b 6e 6f 77 6e 20 64 61 74 61 62 61  : unknown databa
1c50: 73 65 20 46 4f 4f 7d 7d 0a 64 6f 5f 74 65 73 74  se FOO}}.do_test
1c60: 20 73 68 65 6c 6c 31 2d 33 2e 31 2e 34 20 7b 0a   shell1-3.1.4 {.
1c70: 20 20 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67    # too many arg
1c80: 75 6d 65 6e 74 73 0a 20 20 63 61 74 63 68 63 6d  uments.  catchcm
1c90: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 62 61  d "test.db" ".ba
1ca0: 63 6b 75 70 20 46 4f 4f 20 42 41 52 20 42 41 44  ckup FOO BAR BAD
1cb0: 22 0a 7d 20 7b 31 20 7b 74 6f 6f 20 6d 61 6e 79  ".} {1 {too many
1cc0: 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 2e 62   arguments to .b
1cd0: 61 63 6b 75 70 7d 7d 0a 0a 23 20 2e 62 61 69 6c  ackup}}..# .bail
1ce0: 20 4f 4e 7c 4f 46 46 20 20 20 20 20 20 20 20 20   ON|OFF         
1cf0: 20 20 53 74 6f 70 20 61 66 74 65 72 20 68 69 74    Stop after hit
1d00: 74 69 6e 67 20 61 6e 20 65 72 72 6f 72 2e 20 20  ting an error.  
1d10: 44 65 66 61 75 6c 74 20 4f 46 46 0a 64 6f 5f 74  Default OFF.do_t
1d20: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 2e 31  est shell1-3.2.1
1d30: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
1d40: 65 73 74 2e 64 62 22 20 22 2e 62 61 69 6c 22 0a  est.db" ".bail".
1d50: 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 62 61  } {1 {Usage: .ba
1d60: 69 6c 20 6f 6e 7c 6f 66 66 7d 7d 0a 64 6f 5f 74  il on|off}}.do_t
1d70: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 2e 32  est shell1-3.2.2
1d80: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
1d90: 65 73 74 2e 64 62 22 20 22 2e 62 61 69 6c 20 4f  est.db" ".bail O
1da0: 4e 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  N".} {0 {}}.do_t
1db0: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 2e 33  est shell1-3.2.3
1dc0: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
1dd0: 65 73 74 2e 64 62 22 20 22 2e 62 61 69 6c 20 4f  est.db" ".bail O
1de0: 46 46 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  FF".} {0 {}}.do_
1df0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 2e  test shell1-3.2.
1e00: 34 20 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e 79  4 {.  # too many
1e10: 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 63 61 74   arguments.  cat
1e20: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
1e30: 22 2e 62 61 69 6c 20 4f 46 46 20 42 41 44 22 0a  ".bail OFF BAD".
1e40: 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 62 61  } {1 {Usage: .ba
1e50: 69 6c 20 6f 6e 7c 6f 66 66 7d 7d 0a 0a 23 20 2e  il on|off}}..# .
1e60: 64 61 74 61 62 61 73 65 73 20 20 20 20 20 20 20  databases       
1e70: 20 20 20 20 20 20 4c 69 73 74 20 6e 61 6d 65 73        List names
1e80: 20 61 6e 64 20 66 69 6c 65 73 20 6f 66 20 61 74   and files of at
1e90: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1ea0: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
1eb0: 33 2e 33 2e 31 20 7b 0a 20 20 63 61 74 63 68 63  3.3.1 {.  catchc
1ec0: 6d 64 20 22 2d 63 73 76 20 74 65 73 74 2e 64 62  md "-csv test.db
1ed0: 22 20 22 2e 64 61 74 61 62 61 73 65 73 22 0a 7d  " ".databases".}
1ee0: 20 22 2f 30 20 2b 2e 2a 6d 61 69 6e 20 2b 5b 73   "/0 +.*main +[s
1ef0: 74 72 69 6e 67 20 6d 61 70 20 7b 2f 20 2e 7d 20  tring map {/ .} 
1f00: 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 5b 67  [string range [g
1f10: 65 74 5f 70 77 64 5d 20 30 20 31 30 5d 5d 2e 2a  et_pwd] 0 10]].*
1f20: 2f 22 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  /".do_test shell
1f30: 31 2d 33 2e 33 2e 32 20 7b 0a 20 20 23 20 65 78  1-3.3.2 {.  # ex
1f40: 74 72 61 20 61 72 67 75 6d 65 6e 74 73 20 69 67  tra arguments ig
1f50: 6e 6f 72 65 64 0a 20 20 63 61 74 63 68 63 6d 64  nored.  catchcmd
1f60: 20 22 74 65 73 74 2e 64 62 22 20 22 2e 64 61 74   "test.db" ".dat
1f70: 61 62 61 73 65 73 20 42 41 44 22 0a 7d 20 22 2f  abases BAD".} "/
1f80: 30 20 2b 2e 2a 6d 61 69 6e 20 2b 5b 73 74 72 69  0 +.*main +[stri
1f90: 6e 67 20 6d 61 70 20 7b 2f 20 2e 7d 20 5b 73 74  ng map {/ .} [st
1fa0: 72 69 6e 67 20 72 61 6e 67 65 20 5b 67 65 74 5f  ring range [get_
1fb0: 70 77 64 5d 20 30 20 31 30 5d 5d 2e 2a 2f 22 0a  pwd] 0 10]].*/".
1fc0: 0a 23 20 2e 64 75 6d 70 20 3f 54 41 42 4c 45 3f  .# .dump ?TABLE?
1fd0: 20 2e 2e 2e 20 20 20 20 20 20 44 75 6d 70 20 74   ...      Dump t
1fe0: 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 61  he database in a
1ff0: 6e 20 53 51 4c 20 74 65 78 74 20 66 6f 72 6d 61  n SQL text forma
2000: 74 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  t.#             
2010: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 66 20               If 
2020: 54 41 42 4c 45 20 73 70 65 63 69 66 69 65 64 2c  TABLE specified,
2030: 20 6f 6e 6c 79 20 64 75 6d 70 20 74 61 62 6c 65   only dump table
2040: 73 20 6d 61 74 63 68 69 6e 67 0a 23 20 20 20 20  s matching.#    
2050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2060: 20 20 20 20 20 20 4c 49 4b 45 20 70 61 74 74 65        LIKE patte
2070: 72 6e 20 54 41 42 4c 45 2e 0a 64 6f 5f 74 65 73  rn TABLE..do_tes
2080: 74 20 73 68 65 6c 6c 31 2d 33 2e 34 2e 31 20 7b  t shell1-3.4.1 {
2090: 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61 74 63  .  set res [catc
20a0: 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22  hcmd "test.db" "
20b0: 2e 64 75 6d 70 22 5d 0a 20 20 6c 69 73 74 20 5b  .dump"].  list [
20c0: 72 65 67 65 78 70 20 7b 42 45 47 49 4e 20 54 52  regexp {BEGIN TR
20d0: 41 4e 53 41 43 54 49 4f 4e 3b 7d 20 24 72 65 73  ANSACTION;} $res
20e0: 5d 20 5c 0a 20 20 20 20 20 20 20 5b 72 65 67 65  ] \.       [rege
20f0: 78 70 20 7b 43 4f 4d 4d 49 54 3b 7d 20 24 72 65  xp {COMMIT;} $re
2100: 73 5d 0a 7d 20 7b 31 20 31 7d 0a 64 6f 5f 74 65  s].} {1 1}.do_te
2110: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 34 2e 32 20  st shell1-3.4.2 
2120: 7b 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61 74  {.  set res [cat
2130: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
2140: 22 2e 64 75 6d 70 20 46 4f 4f 22 5d 0a 20 20 6c  ".dump FOO"].  l
2150: 69 73 74 20 5b 72 65 67 65 78 70 20 7b 42 45 47  ist [regexp {BEG
2160: 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 7d  IN TRANSACTION;}
2170: 20 24 72 65 73 5d 20 5c 0a 20 20 20 20 20 20 20   $res] \.       
2180: 5b 72 65 67 65 78 70 20 7b 43 4f 4d 4d 49 54 3b  [regexp {COMMIT;
2190: 7d 20 24 72 65 73 5d 0a 7d 20 7b 31 20 31 7d 0a  } $res].} {1 1}.
21a0: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33  do_test shell1-3
21b0: 2e 34 2e 33 20 7b 0a 20 20 23 20 74 6f 6f 20 6d  .4.3 {.  # too m
21c0: 61 6e 79 20 61 72 67 75 6d 65 6e 74 73 0a 20 20  any arguments.  
21d0: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
21e0: 62 22 20 22 2e 64 75 6d 70 20 46 4f 4f 20 42 41  b" ".dump FOO BA
21f0: 44 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20  D".} {1 {Usage: 
2200: 2e 64 75 6d 70 20 3f 4c 49 4b 45 2d 50 41 54 54  .dump ?LIKE-PATT
2210: 45 52 4e 3f 7d 7d 0a 0a 23 20 2e 65 63 68 6f 20  ERN?}}..# .echo 
2220: 4f 4e 7c 4f 46 46 20 20 20 20 20 20 20 20 20 20  ON|OFF          
2230: 20 54 75 72 6e 20 63 6f 6d 6d 61 6e 64 20 65 63   Turn command ec
2240: 68 6f 20 6f 6e 20 6f 72 20 6f 66 66 0a 64 6f 5f  ho on or off.do_
2250: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 35 2e  test shell1-3.5.
2260: 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  1 {.  catchcmd "
2270: 74 65 73 74 2e 64 62 22 20 22 2e 65 63 68 6f 22  test.db" ".echo"
2280: 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 65  .} {1 {Usage: .e
2290: 63 68 6f 20 6f 6e 7c 6f 66 66 7d 7d 0a 64 6f 5f  cho on|off}}.do_
22a0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 35 2e  test shell1-3.5.
22b0: 32 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  2 {.  catchcmd "
22c0: 74 65 73 74 2e 64 62 22 20 22 2e 65 63 68 6f 20  test.db" ".echo 
22d0: 4f 4e 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  ON".} {0 {}}.do_
22e0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 35 2e  test shell1-3.5.
22f0: 33 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  3 {.  catchcmd "
2300: 74 65 73 74 2e 64 62 22 20 22 2e 65 63 68 6f 20  test.db" ".echo 
2310: 4f 46 46 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  OFF".} {0 {}}.do
2320: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 35  _test shell1-3.5
2330: 2e 34 20 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e  .4 {.  # too man
2340: 79 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 63 61  y arguments.  ca
2350: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
2360: 20 22 2e 65 63 68 6f 20 4f 46 46 20 42 41 44 22   ".echo OFF BAD"
2370: 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 65  .} {1 {Usage: .e
2380: 63 68 6f 20 6f 6e 7c 6f 66 66 7d 7d 0a 0a 23 20  cho on|off}}..# 
2390: 2e 65 78 69 74 20 20 20 20 20 20 20 20 20 20 20  .exit           
23a0: 20 20 20 20 20 20 20 45 78 69 74 20 74 68 69 73         Exit this
23b0: 20 70 72 6f 67 72 61 6d 0a 64 6f 5f 74 65 73 74   program.do_test
23c0: 20 73 68 65 6c 6c 31 2d 33 2e 36 2e 31 20 7b 0a   shell1-3.6.1 {.
23d0: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
23e0: 2e 64 62 22 20 22 2e 65 78 69 74 22 0a 7d 20 7b  .db" ".exit".} {
23f0: 30 20 7b 7d 7d 0a 0a 23 20 2e 65 78 70 6c 61 69  0 {}}..# .explai
2400: 6e 20 4f 4e 7c 4f 46 46 20 20 20 20 20 20 20 20  n ON|OFF        
2410: 54 75 72 6e 20 6f 75 74 70 75 74 20 6d 6f 64 65  Turn output mode
2420: 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 45 58   suitable for EX
2430: 50 4c 41 49 4e 20 6f 6e 20 6f 72 20 6f 66 66 2e  PLAIN on or off.
2440: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
2450: 33 2e 37 2e 31 20 7b 0a 20 20 63 61 74 63 68 63  3.7.1 {.  catchc
2460: 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 65  md "test.db" ".e
2470: 78 70 6c 61 69 6e 22 0a 20 20 23 20 65 78 70 6c  xplain".  # expl
2480: 61 69 6e 20 69 73 20 74 68 65 20 65 78 63 65 70  ain is the excep
2490: 74 69 6f 6e 20 74 6f 20 74 68 65 20 62 6f 6f 6c  tion to the bool
24a0: 65 61 6e 73 2e 20 20 77 69 74 68 6f 75 74 20 61  eans.  without a
24b0: 6e 20 6f 70 74 69 6f 6e 2c 20 69 74 20 74 75 72  n option, it tur
24c0: 6e 73 20 69 74 20 6f 6e 2e 0a 7d 20 7b 30 20 7b  ns it on..} {0 {
24d0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
24e0: 31 2d 33 2e 37 2e 32 20 7b 0a 20 20 63 61 74 63  1-3.7.2 {.  catc
24f0: 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22  hcmd "test.db" "
2500: 2e 65 78 70 6c 61 69 6e 20 4f 4e 22 0a 7d 20 7b  .explain ON".} {
2510: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  0 {}}.do_test sh
2520: 65 6c 6c 31 2d 33 2e 37 2e 33 20 7b 0a 20 20 63  ell1-3.7.3 {.  c
2530: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
2540: 22 20 22 2e 65 78 70 6c 61 69 6e 20 4f 46 46 22  " ".explain OFF"
2550: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
2560: 74 20 73 68 65 6c 6c 31 2d 33 2e 37 2e 34 20 7b  t shell1-3.7.4 {
2570: 0a 20 20 23 20 65 78 74 72 61 20 61 72 67 75 6d  .  # extra argum
2580: 65 6e 74 73 20 69 67 6e 6f 72 65 64 0a 20 20 63  ents ignored.  c
2590: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
25a0: 22 20 22 2e 65 78 70 6c 61 69 6e 20 4f 46 46 20  " ".explain OFF 
25b0: 42 41 44 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 0a  BAD".} {0 {}}...
25c0: 23 20 2e 68 65 61 64 65 72 28 73 29 20 4f 4e 7c  # .header(s) ON|
25d0: 4f 46 46 20 20 20 20 20 20 54 75 72 6e 20 64 69  OFF      Turn di
25e0: 73 70 6c 61 79 20 6f 66 20 68 65 61 64 65 72 73  splay of headers
25f0: 20 6f 6e 20 6f 72 20 6f 66 66 0a 64 6f 5f 74 65   on or off.do_te
2600: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 39 2e 31 20  st shell1-3.9.1 
2610: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
2620: 73 74 2e 64 62 22 20 22 2e 68 65 61 64 65 72 22  st.db" ".header"
2630: 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 68  .} {1 {Usage: .h
2640: 65 61 64 65 72 73 20 6f 6e 7c 6f 66 66 7d 7d 0a  eaders on|off}}.
2650: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33  do_test shell1-3
2660: 2e 39 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d  .9.2 {.  catchcm
2670: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 68 65  d "test.db" ".he
2680: 61 64 65 72 20 4f 4e 22 0a 7d 20 7b 30 20 7b 7d  ader ON".} {0 {}
2690: 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  }.do_test shell1
26a0: 2d 33 2e 39 2e 33 20 7b 0a 20 20 63 61 74 63 68  -3.9.3 {.  catch
26b0: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
26c0: 68 65 61 64 65 72 20 4f 46 46 22 0a 7d 20 7b 30  header OFF".} {0
26d0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65   {}}.do_test she
26e0: 6c 6c 31 2d 33 2e 39 2e 34 20 7b 0a 20 20 23 20  ll1-3.9.4 {.  # 
26f0: 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e  too many argumen
2700: 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74  ts.  catchcmd "t
2710: 65 73 74 2e 64 62 22 20 22 2e 68 65 61 64 65 72  est.db" ".header
2720: 20 4f 46 46 20 42 41 44 22 0a 7d 20 7b 31 20 7b   OFF BAD".} {1 {
2730: 55 73 61 67 65 3a 20 2e 68 65 61 64 65 72 73 20  Usage: .headers 
2740: 6f 6e 7c 6f 66 66 7d 7d 0a 0a 64 6f 5f 74 65 73  on|off}}..do_tes
2750: 74 20 73 68 65 6c 6c 31 2d 33 2e 39 2e 35 20 7b  t shell1-3.9.5 {
2760: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
2770: 74 2e 64 62 22 20 22 2e 68 65 61 64 65 72 73 22  t.db" ".headers"
2780: 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 68  .} {1 {Usage: .h
2790: 65 61 64 65 72 73 20 6f 6e 7c 6f 66 66 7d 7d 0a  eaders on|off}}.
27a0: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33  do_test shell1-3
27b0: 2e 39 2e 36 20 7b 0a 20 20 63 61 74 63 68 63 6d  .9.6 {.  catchcm
27c0: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 68 65  d "test.db" ".he
27d0: 61 64 65 72 73 20 4f 4e 22 0a 7d 20 7b 30 20 7b  aders ON".} {0 {
27e0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
27f0: 31 2d 33 2e 39 2e 37 20 7b 0a 20 20 63 61 74 63  1-3.9.7 {.  catc
2800: 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22  hcmd "test.db" "
2810: 2e 68 65 61 64 65 72 73 20 4f 46 46 22 0a 7d 20  .headers OFF".} 
2820: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  {0 {}}.do_test s
2830: 68 65 6c 6c 31 2d 33 2e 39 2e 38 20 7b 0a 20 20  hell1-3.9.8 {.  
2840: 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d  # too many argum
2850: 65 6e 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20  ents.  catchcmd 
2860: 22 74 65 73 74 2e 64 62 22 20 22 2e 68 65 61 64  "test.db" ".head
2870: 65 72 73 20 4f 46 46 20 42 41 44 22 0a 7d 20 7b  ers OFF BAD".} {
2880: 31 20 7b 55 73 61 67 65 3a 20 2e 68 65 61 64 65  1 {Usage: .heade
2890: 72 73 20 6f 6e 7c 6f 66 66 7d 7d 0a 0a 23 20 2e  rs on|off}}..# .
28a0: 68 65 6c 70 20 20 20 20 20 20 20 20 20 20 20 20  help            
28b0: 20 20 20 20 20 20 53 68 6f 77 20 74 68 69 73 20        Show this 
28c0: 6d 65 73 73 61 67 65 0a 64 6f 5f 74 65 73 74 20  message.do_test 
28d0: 73 68 65 6c 6c 31 2d 33 2e 31 30 2e 31 20 7b 0a  shell1-3.10.1 {.
28e0: 20 20 73 65 74 20 72 65 73 20 5b 63 61 74 63 68    set res [catch
28f0: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
2900: 68 65 6c 70 22 5d 0a 20 20 23 20 6c 6f 6f 6b 20  help"].  # look 
2910: 66 6f 72 20 61 20 66 65 77 20 6f 66 20 74 68 65  for a few of the
2920: 20 70 6f 73 73 69 62 6c 65 20 68 65 6c 70 20 63   possible help c
2930: 6f 6d 6d 61 6e 64 73 0a 20 20 6c 69 73 74 20 5b  ommands.  list [
2940: 72 65 67 65 78 70 20 7b 2e 68 65 6c 70 7d 20 24  regexp {.help} $
2950: 72 65 73 5d 20 5c 0a 20 20 20 20 20 20 20 5b 72  res] \.       [r
2960: 65 67 65 78 70 20 7b 2e 71 75 69 74 7d 20 24 72  egexp {.quit} $r
2970: 65 73 5d 20 5c 0a 20 20 20 20 20 20 20 5b 72 65  es] \.       [re
2980: 67 65 78 70 20 7b 2e 73 68 6f 77 7d 20 24 72 65  gexp {.show} $re
2990: 73 5d 0a 7d 20 7b 31 20 31 20 31 7d 0a 64 6f 5f  s].} {1 1 1}.do_
29a0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 30  test shell1-3.10
29b0: 2e 32 20 7b 0a 20 20 23 20 77 65 20 61 6c 6c 6f  .2 {.  # we allo
29c0: 77 20 2e 68 65 6c 70 20 74 6f 20 74 61 6b 65 20  w .help to take 
29d0: 65 78 74 72 61 20 61 72 67 73 20 28 69 74 20 69  extra args (it i
29e0: 73 20 68 65 6c 70 20 61 66 74 65 72 20 61 6c 6c  s help after all
29f0: 29 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61 74  ).  set res [cat
2a00: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
2a10: 22 2e 68 65 6c 70 20 42 41 44 22 5d 0a 20 20 23  ".help BAD"].  #
2a20: 20 6c 6f 6f 6b 20 66 6f 72 20 61 20 66 65 77 20   look for a few 
2a30: 6f 66 20 74 68 65 20 70 6f 73 73 69 62 6c 65 20  of the possible 
2a40: 68 65 6c 70 20 63 6f 6d 6d 61 6e 64 73 0a 20 20  help commands.  
2a50: 6c 69 73 74 20 5b 72 65 67 65 78 70 20 7b 2e 68  list [regexp {.h
2a60: 65 6c 70 7d 20 24 72 65 73 5d 20 5c 0a 20 20 20  elp} $res] \.   
2a70: 20 20 20 20 5b 72 65 67 65 78 70 20 7b 2e 71 75      [regexp {.qu
2a80: 69 74 7d 20 24 72 65 73 5d 20 5c 0a 20 20 20 20  it} $res] \.    
2a90: 20 20 20 5b 72 65 67 65 78 70 20 7b 2e 73 68 6f     [regexp {.sho
2aa0: 77 7d 20 24 72 65 73 5d 0a 7d 20 7b 31 20 31 20  w} $res].} {1 1 
2ab0: 31 7d 0a 0a 23 20 2e 69 6d 70 6f 72 74 20 46 49  1}..# .import FI
2ac0: 4c 45 20 54 41 42 4c 45 20 20 20 20 20 49 6d 70  LE TABLE     Imp
2ad0: 6f 72 74 20 64 61 74 61 20 66 72 6f 6d 20 46 49  ort data from FI
2ae0: 4c 45 20 69 6e 74 6f 20 54 41 42 4c 45 0a 64 6f  LE into TABLE.do
2af0: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31  _test shell1-3.1
2b00: 31 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64  1.1 {.  catchcmd
2b10: 20 22 74 65 73 74 2e 64 62 22 20 22 2e 69 6d 70   "test.db" ".imp
2b20: 6f 72 74 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65  ort".} {1 {Usage
2b30: 3a 20 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54  : .import FILE T
2b40: 41 42 4c 45 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  ABLE}}.do_test s
2b50: 68 65 6c 6c 31 2d 33 2e 31 31 2e 32 20 7b 0a 20  hell1-3.11.2 {. 
2b60: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
2b70: 64 62 22 20 22 2e 69 6d 70 6f 72 74 20 46 4f 4f  db" ".import FOO
2b80: 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e  ".} {1 {Usage: .
2b90: 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42 4c  import FILE TABL
2ba0: 45 7d 7d 0a 23 64 6f 5f 74 65 73 74 20 73 68 65  E}}.#do_test she
2bb0: 6c 6c 31 2d 33 2e 31 31 2e 32 20 7b 0a 23 20 20  ll1-3.11.2 {.#  
2bc0: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
2bd0: 62 22 20 22 2e 69 6d 70 6f 72 74 20 46 4f 4f 20  b" ".import FOO 
2be0: 42 41 52 22 0a 23 7d 20 7b 31 20 7b 45 72 72 6f  BAR".#} {1 {Erro
2bf0: 72 3a 20 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  r: no such table
2c00: 3a 20 42 41 52 7d 7d 0a 64 6f 5f 74 65 73 74 20  : BAR}}.do_test 
2c10: 73 68 65 6c 6c 31 2d 33 2e 31 31 2e 33 20 7b 0a  shell1-3.11.3 {.
2c20: 20 20 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67    # too many arg
2c30: 75 6d 65 6e 74 73 0a 20 20 63 61 74 63 68 63 6d  uments.  catchcm
2c40: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 69 6d  d "test.db" ".im
2c50: 70 6f 72 74 20 46 4f 4f 20 42 41 52 20 42 41 44  port FOO BAR BAD
2c60: 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e  ".} {1 {Usage: .
2c70: 69 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42 4c  import FILE TABL
2c80: 45 7d 7d 0a 0a 23 20 2e 69 6e 64 69 63 65 73 20  E}}..# .indices 
2c90: 3f 54 41 42 4c 45 3f 20 20 20 20 20 20 20 53 68  ?TABLE?       Sh
2ca0: 6f 77 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20  ow names of all 
2cb0: 69 6e 64 69 63 65 73 0a 23 20 20 20 20 20 20 20  indices.#       
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd0: 20 20 20 49 66 20 54 41 42 4c 45 20 73 70 65 63     If TABLE spec
2ce0: 69 66 69 65 64 2c 20 6f 6e 6c 79 20 73 68 6f 77  ified, only show
2cf0: 20 69 6e 64 69 63 65 73 20 66 6f 72 20 74 61 62   indices for tab
2d00: 6c 65 73 0a 23 20 20 20 20 20 20 20 20 20 20 20  les.#           
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
2d20: 61 74 63 68 69 6e 67 20 4c 49 4b 45 20 70 61 74  atching LIKE pat
2d30: 74 65 72 6e 20 54 41 42 4c 45 2e 0a 64 6f 5f 74  tern TABLE..do_t
2d40: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 32 2e  est shell1-3.12.
2d50: 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  1 {.  catchcmd "
2d60: 74 65 73 74 2e 64 62 22 20 22 2e 69 6e 64 69 63  test.db" ".indic
2d70: 65 73 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  es".} {0 {}}.do_
2d80: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 32  test shell1-3.12
2d90: 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .2 {.  catchcmd 
2da0: 22 74 65 73 74 2e 64 62 22 20 22 2e 69 6e 64 69  "test.db" ".indi
2db0: 63 65 73 20 46 4f 4f 22 0a 7d 20 7b 30 20 7b 7d  ces FOO".} {0 {}
2dc0: 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  }.do_test shell1
2dd0: 2d 33 2e 31 32 2e 33 20 7b 0a 20 20 23 20 74 6f  -3.12.3 {.  # to
2de0: 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73  o many arguments
2df0: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
2e00: 74 2e 64 62 22 20 22 2e 69 6e 64 69 63 65 73 20  t.db" ".indices 
2e10: 46 4f 4f 20 42 41 44 22 0a 7d 20 7b 31 20 7b 55  FOO BAD".} {1 {U
2e20: 73 61 67 65 3a 20 2e 69 6e 64 69 63 65 73 20 3f  sage: .indices ?
2e30: 4c 49 4b 45 2d 50 41 54 54 45 52 4e 3f 7d 7d 0a  LIKE-PATTERN?}}.
2e40: 0a 23 20 2e 6d 6f 64 65 20 4d 4f 44 45 20 3f 54  .# .mode MODE ?T
2e50: 41 42 4c 45 3f 20 20 20 20 20 53 65 74 20 6f 75  ABLE?     Set ou
2e60: 74 70 75 74 20 6d 6f 64 65 20 77 68 65 72 65 20  tput mode where 
2e70: 4d 4f 44 45 20 69 73 20 6f 6e 65 20 6f 66 3a 0a  MODE is one of:.
2e80: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
2e90: 20 20 20 20 20 20 20 20 20 20 20 61 73 63 69 69             ascii
2ea0: 20 20 20 20 43 6f 6c 75 6d 6e 73 2f 72 6f 77 73      Columns/rows
2eb0: 20 64 65 6c 69 6d 69 74 65 64 20 77 69 74 68 20   delimited with 
2ec0: 30 78 31 46 20 61 6e 64 20 30 78 31 45 0a 23 20  0x1F and 0x1E.# 
2ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee0: 20 20 20 20 20 20 20 20 20 63 73 76 20 20 20 20           csv    
2ef0: 20 20 43 6f 6d 6d 61 2d 73 65 70 61 72 61 74 65    Comma-separate
2f00: 64 20 76 61 6c 75 65 73 0a 23 20 20 20 20 20 20  d values.#      
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f20: 20 20 20 20 63 6f 6c 75 6d 6e 20 20 20 4c 65 66      column   Lef
2f30: 74 2d 61 6c 69 67 6e 65 64 20 63 6f 6c 75 6d 6e  t-aligned column
2f40: 73 2e 20 20 28 53 65 65 20 2e 77 69 64 74 68 29  s.  (See .width)
2f50: 0a 23 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 20 20 68 74 6d 6c              html
2f70: 20 20 20 20 20 48 54 4d 4c 20 3c 74 61 62 6c 65       HTML <table
2f80: 3e 20 63 6f 64 65 0a 23 20 20 20 20 20 20 20 20  > code.#        
2f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa0: 20 20 69 6e 73 65 72 74 20 20 20 53 51 4c 20 69    insert   SQL i
2fb0: 6e 73 65 72 74 20 73 74 61 74 65 6d 65 6e 74 73  nsert statements
2fc0: 20 66 6f 72 20 54 41 42 4c 45 0a 23 20 20 20 20   for TABLE.#    
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe0: 20 20 20 20 20 20 6c 69 6e 65 20 20 20 20 20 4f        line     O
2ff0: 6e 65 20 76 61 6c 75 65 20 70 65 72 20 6c 69 6e  ne value per lin
3000: 65 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  e.#             
3010: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 73               lis
3020: 74 20 20 20 20 20 56 61 6c 75 65 73 20 64 65 6c  t     Values del
3030: 69 6d 69 74 65 64 20 62 79 20 2e 73 65 70 61 72  imited by .separ
3040: 61 74 6f 72 20 73 74 72 69 6e 67 0a 23 20 20 20  ator string.#   
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 74 61 62 73 20 20 20 20 20         tabs     
3070: 54 61 62 2d 73 65 70 61 72 61 74 65 64 20 76 61  Tab-separated va
3080: 6c 75 65 73 0a 23 20 20 20 20 20 20 20 20 20 20  lues.#          
3090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a0: 74 63 6c 20 20 20 20 20 20 54 43 4c 20 6c 69 73  tcl      TCL lis
30b0: 74 20 65 6c 65 6d 65 6e 74 73 0a 64 6f 5f 74 65  t elements.do_te
30c0: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 33 2e 31  st shell1-3.13.1
30d0: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
30e0: 65 73 74 2e 64 62 22 20 22 2e 6d 6f 64 65 22 0a  est.db" ".mode".
30f0: 7d 20 7b 31 20 7b 45 72 72 6f 72 3a 20 6d 6f 64  } {1 {Error: mod
3100: 65 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20  e should be one 
3110: 6f 66 3a 20 61 73 63 69 69 20 63 6f 6c 75 6d 6e  of: ascii column
3120: 20 63 73 76 20 68 74 6d 6c 20 69 6e 73 65 72 74   csv html insert
3130: 20 6c 69 6e 65 20 6c 69 73 74 20 74 61 62 73 20   line list tabs 
3140: 74 63 6c 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  tcl}}.do_test sh
3150: 65 6c 6c 31 2d 33 2e 31 33 2e 32 20 7b 0a 20 20  ell1-3.13.2 {.  
3160: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
3170: 62 22 20 22 2e 6d 6f 64 65 20 46 4f 4f 22 0a 7d  b" ".mode FOO".}
3180: 20 7b 31 20 7b 45 72 72 6f 72 3a 20 6d 6f 64 65   {1 {Error: mode
3190: 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f   should be one o
31a0: 66 3a 20 61 73 63 69 69 20 63 6f 6c 75 6d 6e 20  f: ascii column 
31b0: 63 73 76 20 68 74 6d 6c 20 69 6e 73 65 72 74 20  csv html insert 
31c0: 6c 69 6e 65 20 6c 69 73 74 20 74 61 62 73 20 74  line list tabs t
31d0: 63 6c 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65  cl}}.do_test she
31e0: 6c 6c 31 2d 33 2e 31 33 2e 33 20 7b 0a 20 20 63  ll1-3.13.3 {.  c
31f0: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
3200: 22 20 22 2e 6d 6f 64 65 20 63 73 76 22 0a 7d 20  " ".mode csv".} 
3210: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  {0 {}}.do_test s
3220: 68 65 6c 6c 31 2d 33 2e 31 33 2e 34 20 7b 0a 20  hell1-3.13.4 {. 
3230: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
3240: 64 62 22 20 22 2e 6d 6f 64 65 20 63 6f 6c 75 6d  db" ".mode colum
3250: 6e 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  n".} {0 {}}.do_t
3260: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 33 2e  est shell1-3.13.
3270: 35 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  5 {.  catchcmd "
3280: 74 65 73 74 2e 64 62 22 20 22 2e 6d 6f 64 65 20  test.db" ".mode 
3290: 68 74 6d 6c 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  html".} {0 {}}.d
32a0: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e  o_test shell1-3.
32b0: 31 33 2e 36 20 7b 0a 20 20 63 61 74 63 68 63 6d  13.6 {.  catchcm
32c0: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 6d 6f  d "test.db" ".mo
32d0: 64 65 20 69 6e 73 65 72 74 22 0a 7d 20 7b 30 20  de insert".} {0 
32e0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  {}}.do_test shel
32f0: 6c 31 2d 33 2e 31 33 2e 37 20 7b 0a 20 20 63 61  l1-3.13.7 {.  ca
3300: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
3310: 20 22 2e 6d 6f 64 65 20 6c 69 6e 65 22 0a 7d 20   ".mode line".} 
3320: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  {0 {}}.do_test s
3330: 68 65 6c 6c 31 2d 33 2e 31 33 2e 38 20 7b 0a 20  hell1-3.13.8 {. 
3340: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
3350: 64 62 22 20 22 2e 6d 6f 64 65 20 6c 69 73 74 22  db" ".mode list"
3360: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
3370: 74 20 73 68 65 6c 6c 31 2d 33 2e 31 33 2e 39 20  t shell1-3.13.9 
3380: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
3390: 73 74 2e 64 62 22 20 22 2e 6d 6f 64 65 20 74 61  st.db" ".mode ta
33a0: 62 73 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  bs".} {0 {}}.do_
33b0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 33  test shell1-3.13
33c0: 2e 31 30 20 7b 0a 20 20 63 61 74 63 68 63 6d 64  .10 {.  catchcmd
33d0: 20 22 74 65 73 74 2e 64 62 22 20 22 2e 6d 6f 64   "test.db" ".mod
33e0: 65 20 74 63 6c 22 0a 7d 20 7b 30 20 7b 7d 7d 0a  e tcl".} {0 {}}.
33f0: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33  do_test shell1-3
3400: 2e 31 33 2e 31 31 20 7b 0a 20 20 23 20 65 78 74  .13.11 {.  # ext
3410: 72 61 20 61 72 67 75 6d 65 6e 74 73 20 69 67 6e  ra arguments ign
3420: 6f 72 65 64 0a 20 20 63 61 74 63 68 63 6d 64 20  ored.  catchcmd 
3430: 22 74 65 73 74 2e 64 62 22 20 22 2e 6d 6f 64 65  "test.db" ".mode
3440: 20 74 63 6c 20 42 41 44 22 0a 7d 20 7b 30 20 7b   tcl BAD".} {0 {
3450: 7d 7d 0a 0a 23 20 64 6f 6e 27 74 20 61 6c 6c 6f  }}..# don't allo
3460: 77 20 70 61 72 74 69 61 6c 20 6d 6f 64 65 20 74  w partial mode t
3470: 79 70 65 20 6d 61 74 63 68 65 73 0a 64 6f 5f 74  ype matches.do_t
3480: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 33 2e  est shell1-3.13.
3490: 31 32 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  12 {.  catchcmd 
34a0: 22 74 65 73 74 2e 64 62 22 20 22 2e 6d 6f 64 65  "test.db" ".mode
34b0: 20 6c 22 0a 7d 20 7b 31 20 7b 45 72 72 6f 72 3a   l".} {1 {Error:
34c0: 20 6d 6f 64 65 20 73 68 6f 75 6c 64 20 62 65 20   mode should be 
34d0: 6f 6e 65 20 6f 66 3a 20 61 73 63 69 69 20 63 6f  one of: ascii co
34e0: 6c 75 6d 6e 20 63 73 76 20 68 74 6d 6c 20 69 6e  lumn csv html in
34f0: 73 65 72 74 20 6c 69 6e 65 20 6c 69 73 74 20 74  sert line list t
3500: 61 62 73 20 74 63 6c 7d 7d 0a 64 6f 5f 74 65 73  abs tcl}}.do_tes
3510: 74 20 73 68 65 6c 6c 31 2d 33 2e 31 33 2e 31 33  t shell1-3.13.13
3520: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
3530: 65 73 74 2e 64 62 22 20 22 2e 6d 6f 64 65 20 6c  est.db" ".mode l
3540: 69 22 0a 7d 20 7b 31 20 7b 45 72 72 6f 72 3a 20  i".} {1 {Error: 
3550: 6d 6f 64 65 20 73 68 6f 75 6c 64 20 62 65 20 6f  mode should be o
3560: 6e 65 20 6f 66 3a 20 61 73 63 69 69 20 63 6f 6c  ne of: ascii col
3570: 75 6d 6e 20 63 73 76 20 68 74 6d 6c 20 69 6e 73  umn csv html ins
3580: 65 72 74 20 6c 69 6e 65 20 6c 69 73 74 20 74 61  ert line list ta
3590: 62 73 20 74 63 6c 7d 7d 0a 64 6f 5f 74 65 73 74  bs tcl}}.do_test
35a0: 20 73 68 65 6c 6c 31 2d 33 2e 31 33 2e 31 34 20   shell1-3.13.14 
35b0: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
35c0: 73 74 2e 64 62 22 20 22 2e 6d 6f 64 65 20 6c 69  st.db" ".mode li
35d0: 6e 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 23 20 2e  n".} {0 {}}..# .
35e0: 6e 75 6c 6c 76 61 6c 75 65 20 53 54 52 49 4e 47  nullvalue STRING
35f0: 20 20 20 20 20 20 50 72 69 6e 74 20 53 54 52 49        Print STRI
3600: 4e 47 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 4e  NG in place of N
3610: 55 4c 4c 20 76 61 6c 75 65 73 0a 64 6f 5f 74 65  ULL values.do_te
3620: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 34 2e 31  st shell1-3.14.1
3630: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
3640: 65 73 74 2e 64 62 22 20 22 2e 6e 75 6c 6c 76 61  est.db" ".nullva
3650: 6c 75 65 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65  lue".} {1 {Usage
3660: 3a 20 2e 6e 75 6c 6c 76 61 6c 75 65 20 53 54 52  : .nullvalue STR
3670: 49 4e 47 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  ING}}.do_test sh
3680: 65 6c 6c 31 2d 33 2e 31 34 2e 32 20 7b 0a 20 20  ell1-3.14.2 {.  
3690: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
36a0: 62 22 20 22 2e 6e 75 6c 6c 76 61 6c 75 65 20 46  b" ".nullvalue F
36b0: 4f 4f 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  OO".} {0 {}}.do_
36c0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 34  test shell1-3.14
36d0: 2e 33 20 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e  .3 {.  # too man
36e0: 79 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 63 61  y arguments.  ca
36f0: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
3700: 20 22 2e 6e 75 6c 6c 76 61 6c 75 65 20 46 4f 4f   ".nullvalue FOO
3710: 20 42 41 44 22 0a 7d 20 7b 31 20 7b 55 73 61 67   BAD".} {1 {Usag
3720: 65 3a 20 2e 6e 75 6c 6c 76 61 6c 75 65 20 53 54  e: .nullvalue ST
3730: 52 49 4e 47 7d 7d 0a 0a 23 20 2e 6f 75 74 70 75  RING}}..# .outpu
3740: 74 20 46 49 4c 45 4e 41 4d 45 20 20 20 20 20 20  t FILENAME      
3750: 20 53 65 6e 64 20 6f 75 74 70 75 74 20 74 6f 20   Send output to 
3760: 46 49 4c 45 4e 41 4d 45 0a 64 6f 5f 74 65 73 74  FILENAME.do_test
3770: 20 73 68 65 6c 6c 31 2d 33 2e 31 35 2e 31 20 7b   shell1-3.15.1 {
3780: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
3790: 74 2e 64 62 22 20 22 2e 6f 75 74 70 75 74 22 0a  t.db" ".output".
37a0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
37b0: 20 73 68 65 6c 6c 31 2d 33 2e 31 35 2e 32 20 7b   shell1-3.15.2 {
37c0: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
37d0: 74 2e 64 62 22 20 22 2e 6f 75 74 70 75 74 20 46  t.db" ".output F
37e0: 4f 4f 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  OO".} {0 {}}.do_
37f0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 31 35  test shell1-3.15
3800: 2e 33 20 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e  .3 {.  # too man
3810: 79 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 63 61  y arguments.  ca
3820: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
3830: 20 22 2e 6f 75 74 70 75 74 20 46 4f 4f 20 42 41   ".output FOO BA
3840: 44 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20  D".} {1 {Usage: 
3850: 2e 6f 75 74 70 75 74 20 46 49 4c 45 7d 7d 0a 0a  .output FILE}}..
3860: 23 20 2e 6f 75 74 70 75 74 20 73 74 64 6f 75 74  # .output stdout
3870: 20 20 20 20 20 20 20 20 20 53 65 6e 64 20 6f 75           Send ou
3880: 74 70 75 74 20 74 6f 20 74 68 65 20 73 63 72 65  tput to the scre
3890: 65 6e 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  en.do_test shell
38a0: 31 2d 33 2e 31 36 2e 31 20 7b 0a 20 20 63 61 74  1-3.16.1 {.  cat
38b0: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
38c0: 22 2e 6f 75 74 70 75 74 20 73 74 64 6f 75 74 22  ".output stdout"
38d0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
38e0: 74 20 73 68 65 6c 6c 31 2d 33 2e 31 36 2e 32 20  t shell1-3.16.2 
38f0: 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e 79 20 61  {.  # too many a
3900: 72 67 75 6d 65 6e 74 73 0a 20 20 63 61 74 63 68  rguments.  catch
3910: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
3920: 6f 75 74 70 75 74 20 73 74 64 6f 75 74 20 42 41  output stdout BA
3930: 44 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20  D".} {1 {Usage: 
3940: 2e 6f 75 74 70 75 74 20 46 49 4c 45 7d 7d 0a 0a  .output FILE}}..
3950: 23 20 2e 70 72 6f 6d 70 74 20 4d 41 49 4e 20 43  # .prompt MAIN C
3960: 4f 4e 54 49 4e 55 45 20 20 52 65 70 6c 61 63 65  ONTINUE  Replace
3970: 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 70 72   the standard pr
3980: 6f 6d 70 74 73 0a 64 6f 5f 74 65 73 74 20 73 68  ompts.do_test sh
3990: 65 6c 6c 31 2d 33 2e 31 37 2e 31 20 7b 0a 20 20  ell1-3.17.1 {.  
39a0: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
39b0: 62 22 20 22 2e 70 72 6f 6d 70 74 22 0a 7d 20 7b  b" ".prompt".} {
39c0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  0 {}}.do_test sh
39d0: 65 6c 6c 31 2d 33 2e 31 37 2e 32 20 7b 0a 20 20  ell1-3.17.2 {.  
39e0: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
39f0: 62 22 20 22 2e 70 72 6f 6d 70 74 20 46 4f 4f 22  b" ".prompt FOO"
3a00: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
3a10: 74 20 73 68 65 6c 6c 31 2d 33 2e 31 37 2e 33 20  t shell1-3.17.3 
3a20: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
3a30: 73 74 2e 64 62 22 20 22 2e 70 72 6f 6d 70 74 20  st.db" ".prompt 
3a40: 46 4f 4f 20 42 41 52 22 0a 7d 20 7b 30 20 7b 7d  FOO BAR".} {0 {}
3a50: 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  }.do_test shell1
3a60: 2d 33 2e 31 37 2e 34 20 7b 0a 20 20 23 20 74 6f  -3.17.4 {.  # to
3a70: 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73  o many arguments
3a80: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
3a90: 74 2e 64 62 22 20 22 2e 70 72 6f 6d 70 74 20 46  t.db" ".prompt F
3aa0: 4f 4f 20 42 41 52 20 42 41 44 22 0a 7d 20 7b 30  OO BAR BAD".} {0
3ab0: 20 7b 7d 7d 0a 0a 23 20 2e 71 75 69 74 20 20 20   {}}..# .quit   
3ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
3ad0: 78 69 74 20 74 68 69 73 20 70 72 6f 67 72 61 6d  xit this program
3ae0: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
3af0: 33 2e 31 38 2e 31 20 7b 0a 20 20 63 61 74 63 68  3.18.1 {.  catch
3b00: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
3b10: 71 75 69 74 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  quit".} {0 {}}.d
3b20: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e  o_test shell1-3.
3b30: 31 38 2e 32 20 7b 0a 20 20 23 20 74 6f 6f 20 6d  18.2 {.  # too m
3b40: 61 6e 79 20 61 72 67 75 6d 65 6e 74 73 0a 20 20  any arguments.  
3b50: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
3b60: 62 22 20 22 2e 71 75 69 74 20 42 41 44 22 0a 7d  b" ".quit BAD".}
3b70: 20 7b 30 20 7b 7d 7d 0a 0a 23 20 2e 72 65 61 64   {0 {}}..# .read
3b80: 20 46 49 4c 45 4e 41 4d 45 20 20 20 20 20 20 20   FILENAME       
3b90: 20 20 45 78 65 63 75 74 65 20 53 51 4c 20 69 6e    Execute SQL in
3ba0: 20 46 49 4c 45 4e 41 4d 45 0a 64 6f 5f 74 65 73   FILENAME.do_tes
3bb0: 74 20 73 68 65 6c 6c 31 2d 33 2e 31 39 2e 31 20  t shell1-3.19.1 
3bc0: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
3bd0: 73 74 2e 64 62 22 20 22 2e 72 65 61 64 22 0a 7d  st.db" ".read".}
3be0: 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 72 65 61   {1 {Usage: .rea
3bf0: 64 20 46 49 4c 45 7d 7d 0a 64 6f 5f 74 65 73 74  d FILE}}.do_test
3c00: 20 73 68 65 6c 6c 31 2d 33 2e 31 39 2e 32 20 7b   shell1-3.19.2 {
3c10: 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 46  .  forcedelete F
3c20: 4f 4f 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74  OO.  catchcmd "t
3c30: 65 73 74 2e 64 62 22 20 22 2e 72 65 61 64 20 46  est.db" ".read F
3c40: 4f 4f 22 0a 7d 20 7b 31 20 7b 45 72 72 6f 72 3a  OO".} {1 {Error:
3c50: 20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 22 46 4f   cannot open "FO
3c60: 4f 22 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65  O"}}.do_test she
3c70: 6c 6c 31 2d 33 2e 31 39 2e 33 20 7b 0a 20 20 23  ll1-3.19.3 {.  #
3c80: 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65   too many argume
3c90: 6e 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20 22  nts.  catchcmd "
3ca0: 74 65 73 74 2e 64 62 22 20 22 2e 72 65 61 64 20  test.db" ".read 
3cb0: 46 4f 4f 20 42 41 44 22 0a 7d 20 7b 31 20 7b 55  FOO BAD".} {1 {U
3cc0: 73 61 67 65 3a 20 2e 72 65 61 64 20 46 49 4c 45  sage: .read FILE
3cd0: 7d 7d 0a 0a 23 20 2e 72 65 73 74 6f 72 65 20 3f  }}..# .restore ?
3ce0: 44 42 3f 20 46 49 4c 45 20 20 20 20 20 52 65 73  DB? FILE     Res
3cf0: 74 6f 72 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20  tore content of 
3d00: 44 42 20 28 64 65 66 61 75 6c 74 20 22 6d 61 69  DB (default "mai
3d10: 6e 22 29 20 66 72 6f 6d 20 46 49 4c 45 0a 64 6f  n") from FILE.do
3d20: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32  _test shell1-3.2
3d30: 30 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64  0.1 {.  catchcmd
3d40: 20 22 74 65 73 74 2e 64 62 22 20 22 2e 72 65 73   "test.db" ".res
3d50: 74 6f 72 65 22 0a 7d 20 7b 31 20 7b 55 73 61 67  tore".} {1 {Usag
3d60: 65 3a 20 2e 72 65 73 74 6f 72 65 20 3f 44 42 3f  e: .restore ?DB?
3d70: 20 46 49 4c 45 7d 7d 0a 64 6f 5f 74 65 73 74 20   FILE}}.do_test 
3d80: 73 68 65 6c 6c 31 2d 33 2e 32 30 2e 32 20 7b 0a  shell1-3.20.2 {.
3d90: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
3da0: 2e 64 62 22 20 22 2e 72 65 73 74 6f 72 65 20 46  .db" ".restore F
3db0: 4f 4f 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  OO".} {0 {}}.do_
3dc0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 30  test shell1-3.20
3dd0: 2e 33 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .3 {.  catchcmd 
3de0: 22 74 65 73 74 2e 64 62 22 20 22 2e 72 65 73 74  "test.db" ".rest
3df0: 6f 72 65 20 46 4f 4f 20 42 41 52 22 0a 7d 20 7b  ore FOO BAR".} {
3e00: 31 20 7b 45 72 72 6f 72 3a 20 75 6e 6b 6e 6f 77  1 {Error: unknow
3e10: 6e 20 64 61 74 61 62 61 73 65 20 46 4f 4f 7d 7d  n database FOO}}
3e20: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
3e30: 33 2e 32 30 2e 34 20 7b 0a 20 20 23 20 74 6f 6f  3.20.4 {.  # too
3e40: 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73 0a   many arguments.
3e50: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
3e60: 2e 64 62 22 20 22 2e 72 65 73 74 6f 72 65 20 46  .db" ".restore F
3e70: 4f 4f 20 42 41 52 20 42 41 44 22 0a 7d 20 7b 31  OO BAR BAD".} {1
3e80: 20 7b 55 73 61 67 65 3a 20 2e 72 65 73 74 6f 72   {Usage: .restor
3e90: 65 20 3f 44 42 3f 20 46 49 4c 45 7d 7d 0a 0a 23  e ?DB? FILE}}..#
3ea0: 20 2e 73 63 68 65 6d 61 20 3f 54 41 42 4c 45 3f   .schema ?TABLE?
3eb0: 20 20 20 20 20 20 20 20 53 68 6f 77 20 74 68 65          Show the
3ec0: 20 43 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e   CREATE statemen
3ed0: 74 73 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  ts.#            
3ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 66                If
3ef0: 20 54 41 42 4c 45 20 73 70 65 63 69 66 69 65 64   TABLE specified
3f00: 2c 20 6f 6e 6c 79 20 73 68 6f 77 20 74 61 62 6c  , only show tabl
3f10: 65 73 20 6d 61 74 63 68 69 6e 67 0a 23 20 20 20  es matching.#   
3f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f30: 20 20 20 20 20 20 20 4c 49 4b 45 20 70 61 74 74         LIKE patt
3f40: 65 72 6e 20 54 41 42 4c 45 2e 0a 64 6f 5f 74 65  ern TABLE..do_te
3f50: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 31 2e 31  st shell1-3.21.1
3f60: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
3f70: 65 73 74 2e 64 62 22 20 22 2e 73 63 68 65 6d 61  est.db" ".schema
3f80: 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  ".} {0 {}}.do_te
3f90: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 31 2e 32  st shell1-3.21.2
3fa0: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
3fb0: 65 73 74 2e 64 62 22 20 22 2e 73 63 68 65 6d 61  est.db" ".schema
3fc0: 20 46 4f 4f 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64   FOO".} {0 {}}.d
3fd0: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e  o_test shell1-3.
3fe0: 32 31 2e 33 20 7b 0a 20 20 23 20 74 6f 6f 20 6d  21.3 {.  # too m
3ff0: 61 6e 79 20 61 72 67 75 6d 65 6e 74 73 0a 20 20  any arguments.  
4000: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
4010: 62 22 20 22 2e 73 63 68 65 6d 61 20 46 4f 4f 20  b" ".schema FOO 
4020: 42 41 44 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65  BAD".} {1 {Usage
4030: 3a 20 2e 73 63 68 65 6d 61 20 3f 4c 49 4b 45 2d  : .schema ?LIKE-
4040: 50 41 54 54 45 52 4e 3f 7d 7d 0a 0a 64 6f 5f 74  PATTERN?}}..do_t
4050: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 31 2e  est shell1-3.21.
4060: 34 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  4 {.  catchcmd "
4070: 74 65 73 74 2e 64 62 22 20 7b 0a 20 20 20 20 20  test.db" {.     
4080: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
4090: 78 29 3b 0a 20 20 20 20 20 43 52 45 41 54 45 20  x);.     CREATE 
40a0: 56 49 45 57 20 76 32 20 41 53 20 53 45 4c 45 43  VIEW v2 AS SELEC
40b0: 54 20 78 2b 31 20 41 53 20 79 20 46 52 4f 4d 20  T x+1 AS y FROM 
40c0: 74 31 3b 0a 20 20 20 20 20 43 52 45 41 54 45 20  t1;.     CREATE 
40d0: 56 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43  VIEW v1 AS SELEC
40e0: 54 20 79 2b 31 20 46 52 4f 4d 20 76 32 3b 0a 20  T y+1 FROM v2;. 
40f0: 20 7d 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   }.  catchcmd "t
4100: 65 73 74 2e 64 62 22 20 22 2e 73 63 68 65 6d 61  est.db" ".schema
4110: 22 0a 7d 20 7b 30 20 7b 43 52 45 41 54 45 20 54  ".} {0 {CREATE T
4120: 41 42 4c 45 20 74 31 28 78 29 3b 0a 43 52 45 41  ABLE t1(x);.CREA
4130: 54 45 20 56 49 45 57 20 76 32 20 41 53 20 53 45  TE VIEW v2 AS SE
4140: 4c 45 43 54 20 78 2b 31 20 41 53 20 79 20 46 52  LECT x+1 AS y FR
4150: 4f 4d 20 74 31 3b 0a 43 52 45 41 54 45 20 56 49  OM t1;.CREATE VI
4160: 45 57 20 76 31 20 41 53 20 53 45 4c 45 43 54 20  EW v1 AS SELECT 
4170: 79 2b 31 20 46 52 4f 4d 20 76 32 3b 7d 7d 0a 64  y+1 FROM v2;}}.d
4180: 62 20 65 76 61 6c 20 7b 44 52 4f 50 20 56 49 45  b eval {DROP VIE
4190: 57 20 76 31 3b 20 44 52 4f 50 20 56 49 45 57 20  W v1; DROP VIEW 
41a0: 76 32 3b 20 44 52 4f 50 20 54 41 42 4c 45 20 74  v2; DROP TABLE t
41b0: 31 3b 7d 0a 0a 23 20 2e 73 65 70 61 72 61 74 6f  1;}..# .separato
41c0: 72 20 53 54 52 49 4e 47 20 20 43 68 61 6e 67 65  r STRING  Change
41d0: 20 63 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f   column separato
41e0: 72 20 75 73 65 64 20 62 79 20 6f 75 74 70 75 74  r used by output
41f0: 20 61 6e 64 20 2e 69 6d 70 6f 72 74 0a 64 6f 5f   and .import.do_
4200: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 32  test shell1-3.22
4210: 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .1 {.  catchcmd 
4220: 22 74 65 73 74 2e 64 62 22 20 22 2e 73 65 70 61  "test.db" ".sepa
4230: 72 61 74 6f 72 22 0a 7d 20 7b 31 20 7b 55 73 61  rator".} {1 {Usa
4240: 67 65 3a 20 2e 73 65 70 61 72 61 74 6f 72 20 53  ge: .separator S
4250: 45 50 41 52 41 54 4f 52 20 3f 4e 45 57 4c 49 4e  EPARATOR ?NEWLIN
4260: 45 3f 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65  E?}}.do_test she
4270: 6c 6c 31 2d 33 2e 32 32 2e 32 20 7b 0a 20 20 63  ll1-3.22.2 {.  c
4280: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
4290: 22 20 22 2e 73 65 70 61 72 61 74 6f 72 20 46 4f  " ".separator FO
42a0: 4f 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  O".} {0 {}}.do_t
42b0: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 32 2e  est shell1-3.22.
42c0: 33 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  3 {.  catchcmd "
42d0: 74 65 73 74 2e 64 62 22 20 22 2e 73 65 70 61 72  test.db" ".separ
42e0: 61 74 6f 72 20 41 42 43 20 58 59 5a 22 0a 7d 20  ator ABC XYZ".} 
42f0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  {0 {}}.do_test s
4300: 68 65 6c 6c 31 2d 33 2e 32 32 2e 34 20 7b 0a 20  hell1-3.22.4 {. 
4310: 20 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75   # too many argu
4320: 6d 65 6e 74 73 0a 20 20 63 61 74 63 68 63 6d 64  ments.  catchcmd
4330: 20 22 74 65 73 74 2e 64 62 22 20 22 2e 73 65 70   "test.db" ".sep
4340: 61 72 61 74 6f 72 20 46 4f 4f 20 42 41 44 20 42  arator FOO BAD B
4350: 41 44 32 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65  AD2".} {1 {Usage
4360: 3a 20 2e 73 65 70 61 72 61 74 6f 72 20 53 45 50  : .separator SEP
4370: 41 52 41 54 4f 52 20 3f 4e 45 57 4c 49 4e 45 3f  ARATOR ?NEWLINE?
4380: 7d 7d 0a 0a 23 20 2e 73 68 6f 77 20 20 20 20 20  }}..# .show     
4390: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 68 6f               Sho
43a0: 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  w the current va
43b0: 6c 75 65 73 20 66 6f 72 20 76 61 72 69 6f 75 73  lues for various
43c0: 20 73 65 74 74 69 6e 67 73 0a 64 6f 5f 74 65 73   settings.do_tes
43d0: 74 20 73 68 65 6c 6c 31 2d 33 2e 32 33 2e 31 20  t shell1-3.23.1 
43e0: 7b 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61 74  {.  set res [cat
43f0: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
4400: 22 2e 73 68 6f 77 22 5d 0a 20 20 6c 69 73 74 20  ".show"].  list 
4410: 5b 72 65 67 65 78 70 20 7b 65 63 68 6f 3a 7d 20  [regexp {echo:} 
4420: 24 72 65 73 5d 20 5c 0a 20 20 20 20 20 20 20 5b  $res] \.       [
4430: 72 65 67 65 78 70 20 7b 65 78 70 6c 61 69 6e 3a  regexp {explain:
4440: 7d 20 24 72 65 73 5d 20 5c 0a 20 20 20 20 20 20  } $res] \.      
4450: 20 5b 72 65 67 65 78 70 20 7b 68 65 61 64 65 72   [regexp {header
4460: 73 3a 7d 20 24 72 65 73 5d 20 5c 0a 20 20 20 20  s:} $res] \.    
4470: 20 20 20 5b 72 65 67 65 78 70 20 7b 6d 6f 64 65     [regexp {mode
4480: 3a 7d 20 24 72 65 73 5d 20 5c 0a 20 20 20 20 20  :} $res] \.     
4490: 20 20 5b 72 65 67 65 78 70 20 7b 6e 75 6c 6c 76    [regexp {nullv
44a0: 61 6c 75 65 3a 7d 20 24 72 65 73 5d 20 5c 0a 20  alue:} $res] \. 
44b0: 20 20 20 20 20 20 5b 72 65 67 65 78 70 20 7b 6f        [regexp {o
44c0: 75 74 70 75 74 3a 7d 20 24 72 65 73 5d 20 5c 0a  utput:} $res] \.
44d0: 20 20 20 20 20 20 20 5b 72 65 67 65 78 70 20 7b         [regexp {
44e0: 63 6f 6c 73 65 70 61 72 61 74 6f 72 3a 7d 20 24  colseparator:} $
44f0: 72 65 73 5d 20 5c 0a 20 20 20 20 20 20 20 5b 72  res] \.       [r
4500: 65 67 65 78 70 20 7b 72 6f 77 73 65 70 61 72 61  egexp {rowsepara
4510: 74 6f 72 3a 7d 20 24 72 65 73 5d 20 5c 0a 20 20  tor:} $res] \.  
4520: 20 20 20 20 20 5b 72 65 67 65 78 70 20 7b 73 74       [regexp {st
4530: 61 74 73 3a 7d 20 24 72 65 73 5d 20 5c 0a 20 20  ats:} $res] \.  
4540: 20 20 20 20 20 5b 72 65 67 65 78 70 20 7b 77 69       [regexp {wi
4550: 64 74 68 3a 7d 20 24 72 65 73 5d 0a 7d 20 7b 31  dth:} $res].} {1
4560: 20 31 20 31 20 31 20 31 20 31 20 31 20 31 20 31   1 1 1 1 1 1 1 1
4570: 20 31 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c   1}.do_test shel
4580: 6c 31 2d 33 2e 32 33 2e 32 20 7b 0a 20 20 23 20  l1-3.23.2 {.  # 
4590: 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e  too many argumen
45a0: 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74  ts.  catchcmd "t
45b0: 65 73 74 2e 64 62 22 20 22 2e 73 68 6f 77 20 42  est.db" ".show B
45c0: 41 44 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a  AD".} {1 {Usage:
45d0: 20 2e 73 68 6f 77 7d 7d 0a 0a 23 20 2e 73 74 61   .show}}..# .sta
45e0: 74 73 20 4f 4e 7c 4f 46 46 20 20 20 20 20 20 20  ts ON|OFF       
45f0: 20 20 20 54 75 72 6e 20 73 74 61 74 73 20 6f 6e     Turn stats on
4600: 20 6f 72 20 6f 66 66 0a 64 6f 5f 74 65 73 74 20   or off.do_test 
4610: 73 68 65 6c 6c 31 2d 33 2e 32 33 62 2e 31 20 7b  shell1-3.23b.1 {
4620: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
4630: 74 2e 64 62 22 20 22 2e 73 74 61 74 73 22 0a 7d  t.db" ".stats".}
4640: 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 73 74 61   {1 {Usage: .sta
4650: 74 73 20 6f 6e 7c 6f 66 66 7d 7d 0a 64 6f 5f 74  ts on|off}}.do_t
4660: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 33 62  est shell1-3.23b
4670: 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .2 {.  catchcmd 
4680: 22 74 65 73 74 2e 64 62 22 20 22 2e 73 74 61 74  "test.db" ".stat
4690: 73 20 4f 4e 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  s ON".} {0 {}}.d
46a0: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e  o_test shell1-3.
46b0: 32 33 62 2e 33 20 7b 0a 20 20 63 61 74 63 68 63  23b.3 {.  catchc
46c0: 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 73  md "test.db" ".s
46d0: 74 61 74 73 20 4f 46 46 22 0a 7d 20 7b 30 20 7b  tats OFF".} {0 {
46e0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
46f0: 31 2d 33 2e 32 33 62 2e 34 20 7b 0a 20 20 23 20  1-3.23b.4 {.  # 
4700: 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e  too many argumen
4710: 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74  ts.  catchcmd "t
4720: 65 73 74 2e 64 62 22 20 22 2e 73 74 61 74 73 20  est.db" ".stats 
4730: 4f 46 46 20 42 41 44 22 0a 7d 20 7b 31 20 7b 55  OFF BAD".} {1 {U
4740: 73 61 67 65 3a 20 2e 73 74 61 74 73 20 6f 6e 7c  sage: .stats on|
4750: 6f 66 66 7d 7d 0a 0a 23 20 2e 74 61 62 6c 65 73  off}}..# .tables
4760: 20 3f 54 41 42 4c 45 3f 20 20 20 20 20 20 20 20   ?TABLE?        
4770: 4c 69 73 74 20 6e 61 6d 65 73 20 6f 66 20 74 61  List names of ta
4780: 62 6c 65 73 0a 23 20 20 20 20 20 20 20 20 20 20  bles.#          
4790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47a0: 49 66 20 54 41 42 4c 45 20 73 70 65 63 69 66 69  If TABLE specifi
47b0: 65 64 2c 20 6f 6e 6c 79 20 6c 69 73 74 20 74 61  ed, only list ta
47c0: 62 6c 65 73 20 6d 61 74 63 68 69 6e 67 0a 23 20  bles matching.# 
47d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47e0: 20 20 20 20 20 20 20 20 20 4c 49 4b 45 20 70 61           LIKE pa
47f0: 74 74 65 72 6e 20 54 41 42 4c 45 2e 0a 64 6f 5f  ttern TABLE..do_
4800: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 34  test shell1-3.24
4810: 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .1 {.  catchcmd 
4820: 22 74 65 73 74 2e 64 62 22 20 22 2e 74 61 62 6c  "test.db" ".tabl
4830: 65 73 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  es".} {0 {}}.do_
4840: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 34  test shell1-3.24
4850: 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .2 {.  catchcmd 
4860: 22 74 65 73 74 2e 64 62 22 20 22 2e 74 61 62 6c  "test.db" ".tabl
4870: 65 73 20 46 4f 4f 22 0a 7d 20 7b 30 20 7b 7d 7d  es FOO".} {0 {}}
4880: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
4890: 33 2e 32 34 2e 33 20 7b 0a 20 20 23 20 74 6f 6f  3.24.3 {.  # too
48a0: 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73 0a   many arguments.
48b0: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
48c0: 2e 64 62 22 20 22 2e 74 61 62 6c 65 73 20 46 4f  .db" ".tables FO
48d0: 4f 20 42 41 44 22 0a 7d 20 7b 30 20 7b 7d 7d 0a  O BAD".} {0 {}}.
48e0: 0a 23 20 2e 74 69 6d 65 6f 75 74 20 4d 53 20 20  .# .timeout MS  
48f0: 20 20 20 20 20 20 20 20 20 20 54 72 79 20 6f 70            Try op
4900: 65 6e 69 6e 67 20 6c 6f 63 6b 65 64 20 74 61 62  ening locked tab
4910: 6c 65 73 20 66 6f 72 20 4d 53 20 6d 69 6c 6c 69  les for MS milli
4920: 73 65 63 6f 6e 64 73 0a 64 6f 5f 74 65 73 74 20  seconds.do_test 
4930: 73 68 65 6c 6c 31 2d 33 2e 32 35 2e 31 20 7b 0a  shell1-3.25.1 {.
4940: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
4950: 2e 64 62 22 20 22 2e 74 69 6d 65 6f 75 74 22 0a  .db" ".timeout".
4960: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
4970: 20 73 68 65 6c 6c 31 2d 33 2e 32 35 2e 32 20 7b   shell1-3.25.2 {
4980: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
4990: 74 2e 64 62 22 20 22 2e 74 69 6d 65 6f 75 74 20  t.db" ".timeout 
49a0: 7a 7a 7a 22 0a 20 20 23 20 74 68 69 73 20 73 68  zzz".  # this sh
49b0: 6f 75 6c 64 20 62 65 20 74 72 65 61 74 65 64 20  ould be treated 
49c0: 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 27 30  the same as a '0
49d0: 27 20 74 69 6d 65 6f 75 74 0a 7d 20 7b 30 20 7b  ' timeout.} {0 {
49e0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
49f0: 31 2d 33 2e 32 35 2e 33 20 7b 0a 20 20 63 61 74  1-3.25.3 {.  cat
4a00: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
4a10: 22 2e 74 69 6d 65 6f 75 74 20 31 22 0a 7d 20 7b  ".timeout 1".} {
4a20: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  0 {}}.do_test sh
4a30: 65 6c 6c 31 2d 33 2e 32 35 2e 34 20 7b 0a 20 20  ell1-3.25.4 {.  
4a40: 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d  # too many argum
4a50: 65 6e 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20  ents.  catchcmd 
4a60: 22 74 65 73 74 2e 64 62 22 20 22 2e 74 69 6d 65  "test.db" ".time
4a70: 6f 75 74 20 31 20 42 41 44 22 0a 7d 20 7b 30 20  out 1 BAD".} {0 
4a80: 7b 7d 7d 0a 0a 23 20 2e 77 69 64 74 68 20 4e 55  {}}..# .width NU
4a90: 4d 20 4e 55 4d 20 2e 2e 2e 20 20 20 20 20 53 65  M NUM ...     Se
4aa0: 74 20 63 6f 6c 75 6d 6e 20 77 69 64 74 68 73 20  t column widths 
4ab0: 66 6f 72 20 22 63 6f 6c 75 6d 6e 22 20 6d 6f 64  for "column" mod
4ac0: 65 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31  e.do_test shell1
4ad0: 2d 33 2e 32 36 2e 31 20 7b 0a 20 20 63 61 74 63  -3.26.1 {.  catc
4ae0: 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22  hcmd "test.db" "
4af0: 2e 77 69 64 74 68 22 0a 7d 20 7b 30 20 7b 7d 7d  .width".} {0 {}}
4b00: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
4b10: 33 2e 32 36 2e 32 20 7b 0a 20 20 63 61 74 63 68  3.26.2 {.  catch
4b20: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
4b30: 77 69 64 74 68 20 78 78 78 22 0a 20 20 23 20 74  width xxx".  # t
4b40: 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 74 72  his should be tr
4b50: 65 61 74 65 64 20 74 68 65 20 73 61 6d 65 20 61  eated the same a
4b60: 73 20 61 20 27 30 27 20 77 69 64 74 68 20 66 6f  s a '0' width fo
4b70: 72 20 63 6f 6c 20 31 0a 7d 20 7b 30 20 7b 7d 7d  r col 1.} {0 {}}
4b80: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
4b90: 33 2e 32 36 2e 33 20 7b 0a 20 20 63 61 74 63 68  3.26.3 {.  catch
4ba0: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
4bb0: 77 69 64 74 68 20 78 78 78 20 79 79 79 22 0a 20  width xxx yyy". 
4bc0: 20 23 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62   # this should b
4bd0: 65 20 74 72 65 61 74 65 64 20 74 68 65 20 73 61  e treated the sa
4be0: 6d 65 20 61 73 20 61 20 27 30 27 20 77 69 64 74  me as a '0' widt
4bf0: 68 20 66 6f 72 20 63 6f 6c 20 31 20 61 6e 64 20  h for col 1 and 
4c00: 32 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  2.} {0 {}}.do_te
4c10: 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 36 2e 34  st shell1-3.26.4
4c20: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
4c30: 65 73 74 2e 64 62 22 20 22 2e 77 69 64 74 68 20  est.db" ".width 
4c40: 31 20 31 22 0a 20 20 23 20 74 68 69 73 20 73 68  1 1".  # this sh
4c50: 6f 75 6c 64 20 62 65 20 74 72 65 61 74 65 64 20  ould be treated 
4c60: 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 27 31  the same as a '1
4c70: 27 20 77 69 64 74 68 20 66 6f 72 20 63 6f 6c 20  ' width for col 
4c80: 31 20 61 6e 64 20 32 0a 7d 20 7b 30 20 7b 7d 7d  1 and 2.} {0 {}}
4c90: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
4ca0: 33 2e 32 36 2e 35 20 7b 0a 20 20 63 61 74 63 68  3.26.5 {.  catch
4cb0: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
4cc0: 6d 6f 64 65 20 63 6f 6c 75 6d 6e 5c 6e 2e 77 69  mode column\n.wi
4cd0: 64 74 68 20 31 30 20 2d 31 30 5c 6e 53 45 4c 45  dth 10 -10\nSELE
4ce0: 43 54 20 27 61 62 63 64 65 66 67 27 2c 20 31 32  CT 'abcdefg', 12
4cf0: 33 34 35 36 3b 22 0a 20 20 23 20 74 68 69 73 20  3456;".  # this 
4d00: 73 68 6f 75 6c 64 20 62 65 20 74 72 65 61 74 65  should be treate
4d10: 64 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20  d the same as a 
4d20: 27 31 27 20 77 69 64 74 68 20 66 6f 72 20 63 6f  '1' width for co
4d30: 6c 20 31 20 61 6e 64 20 32 0a 7d 20 7b 30 20 7b  l 1 and 2.} {0 {
4d40: 61 62 63 64 65 66 67 20 20 20 20 20 20 20 20 20  abcdefg         
4d50: 31 32 33 34 35 36 7d 7d 0a 64 6f 5f 74 65 73 74  123456}}.do_test
4d60: 20 73 68 65 6c 6c 31 2d 33 2e 32 36 2e 36 20 7b   shell1-3.26.6 {
4d70: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
4d80: 74 2e 64 62 22 20 22 2e 6d 6f 64 65 20 63 6f 6c  t.db" ".mode col
4d90: 75 6d 6e 5c 6e 2e 77 69 64 74 68 20 2d 31 30 20  umn\n.width -10 
4da0: 31 30 5c 6e 53 45 4c 45 43 54 20 27 61 62 63 64  10\nSELECT 'abcd
4db0: 65 66 67 27 2c 20 31 32 33 34 35 36 3b 22 0a 20  efg', 123456;". 
4dc0: 20 23 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62   # this should b
4dd0: 65 20 74 72 65 61 74 65 64 20 74 68 65 20 73 61  e treated the sa
4de0: 6d 65 20 61 73 20 61 20 27 31 27 20 77 69 64 74  me as a '1' widt
4df0: 68 20 66 6f 72 20 63 6f 6c 20 31 20 61 6e 64 20  h for col 1 and 
4e00: 32 0a 7d 20 7b 30 20 7b 20 20 20 61 62 63 64 65  2.} {0 {   abcde
4e10: 66 67 20 20 31 32 33 34 35 36 20 20 20 20 7d 7d  fg  123456    }}
4e20: 0a 0a 0a 23 20 2e 74 69 6d 65 72 20 4f 4e 7c 4f  ...# .timer ON|O
4e30: 46 46 20 20 20 20 20 20 20 20 20 20 54 75 72 6e  FF          Turn
4e40: 20 74 68 65 20 43 50 55 20 74 69 6d 65 72 20 6d   the CPU timer m
4e50: 65 61 73 75 72 65 6d 65 6e 74 20 6f 6e 20 6f 72  easurement on or
4e60: 20 6f 66 66 0a 64 6f 5f 74 65 73 74 20 73 68 65   off.do_test she
4e70: 6c 6c 31 2d 33 2e 32 37 2e 31 20 7b 0a 20 20 63  ll1-3.27.1 {.  c
4e80: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
4e90: 22 20 22 2e 74 69 6d 65 72 22 0a 7d 20 7b 31 20  " ".timer".} {1 
4ea0: 7b 55 73 61 67 65 3a 20 2e 74 69 6d 65 72 20 6f  {Usage: .timer o
4eb0: 6e 7c 6f 66 66 7d 7d 0a 64 6f 5f 74 65 73 74 20  n|off}}.do_test 
4ec0: 73 68 65 6c 6c 31 2d 33 2e 32 37 2e 32 20 7b 0a  shell1-3.27.2 {.
4ed0: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
4ee0: 2e 64 62 22 20 22 2e 74 69 6d 65 72 20 4f 4e 22  .db" ".timer ON"
4ef0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
4f00: 74 20 73 68 65 6c 6c 31 2d 33 2e 32 37 2e 33 20  t shell1-3.27.3 
4f10: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
4f20: 73 74 2e 64 62 22 20 22 2e 74 69 6d 65 72 20 4f  st.db" ".timer O
4f30: 46 46 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  FF".} {0 {}}.do_
4f40: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 37  test shell1-3.27
4f50: 2e 34 20 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e  .4 {.  # too man
4f60: 79 20 61 72 67 75 6d 65 6e 74 73 0a 20 20 63 61  y arguments.  ca
4f70: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
4f80: 20 22 2e 74 69 6d 65 72 20 4f 46 46 20 42 41 44   ".timer OFF BAD
4f90: 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e  ".} {1 {Usage: .
4fa0: 74 69 6d 65 72 20 6f 6e 7c 6f 66 66 7d 7d 0a 0a  timer on|off}}..
4fb0: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33  do_test shell1-3
4fc0: 2d 32 38 2e 31 20 7b 0a 20 20 63 61 74 63 68 63  -28.1 {.  catchc
4fd0: 6d 64 20 74 65 73 74 2e 64 62 20 5c 0a 20 20 20  md test.db \.   
4fe0: 20 20 22 2e 6c 6f 67 20 73 74 64 6f 75 74 5c 6e    ".log stdout\n
4ff0: 53 45 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28  SELECT coalesce(
5000: 73 71 6c 69 74 65 5f 6c 6f 67 28 31 32 33 2c 27  sqlite_log(123,'
5010: 68 65 6c 6c 6f 27 29 2c 27 34 35 36 27 29 3b 22  hello'),'456');"
5020: 0a 7d 20 22 30 20 7b 28 31 32 33 29 20 68 65 6c  .} "0 {(123) hel
5030: 6c 6f 5c 6e 34 35 36 7d 22 0a 0a 64 6f 5f 74 65  lo\n456}"..do_te
5040: 73 74 20 73 68 65 6c 6c 31 2d 33 2d 32 39 2e 31  st shell1-3-29.1
5050: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
5060: 65 73 74 2e 64 62 22 20 22 2e 70 72 69 6e 74 20  est.db" ".print 
5070: 74 68 69 73 20 69 73 20 61 20 74 65 73 74 22 0a  this is a test".
5080: 7d 20 7b 30 20 7b 74 68 69 73 20 69 73 20 61 20  } {0 {this is a 
5090: 74 65 73 74 7d 7d 0a 0a 23 20 64 6f 74 2d 63 6f  test}}..# dot-co
50a0: 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 20 71  mmand argument q
50b0: 75 6f 74 69 6e 67 0a 64 6f 5f 74 65 73 74 20 73  uoting.do_test s
50c0: 68 65 6c 6c 31 2d 33 2d 33 30 2e 31 20 7b 0a 20  hell1-3-30.1 {. 
50d0: 20 63 61 74 63 68 63 6d 64 20 7b 74 65 73 74 2e   catchcmd {test.
50e0: 64 62 7d 20 7b 2e 70 72 69 6e 74 20 22 74 68 69  db} {.print "thi
50f0: 73 5c 22 69 73 27 61 5c 30 35 35 74 65 73 74 22  s\"is'a\055test"
5100: 20 27 74 68 69 73 5c 22 69 73 5c 5c 61 5c 30 35   'this\"is\\a\05
5110: 35 74 65 73 74 27 7d 0a 7d 20 7b 30 20 7b 74 68  5test'}.} {0 {th
5120: 69 73 22 69 73 27 61 2d 74 65 73 74 20 74 68 69  is"is'a-test thi
5130: 73 5c 22 69 73 5c 5c 61 5c 30 35 35 74 65 73 74  s\"is\\a\055test
5140: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
5150: 31 2d 33 2d 33 31 2e 31 20 7b 0a 20 20 63 61 74  1-3-31.1 {.  cat
5160: 63 68 63 6d 64 20 7b 74 65 73 74 2e 64 62 7d 20  chcmd {test.db} 
5170: 7b 2e 70 72 69 6e 74 20 22 74 68 69 73 5c 6e 69  {.print "this\ni
5180: 73 5c 74 61 5c 5c 74 65 73 74 22 20 27 74 68 69  s\ta\\test" 'thi
5190: 73 5c 6e 69 73 5c 74 61 5c 5c 74 65 73 74 27 7d  s\nis\ta\\test'}
51a0: 0a 7d 20 5b 6c 69 73 74 20 30 20 22 74 68 69 73  .} [list 0 "this
51b0: 5c 6e 69 73 5c 74 61 5c 5c 74 65 73 74 20 74 68  \nis\ta\\test th
51c0: 69 73 5c 5c 6e 69 73 5c 5c 74 61 5c 5c 5c 5c 74  is\\nis\\ta\\\\t
51d0: 65 73 74 22 5d 0a 0a 0a 23 20 54 65 73 74 20 74  est"]...# Test t
51e0: 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74 68 65  he output of the
51f0: 20 22 2e 64 75 6d 70 22 20 63 6f 6d 6d 61 6e 64   ".dump" command
5200: 0a 23 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  .#.do_test shell
5210: 31 2d 34 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f  1-4.1 {.  db clo
5220: 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65  se.  forcedelete
5230: 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74   test.db.  sqlit
5240: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
5250: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52  db eval {.    PR
5260: 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 3d 55 54  AGMA encoding=UT
5270: 46 31 36 3b 0a 20 20 20 20 43 52 45 41 54 45 20  F16;.    CREATE 
5280: 54 41 42 4c 45 20 74 31 28 78 29 3b 0a 20 20 20  TABLE t1(x);.   
5290: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
52a0: 56 41 4c 55 45 53 28 6e 75 6c 6c 29 2c 20 28 27  VALUES(null), ('
52b0: 27 29 2c 20 28 31 29 2c 20 28 32 2e 32 35 29 2c  '), (1), (2.25),
52c0: 20 28 27 68 65 6c 6c 6f 27 29 2c 20 28 78 27 38   ('hello'), (x'8
52d0: 30 37 66 27 29 3b 0a 20 20 7d 0a 20 20 63 61 74  07f');.  }.  cat
52e0: 63 68 63 6d 64 20 74 65 73 74 2e 64 62 20 7b 2e  chcmd test.db {.
52f0: 64 75 6d 70 7d 0a 7d 20 7b 30 20 7b 50 52 41 47  dump}.} {0 {PRAG
5300: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d  MA foreign_keys=
5310: 4f 46 46 3b 0a 42 45 47 49 4e 20 54 52 41 4e 53  OFF;.BEGIN TRANS
5320: 41 43 54 49 4f 4e 3b 0a 43 52 45 41 54 45 20 54  ACTION;.CREATE T
5330: 41 42 4c 45 20 74 31 28 78 29 3b 0a 49 4e 53 45  ABLE t1(x);.INSE
5340: 52 54 20 49 4e 54 4f 20 22 74 31 22 20 56 41 4c  RT INTO "t1" VAL
5350: 55 45 53 28 4e 55 4c 4c 29 3b 0a 49 4e 53 45 52  UES(NULL);.INSER
5360: 54 20 49 4e 54 4f 20 22 74 31 22 20 56 41 4c 55  T INTO "t1" VALU
5370: 45 53 28 27 27 29 3b 0a 49 4e 53 45 52 54 20 49  ES('');.INSERT I
5380: 4e 54 4f 20 22 74 31 22 20 56 41 4c 55 45 53 28  NTO "t1" VALUES(
5390: 31 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20  1);.INSERT INTO 
53a0: 22 74 31 22 20 56 41 4c 55 45 53 28 32 2e 32 35  "t1" VALUES(2.25
53b0: 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 22  );.INSERT INTO "
53c0: 74 31 22 20 56 41 4c 55 45 53 28 27 68 65 6c 6c  t1" VALUES('hell
53d0: 6f 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  o');.INSERT INTO
53e0: 20 22 74 31 22 20 56 41 4c 55 45 53 28 58 27 38   "t1" VALUES(X'8
53f0: 30 37 46 27 29 3b 0a 43 4f 4d 4d 49 54 3b 7d 7d  07F');.COMMIT;}}
5400: 0a 0a 23 20 54 65 73 74 20 74 68 65 20 6f 75 74  ..# Test the out
5410: 70 75 74 20 6f 66 20 22 2e 6d 6f 64 65 20 69 6e  put of ".mode in
5420: 73 65 72 74 22 0a 23 0a 64 6f 5f 74 65 73 74 20  sert".#.do_test 
5430: 73 68 65 6c 6c 31 2d 34 2e 32 20 7b 0a 20 20 63  shell1-4.2 {.  c
5440: 61 74 63 68 63 6d 64 20 74 65 73 74 2e 64 62 20  atchcmd test.db 
5450: 22 2e 6d 6f 64 65 20 69 6e 73 65 72 74 20 74 31  ".mode insert t1
5460: 5c 6e 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20  \nselect * from 
5470: 74 31 3b 22 0a 7d 20 7b 30 20 7b 49 4e 53 45 52  t1;".} {0 {INSER
5480: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
5490: 28 4e 55 4c 4c 29 3b 0a 49 4e 53 45 52 54 20 49  (NULL);.INSERT I
54a0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 27  NTO t1 VALUES(''
54b0: 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  );.INSERT INTO t
54c0: 31 20 56 41 4c 55 45 53 28 31 29 3b 0a 49 4e 53  1 VALUES(1);.INS
54d0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
54e0: 45 53 28 32 2e 32 35 29 3b 0a 49 4e 53 45 52 54  ES(2.25);.INSERT
54f0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
5500: 27 68 65 6c 6c 6f 27 29 3b 0a 49 4e 53 45 52 54  'hello');.INSERT
5510: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
5520: 58 27 38 30 37 66 27 29 3b 7d 7d 0a 0a 23 20 54  X'807f');}}..# T
5530: 65 73 74 20 74 68 65 20 6f 75 74 70 75 74 20 6f  est the output o
5540: 66 20 22 2e 6d 6f 64 65 20 74 63 6c 22 0a 23 0a  f ".mode tcl".#.
5550: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 34  do_test shell1-4
5560: 2e 33 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .3 {.  db close.
5570: 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65    forcedelete te
5580: 73 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20  st.db.  sqlite3 
5590: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 64 62 20  db test.db.  db 
55a0: 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  eval {.    PRAGM
55b0: 41 20 65 6e 63 6f 64 69 6e 67 3d 55 54 46 38 3b  A encoding=UTF8;
55c0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
55d0: 45 20 74 31 28 78 29 3b 0a 20 20 20 20 49 4e 53  E t1(x);.    INS
55e0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
55f0: 45 53 28 6e 75 6c 6c 29 2c 20 28 27 27 29 2c 20  ES(null), (''), 
5600: 28 31 29 2c 20 28 32 2e 32 35 29 2c 20 28 27 68  (1), (2.25), ('h
5610: 65 6c 6c 6f 27 29 2c 20 28 78 27 38 30 37 66 27  ello'), (x'807f'
5620: 29 3b 0a 20 20 7d 0a 20 20 63 61 74 63 68 63 6d  );.  }.  catchcm
5630: 64 20 74 65 73 74 2e 64 62 20 22 2e 6d 6f 64 65  d test.db ".mode
5640: 20 74 63 6c 5c 6e 73 65 6c 65 63 74 20 2a 20 66   tcl\nselect * f
5650: 72 6f 6d 20 74 31 3b 22 0a 7d 20 7b 30 20 7b 22  rom t1;".} {0 {"
5660: 22 0a 22 22 0a 22 31 22 0a 22 32 2e 32 35 22 0a  ".""."1"."2.25".
5670: 22 68 65 6c 6c 6f 22 0a 22 5c 32 30 30 5c 31 37  "hello"."\200\17
5680: 37 22 7d 7d 0a 0a 23 20 54 65 73 74 20 74 68 65  7"}}..# Test the
5690: 20 6f 75 74 70 75 74 20 6f 66 20 22 2e 6d 6f 64   output of ".mod
56a0: 65 20 74 63 6c 22 20 77 69 74 68 20 6d 75 6c 74  e tcl" with mult
56b0: 69 70 6c 65 20 63 6f 6c 75 6d 6e 73 0a 23 0a 64  iple columns.#.d
56c0: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 34 2e  o_test shell1-4.
56d0: 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  4 {.  db eval {.
56e0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
56f0: 20 74 32 28 78 2c 79 29 3b 0a 20 20 20 20 49 4e   t2(x,y);.    IN
5700: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
5710: 55 45 53 28 6e 75 6c 6c 2c 20 27 27 29 2c 20 28  UES(null, ''), (
5720: 31 2c 20 32 2e 32 35 29 2c 20 28 27 68 65 6c 6c  1, 2.25), ('hell
5730: 6f 27 2c 20 78 27 38 30 37 66 27 29 3b 0a 20 20  o', x'807f');.  
5740: 7d 0a 20 20 63 61 74 63 68 63 6d 64 20 74 65 73  }.  catchcmd tes
5750: 74 2e 64 62 20 22 2e 6d 6f 64 65 20 74 63 6c 5c  t.db ".mode tcl\
5760: 6e 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 74  nselect * from t
5770: 32 3b 22 0a 7d 20 7b 30 20 7b 22 22 20 22 22 0a  2;".} {0 {"" "".
5780: 22 31 22 20 22 32 2e 32 35 22 0a 22 68 65 6c 6c  "1" "2.25"."hell
5790: 6f 22 20 22 5c 32 30 30 5c 31 37 37 22 7d 7d 0a  o" "\200\177"}}.
57a0: 0a 23 20 54 65 73 74 20 74 68 65 20 6f 75 74 70  .# Test the outp
57b0: 75 74 20 6f 66 20 22 2e 6d 6f 64 65 20 74 63 6c  ut of ".mode tcl
57c0: 22 20 77 69 74 68 20 22 2e 6e 75 6c 6c 76 61 6c  " with ".nullval
57d0: 75 65 22 0a 23 0a 64 6f 5f 74 65 73 74 20 73 68  ue".#.do_test sh
57e0: 65 6c 6c 31 2d 34 2e 35 20 7b 0a 20 20 63 61 74  ell1-4.5 {.  cat
57f0: 63 68 63 6d 64 20 74 65 73 74 2e 64 62 20 22 2e  chcmd test.db ".
5800: 6d 6f 64 65 20 74 63 6c 5c 6e 2e 6e 75 6c 6c 76  mode tcl\n.nullv
5810: 61 6c 75 65 20 4e 55 4c 4c 5c 6e 73 65 6c 65 63  alue NULL\nselec
5820: 74 20 2a 20 66 72 6f 6d 20 74 32 3b 22 0a 7d 20  t * from t2;".} 
5830: 7b 30 20 7b 22 4e 55 4c 4c 22 20 22 22 0a 22 31  {0 {"NULL" ""."1
5840: 22 20 22 32 2e 32 35 22 0a 22 68 65 6c 6c 6f 22  " "2.25"."hello"
5850: 20 22 5c 32 30 30 5c 31 37 37 22 7d 7d 0a 0a 23   "\200\177"}}..#
5860: 20 54 65 73 74 20 74 68 65 20 6f 75 74 70 75 74   Test the output
5870: 20 6f 66 20 22 2e 6d 6f 64 65 20 74 63 6c 22 20   of ".mode tcl" 
5880: 77 69 74 68 20 54 63 6c 20 72 65 73 65 72 76 65  with Tcl reserve
5890: 64 20 63 68 61 72 61 63 74 65 72 73 0a 23 0a 64  d characters.#.d
58a0: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 34 2e  o_test shell1-4.
58b0: 36 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  6 {.  db eval {.
58c0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
58d0: 20 74 63 6c 31 28 78 29 3b 0a 20 20 20 20 49 4e   tcl1(x);.    IN
58e0: 53 45 52 54 20 49 4e 54 4f 20 74 63 6c 31 20 56  SERT INTO tcl1 V
58f0: 41 4c 55 45 53 28 27 22 27 29 2c 20 28 27 5b 27  ALUES('"'), ('['
5900: 29 2c 20 28 27 5d 27 29 2c 20 28 27 5c 7b 27 29  ), (']'), ('\{')
5910: 2c 20 28 27 5c 7d 27 29 2c 20 28 27 3b 27 29 2c  , ('\}'), (';'),
5920: 20 28 27 24 27 29 3b 0a 20 20 7d 0a 20 20 66 6f   ('$');.  }.  fo
5930: 72 65 61 63 68 20 7b 78 20 79 7d 20 5b 63 61 74  reach {x y} [cat
5940: 63 68 63 6d 64 20 74 65 73 74 2e 64 62 20 22 2e  chcmd test.db ".
5950: 6d 6f 64 65 20 74 63 6c 5c 6e 73 65 6c 65 63 74  mode tcl\nselect
5960: 20 2a 20 66 72 6f 6d 20 74 63 6c 31 3b 22 5d 20   * from tcl1;"] 
5970: 62 72 65 61 6b 0a 20 20 6c 69 73 74 20 24 78 20  break.  list $x 
5980: 24 79 20 5b 6c 6c 65 6e 67 74 68 20 24 79 5d 0a  $y [llength $y].
5990: 7d 20 7b 30 20 7b 22 5c 22 22 0a 22 5b 22 0a 22  } {0 {"\""."["."
59a0: 5d 22 0a 22 5c 5c 7b 22 0a 22 5c 5c 7d 22 0a 22  ]"."\\{"."\\}"."
59b0: 3b 22 0a 22 24 22 7d 20 37 7d 0a 0a 23 20 2e 63  ;"."$"} 7}..# .c
59c0: 6f 6c 73 65 70 61 72 61 74 6f 72 20 53 54 52 49  olseparator STRI
59d0: 4e 47 20 20 43 68 61 6e 67 65 20 63 6f 6c 75 6d  NG  Change colum
59e0: 6e 20 73 65 70 61 72 61 74 6f 72 20 75 73 65 64  n separator used
59f0: 20 62 79 20 6f 75 74 70 75 74 20 61 6e 64 20 2e   by output and .
5a00: 69 6d 70 6f 72 74 0a 64 6f 5f 74 65 73 74 20 73  import.do_test s
5a10: 68 65 6c 6c 31 2d 35 2e 31 2e 31 20 7b 0a 20 20  hell1-5.1.1 {.  
5a20: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
5a30: 62 22 20 22 2e 63 6f 6c 73 65 70 61 72 61 74 6f  b" ".colseparato
5a40: 72 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20  r".} {1 {Usage: 
5a50: 2e 63 6f 6c 73 65 70 61 72 61 74 6f 72 20 53 54  .colseparator ST
5a60: 52 49 4e 47 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  RING}}.do_test s
5a70: 68 65 6c 6c 31 2d 35 2e 31 2e 32 20 7b 0a 20 20  hell1-5.1.2 {.  
5a80: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
5a90: 62 22 20 22 2e 63 6f 6c 73 65 70 61 72 61 74 6f  b" ".colseparato
5aa0: 72 20 46 4f 4f 22 0a 7d 20 7b 30 20 7b 7d 7d 0a  r FOO".} {0 {}}.
5ab0: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 35  do_test shell1-5
5ac0: 2e 31 2e 33 20 7b 0a 20 20 23 20 74 6f 6f 20 6d  .1.3 {.  # too m
5ad0: 61 6e 79 20 61 72 67 75 6d 65 6e 74 73 0a 20 20  any arguments.  
5ae0: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
5af0: 62 22 20 22 2e 63 6f 6c 73 65 70 61 72 61 74 6f  b" ".colseparato
5b00: 72 20 46 4f 4f 20 42 41 44 22 0a 7d 20 7b 31 20  r FOO BAD".} {1 
5b10: 7b 55 73 61 67 65 3a 20 2e 63 6f 6c 73 65 70 61  {Usage: .colsepa
5b20: 72 61 74 6f 72 20 53 54 52 49 4e 47 7d 7d 0a 0a  rator STRING}}..
5b30: 23 20 2e 72 6f 77 73 65 70 61 72 61 74 6f 72 20  # .rowseparator 
5b40: 53 54 52 49 4e 47 20 20 43 68 61 6e 67 65 20 72  STRING  Change r
5b50: 6f 77 20 73 65 70 61 72 61 74 6f 72 20 75 73 65  ow separator use
5b60: 64 20 62 79 20 6f 75 74 70 75 74 20 61 6e 64 20  d by output and 
5b70: 2e 69 6d 70 6f 72 74 0a 64 6f 5f 74 65 73 74 20  .import.do_test 
5b80: 73 68 65 6c 6c 31 2d 36 2e 31 2e 31 20 7b 0a 20  shell1-6.1.1 {. 
5b90: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
5ba0: 64 62 22 20 22 2e 72 6f 77 73 65 70 61 72 61 74  db" ".rowseparat
5bb0: 6f 72 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a  or".} {1 {Usage:
5bc0: 20 2e 72 6f 77 73 65 70 61 72 61 74 6f 72 20 53   .rowseparator S
5bd0: 54 52 49 4e 47 7d 7d 0a 64 6f 5f 74 65 73 74 20  TRING}}.do_test 
5be0: 73 68 65 6c 6c 31 2d 36 2e 31 2e 32 20 7b 0a 20  shell1-6.1.2 {. 
5bf0: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
5c00: 64 62 22 20 22 2e 72 6f 77 73 65 70 61 72 61 74  db" ".rowseparat
5c10: 6f 72 20 46 4f 4f 22 0a 7d 20 7b 30 20 7b 7d 7d  or FOO".} {0 {}}
5c20: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
5c30: 36 2e 31 2e 33 20 7b 0a 20 20 23 20 74 6f 6f 20  6.1.3 {.  # too 
5c40: 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73 0a 20  many arguments. 
5c50: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
5c60: 64 62 22 20 22 2e 72 6f 77 73 65 70 61 72 61 74  db" ".rowseparat
5c70: 6f 72 20 46 4f 4f 20 42 41 44 22 0a 7d 20 7b 31  or FOO BAD".} {1
5c80: 20 7b 55 73 61 67 65 3a 20 2e 72 6f 77 73 65 70   {Usage: .rowsep
5c90: 61 72 61 74 6f 72 20 53 54 52 49 4e 47 7d 7d 0a  arator STRING}}.
5ca0: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.