/ Hex Artifact Content
Login

Artifact 1c0b7a79b1b91a56253ee0c4fbb309d39d16641e:


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 6e 65       [regexp {ne
4530: 77 6c 69 6e 65 3a 7d 20 24 72 65 73 5d 20 5c 0a  wline:} $res] \.
4540: 20 20 20 20 20 20 20 5b 72 65 67 65 78 70 20 7b         [regexp {
4550: 73 74 61 74 73 3a 7d 20 24 72 65 73 5d 20 5c 0a  stats:} $res] \.
4560: 20 20 20 20 20 20 20 5b 72 65 67 65 78 70 20 7b         [regexp {
4570: 77 69 64 74 68 3a 7d 20 24 72 65 73 5d 0a 7d 20  width:} $res].} 
4580: 7b 31 20 31 20 31 20 31 20 31 20 31 20 31 20 31  {1 1 1 1 1 1 1 1
4590: 20 31 20 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20   1 1 1}.do_test 
45a0: 73 68 65 6c 6c 31 2d 33 2e 32 33 2e 32 20 7b 0a  shell1-3.23.2 {.
45b0: 20 20 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67    # too many arg
45c0: 75 6d 65 6e 74 73 0a 20 20 63 61 74 63 68 63 6d  uments.  catchcm
45d0: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 73 68  d "test.db" ".sh
45e0: 6f 77 20 42 41 44 22 0a 7d 20 7b 31 20 7b 55 73  ow BAD".} {1 {Us
45f0: 61 67 65 3a 20 2e 73 68 6f 77 7d 7d 0a 0a 23 20  age: .show}}..# 
4600: 2e 73 74 61 74 73 20 4f 4e 7c 4f 46 46 20 20 20  .stats ON|OFF   
4610: 20 20 20 20 20 20 20 54 75 72 6e 20 73 74 61 74         Turn stat
4620: 73 20 6f 6e 20 6f 72 20 6f 66 66 0a 64 6f 5f 74  s on or off.do_t
4630: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 33 62  est shell1-3.23b
4640: 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .1 {.  catchcmd 
4650: 22 74 65 73 74 2e 64 62 22 20 22 2e 73 74 61 74  "test.db" ".stat
4660: 73 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20  s".} {1 {Usage: 
4670: 2e 73 74 61 74 73 20 6f 6e 7c 6f 66 66 7d 7d 0a  .stats on|off}}.
4680: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33  do_test shell1-3
4690: 2e 32 33 62 2e 32 20 7b 0a 20 20 63 61 74 63 68  .23b.2 {.  catch
46a0: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
46b0: 73 74 61 74 73 20 4f 4e 22 0a 7d 20 7b 30 20 7b  stats ON".} {0 {
46c0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
46d0: 31 2d 33 2e 32 33 62 2e 33 20 7b 0a 20 20 63 61  1-3.23b.3 {.  ca
46e0: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
46f0: 20 22 2e 73 74 61 74 73 20 4f 46 46 22 0a 7d 20   ".stats OFF".} 
4700: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  {0 {}}.do_test s
4710: 68 65 6c 6c 31 2d 33 2e 32 33 62 2e 34 20 7b 0a  hell1-3.23b.4 {.
4720: 20 20 23 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67    # too many arg
4730: 75 6d 65 6e 74 73 0a 20 20 63 61 74 63 68 63 6d  uments.  catchcm
4740: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 73 74  d "test.db" ".st
4750: 61 74 73 20 4f 46 46 20 42 41 44 22 0a 7d 20 7b  ats OFF BAD".} {
4760: 31 20 7b 55 73 61 67 65 3a 20 2e 73 74 61 74 73  1 {Usage: .stats
4770: 20 6f 6e 7c 6f 66 66 7d 7d 0a 0a 23 20 2e 74 61   on|off}}..# .ta
4780: 62 6c 65 73 20 3f 54 41 42 4c 45 3f 20 20 20 20  bles ?TABLE?    
4790: 20 20 20 20 4c 69 73 74 20 6e 61 6d 65 73 20 6f      List names o
47a0: 66 20 74 61 62 6c 65 73 0a 23 20 20 20 20 20 20  f tables.#      
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47c0: 20 20 20 20 49 66 20 54 41 42 4c 45 20 73 70 65      If TABLE spe
47d0: 63 69 66 69 65 64 2c 20 6f 6e 6c 79 20 6c 69 73  cified, only lis
47e0: 74 20 74 61 62 6c 65 73 20 6d 61 74 63 68 69 6e  t tables matchin
47f0: 67 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  g.#             
4800: 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 49 4b               LIK
4810: 45 20 70 61 74 74 65 72 6e 20 54 41 42 4c 45 2e  E pattern TABLE.
4820: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
4830: 33 2e 32 34 2e 31 20 7b 0a 20 20 63 61 74 63 68  3.24.1 {.  catch
4840: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
4850: 74 61 62 6c 65 73 22 0a 7d 20 7b 30 20 7b 7d 7d  tables".} {0 {}}
4860: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
4870: 33 2e 32 34 2e 32 20 7b 0a 20 20 63 61 74 63 68  3.24.2 {.  catch
4880: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
4890: 74 61 62 6c 65 73 20 46 4f 4f 22 0a 7d 20 7b 30  tables FOO".} {0
48a0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65   {}}.do_test she
48b0: 6c 6c 31 2d 33 2e 32 34 2e 33 20 7b 0a 20 20 23  ll1-3.24.3 {.  #
48c0: 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65   too many argume
48d0: 6e 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20 22  nts.  catchcmd "
48e0: 74 65 73 74 2e 64 62 22 20 22 2e 74 61 62 6c 65  test.db" ".table
48f0: 73 20 46 4f 4f 20 42 41 44 22 0a 7d 20 7b 30 20  s FOO BAD".} {0 
4900: 7b 7d 7d 0a 0a 23 20 2e 74 69 6d 65 6f 75 74 20  {}}..# .timeout 
4910: 4d 53 20 20 20 20 20 20 20 20 20 20 20 20 54 72  MS            Tr
4920: 79 20 6f 70 65 6e 69 6e 67 20 6c 6f 63 6b 65 64  y opening locked
4930: 20 74 61 62 6c 65 73 20 66 6f 72 20 4d 53 20 6d   tables for MS m
4940: 69 6c 6c 69 73 65 63 6f 6e 64 73 0a 64 6f 5f 74  illiseconds.do_t
4950: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 35 2e  est shell1-3.25.
4960: 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  1 {.  catchcmd "
4970: 74 65 73 74 2e 64 62 22 20 22 2e 74 69 6d 65 6f  test.db" ".timeo
4980: 75 74 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  ut".} {0 {}}.do_
4990: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 35  test shell1-3.25
49a0: 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .2 {.  catchcmd 
49b0: 22 74 65 73 74 2e 64 62 22 20 22 2e 74 69 6d 65  "test.db" ".time
49c0: 6f 75 74 20 7a 7a 7a 22 0a 20 20 23 20 74 68 69  out zzz".  # thi
49d0: 73 20 73 68 6f 75 6c 64 20 62 65 20 74 72 65 61  s should be trea
49e0: 74 65 64 20 74 68 65 20 73 61 6d 65 20 61 73 20  ted the same as 
49f0: 61 20 27 30 27 20 74 69 6d 65 6f 75 74 0a 7d 20  a '0' timeout.} 
4a00: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  {0 {}}.do_test s
4a10: 68 65 6c 6c 31 2d 33 2e 32 35 2e 33 20 7b 0a 20  hell1-3.25.3 {. 
4a20: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
4a30: 64 62 22 20 22 2e 74 69 6d 65 6f 75 74 20 31 22  db" ".timeout 1"
4a40: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
4a50: 74 20 73 68 65 6c 6c 31 2d 33 2e 32 35 2e 34 20  t shell1-3.25.4 
4a60: 7b 0a 20 20 23 20 74 6f 6f 20 6d 61 6e 79 20 61  {.  # too many a
4a70: 72 67 75 6d 65 6e 74 73 0a 20 20 63 61 74 63 68  rguments.  catch
4a80: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
4a90: 74 69 6d 65 6f 75 74 20 31 20 42 41 44 22 0a 7d  timeout 1 BAD".}
4aa0: 20 7b 30 20 7b 7d 7d 0a 0a 23 20 2e 77 69 64 74   {0 {}}..# .widt
4ab0: 68 20 4e 55 4d 20 4e 55 4d 20 2e 2e 2e 20 20 20  h NUM NUM ...   
4ac0: 20 20 53 65 74 20 63 6f 6c 75 6d 6e 20 77 69 64    Set column wid
4ad0: 74 68 73 20 66 6f 72 20 22 63 6f 6c 75 6d 6e 22  ths for "column"
4ae0: 20 6d 6f 64 65 0a 64 6f 5f 74 65 73 74 20 73 68   mode.do_test sh
4af0: 65 6c 6c 31 2d 33 2e 32 36 2e 31 20 7b 0a 20 20  ell1-3.26.1 {.  
4b00: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
4b10: 62 22 20 22 2e 77 69 64 74 68 22 0a 7d 20 7b 30  b" ".width".} {0
4b20: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65   {}}.do_test she
4b30: 6c 6c 31 2d 33 2e 32 36 2e 32 20 7b 0a 20 20 63  ll1-3.26.2 {.  c
4b40: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
4b50: 22 20 22 2e 77 69 64 74 68 20 78 78 78 22 0a 20  " ".width xxx". 
4b60: 20 23 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62   # this should b
4b70: 65 20 74 72 65 61 74 65 64 20 74 68 65 20 73 61  e treated the sa
4b80: 6d 65 20 61 73 20 61 20 27 30 27 20 77 69 64 74  me as a '0' widt
4b90: 68 20 66 6f 72 20 63 6f 6c 20 31 0a 7d 20 7b 30  h for col 1.} {0
4ba0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65   {}}.do_test she
4bb0: 6c 6c 31 2d 33 2e 32 36 2e 33 20 7b 0a 20 20 63  ll1-3.26.3 {.  c
4bc0: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
4bd0: 22 20 22 2e 77 69 64 74 68 20 78 78 78 20 79 79  " ".width xxx yy
4be0: 79 22 0a 20 20 23 20 74 68 69 73 20 73 68 6f 75  y".  # this shou
4bf0: 6c 64 20 62 65 20 74 72 65 61 74 65 64 20 74 68  ld be treated th
4c00: 65 20 73 61 6d 65 20 61 73 20 61 20 27 30 27 20  e same as a '0' 
4c10: 77 69 64 74 68 20 66 6f 72 20 63 6f 6c 20 31 20  width for col 1 
4c20: 61 6e 64 20 32 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  and 2.} {0 {}}.d
4c30: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e  o_test shell1-3.
4c40: 32 36 2e 34 20 7b 0a 20 20 63 61 74 63 68 63 6d  26.4 {.  catchcm
4c50: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 77 69  d "test.db" ".wi
4c60: 64 74 68 20 31 20 31 22 0a 20 20 23 20 74 68 69  dth 1 1".  # thi
4c70: 73 20 73 68 6f 75 6c 64 20 62 65 20 74 72 65 61  s should be trea
4c80: 74 65 64 20 74 68 65 20 73 61 6d 65 20 61 73 20  ted the same as 
4c90: 61 20 27 31 27 20 77 69 64 74 68 20 66 6f 72 20  a '1' width for 
4ca0: 63 6f 6c 20 31 20 61 6e 64 20 32 0a 7d 20 7b 30  col 1 and 2.} {0
4cb0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65   {}}.do_test she
4cc0: 6c 6c 31 2d 33 2e 32 36 2e 35 20 7b 0a 20 20 63  ll1-3.26.5 {.  c
4cd0: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
4ce0: 22 20 22 2e 6d 6f 64 65 20 63 6f 6c 75 6d 6e 5c  " ".mode column\
4cf0: 6e 2e 77 69 64 74 68 20 31 30 20 2d 31 30 5c 6e  n.width 10 -10\n
4d00: 53 45 4c 45 43 54 20 27 61 62 63 64 65 66 67 27  SELECT 'abcdefg'
4d10: 2c 20 31 32 33 34 35 36 3b 22 0a 20 20 23 20 74  , 123456;".  # t
4d20: 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 74 72  his should be tr
4d30: 65 61 74 65 64 20 74 68 65 20 73 61 6d 65 20 61  eated the same a
4d40: 73 20 61 20 27 31 27 20 77 69 64 74 68 20 66 6f  s a '1' width fo
4d50: 72 20 63 6f 6c 20 31 20 61 6e 64 20 32 0a 7d 20  r col 1 and 2.} 
4d60: 7b 30 20 7b 61 62 63 64 65 66 67 20 20 20 20 20  {0 {abcdefg     
4d70: 20 20 20 20 31 32 33 34 35 36 7d 7d 0a 64 6f 5f      123456}}.do_
4d80: 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 36  test shell1-3.26
4d90: 2e 36 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .6 {.  catchcmd 
4da0: 22 74 65 73 74 2e 64 62 22 20 22 2e 6d 6f 64 65  "test.db" ".mode
4db0: 20 63 6f 6c 75 6d 6e 5c 6e 2e 77 69 64 74 68 20   column\n.width 
4dc0: 2d 31 30 20 31 30 5c 6e 53 45 4c 45 43 54 20 27  -10 10\nSELECT '
4dd0: 61 62 63 64 65 66 67 27 2c 20 31 32 33 34 35 36  abcdefg', 123456
4de0: 3b 22 0a 20 20 23 20 74 68 69 73 20 73 68 6f 75  ;".  # this shou
4df0: 6c 64 20 62 65 20 74 72 65 61 74 65 64 20 74 68  ld be treated th
4e00: 65 20 73 61 6d 65 20 61 73 20 61 20 27 31 27 20  e same as a '1' 
4e10: 77 69 64 74 68 20 66 6f 72 20 63 6f 6c 20 31 20  width for col 1 
4e20: 61 6e 64 20 32 0a 7d 20 7b 30 20 7b 20 20 20 61  and 2.} {0 {   a
4e30: 62 63 64 65 66 67 20 20 31 32 33 34 35 36 20 20  bcdefg  123456  
4e40: 20 20 7d 7d 0a 0a 0a 23 20 2e 74 69 6d 65 72 20    }}...# .timer 
4e50: 4f 4e 7c 4f 46 46 20 20 20 20 20 20 20 20 20 20  ON|OFF          
4e60: 54 75 72 6e 20 74 68 65 20 43 50 55 20 74 69 6d  Turn the CPU tim
4e70: 65 72 20 6d 65 61 73 75 72 65 6d 65 6e 74 20 6f  er measurement o
4e80: 6e 20 6f 72 20 6f 66 66 0a 64 6f 5f 74 65 73 74  n or off.do_test
4e90: 20 73 68 65 6c 6c 31 2d 33 2e 32 37 2e 31 20 7b   shell1-3.27.1 {
4ea0: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
4eb0: 74 2e 64 62 22 20 22 2e 74 69 6d 65 72 22 0a 7d  t.db" ".timer".}
4ec0: 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 74 69 6d   {1 {Usage: .tim
4ed0: 65 72 20 6f 6e 7c 6f 66 66 7d 7d 0a 64 6f 5f 74  er on|off}}.do_t
4ee0: 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32 37 2e  est shell1-3.27.
4ef0: 32 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  2 {.  catchcmd "
4f00: 74 65 73 74 2e 64 62 22 20 22 2e 74 69 6d 65 72  test.db" ".timer
4f10: 20 4f 4e 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f   ON".} {0 {}}.do
4f20: 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2e 32  _test shell1-3.2
4f30: 37 2e 33 20 7b 0a 20 20 63 61 74 63 68 63 6d 64  7.3 {.  catchcmd
4f40: 20 22 74 65 73 74 2e 64 62 22 20 22 2e 74 69 6d   "test.db" ".tim
4f50: 65 72 20 4f 46 46 22 0a 7d 20 7b 30 20 7b 7d 7d  er OFF".} {0 {}}
4f60: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d  .do_test shell1-
4f70: 33 2e 32 37 2e 34 20 7b 0a 20 20 23 20 74 6f 6f  3.27.4 {.  # too
4f80: 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73 0a   many arguments.
4f90: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
4fa0: 2e 64 62 22 20 22 2e 74 69 6d 65 72 20 4f 46 46  .db" ".timer OFF
4fb0: 20 42 41 44 22 0a 7d 20 7b 31 20 7b 55 73 61 67   BAD".} {1 {Usag
4fc0: 65 3a 20 2e 74 69 6d 65 72 20 6f 6e 7c 6f 66 66  e: .timer on|off
4fd0: 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  }}..do_test shel
4fe0: 6c 31 2d 33 2d 32 38 2e 31 20 7b 0a 20 20 63 61  l1-3-28.1 {.  ca
4ff0: 74 63 68 63 6d 64 20 74 65 73 74 2e 64 62 20 5c  tchcmd test.db \
5000: 0a 20 20 20 20 20 22 2e 6c 6f 67 20 73 74 64 6f  .     ".log stdo
5010: 75 74 5c 6e 53 45 4c 45 43 54 20 63 6f 61 6c 65  ut\nSELECT coale
5020: 73 63 65 28 73 71 6c 69 74 65 5f 6c 6f 67 28 31  sce(sqlite_log(1
5030: 32 33 2c 27 68 65 6c 6c 6f 27 29 2c 27 34 35 36  23,'hello'),'456
5040: 27 29 3b 22 0a 7d 20 22 30 20 7b 28 31 32 33 29  ');".} "0 {(123)
5050: 20 68 65 6c 6c 6f 5c 6e 34 35 36 7d 22 0a 0a 64   hello\n456}"..d
5060: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 33 2d  o_test shell1-3-
5070: 32 39 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d  29.1 {.  catchcm
5080: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 70 72  d "test.db" ".pr
5090: 69 6e 74 20 74 68 69 73 20 69 73 20 61 20 74 65  int this is a te
50a0: 73 74 22 0a 7d 20 7b 30 20 7b 74 68 69 73 20 69  st".} {0 {this i
50b0: 73 20 61 20 74 65 73 74 7d 7d 0a 0a 23 20 64 6f  s a test}}..# do
50c0: 74 2d 63 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65  t-command argume
50d0: 6e 74 20 71 75 6f 74 69 6e 67 0a 64 6f 5f 74 65  nt quoting.do_te
50e0: 73 74 20 73 68 65 6c 6c 31 2d 33 2d 33 30 2e 31  st shell1-3-30.1
50f0: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 7b 74   {.  catchcmd {t
5100: 65 73 74 2e 64 62 7d 20 7b 2e 70 72 69 6e 74 20  est.db} {.print 
5110: 22 74 68 69 73 5c 22 69 73 27 61 5c 30 35 35 74  "this\"is'a\055t
5120: 65 73 74 22 20 27 74 68 69 73 5c 22 69 73 5c 5c  est" 'this\"is\\
5130: 61 5c 30 35 35 74 65 73 74 27 7d 0a 7d 20 7b 30  a\055test'}.} {0
5140: 20 7b 74 68 69 73 22 69 73 27 61 2d 74 65 73 74   {this"is'a-test
5150: 20 74 68 69 73 5c 22 69 73 5c 5c 61 5c 30 35 35   this\"is\\a\055
5160: 74 65 73 74 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  test}}.do_test s
5170: 68 65 6c 6c 31 2d 33 2d 33 31 2e 31 20 7b 0a 20  hell1-3-31.1 {. 
5180: 20 63 61 74 63 68 63 6d 64 20 7b 74 65 73 74 2e   catchcmd {test.
5190: 64 62 7d 20 7b 2e 70 72 69 6e 74 20 22 74 68 69  db} {.print "thi
51a0: 73 5c 6e 69 73 5c 74 61 5c 5c 74 65 73 74 22 20  s\nis\ta\\test" 
51b0: 27 74 68 69 73 5c 6e 69 73 5c 74 61 5c 5c 74 65  'this\nis\ta\\te
51c0: 73 74 27 7d 0a 7d 20 5b 6c 69 73 74 20 30 20 22  st'}.} [list 0 "
51d0: 74 68 69 73 5c 6e 69 73 5c 74 61 5c 5c 74 65 73  this\nis\ta\\tes
51e0: 74 20 74 68 69 73 5c 5c 6e 69 73 5c 5c 74 61 5c  t this\\nis\\ta\
51f0: 5c 5c 5c 74 65 73 74 22 5d 0a 0a 0a 23 20 54 65  \\\test"]...# Te
5200: 73 74 20 74 68 65 20 6f 75 74 70 75 74 20 6f 66  st the output of
5210: 20 74 68 65 20 22 2e 64 75 6d 70 22 20 63 6f 6d   the ".dump" com
5220: 6d 61 6e 64 0a 23 0a 64 6f 5f 74 65 73 74 20 73  mand.#.do_test s
5230: 68 65 6c 6c 31 2d 34 2e 31 20 7b 0a 20 20 64 62  hell1-4.1 {.  db
5240: 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65 64 65   close.  forcede
5250: 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20 20 73  lete test.db.  s
5260: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
5270: 62 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  b.  db eval {.  
5280: 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e    PRAGMA encodin
5290: 67 3d 55 54 46 31 36 3b 0a 20 20 20 20 43 52 45  g=UTF16;.    CRE
52a0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b  ATE TABLE t1(x);
52b0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
52c0: 20 74 31 20 56 41 4c 55 45 53 28 6e 75 6c 6c 29   t1 VALUES(null)
52d0: 2c 20 28 27 27 29 2c 20 28 31 29 2c 20 28 32 2e  , (''), (1), (2.
52e0: 32 35 29 2c 20 28 27 68 65 6c 6c 6f 27 29 2c 20  25), ('hello'), 
52f0: 28 78 27 38 30 37 66 27 29 3b 0a 20 20 7d 0a 20  (x'807f');.  }. 
5300: 20 63 61 74 63 68 63 6d 64 20 74 65 73 74 2e 64   catchcmd test.d
5310: 62 20 7b 2e 64 75 6d 70 7d 0a 7d 20 7b 30 20 7b  b {.dump}.} {0 {
5320: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
5330: 65 79 73 3d 4f 46 46 3b 0a 42 45 47 49 4e 20 54  eys=OFF;.BEGIN T
5340: 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 43 52 45 41  RANSACTION;.CREA
5350: 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0a  TE TABLE t1(x);.
5360: 49 4e 53 45 52 54 20 49 4e 54 4f 20 22 74 31 22  INSERT INTO "t1"
5370: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 49   VALUES(NULL);.I
5380: 4e 53 45 52 54 20 49 4e 54 4f 20 22 74 31 22 20  NSERT INTO "t1" 
5390: 56 41 4c 55 45 53 28 27 27 29 3b 0a 49 4e 53 45  VALUES('');.INSE
53a0: 52 54 20 49 4e 54 4f 20 22 74 31 22 20 56 41 4c  RT INTO "t1" VAL
53b0: 55 45 53 28 31 29 3b 0a 49 4e 53 45 52 54 20 49  UES(1);.INSERT I
53c0: 4e 54 4f 20 22 74 31 22 20 56 41 4c 55 45 53 28  NTO "t1" VALUES(
53d0: 32 2e 32 35 29 3b 0a 49 4e 53 45 52 54 20 49 4e  2.25);.INSERT IN
53e0: 54 4f 20 22 74 31 22 20 56 41 4c 55 45 53 28 27  TO "t1" VALUES('
53f0: 68 65 6c 6c 6f 27 29 3b 0a 49 4e 53 45 52 54 20  hello');.INSERT 
5400: 49 4e 54 4f 20 22 74 31 22 20 56 41 4c 55 45 53  INTO "t1" VALUES
5410: 28 58 27 38 30 37 46 27 29 3b 0a 43 4f 4d 4d 49  (X'807F');.COMMI
5420: 54 3b 7d 7d 0a 0a 23 20 54 65 73 74 20 74 68 65  T;}}..# Test the
5430: 20 6f 75 74 70 75 74 20 6f 66 20 22 2e 6d 6f 64   output of ".mod
5440: 65 20 69 6e 73 65 72 74 22 0a 23 0a 64 6f 5f 74  e insert".#.do_t
5450: 65 73 74 20 73 68 65 6c 6c 31 2d 34 2e 32 20 7b  est shell1-4.2 {
5460: 0a 20 20 63 61 74 63 68 63 6d 64 20 74 65 73 74  .  catchcmd test
5470: 2e 64 62 20 22 2e 6d 6f 64 65 20 69 6e 73 65 72  .db ".mode inser
5480: 74 20 74 31 5c 6e 73 65 6c 65 63 74 20 2a 20 66  t t1\nselect * f
5490: 72 6f 6d 20 74 31 3b 22 0a 7d 20 7b 30 20 7b 49  rom t1;".} {0 {I
54a0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
54b0: 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 49 4e 53 45  LUES(NULL);.INSE
54c0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
54d0: 53 28 27 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e  S('');.INSERT IN
54e0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 29 3b  TO t1 VALUES(1);
54f0: 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  .INSERT INTO t1 
5500: 56 41 4c 55 45 53 28 32 2e 32 35 29 3b 0a 49 4e  VALUES(2.25);.IN
5510: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
5520: 55 45 53 28 27 68 65 6c 6c 6f 27 29 3b 0a 49 4e  UES('hello');.IN
5530: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
5540: 55 45 53 28 58 27 38 30 37 66 27 29 3b 7d 7d 0a  UES(X'807f');}}.
5550: 0a 23 20 54 65 73 74 20 74 68 65 20 6f 75 74 70  .# Test the outp
5560: 75 74 20 6f 66 20 22 2e 6d 6f 64 65 20 74 63 6c  ut of ".mode tcl
5570: 22 0a 23 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  ".#.do_test shel
5580: 6c 31 2d 34 2e 33 20 7b 0a 20 20 64 62 20 63 6c  l1-4.3 {.  db cl
5590: 6f 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65 74  ose.  forcedelet
55a0: 65 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69  e test.db.  sqli
55b0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
55c0: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 50   db eval {.    P
55d0: 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 3d 55  RAGMA encoding=U
55e0: 54 46 38 3b 0a 20 20 20 20 43 52 45 41 54 45 20  TF8;.    CREATE 
55f0: 54 41 42 4c 45 20 74 31 28 78 29 3b 0a 20 20 20  TABLE t1(x);.   
5600: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
5610: 56 41 4c 55 45 53 28 6e 75 6c 6c 29 2c 20 28 27  VALUES(null), ('
5620: 27 29 2c 20 28 31 29 2c 20 28 32 2e 32 35 29 2c  '), (1), (2.25),
5630: 20 28 27 68 65 6c 6c 6f 27 29 2c 20 28 78 27 38   ('hello'), (x'8
5640: 30 37 66 27 29 3b 0a 20 20 7d 0a 20 20 63 61 74  07f');.  }.  cat
5650: 63 68 63 6d 64 20 74 65 73 74 2e 64 62 20 22 2e  chcmd test.db ".
5660: 6d 6f 64 65 20 74 63 6c 5c 6e 73 65 6c 65 63 74  mode tcl\nselect
5670: 20 2a 20 66 72 6f 6d 20 74 31 3b 22 0a 7d 20 7b   * from t1;".} {
5680: 30 20 7b 22 22 0a 22 22 0a 22 31 22 0a 22 32 2e  0 {"".""."1"."2.
5690: 32 35 22 0a 22 68 65 6c 6c 6f 22 0a 22 5c 32 30  25"."hello"."\20
56a0: 30 5c 31 37 37 22 7d 7d 0a 0a 23 20 54 65 73 74  0\177"}}..# Test
56b0: 20 74 68 65 20 6f 75 74 70 75 74 20 6f 66 20 22   the output of "
56c0: 2e 6d 6f 64 65 20 74 63 6c 22 20 77 69 74 68 20  .mode tcl" with 
56d0: 6d 75 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 73  multiple columns
56e0: 0a 23 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  .#.do_test shell
56f0: 31 2d 34 2e 34 20 7b 0a 20 20 64 62 20 65 76 61  1-4.4 {.  db eva
5700: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
5710: 41 42 4c 45 20 74 32 28 78 2c 79 29 3b 0a 20 20  ABLE t2(x,y);.  
5720: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
5730: 20 56 41 4c 55 45 53 28 6e 75 6c 6c 2c 20 27 27   VALUES(null, ''
5740: 29 2c 20 28 31 2c 20 32 2e 32 35 29 2c 20 28 27  ), (1, 2.25), ('
5750: 68 65 6c 6c 6f 27 2c 20 78 27 38 30 37 66 27 29  hello', x'807f')
5760: 3b 0a 20 20 7d 0a 20 20 63 61 74 63 68 63 6d 64  ;.  }.  catchcmd
5770: 20 74 65 73 74 2e 64 62 20 22 2e 6d 6f 64 65 20   test.db ".mode 
5780: 74 63 6c 5c 6e 73 65 6c 65 63 74 20 2a 20 66 72  tcl\nselect * fr
5790: 6f 6d 20 74 32 3b 22 0a 7d 20 7b 30 20 7b 22 22  om t2;".} {0 {""
57a0: 20 22 22 0a 22 31 22 20 22 32 2e 32 35 22 0a 22   ""."1" "2.25"."
57b0: 68 65 6c 6c 6f 22 20 22 5c 32 30 30 5c 31 37 37  hello" "\200\177
57c0: 22 7d 7d 0a 0a 23 20 54 65 73 74 20 74 68 65 20  "}}..# Test the 
57d0: 6f 75 74 70 75 74 20 6f 66 20 22 2e 6d 6f 64 65  output of ".mode
57e0: 20 74 63 6c 22 20 77 69 74 68 20 22 2e 6e 75 6c   tcl" with ".nul
57f0: 6c 76 61 6c 75 65 22 0a 23 0a 64 6f 5f 74 65 73  lvalue".#.do_tes
5800: 74 20 73 68 65 6c 6c 31 2d 34 2e 35 20 7b 0a 20  t shell1-4.5 {. 
5810: 20 63 61 74 63 68 63 6d 64 20 74 65 73 74 2e 64   catchcmd test.d
5820: 62 20 22 2e 6d 6f 64 65 20 74 63 6c 5c 6e 2e 6e  b ".mode tcl\n.n
5830: 75 6c 6c 76 61 6c 75 65 20 4e 55 4c 4c 5c 6e 73  ullvalue NULL\ns
5840: 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 74 32 3b  elect * from t2;
5850: 22 0a 7d 20 7b 30 20 7b 22 4e 55 4c 4c 22 20 22  ".} {0 {"NULL" "
5860: 22 0a 22 31 22 20 22 32 2e 32 35 22 0a 22 68 65  "."1" "2.25"."he
5870: 6c 6c 6f 22 20 22 5c 32 30 30 5c 31 37 37 22 7d  llo" "\200\177"}
5880: 7d 0a 0a 23 20 54 65 73 74 20 74 68 65 20 6f 75  }..# Test the ou
5890: 74 70 75 74 20 6f 66 20 22 2e 6d 6f 64 65 20 74  tput of ".mode t
58a0: 63 6c 22 20 77 69 74 68 20 54 63 6c 20 72 65 73  cl" with Tcl res
58b0: 65 72 76 65 64 20 63 68 61 72 61 63 74 65 72 73  erved characters
58c0: 0a 23 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  .#.do_test shell
58d0: 31 2d 34 2e 36 20 7b 0a 20 20 64 62 20 65 76 61  1-4.6 {.  db eva
58e0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
58f0: 41 42 4c 45 20 74 63 6c 31 28 78 29 3b 0a 20 20  ABLE tcl1(x);.  
5900: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 63    INSERT INTO tc
5910: 6c 31 20 56 41 4c 55 45 53 28 27 22 27 29 2c 20  l1 VALUES('"'), 
5920: 28 27 5b 27 29 2c 20 28 27 5d 27 29 2c 20 28 27  ('['), (']'), ('
5930: 5c 7b 27 29 2c 20 28 27 5c 7d 27 29 2c 20 28 27  \{'), ('\}'), ('
5940: 3b 27 29 2c 20 28 27 24 27 29 3b 0a 20 20 7d 0a  ;'), ('$');.  }.
5950: 20 20 66 6f 72 65 61 63 68 20 7b 78 20 79 7d 20    foreach {x y} 
5960: 5b 63 61 74 63 68 63 6d 64 20 74 65 73 74 2e 64  [catchcmd test.d
5970: 62 20 22 2e 6d 6f 64 65 20 74 63 6c 5c 6e 73 65  b ".mode tcl\nse
5980: 6c 65 63 74 20 2a 20 66 72 6f 6d 20 74 63 6c 31  lect * from tcl1
5990: 3b 22 5d 20 62 72 65 61 6b 0a 20 20 6c 69 73 74  ;"] break.  list
59a0: 20 24 78 20 24 79 20 5b 6c 6c 65 6e 67 74 68 20   $x $y [llength 
59b0: 24 79 5d 0a 7d 20 7b 30 20 7b 22 5c 22 22 0a 22  $y].} {0 {"\""."
59c0: 5b 22 0a 22 5d 22 0a 22 5c 5c 7b 22 0a 22 5c 5c  ["."]"."\\{"."\\
59d0: 7d 22 0a 22 3b 22 0a 22 24 22 7d 20 37 7d 0a 0a  }".";"."$"} 7}..
59e0: 23 20 2e 63 6f 6c 73 65 70 61 72 61 74 6f 72 20  # .colseparator 
59f0: 53 54 52 49 4e 47 20 20 43 68 61 6e 67 65 20 63  STRING  Change c
5a00: 6f 6c 75 6d 6e 20 73 65 70 61 72 61 74 6f 72 20  olumn separator 
5a10: 75 73 65 64 20 62 79 20 6f 75 74 70 75 74 20 61  used by output a
5a20: 6e 64 20 2e 69 6d 70 6f 72 74 0a 64 6f 5f 74 65  nd .import.do_te
5a30: 73 74 20 73 68 65 6c 6c 31 2d 35 2e 31 2e 31 20  st shell1-5.1.1 
5a40: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
5a50: 73 74 2e 64 62 22 20 22 2e 63 6f 6c 73 65 70 61  st.db" ".colsepa
5a60: 72 61 74 6f 72 22 0a 7d 20 7b 31 20 7b 55 73 61  rator".} {1 {Usa
5a70: 67 65 3a 20 2e 63 6f 6c 73 65 70 61 72 61 74 6f  ge: .colseparato
5a80: 72 20 53 54 52 49 4e 47 7d 7d 0a 64 6f 5f 74 65  r STRING}}.do_te
5a90: 73 74 20 73 68 65 6c 6c 31 2d 35 2e 31 2e 32 20  st shell1-5.1.2 
5aa0: 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  {.  catchcmd "te
5ab0: 73 74 2e 64 62 22 20 22 2e 63 6f 6c 73 65 70 61  st.db" ".colsepa
5ac0: 72 61 74 6f 72 20 46 4f 4f 22 0a 7d 20 7b 30 20  rator FOO".} {0 
5ad0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  {}}.do_test shel
5ae0: 6c 31 2d 35 2e 31 2e 33 20 7b 0a 20 20 23 20 74  l1-5.1.3 {.  # t
5af0: 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74  oo many argument
5b00: 73 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65  s.  catchcmd "te
5b10: 73 74 2e 64 62 22 20 22 2e 63 6f 6c 73 65 70 61  st.db" ".colsepa
5b20: 72 61 74 6f 72 20 46 4f 4f 20 42 41 44 22 0a 7d  rator FOO BAD".}
5b30: 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 63 6f 6c   {1 {Usage: .col
5b40: 73 65 70 61 72 61 74 6f 72 20 53 54 52 49 4e 47  separator STRING
5b50: 7d 7d 0a 0a 23 20 2e 72 6f 77 73 65 70 61 72 61  }}..# .rowsepara
5b60: 74 6f 72 20 53 54 52 49 4e 47 20 20 43 68 61 6e  tor STRING  Chan
5b70: 67 65 20 72 6f 77 20 73 65 70 61 72 61 74 6f 72  ge row separator
5b80: 20 75 73 65 64 20 62 79 20 6f 75 74 70 75 74 20   used by output 
5b90: 61 6e 64 20 2e 69 6d 70 6f 72 74 0a 64 6f 5f 74  and .import.do_t
5ba0: 65 73 74 20 73 68 65 6c 6c 31 2d 36 2e 31 2e 31  est shell1-6.1.1
5bb0: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
5bc0: 65 73 74 2e 64 62 22 20 22 2e 72 6f 77 73 65 70  est.db" ".rowsep
5bd0: 61 72 61 74 6f 72 22 0a 7d 20 7b 31 20 7b 55 73  arator".} {1 {Us
5be0: 61 67 65 3a 20 2e 72 6f 77 73 65 70 61 72 61 74  age: .rowseparat
5bf0: 6f 72 20 53 54 52 49 4e 47 7d 7d 0a 64 6f 5f 74  or STRING}}.do_t
5c00: 65 73 74 20 73 68 65 6c 6c 31 2d 36 2e 31 2e 32  est shell1-6.1.2
5c10: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
5c20: 65 73 74 2e 64 62 22 20 22 2e 72 6f 77 73 65 70  est.db" ".rowsep
5c30: 61 72 61 74 6f 72 20 46 4f 4f 22 0a 7d 20 7b 30  arator FOO".} {0
5c40: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65   {}}.do_test she
5c50: 6c 6c 31 2d 36 2e 31 2e 33 20 7b 0a 20 20 23 20  ll1-6.1.3 {.  # 
5c60: 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e  too many argumen
5c70: 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74  ts.  catchcmd "t
5c80: 65 73 74 2e 64 62 22 20 22 2e 72 6f 77 73 65 70  est.db" ".rowsep
5c90: 61 72 61 74 6f 72 20 46 4f 4f 20 42 41 44 22 0a  arator FOO BAD".
5ca0: 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 72 6f  } {1 {Usage: .ro
5cb0: 77 73 65 70 61 72 61 74 6f 72 20 53 54 52 49 4e  wseparator STRIN
5cc0: 47 7d 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  G}}..finish_test
5cd0: 0a                                               .