/ Hex Artifact Content
Login

Artifact 15a419cc1df21c892ed64f5596ae7a501f2816f2:


0000: 23 20 32 30 31 30 20 41 75 67 75 73 74 20 34 0a  # 2010 August 4.
0010: 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64  #.# The author d
0020: 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67  isclaims copyrig
0030: 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63  ht to this sourc
0040: 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63  e code.  In plac
0050: 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e  e of.# a legal n
0060: 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61  otice, here is a
0070: 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20   blessing:.#.#  
0080: 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f    May you do goo
0090: 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a  d and not evil..
00a0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e  #    May you fin
00b0: 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f  d forgiveness fo
00c0: 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66  r yourself and f
00d0: 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23  orgive others..#
00e0: 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72      May you shar
00f0: 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20  e freely, never 
0100: 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e  taking more than
0110: 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a   you 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 2a 2a 0a 23 0a 23 20 54 68 65 20 66 6f  *****.#.# The fo
0170: 63 75 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65  cus of this file
0180: 20 69 73 20 74 65 73 74 69 6e 67 20 74 68 65 20   is testing the 
0190: 43 4c 49 20 73 68 65 6c 6c 20 74 6f 6f 6c 2e 0a  CLI shell tool..
01a0: 23 20 54 68 65 73 65 20 74 65 73 74 73 20 61 72  # These tests ar
01b0: 65 20 73 70 65 63 69 66 69 63 20 74 6f 20 74 68  e specific to th
01c0: 65 20 2e 69 6d 70 6f 72 74 20 63 6f 6d 6d 61 6e  e .import comman
01d0: 64 2e 0a 23 0a 23 20 24 49 64 3a 20 73 68 65 6c  d..#.# $Id: shel
01e0: 6c 35 2e 74 65 73 74 2c 76 20 31 2e 37 20 32 30  l5.test,v 1.7 20
01f0: 30 39 2f 30 37 2f 31 37 20 31 36 3a 35 34 3a 34  09/07/17 16:54:4
0200: 38 20 73 68 61 6e 65 68 20 45 78 70 20 24 0a 23  8 shaneh Exp $.#
0210: 0a 0a 23 20 54 65 73 74 20 70 6c 61 6e 3a 0a 23  ..# Test plan:.#
0220: 0a 23 20 20 20 73 68 65 6c 6c 35 2d 31 2e 2a 3a  .#   shell5-1.*:
0230: 20 42 61 73 69 63 20 74 65 73 74 73 20 73 70 65   Basic tests spe
0240: 63 69 66 69 63 20 74 6f 20 74 68 65 20 22 2e 69  cific to the ".i
0250: 6d 70 6f 72 74 22 20 63 6f 6d 6d 61 6e 64 2e 0a  mport" command..
0260: 23 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66  #.set testdir [f
0270: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67  ile dirname $arg
0280: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74  v0].source $test
0290: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 69  dir/tester.tcl.i
02a0: 66 20 7b 24 74 63 6c 5f 70 6c 61 74 66 6f 72 6d  f {$tcl_platform
02b0: 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 77 69 6e  (platform)=="win
02c0: 64 6f 77 73 22 7d 20 7b 0a 20 20 73 65 74 20 43  dows"} {.  set C
02d0: 4c 49 20 22 73 71 6c 69 74 65 33 2e 65 78 65 22  LI "sqlite3.exe"
02e0: 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 73 65 74 20  .} else {.  set 
02f0: 43 4c 49 20 22 2e 2f 73 71 6c 69 74 65 33 22 0a  CLI "./sqlite3".
0300: 7d 0a 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 65  }.if {![file exe
0310: 63 75 74 61 62 6c 65 20 24 43 4c 49 5d 7d 20 7b  cutable $CLI]} {
0320: 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20  .  finish_test. 
0330: 20 72 65 74 75 72 6e 0a 7d 0a 64 62 20 63 6c 6f   return.}.db clo
0340: 73 65 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74  se.forcedelete t
0350: 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a  est.db test.db-j
0360: 6f 75 72 6e 61 6c 20 74 65 73 74 2e 64 62 2d 77  ournal test.db-w
0370: 61 6c 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  al..#-----------
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 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 73  -.# Test cases s
03d0: 68 65 6c 6c 35 2d 31 2e 2a 3a 20 42 61 73 69 63  hell5-1.*: Basic
03e0: 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20 74 68 65   handling of the
03f0: 20 2e 69 6d 70 6f 72 74 20 61 6e 64 20 2e 73 65   .import and .se
0400: 70 61 72 61 74 6f 72 20 63 6f 6d 6d 61 6e 64 73  parator commands
0410: 2e 0a 23 0a 0a 23 20 2e 69 6d 70 6f 72 74 20 46  ..#..# .import F
0420: 49 4c 45 20 54 41 42 4c 45 20 20 20 20 20 49 6d  ILE TABLE     Im
0430: 70 6f 72 74 20 64 61 74 61 20 66 72 6f 6d 20 46  port data from F
0440: 49 4c 45 20 69 6e 74 6f 20 54 41 42 4c 45 0a 64  ILE into TABLE.d
0450: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 35 2d 31 2e  o_test shell5-1.
0460: 31 2e 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64  1.1 {.  catchcmd
0470: 20 22 74 65 73 74 2e 64 62 22 20 22 2e 69 6d 70   "test.db" ".imp
0480: 6f 72 74 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65  ort".} {1 {Usage
0490: 3a 20 2e 69 6d 70 6f 72 74 20 46 49 4c 45 20 54  : .import FILE T
04a0: 41 42 4c 45 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  ABLE}}.do_test s
04b0: 68 65 6c 6c 35 2d 31 2e 31 2e 32 20 7b 0a 20 20  hell5-1.1.2 {.  
04c0: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
04d0: 62 22 20 22 2e 69 6d 70 6f 72 74 20 46 4f 4f 22  b" ".import FOO"
04e0: 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 69  .} {1 {Usage: .i
04f0: 6d 70 6f 72 74 20 46 49 4c 45 20 54 41 42 4c 45  mport FILE TABLE
0500: 7d 7d 0a 23 64 6f 5f 74 65 73 74 20 73 68 65 6c  }}.#do_test shel
0510: 6c 35 2d 31 2e 31 2e 32 20 7b 0a 23 20 20 63 61  l5-1.1.2 {.#  ca
0520: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
0530: 20 22 2e 69 6d 70 6f 72 74 20 46 4f 4f 20 42 41   ".import FOO BA
0540: 52 22 0a 23 7d 20 7b 31 20 7b 45 72 72 6f 72 3a  R".#} {1 {Error:
0550: 20 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20   no such table: 
0560: 42 41 52 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  BAR}}.do_test sh
0570: 65 6c 6c 35 2d 31 2e 31 2e 33 20 7b 0a 20 20 23  ell5-1.1.3 {.  #
0580: 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65   too many argume
0590: 6e 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20 22  nts.  catchcmd "
05a0: 74 65 73 74 2e 64 62 22 20 22 2e 69 6d 70 6f 72  test.db" ".impor
05b0: 74 20 46 4f 4f 20 42 41 52 20 42 41 44 22 0a 7d  t FOO BAR BAD".}
05c0: 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 69 6d 70   {1 {Usage: .imp
05d0: 6f 72 74 20 46 49 4c 45 20 54 41 42 4c 45 7d 7d  ort FILE TABLE}}
05e0: 0a 0a 23 20 2e 73 65 70 61 72 61 74 6f 72 20 53  ..# .separator S
05f0: 54 52 49 4e 47 20 20 20 20 20 20 43 68 61 6e 67  TRING      Chang
0600: 65 20 73 65 70 61 72 61 74 6f 72 20 75 73 65 64  e separator used
0610: 20 62 79 20 6f 75 74 70 75 74 20 6d 6f 64 65 20   by output mode 
0620: 61 6e 64 20 2e 69 6d 70 6f 72 74 0a 64 6f 5f 74  and .import.do_t
0630: 65 73 74 20 73 68 65 6c 6c 35 2d 31 2e 32 2e 31  est shell5-1.2.1
0640: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
0650: 65 73 74 2e 64 62 22 20 22 2e 73 65 70 61 72 61  est.db" ".separa
0660: 74 6f 72 22 0a 7d 20 7b 31 20 7b 55 73 61 67 65  tor".} {1 {Usage
0670: 3a 20 2e 73 65 70 61 72 61 74 6f 72 20 53 45 50  : .separator SEP
0680: 41 52 41 54 4f 52 20 3f 4e 45 57 4c 49 4e 45 3f  ARATOR ?NEWLINE?
0690: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
06a0: 35 2d 31 2e 32 2e 32 20 7b 0a 20 20 63 61 74 63  5-1.2.2 {.  catc
06b0: 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22  hcmd "test.db" "
06c0: 2e 73 65 70 61 72 61 74 6f 72 20 4f 4e 45 22 0a  .separator ONE".
06d0: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
06e0: 20 73 68 65 6c 6c 35 2d 31 2e 32 2e 33 20 7b 0a   shell5-1.2.3 {.
06f0: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
0700: 2e 64 62 22 20 22 2e 73 65 70 61 72 61 74 6f 72  .db" ".separator
0710: 20 4f 4e 45 20 54 57 4f 22 0a 7d 20 7b 30 20 7b   ONE TWO".} {0 {
0720: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  }}.do_test shell
0730: 35 2d 31 2e 32 2e 34 20 7b 0a 20 20 23 20 74 6f  5-1.2.4 {.  # to
0740: 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73  o many arguments
0750: 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73  .  catchcmd "tes
0760: 74 2e 64 62 22 20 22 2e 73 65 70 61 72 61 74 6f  t.db" ".separato
0770: 72 20 4f 4e 45 20 54 57 4f 20 54 48 52 45 45 22  r ONE TWO THREE"
0780: 0a 7d 20 7b 31 20 7b 55 73 61 67 65 3a 20 2e 73  .} {1 {Usage: .s
0790: 65 70 61 72 61 74 6f 72 20 53 45 50 41 52 41 54  eparator SEPARAT
07a0: 4f 52 20 3f 4e 45 57 4c 49 4e 45 3f 7d 7d 0a 0a  OR ?NEWLINE?}}..
07b0: 23 20 73 65 70 61 72 61 74 6f 72 20 73 68 6f 75  # separator shou
07c0: 6c 64 20 64 65 66 61 75 6c 74 20 74 6f 20 22 7c  ld default to "|
07d0: 22 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 35  ".do_test shell5
07e0: 2d 31 2e 33 2e 31 20 7b 0a 20 20 73 65 74 20 72  -1.3.1 {.  set r
07f0: 65 73 20 5b 63 61 74 63 68 63 6d 64 20 22 74 65  es [catchcmd "te
0800: 73 74 2e 64 62 22 20 22 2e 73 68 6f 77 22 5d 0a  st.db" ".show"].
0810: 20 20 6c 69 73 74 20 5b 72 65 67 65 78 70 20 7b    list [regexp {
0820: 73 65 70 61 72 61 74 6f 72 3a 20 5c 22 5c 7c 5c  separator: \"\|\
0830: 22 7d 20 24 72 65 73 5d 0a 7d 20 7b 31 7d 0a 0a  "} $res].} {1}..
0840: 23 20 73 65 74 20 73 65 70 61 72 61 74 6f 72 20  # set separator 
0850: 74 6f 20 64 69 66 66 65 72 65 6e 74 20 76 61 6c  to different val
0860: 75 65 2e 0a 23 20 63 68 65 63 6b 20 74 68 61 74  ue..# check that
0870: 20 2e 73 68 6f 77 20 72 65 70 6f 72 74 73 20 6e   .show reports n
0880: 65 77 20 76 61 6c 75 65 0a 64 6f 5f 74 65 73 74  ew value.do_test
0890: 20 73 68 65 6c 6c 35 2d 31 2e 33 2e 32 20 7b 0a   shell5-1.3.2 {.
08a0: 20 20 73 65 74 20 72 65 73 20 5b 63 61 74 63 68    set res [catch
08b0: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 7b 2e  cmd "test.db" {.
08c0: 73 65 70 61 72 61 74 6f 72 20 2c 0a 2e 73 68 6f  separator ,..sho
08d0: 77 7d 5d 0a 20 20 6c 69 73 74 20 5b 72 65 67 65  w}].  list [rege
08e0: 78 70 20 7b 73 65 70 61 72 61 74 6f 72 3a 20 5c  xp {separator: \
08f0: 22 2c 5c 22 7d 20 24 72 65 73 5d 0a 7d 20 7b 31  ",\"} $res].} {1
0900: 7d 0a 0a 23 20 69 6d 70 6f 72 74 20 66 69 6c 65  }..# import file
0910: 20 64 6f 65 73 6e 27 74 20 65 78 69 73 74 0a 64   doesn't exist.d
0920: 6f 5f 74 65 73 74 20 73 68 65 6c 6c 35 2d 31 2e  o_test shell5-1.
0930: 34 2e 31 20 7b 0a 20 20 66 6f 72 63 65 64 65 6c  4.1 {.  forcedel
0940: 65 74 65 20 46 4f 4f 0a 20 20 73 65 74 20 72 65  ete FOO.  set re
0950: 73 20 5b 63 61 74 63 68 63 6d 64 20 22 74 65 73  s [catchcmd "tes
0960: 74 2e 64 62 22 20 7b 43 52 45 41 54 45 20 54 41  t.db" {CREATE TA
0970: 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 2e 69  BLE t1(a, b);..i
0980: 6d 70 6f 72 74 20 46 4f 4f 20 74 31 7d 5d 0a 7d  mport FOO t1}].}
0990: 20 7b 31 20 7b 45 72 72 6f 72 3a 20 63 61 6e 6e   {1 {Error: cann
09a0: 6f 74 20 6f 70 65 6e 20 22 46 4f 4f 22 7d 7d 0a  ot open "FOO"}}.
09b0: 0a 23 20 65 6d 70 74 79 20 69 6d 70 6f 72 74 20  .# empty import 
09c0: 66 69 6c 65 0a 64 6f 5f 74 65 73 74 20 73 68 65  file.do_test she
09d0: 6c 6c 35 2d 31 2e 34 2e 32 20 7b 0a 20 20 66 6f  ll5-1.4.2 {.  fo
09e0: 72 63 65 64 65 6c 65 74 65 20 73 68 65 6c 6c 35  rcedelete shell5
09f0: 2e 63 73 76 0a 20 20 73 65 74 20 69 6e 20 5b 6f  .csv.  set in [o
0a00: 70 65 6e 20 73 68 65 6c 6c 35 2e 63 73 76 20 77  pen shell5.csv w
0a10: 5d 0a 20 20 63 6c 6f 73 65 20 24 69 6e 0a 20 20  ].  close $in.  
0a20: 73 65 74 20 72 65 73 20 5b 63 61 74 63 68 63 6d  set res [catchcm
0a30: 64 20 22 74 65 73 74 2e 64 62 22 20 7b 2e 69 6d  d "test.db" {.im
0a40: 70 6f 72 74 20 73 68 65 6c 6c 35 2e 63 73 76 20  port shell5.csv 
0a50: 74 31 0a 53 45 4c 45 43 54 20 43 4f 55 4e 54 28  t1.SELECT COUNT(
0a60: 2a 29 20 46 52 4f 4d 20 74 31 3b 7d 5d 0a 7d 20  *) FROM t1;}].} 
0a70: 7b 30 20 30 7d 0a 0a 23 20 69 6d 70 6f 72 74 20  {0 0}..# import 
0a80: 66 69 6c 65 20 77 69 74 68 20 31 20 72 6f 77 2c  file with 1 row,
0a90: 20 31 20 63 6f 6c 75 6d 6e 20 28 65 78 70 65 63   1 column (expec
0aa0: 74 69 6e 67 20 32 20 63 6f 6c 73 29 0a 64 6f 5f  ting 2 cols).do_
0ab0: 74 65 73 74 20 73 68 65 6c 6c 35 2d 31 2e 34 2e  test shell5-1.4.
0ac0: 33 20 7b 0a 20 20 73 65 74 20 69 6e 20 5b 6f 70  3 {.  set in [op
0ad0: 65 6e 20 73 68 65 6c 6c 35 2e 63 73 76 20 77 5d  en shell5.csv w]
0ae0: 0a 20 20 70 75 74 73 20 24 69 6e 20 22 31 22 0a  .  puts $in "1".
0af0: 20 20 63 6c 6f 73 65 20 24 69 6e 0a 20 20 73 65    close $in.  se
0b00: 74 20 72 65 73 20 5b 63 61 74 63 68 63 6d 64 20  t res [catchcmd 
0b10: 22 74 65 73 74 2e 64 62 22 20 7b 2e 69 6d 70 6f  "test.db" {.impo
0b20: 72 74 20 73 68 65 6c 6c 35 2e 63 73 76 20 74 31  rt shell5.csv t1
0b30: 7d 5d 0a 7d 20 7b 31 20 7b 73 68 65 6c 6c 35 2e  }].} {1 {shell5.
0b40: 63 73 76 3a 31 3a 20 65 78 70 65 63 74 65 64 20  csv:1: expected 
0b50: 32 20 63 6f 6c 75 6d 6e 73 20 62 75 74 20 66 6f  2 columns but fo
0b60: 75 6e 64 20 31 20 2d 20 66 69 6c 6c 69 6e 67 20  und 1 - filling 
0b70: 74 68 65 20 72 65 73 74 20 77 69 74 68 20 4e 55  the rest with NU
0b80: 4c 4c 7d 7d 0a 0a 23 20 69 6d 70 6f 72 74 20 66  LL}}..# import f
0b90: 69 6c 65 20 77 69 74 68 20 31 20 72 6f 77 2c 20  ile with 1 row, 
0ba0: 33 20 63 6f 6c 75 6d 6e 73 20 28 65 78 70 65 63  3 columns (expec
0bb0: 74 69 6e 67 20 32 20 63 6f 6c 73 29 0a 64 6f 5f  ting 2 cols).do_
0bc0: 74 65 73 74 20 73 68 65 6c 6c 35 2d 31 2e 34 2e  test shell5-1.4.
0bd0: 34 20 7b 0a 20 20 73 65 74 20 69 6e 20 5b 6f 70  4 {.  set in [op
0be0: 65 6e 20 73 68 65 6c 6c 35 2e 63 73 76 20 77 5d  en shell5.csv w]
0bf0: 0a 20 20 70 75 74 73 20 24 69 6e 20 22 31 7c 32  .  puts $in "1|2
0c00: 7c 33 22 0a 20 20 63 6c 6f 73 65 20 24 69 6e 0a  |3".  close $in.
0c10: 20 20 73 65 74 20 72 65 73 20 5b 63 61 74 63 68    set res [catch
0c20: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 7b 2e  cmd "test.db" {.
0c30: 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35 2e 63 73  import shell5.cs
0c40: 76 20 74 31 7d 5d 0a 7d 20 7b 31 20 7b 73 68 65  v t1}].} {1 {she
0c50: 6c 6c 35 2e 63 73 76 3a 31 3a 20 65 78 70 65 63  ll5.csv:1: expec
0c60: 74 65 64 20 32 20 63 6f 6c 75 6d 6e 73 20 62 75  ted 2 columns bu
0c70: 74 20 66 6f 75 6e 64 20 33 20 2d 20 65 78 74 72  t found 3 - extr
0c80: 61 73 20 69 67 6e 6f 72 65 64 7d 7d 0a 0a 23 20  as ignored}}..# 
0c90: 69 6d 70 6f 72 74 20 66 69 6c 65 20 77 69 74 68  import file with
0ca0: 20 31 20 72 6f 77 2c 20 32 20 63 6f 6c 75 6d 6e   1 row, 2 column
0cb0: 73 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 35  s.do_test shell5
0cc0: 2d 31 2e 34 2e 35 20 7b 0a 20 20 73 65 74 20 69  -1.4.5 {.  set i
0cd0: 6e 20 5b 6f 70 65 6e 20 73 68 65 6c 6c 35 2e 63  n [open shell5.c
0ce0: 73 76 20 77 5d 0a 20 20 70 75 74 73 20 24 69 6e  sv w].  puts $in
0cf0: 20 22 31 7c 32 22 0a 20 20 63 6c 6f 73 65 20 24   "1|2".  close $
0d00: 69 6e 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61  in.  set res [ca
0d10: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
0d20: 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31   {DELETE FROM t1
0d30: 3b 0a 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35  ;..import shell5
0d40: 2e 63 73 76 20 74 31 0a 53 45 4c 45 43 54 20 43  .csv t1.SELECT C
0d50: 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b  OUNT(*) FROM t1;
0d60: 7d 5d 0a 7d 20 7b 30 20 31 7d 0a 0a 23 20 69 6d  }].} {0 1}..# im
0d70: 70 6f 72 74 20 66 69 6c 65 20 77 69 74 68 20 32  port file with 2
0d80: 20 72 6f 77 73 2c 20 32 20 63 6f 6c 75 6d 6e 73   rows, 2 columns
0d90: 0a 23 20 6e 6f 74 65 20 77 65 20 65 6e 64 20 75  .# note we end u
0da0: 70 20 77 69 74 68 20 33 20 72 6f 77 73 20 62 65  p with 3 rows be
0db0: 63 61 75 73 65 20 6f 66 20 74 68 65 20 31 20 72  cause of the 1 r
0dc0: 6f 77 20 0a 23 20 69 6d 70 6f 72 74 65 64 20 61  ow .# imported a
0dd0: 62 6f 76 65 2e 0a 64 6f 5f 74 65 73 74 20 73 68  bove..do_test sh
0de0: 65 6c 6c 35 2d 31 2e 34 2e 36 20 7b 0a 20 20 73  ell5-1.4.6 {.  s
0df0: 65 74 20 69 6e 20 5b 6f 70 65 6e 20 73 68 65 6c  et in [open shel
0e00: 6c 35 2e 63 73 76 20 77 5d 0a 20 20 70 75 74 73  l5.csv w].  puts
0e10: 20 24 69 6e 20 22 32 7c 33 22 0a 20 20 70 75 74   $in "2|3".  put
0e20: 73 20 24 69 6e 20 22 33 7c 34 22 0a 20 20 63 6c  s $in "3|4".  cl
0e30: 6f 73 65 20 24 69 6e 0a 20 20 73 65 74 20 72 65  ose $in.  set re
0e40: 73 20 5b 63 61 74 63 68 63 6d 64 20 22 74 65 73  s [catchcmd "tes
0e50: 74 2e 64 62 22 20 7b 2e 69 6d 70 6f 72 74 20 73  t.db" {.import s
0e60: 68 65 6c 6c 35 2e 63 73 76 20 74 31 0a 53 45 4c  hell5.csv t1.SEL
0e70: 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f  ECT COUNT(*) FRO
0e80: 4d 20 74 31 3b 7d 5d 0a 7d 20 7b 30 20 33 7d 0a  M t1;}].} {0 3}.
0e90: 0a 23 20 69 6d 70 6f 72 74 20 66 69 6c 65 20 77  .# import file w
0ea0: 69 74 68 20 31 20 72 6f 77 2c 20 32 20 63 6f 6c  ith 1 row, 2 col
0eb0: 75 6d 6e 73 2c 20 75 73 69 6e 67 20 61 20 63 6f  umns, using a co
0ec0: 6d 6d 61 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  mma.do_test shel
0ed0: 6c 35 2d 31 2e 34 2e 37 20 7b 0a 20 20 73 65 74  l5-1.4.7 {.  set
0ee0: 20 69 6e 20 5b 6f 70 65 6e 20 73 68 65 6c 6c 35   in [open shell5
0ef0: 2e 63 73 76 20 77 5d 0a 20 20 70 75 74 73 20 24  .csv w].  puts $
0f00: 69 6e 20 22 34 2c 35 22 0a 20 20 63 6c 6f 73 65  in "4,5".  close
0f10: 20 24 69 6e 0a 20 20 73 65 74 20 72 65 73 20 5b   $in.  set res [
0f20: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
0f30: 62 22 20 7b 2e 73 65 70 61 72 61 74 6f 72 20 2c  b" {.separator ,
0f40: 0a 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35 2e  ..import shell5.
0f50: 63 73 76 20 74 31 0a 53 45 4c 45 43 54 20 43 4f  csv t1.SELECT CO
0f60: 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 7d  UNT(*) FROM t1;}
0f70: 5d 0a 7d 20 7b 30 20 34 7d 0a 0a 23 20 69 6d 70  ].} {0 4}..# imp
0f80: 6f 72 74 20 66 69 6c 65 20 77 69 74 68 20 31 20  ort file with 1 
0f90: 72 6f 77 2c 20 32 20 63 6f 6c 75 6d 6e 73 2c 20  row, 2 columns, 
0fa0: 74 65 78 74 20 64 61 74 61 0a 64 6f 5f 74 65 73  text data.do_tes
0fb0: 74 20 73 68 65 6c 6c 35 2d 31 2e 34 2e 38 2e 31  t shell5-1.4.8.1
0fc0: 20 7b 0a 20 20 73 65 74 20 69 6e 20 5b 6f 70 65   {.  set in [ope
0fd0: 6e 20 73 68 65 6c 6c 35 2e 63 73 76 20 77 5d 0a  n shell5.csv w].
0fe0: 20 20 70 75 74 73 20 24 69 6e 20 22 35 7c 4e 6f    puts $in "5|No
0ff0: 77 20 69 73 20 74 68 65 20 74 69 6d 65 20 66 6f  w is the time fo
1000: 72 20 61 6c 6c 20 67 6f 6f 64 20 6d 65 6e 20 74  r all good men t
1010: 6f 20 63 6f 6d 65 20 74 6f 20 74 68 65 20 61 69  o come to the ai
1020: 64 20 6f 66 20 74 68 65 69 72 20 63 6f 75 6e 74  d of their count
1030: 72 79 2e 22 0a 20 20 63 6c 6f 73 65 20 24 69 6e  ry.".  close $in
1040: 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61 74 63  .  set res [catc
1050: 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 7b  hcmd "test.db" {
1060: 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35 2e 63  .import shell5.c
1070: 73 76 20 74 31 0a 53 45 4c 45 43 54 20 43 4f 55  sv t1.SELECT COU
1080: 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 7d 5d  NT(*) FROM t1;}]
1090: 0a 7d 20 7b 30 20 35 7d 0a 0a 64 6f 5f 74 65 73  .} {0 5}..do_tes
10a0: 74 20 73 68 65 6c 6c 35 2d 31 2e 34 2e 38 2e 32  t shell5-1.4.8.2
10b0: 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22 74   {.  catchcmd "t
10c0: 65 73 74 2e 64 62 22 20 7b 53 45 4c 45 43 54 20  est.db" {SELECT 
10d0: 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  b FROM t1 WHERE 
10e0: 61 3d 27 35 27 3b 7d 0a 7d 20 7b 30 20 7b 4e 6f  a='5';}.} {0 {No
10f0: 77 20 69 73 20 74 68 65 20 74 69 6d 65 20 66 6f  w is the time fo
1100: 72 20 61 6c 6c 20 67 6f 6f 64 20 6d 65 6e 20 74  r all good men t
1110: 6f 20 63 6f 6d 65 20 74 6f 20 74 68 65 20 61 69  o come to the ai
1120: 64 20 6f 66 20 74 68 65 69 72 20 63 6f 75 6e 74  d of their count
1130: 72 79 2e 7d 7d 0a 0a 23 20 69 6d 70 6f 72 74 20  ry.}}..# import 
1140: 66 69 6c 65 20 77 69 74 68 20 31 20 72 6f 77 2c  file with 1 row,
1150: 20 32 20 63 6f 6c 75 6d 6e 73 2c 20 71 75 6f 74   2 columns, quot
1160: 65 64 20 74 65 78 74 20 64 61 74 61 0a 23 20 6e  ed text data.# n
1170: 6f 74 65 20 74 68 61 74 20 63 75 72 72 65 6e 74  ote that current
1180: 6c 79 20 73 71 6c 69 74 65 20 64 6f 65 73 6e 27  ly sqlite doesn'
1190: 74 20 73 75 70 70 6f 72 74 20 71 75 6f 74 65 64  t support quoted
11a0: 20 66 69 65 6c 64 73 2c 20 61 6e 64 0a 23 20 69   fields, and.# i
11b0: 6d 70 6f 72 74 73 20 74 68 65 20 65 6e 74 69 72  mports the entir
11c0: 65 20 66 69 65 6c 64 2c 20 71 75 6f 74 65 73 20  e field, quotes 
11d0: 61 6e 64 20 61 6c 6c 2e 0a 64 6f 5f 74 65 73 74  and all..do_test
11e0: 20 73 68 65 6c 6c 35 2d 31 2e 34 2e 39 2e 31 20   shell5-1.4.9.1 
11f0: 7b 0a 20 20 73 65 74 20 69 6e 20 5b 6f 70 65 6e  {.  set in [open
1200: 20 73 68 65 6c 6c 35 2e 63 73 76 20 77 5d 0a 20   shell5.csv w]. 
1210: 20 70 75 74 73 20 24 69 6e 20 22 36 7c 27 4e 6f   puts $in "6|'No
1220: 77 20 69 73 20 74 68 65 20 74 69 6d 65 20 66 6f  w is the time fo
1230: 72 20 61 6c 6c 20 67 6f 6f 64 20 6d 65 6e 20 74  r all good men t
1240: 6f 20 63 6f 6d 65 20 74 6f 20 74 68 65 20 61 69  o come to the ai
1250: 64 20 6f 66 20 74 68 65 69 72 20 63 6f 75 6e 74  d of their count
1260: 72 79 2e 27 22 0a 20 20 63 6c 6f 73 65 20 24 69  ry.'".  close $i
1270: 6e 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61 74  n.  set res [cat
1280: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
1290: 7b 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35 2e  {.import shell5.
12a0: 63 73 76 20 74 31 0a 53 45 4c 45 43 54 20 43 4f  csv t1.SELECT CO
12b0: 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 7d  UNT(*) FROM t1;}
12c0: 5d 0a 7d 20 7b 30 20 36 7d 0a 0a 64 6f 5f 74 65  ].} {0 6}..do_te
12d0: 73 74 20 73 68 65 6c 6c 35 2d 31 2e 34 2e 39 2e  st shell5-1.4.9.
12e0: 32 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  2 {.  catchcmd "
12f0: 74 65 73 74 2e 64 62 22 20 7b 53 45 4c 45 43 54  test.db" {SELECT
1300: 20 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   b FROM t1 WHERE
1310: 20 61 3d 27 36 27 3b 7d 0a 7d 20 7b 30 20 7b 27   a='6';}.} {0 {'
1320: 4e 6f 77 20 69 73 20 74 68 65 20 74 69 6d 65 20  Now is the time 
1330: 66 6f 72 20 61 6c 6c 20 67 6f 6f 64 20 6d 65 6e  for all good men
1340: 20 74 6f 20 63 6f 6d 65 20 74 6f 20 74 68 65 20   to come to the 
1350: 61 69 64 20 6f 66 20 74 68 65 69 72 20 63 6f 75  aid of their cou
1360: 6e 74 72 79 2e 27 7d 7d 0a 0a 23 20 69 6d 70 6f  ntry.'}}..# impo
1370: 72 74 20 66 69 6c 65 20 77 69 74 68 20 31 20 72  rt file with 1 r
1380: 6f 77 2c 20 32 20 63 6f 6c 75 6d 6e 73 2c 20 71  ow, 2 columns, q
1390: 75 6f 74 65 64 20 74 65 78 74 20 64 61 74 61 0a  uoted text data.
13a0: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 35 2d 31  do_test shell5-1
13b0: 2e 34 2e 31 30 2e 31 20 7b 0a 20 20 73 65 74 20  .4.10.1 {.  set 
13c0: 69 6e 20 5b 6f 70 65 6e 20 73 68 65 6c 6c 35 2e  in [open shell5.
13d0: 63 73 76 20 77 5d 0a 20 20 70 75 74 73 20 24 69  csv w].  puts $i
13e0: 6e 20 22 37 7c 5c 22 4e 6f 77 20 69 73 20 74 68  n "7|\"Now is th
13f0: 65 20 74 69 6d 65 20 66 6f 72 20 61 6c 6c 20 67  e time for all g
1400: 6f 6f 64 20 6d 65 6e 20 74 6f 20 63 6f 6d 65 20  ood men to come 
1410: 74 6f 20 74 68 65 20 61 69 64 20 6f 66 20 74 68  to the aid of th
1420: 65 69 72 20 63 6f 75 6e 74 72 79 2e 5c 22 22 0a  eir country.\"".
1430: 20 20 63 6c 6f 73 65 20 24 69 6e 0a 20 20 73 65    close $in.  se
1440: 74 20 72 65 73 20 5b 63 61 74 63 68 63 6d 64 20  t res [catchcmd 
1450: 22 74 65 73 74 2e 64 62 22 20 7b 2e 69 6d 70 6f  "test.db" {.impo
1460: 72 74 20 73 68 65 6c 6c 35 2e 63 73 76 20 74 31  rt shell5.csv t1
1470: 0a 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29  .SELECT COUNT(*)
1480: 20 46 52 4f 4d 20 74 31 3b 7d 5d 0a 7d 20 7b 30   FROM t1;}].} {0
1490: 20 37 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 68 65   7}..do_test she
14a0: 6c 6c 35 2d 31 2e 34 2e 31 30 2e 32 20 7b 0a 20  ll5-1.4.10.2 {. 
14b0: 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e   catchcmd "test.
14c0: 64 62 22 20 7b 53 45 4c 45 43 54 20 62 20 46 52  db" {SELECT b FR
14d0: 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d 27 37  OM t1 WHERE a='7
14e0: 27 3b 7d 0a 7d 20 7b 30 20 7b 4e 6f 77 20 69 73  ';}.} {0 {Now is
14f0: 20 74 68 65 20 74 69 6d 65 20 66 6f 72 20 61 6c   the time for al
1500: 6c 20 67 6f 6f 64 20 6d 65 6e 20 74 6f 20 63 6f  l good men to co
1510: 6d 65 20 74 6f 20 74 68 65 20 61 69 64 20 6f 66  me to the aid of
1520: 20 74 68 65 69 72 20 63 6f 75 6e 74 72 79 2e 7d   their country.}
1530: 7d 0a 0a 23 20 63 68 65 63 6b 20 69 6d 70 6f 72  }..# check impor
1540: 74 69 6e 67 20 76 65 72 79 20 6c 6f 6e 67 20 66  ting very long f
1550: 69 65 6c 64 0a 64 6f 5f 74 65 73 74 20 73 68 65  ield.do_test she
1560: 6c 6c 35 2d 31 2e 35 2e 31 20 7b 0a 20 20 73 65  ll5-1.5.1 {.  se
1570: 74 20 73 74 72 20 5b 73 74 72 69 6e 67 20 72 65  t str [string re
1580: 70 65 61 74 20 58 20 39 39 39 5d 0a 20 20 73 65  peat X 999].  se
1590: 74 20 69 6e 20 5b 6f 70 65 6e 20 73 68 65 6c 6c  t in [open shell
15a0: 35 2e 63 73 76 20 77 5d 0a 20 20 70 75 74 73 20  5.csv w].  puts 
15b0: 24 69 6e 20 22 38 7c 24 73 74 72 22 0a 20 20 63  $in "8|$str".  c
15c0: 6c 6f 73 65 20 24 69 6e 0a 20 20 73 65 74 20 72  lose $in.  set r
15d0: 65 73 20 5b 63 61 74 63 68 63 6d 64 20 22 74 65  es [catchcmd "te
15e0: 73 74 2e 64 62 22 20 7b 2e 69 6d 70 6f 72 74 20  st.db" {.import 
15f0: 73 68 65 6c 6c 35 2e 63 73 76 20 74 31 0a 53 45  shell5.csv t1.SE
1600: 4c 45 43 54 20 6c 65 6e 67 74 68 28 62 29 20 46  LECT length(b) F
1610: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d 27  ROM t1 WHERE a='
1620: 38 27 3b 7d 5d 0a 7d 20 7b 30 20 39 39 39 7d 0a  8';}].} {0 999}.
1630: 0a 23 20 74 72 79 20 69 6d 70 6f 72 74 69 6e 67  .# try importing
1640: 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 77 69   into a table wi
1650: 74 68 20 61 20 6c 61 72 67 65 20 6e 75 6d 62 65  th a large numbe
1660: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 0a 23 20  r of columns..# 
1670: 54 68 69 73 20 69 73 20 6c 69 6d 69 74 65 64 20  This is limited 
1680: 62 79 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  by SQLITE_MAX_VA
1690: 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 2c 20 77  RIABLE_NUMBER, w
16a0: 68 69 63 68 20 64 65 66 61 75 6c 74 73 20 74 6f  hich defaults to
16b0: 20 39 39 39 2e 0a 73 65 74 20 63 6f 6c 73 20 39   999..set cols 9
16c0: 39 39 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  99.do_test shell
16d0: 35 2d 31 2e 36 2e 31 20 7b 0a 20 20 73 65 74 20  5-1.6.1 {.  set 
16e0: 64 61 74 61 20 7b 7d 0a 20 20 66 6f 72 20 7b 73  data {}.  for {s
16f0: 65 74 20 69 20 31 7d 20 7b 24 69 3c 24 63 6f 6c  et i 1} {$i<$col
1700: 73 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  s} {incr i} {.  
1710: 20 20 61 70 70 65 6e 64 20 64 61 74 61 20 22 63    append data "c
1720: 24 69 7c 22 0a 20 20 7d 0a 20 20 61 70 70 65 6e  $i|".  }.  appen
1730: 64 20 64 61 74 61 20 22 63 24 63 6f 6c 73 5c 6e  d data "c$cols\n
1740: 22 3b 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  ";.  for {set i 
1750: 31 7d 20 7b 24 69 3c 24 63 6f 6c 73 7d 20 7b 69  1} {$i<$cols} {i
1760: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 61 70 70  ncr i} {.    app
1770: 65 6e 64 20 64 61 74 61 20 22 24 69 7c 22 0a 20  end data "$i|". 
1780: 20 7d 0a 20 20 61 70 70 65 6e 64 20 64 61 74 61   }.  append data
1790: 20 22 24 63 6f 6c 73 22 0a 20 20 73 65 74 20 69   "$cols".  set i
17a0: 6e 20 5b 6f 70 65 6e 20 73 68 65 6c 6c 35 2e 63  n [open shell5.c
17b0: 73 76 20 77 5d 0a 20 20 70 75 74 73 20 24 69 6e  sv w].  puts $in
17c0: 20 24 64 61 74 61 0a 20 20 63 6c 6f 73 65 20 24   $data.  close $
17d0: 69 6e 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61  in.  set res [ca
17e0: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
17f0: 20 7b 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35   {.import shell5
1800: 2e 63 73 76 20 74 32 0a 53 45 4c 45 43 54 20 43  .csv t2.SELECT C
1810: 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 32 3b  OUNT(*) FROM t2;
1820: 7d 5d 0a 7d 20 7b 30 20 31 7d 0a 0a 23 20 74 72  }].} {0 1}..# tr
1830: 79 20 69 6d 70 6f 72 74 69 6e 67 20 61 20 6c 61  y importing a la
1840: 72 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  rge number of ro
1850: 77 73 0a 73 65 74 20 72 6f 77 73 20 39 39 39 39  ws.set rows 9999
1860: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 35 2d  .do_test shell5-
1870: 31 2e 37 2e 31 20 7b 0a 20 20 73 65 74 20 69 6e  1.7.1 {.  set in
1880: 20 5b 6f 70 65 6e 20 73 68 65 6c 6c 35 2e 63 73   [open shell5.cs
1890: 76 20 77 5d 0a 20 20 70 75 74 73 20 24 69 6e 20  v w].  puts $in 
18a0: 61 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31  a.  for {set i 1
18b0: 7d 20 7b 24 69 3c 3d 24 72 6f 77 73 7d 20 7b 69  } {$i<=$rows} {i
18c0: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 70 75 74  ncr i} {.    put
18d0: 73 20 24 69 6e 20 24 69 0a 20 20 7d 0a 20 20 63  s $in $i.  }.  c
18e0: 6c 6f 73 65 20 24 69 6e 0a 20 20 73 65 74 20 72  lose $in.  set r
18f0: 65 73 20 5b 63 61 74 63 68 63 6d 64 20 22 74 65  es [catchcmd "te
1900: 73 74 2e 64 62 22 20 7b 2e 6d 6f 64 65 20 63 73  st.db" {.mode cs
1910: 76 0a 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35  v..import shell5
1920: 2e 63 73 76 20 74 33 0a 53 45 4c 45 43 54 20 43  .csv t3.SELECT C
1930: 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 33 3b  OUNT(*) FROM t3;
1940: 7d 5d 0a 7d 20 5b 6c 69 73 74 20 30 20 24 72 6f  }].} [list 0 $ro
1950: 77 73 5d 0a 0a 23 20 49 6e 70 6f 72 74 20 66 72  ws]..# Inport fr
1960: 6f 6d 20 61 20 70 69 70 65 2e 20 20 28 55 6e 69  om a pipe.  (Uni
1970: 78 20 6f 6e 6c 79 2c 20 61 73 20 69 74 20 72 65  x only, as it re
1980: 71 75 69 72 65 73 20 22 61 77 6b 22 29 0a 69 66  quires "awk").if
1990: 20 7b 24 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   {$tcl_platform(
19a0: 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 75 6e 69 78  platform)=="unix
19b0: 22 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73  "} {.  do_test s
19c0: 68 65 6c 6c 35 2d 31 2e 38 20 7b 0a 20 20 20 20  hell5-1.8 {.    
19d0: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
19e0: 2e 64 62 0a 20 20 20 20 63 61 74 63 68 63 6d 64  .db.    catchcmd
19f0: 20 74 65 73 74 2e 64 62 20 7b 2e 6d 6f 64 65 20   test.db {.mode 
1a00: 63 73 76 0a 2e 69 6d 70 6f 72 74 20 22 7c 61 77  csv..import "|aw
1a10: 6b 20 27 45 4e 44 7b 70 72 69 6e 74 20 5c 22 78  k 'END{print \"x
1a20: 2c 79 5c 22 3b 66 6f 72 28 69 3d 31 3b 69 3c 3d  ,y\";for(i=1;i<=
1a30: 35 3b 69 2b 2b 29 7b 70 72 69 6e 74 20 69 20 5c  5;i++){print i \
1a40: 22 2c 74 68 69 73 20 69 73 20 5c 22 20 69 7d 7d  ",this is \" i}}
1a50: 27 22 20 74 31 0a 53 45 4c 45 43 54 20 2a 20 46  '" t1.SELECT * F
1a60: 52 4f 4d 20 74 31 3b 7d 0a 20 20 7d 20 7b 30 20  ROM t1;}.  } {0 
1a70: 7b 31 2c 22 74 68 69 73 20 69 73 20 31 22 0a 32  {1,"this is 1".2
1a80: 2c 22 74 68 69 73 20 69 73 20 32 22 0a 33 2c 22  ,"this is 2".3,"
1a90: 74 68 69 73 20 69 73 20 33 22 0a 34 2c 22 74 68  this is 3".4,"th
1aa0: 69 73 20 69 73 20 34 22 0a 35 2c 22 74 68 69 73  is is 4".5,"this
1ab0: 20 69 73 20 35 22 7d 7d 0a 7d 0a 0a 23 20 49 6d   is 5"}}.}..# Im
1ac0: 70 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 63 6f 6e  port columns con
1ad0: 74 61 69 6e 69 6e 67 20 71 75 6f 74 65 64 20 73  taining quoted s
1ae0: 74 72 69 6e 67 73 0a 64 6f 5f 74 65 73 74 20 73  trings.do_test s
1af0: 68 65 6c 6c 35 2d 31 2e 39 20 7b 0a 20 20 73 65  hell5-1.9 {.  se
1b00: 74 20 6f 75 74 20 5b 6f 70 65 6e 20 73 68 65 6c  t out [open shel
1b10: 6c 35 2e 63 73 76 20 77 5d 0a 20 20 66 63 6f 6e  l5.csv w].  fcon
1b20: 66 69 67 75 72 65 20 24 6f 75 74 20 2d 74 72 61  figure $out -tra
1b30: 6e 73 6c 61 74 69 6f 6e 20 6c 66 0a 20 20 70 75  nslation lf.  pu
1b40: 74 73 20 24 6f 75 74 20 7b 31 2c 22 22 2c 31 31  ts $out {1,"",11
1b50: 7d 0a 20 20 70 75 74 73 20 24 6f 75 74 20 7b 32  }.  puts $out {2
1b60: 2c 22 78 22 2c 32 32 7d 0a 20 20 70 75 74 73 20  ,"x",22}.  puts 
1b70: 24 6f 75 74 20 7b 33 2c 22 22 22 22 2c 33 33 7d  $out {3,"""",33}
1b80: 0a 20 20 70 75 74 73 20 24 6f 75 74 20 7b 34 2c  .  puts $out {4,
1b90: 22 68 65 6c 6c 6f 22 2c 34 34 7d 0a 20 20 70 75  "hello",44}.  pu
1ba0: 74 73 20 24 6f 75 74 20 22 35 2c 35 35 2c 5c 22  ts $out "5,55,\"
1bb0: 5c 22 5c 72 22 0a 20 20 70 75 74 73 20 24 6f 75  \"\r".  puts $ou
1bc0: 74 20 7b 36 2c 36 36 2c 22 78 22 7d 0a 20 20 70  t {6,66,"x"}.  p
1bd0: 75 74 73 20 24 6f 75 74 20 7b 37 2c 37 37 2c 22  uts $out {7,77,"
1be0: 22 22 22 7d 0a 20 20 70 75 74 73 20 24 6f 75 74  """}.  puts $out
1bf0: 20 7b 38 2c 38 38 2c 22 68 65 6c 6c 6f 22 7d 0a   {8,88,"hello"}.
1c00: 20 20 70 75 74 73 20 24 6f 75 74 20 7b 22 22 2c    puts $out {"",
1c10: 39 2c 39 39 7d 0a 20 20 70 75 74 73 20 24 6f 75  9,99}.  puts $ou
1c20: 74 20 7b 22 78 22 2c 31 30 2c 31 31 30 7d 0a 20  t {"x",10,110}. 
1c30: 20 70 75 74 73 20 24 6f 75 74 20 7b 22 22 22 22   puts $out {""""
1c40: 2c 31 31 2c 31 32 31 7d 0a 20 20 70 75 74 73 20  ,11,121}.  puts 
1c50: 24 6f 75 74 20 7b 22 68 65 6c 6c 6f 22 2c 31 32  $out {"hello",12
1c60: 2c 31 33 32 7d 0a 20 20 63 6c 6f 73 65 20 24 6f  ,132}.  close $o
1c70: 75 74 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65  ut.  forcedelete
1c80: 20 74 65 73 74 2e 64 62 0a 20 20 63 61 74 63 68   test.db.  catch
1c90: 63 6d 64 20 74 65 73 74 2e 64 62 20 7b 2e 6d 6f  cmd test.db {.mo
1ca0: 64 65 20 63 73 76 0a 20 20 20 20 43 52 45 41 54  de csv.    CREAT
1cb0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63  E TABLE t1(a,b,c
1cc0: 29 3b 0a 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c  );..import shell
1cd0: 35 2e 63 73 76 20 74 31 0a 20 20 7d 0a 20 20 73  5.csv t1.  }.  s
1ce0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
1cf0: 62 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  b.  db eval {SEL
1d00: 45 43 54 20 2a 2c 20 27 7c 27 20 46 52 4f 4d 20  ECT *, '|' FROM 
1d10: 74 31 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  t1 ORDER BY rowi
1d20: 64 7d 0a 7d 20 7b 31 20 7b 7d 20 31 31 20 7c 20  d}.} {1 {} 11 | 
1d30: 32 20 78 20 32 32 20 7c 20 33 20 7b 22 7d 20 33  2 x 22 | 3 {"} 3
1d40: 33 20 7c 20 34 20 68 65 6c 6c 6f 20 34 34 20 7c  3 | 4 hello 44 |
1d50: 20 35 20 35 35 20 7b 7d 20 7c 20 36 20 36 36 20   5 55 {} | 6 66 
1d60: 78 20 7c 20 37 20 37 37 20 7b 22 7d 20 7c 20 38  x | 7 77 {"} | 8
1d70: 20 38 38 20 68 65 6c 6c 6f 20 7c 20 7b 7d 20 39   88 hello | {} 9
1d80: 20 39 39 20 7c 20 78 20 31 30 20 31 31 30 20 7c   99 | x 10 110 |
1d90: 20 7b 22 7d 20 31 31 20 31 32 31 20 7c 20 68 65   {"} 11 121 | he
1da0: 6c 6c 6f 20 31 32 20 31 33 32 20 7c 7d 0a 64 62  llo 12 132 |}.db
1db0: 20 63 6c 6f 73 65 0a 0a 23 20 49 6d 70 6f 72 74   close..# Import
1dc0: 20 63 6f 6c 75 6d 6e 73 20 63 6f 6e 74 61 69 6e   columns contain
1dd0: 69 6e 67 20 71 75 6f 74 65 64 20 73 74 72 69 6e  ing quoted strin
1de0: 67 73 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  gs.do_test shell
1df0: 35 2d 31 2e 31 30 20 7b 0a 20 20 73 65 74 20 6f  5-1.10 {.  set o
1e00: 75 74 20 5b 6f 70 65 6e 20 73 68 65 6c 6c 35 2e  ut [open shell5.
1e10: 63 73 76 20 77 5d 0a 20 20 66 63 6f 6e 66 69 67  csv w].  fconfig
1e20: 75 72 65 20 24 6f 75 74 20 2d 74 72 61 6e 73 6c  ure $out -transl
1e30: 61 74 69 6f 6e 20 6c 66 0a 20 20 70 75 74 73 20  ation lf.  puts 
1e40: 24 6f 75 74 20 7b 63 6f 6c 75 6d 6e 31 2c 63 6f  $out {column1,co
1e50: 6c 75 6d 6e 32 2c 63 6f 6c 75 6d 6e 33 2c 63 6f  lumn2,column3,co
1e60: 6c 75 6d 6e 34 7d 0a 20 20 70 75 74 73 20 24 6f  lumn4}.  puts $o
1e70: 75 74 20 22 66 69 65 6c 64 31 2c 66 69 65 6c 64  ut "field1,field
1e80: 32 2c 5c 22 78 33 20 5c 22 5c 22 5c 72 5c 6e 64  2,\"x3 \"\"\r\nd
1e90: 61 74 61 5c 22 5c 22 20 33 5c 22 2c 66 69 65 6c  ata\"\" 3\",fiel
1ea0: 64 34 22 0a 20 20 70 75 74 73 20 24 6f 75 74 20  d4".  puts $out 
1eb0: 22 78 31 2c 78 32 2c 5c 22 78 33 20 5c 22 5c 22  "x1,x2,\"x3 \"\"
1ec0: 5c 6e 64 61 74 61 5c 22 5c 22 20 33 5c 22 2c 78  \ndata\"\" 3\",x
1ed0: 34 22 0a 20 20 63 6c 6f 73 65 20 24 6f 75 74 0a  4".  close $out.
1ee0: 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65    forcedelete te
1ef0: 73 74 2e 64 62 0a 20 20 63 61 74 63 68 63 6d 64  st.db.  catchcmd
1f00: 20 74 65 73 74 2e 64 62 20 7b 2e 6d 6f 64 65 20   test.db {.mode 
1f10: 63 73 76 0a 20 20 20 20 43 52 45 41 54 45 20 54  csv.    CREATE T
1f20: 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 2c 64 29  ABLE t1(a,b,c,d)
1f30: 3b 0a 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35  ;..import shell5
1f40: 2e 63 73 76 20 74 31 0a 20 20 7d 0a 20 20 73 71  .csv t1.  }.  sq
1f50: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
1f60: 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
1f70: 43 54 20 68 65 78 28 63 29 20 46 52 4f 4d 20 74  CT hex(c) FROM t
1f80: 31 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  1 ORDER BY rowid
1f90: 7d 0a 7d 20 7b 36 33 36 46 36 43 37 35 36 44 36  }.} {636F6C756D6
1fa0: 45 33 33 20 37 38 33 33 32 30 32 32 30 44 30 41  E33 783320220D0A
1fb0: 36 34 36 31 37 34 36 31 32 32 32 30 33 33 20 37  64617461222033 7
1fc0: 38 33 33 32 30 32 32 30 41 36 34 36 31 37 34 36  83320220A6461746
1fd0: 31 32 32 32 30 33 33 7d 0a 0a 23 20 42 6c 61 6e  1222033}..# Blan
1fe0: 6b 20 6c 61 73 74 20 63 6f 6c 75 6d 6e 20 77 69  k last column wi
1ff0: 74 68 20 5c 72 5c 6e 20 6c 69 6e 65 20 65 6e 64  th \r\n line end
2000: 69 6e 67 73 2e 0a 64 6f 5f 74 65 73 74 20 73 68  ings..do_test sh
2010: 65 6c 6c 35 2d 31 2e 31 31 20 7b 0a 20 20 73 65  ell5-1.11 {.  se
2020: 74 20 6f 75 74 20 5b 6f 70 65 6e 20 73 68 65 6c  t out [open shel
2030: 6c 35 2e 63 73 76 20 77 5d 0a 20 20 66 63 6f 6e  l5.csv w].  fcon
2040: 66 69 67 75 72 65 20 24 6f 75 74 20 2d 74 72 61  figure $out -tra
2050: 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a  nslation binary.
2060: 20 20 70 75 74 73 20 24 6f 75 74 20 22 63 6f 6c    puts $out "col
2070: 75 6d 6e 31 2c 63 6f 6c 75 6d 6e 32 2c 63 6f 6c  umn1,column2,col
2080: 75 6d 6e 33 5c 72 22 0a 20 20 70 75 74 73 20 24  umn3\r".  puts $
2090: 6f 75 74 20 22 61 2c 62 2c 20 5c 72 22 0a 20 20  out "a,b, \r".  
20a0: 70 75 74 73 20 24 6f 75 74 20 22 78 2c 79 2c 5c  puts $out "x,y,\
20b0: 72 22 0a 20 20 70 75 74 73 20 24 6f 75 74 20 22  r".  puts $out "
20c0: 70 2c 71 2c 72 5c 72 22 0a 20 20 63 6c 6f 73 65  p,q,r\r".  close
20d0: 20 24 6f 75 74 0a 20 20 63 61 74 63 68 20 7b 64   $out.  catch {d
20e0: 62 20 63 6c 6f 73 65 7d 0a 20 20 66 6f 72 63 65  b close}.  force
20f0: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20  delete test.db. 
2100: 20 63 61 74 63 68 63 6d 64 20 74 65 73 74 2e 64   catchcmd test.d
2110: 62 20 7b 2e 6d 6f 64 65 20 63 73 76 0a 2e 69 6d  b {.mode csv..im
2120: 70 6f 72 74 20 73 68 65 6c 6c 35 2e 63 73 76 20  port shell5.csv 
2130: 74 31 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  t1.  }.  sqlite3
2140: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 64 62   db test.db.  db
2150: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 2c   eval {SELECT *,
2160: 20 27 7c 27 20 46 52 4f 4d 20 74 31 7d 0a 7d 20   '|' FROM t1}.} 
2170: 7b 61 20 62 20 7b 20 7d 20 7c 20 78 20 79 20 7b  {a b { } | x y {
2180: 7d 20 7c 20 70 20 71 20 72 20 7c 7d 0a 64 62 20  } | p q r |}.db 
2190: 63 6c 6f 73 65 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  close..#--------
21a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
21e0: 2d 2d 2d 2d 0a 23 20 0a 72 65 73 65 74 5f 64 62  ----.# .reset_db
21f0: 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74  .sqlite3 db test
2200: 2e 64 62 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  .db.do_test shel
2210: 6c 35 2d 32 2e 31 20 7b 0a 20 20 73 65 74 20 66  l5-2.1 {.  set f
2220: 64 20 5b 6f 70 65 6e 20 73 68 65 6c 6c 35 2e 63  d [open shell5.c
2230: 73 76 20 77 5d 0a 20 20 70 75 74 73 20 24 66 64  sv w].  puts $fd
2240: 20 22 2c 68 65 6c 6c 6f 22 0a 20 20 63 6c 6f 73   ",hello".  clos
2250: 65 20 24 66 64 0a 20 20 63 61 74 63 68 63 6d 64  e $fd.  catchcmd
2260: 20 74 65 73 74 2e 64 62 20 5b 73 74 72 69 6e 67   test.db [string
2270: 20 74 72 69 6d 20 7b 0a 2e 6d 6f 64 65 20 63 73   trim {..mode cs
2280: 76 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  v.CREATE TABLE t
2290: 31 28 61 2c 20 62 29 3b 0a 2e 69 6d 70 6f 72 74  1(a, b);..import
22a0: 20 73 68 65 6c 6c 35 2e 63 73 76 20 74 31 0a 20   shell5.csv t1. 
22b0: 20 7d 5d 0a 20 20 64 62 20 65 76 61 6c 20 7b 20   }].  db eval { 
22c0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
22d0: 20 7d 0a 7d 20 7b 7b 7d 20 68 65 6c 6c 6f 7d 0a   }.} {{} hello}.
22e0: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 35 2d  .do_test shell5-
22f0: 32 2e 32 20 7b 0a 20 20 73 65 74 20 66 64 20 5b  2.2 {.  set fd [
2300: 6f 70 65 6e 20 73 68 65 6c 6c 35 2e 63 73 76 20  open shell5.csv 
2310: 77 5d 0a 20 20 70 75 74 73 20 24 66 64 20 7b 22  w].  puts $fd {"
2320: 22 2c 68 65 6c 6c 6f 7d 0a 20 20 63 6c 6f 73 65  ",hello}.  close
2330: 20 24 66 64 0a 20 20 63 61 74 63 68 63 6d 64 20   $fd.  catchcmd 
2340: 74 65 73 74 2e 64 62 20 5b 73 74 72 69 6e 67 20  test.db [string 
2350: 74 72 69 6d 20 7b 0a 2e 6d 6f 64 65 20 63 73 76  trim {..mode csv
2360: 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32  .CREATE TABLE t2
2370: 28 61 2c 20 62 29 3b 0a 2e 69 6d 70 6f 72 74 20  (a, b);..import 
2380: 73 68 65 6c 6c 35 2e 63 73 76 20 74 32 0a 20 20  shell5.csv t2.  
2390: 7d 5d 0a 20 20 64 62 20 65 76 61 6c 20 7b 20 53  }].  db eval { S
23a0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20  ELECT * FROM t2 
23b0: 7d 0a 7d 20 7b 7b 7d 20 68 65 6c 6c 6f 7d 0a 0a  }.} {{} hello}..
23c0: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 35 2d 32  do_test shell5-2
23d0: 2e 33 20 7b 0a 20 20 73 65 74 20 66 64 20 5b 6f  .3 {.  set fd [o
23e0: 70 65 6e 20 73 68 65 6c 6c 35 2e 63 73 76 20 77  pen shell5.csv w
23f0: 5d 0a 20 20 70 75 74 73 20 24 66 64 20 7b 22 78  ].  puts $fd {"x
2400: 22 22 79 22 2c 68 65 6c 6c 6f 7d 0a 20 20 63 6c  ""y",hello}.  cl
2410: 6f 73 65 20 24 66 64 0a 20 20 63 61 74 63 68 63  ose $fd.  catchc
2420: 6d 64 20 74 65 73 74 2e 64 62 20 5b 73 74 72 69  md test.db [stri
2430: 6e 67 20 74 72 69 6d 20 7b 0a 2e 6d 6f 64 65 20  ng trim {..mode 
2440: 63 73 76 0a 43 52 45 41 54 45 20 54 41 42 4c 45  csv.CREATE TABLE
2450: 20 74 33 28 61 2c 20 62 29 3b 0a 2e 69 6d 70 6f   t3(a, b);..impo
2460: 72 74 20 73 68 65 6c 6c 35 2e 63 73 76 20 74 33  rt shell5.csv t3
2470: 0a 20 20 7d 5d 0a 20 20 64 62 20 65 76 61 6c 20  .  }].  db eval 
2480: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
2490: 74 33 20 7d 0a 7d 20 7b 78 5c 22 79 20 68 65 6c  t3 }.} {x\"y hel
24a0: 6c 6f 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 68 65  lo}..do_test she
24b0: 6c 6c 35 2d 32 2e 34 20 7b 0a 20 20 73 65 74 20  ll5-2.4 {.  set 
24c0: 66 64 20 5b 6f 70 65 6e 20 73 68 65 6c 6c 35 2e  fd [open shell5.
24d0: 63 73 76 20 77 5d 0a 20 20 70 75 74 73 20 24 66  csv w].  puts $f
24e0: 64 20 7b 22 78 79 22 22 22 2c 68 65 6c 6c 6f 7d  d {"xy""",hello}
24f0: 0a 20 20 63 6c 6f 73 65 20 24 66 64 0a 20 20 63  .  close $fd.  c
2500: 61 74 63 68 63 6d 64 20 74 65 73 74 2e 64 62 20  atchcmd test.db 
2510: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 7b 0a 2e  [string trim {..
2520: 6d 6f 64 65 20 63 73 76 0a 43 52 45 41 54 45 20  mode csv.CREATE 
2530: 54 41 42 4c 45 20 74 34 28 61 2c 20 62 29 3b 0a  TABLE t4(a, b);.
2540: 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35 2e 63  .import shell5.c
2550: 73 76 20 74 34 0a 20 20 7d 5d 0a 20 20 64 62 20  sv t4.  }].  db 
2560: 65 76 61 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20  eval { SELECT * 
2570: 46 52 4f 4d 20 74 34 20 7d 0a 7d 20 7b 78 79 5c  FROM t4 }.} {xy\
2580: 22 20 68 65 6c 6c 6f 7d 0a 0a 64 6f 5f 74 65 73  " hello}..do_tes
2590: 74 20 73 68 65 6c 6c 35 2d 32 2e 35 20 7b 0a 20  t shell5-2.5 {. 
25a0: 20 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 73 68   set fd [open sh
25b0: 65 6c 6c 35 2e 63 73 76 20 77 5d 0a 20 20 70 75  ell5.csv w].  pu
25c0: 74 73 20 24 66 64 20 7b 22 6f 6e 65 22 2c 22 32  ts $fd {"one","2
25d0: 22 7d 0a 20 20 70 75 74 73 20 24 66 64 20 7b 7d  "}.  puts $fd {}
25e0: 0a 20 20 63 6c 6f 73 65 20 24 66 64 0a 20 20 63  .  close $fd.  c
25f0: 61 74 63 68 63 6d 64 20 74 65 73 74 2e 64 62 20  atchcmd test.db 
2600: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 7b 0a 2e  [string trim {..
2610: 6d 6f 64 65 20 63 73 76 0a 43 52 45 41 54 45 20  mode csv.CREATE 
2620: 54 41 42 4c 45 20 74 34 28 61 2c 20 62 29 3b 0a  TABLE t4(a, b);.
2630: 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35 2e 63  .import shell5.c
2640: 73 76 20 74 34 0a 20 20 7d 5d 0a 20 20 64 62 20  sv t4.  }].  db 
2650: 65 76 61 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20  eval { SELECT * 
2660: 46 52 4f 4d 20 74 34 20 7d 0a 7d 20 7b 78 79 5c  FROM t4 }.} {xy\
2670: 22 20 68 65 6c 6c 6f 20 6f 6e 65 20 32 20 7b 7d  " hello one 2 {}
2680: 20 7b 7d 7d 0a 0a 0a 66 69 6e 69 73 68 5f 74 65   {}}...finish_te
2690: 73 74 0a                                         st.