/ Hex Artifact Content
Login

Artifact 62bfaf9267296da1b91e4b1c03e44e7b393f6a94:


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 0a 73 65 74 20 43 4c 49 20 22 2e 2f 73 71  #..set CLI "./sq
0270: 6c 69 74 65 33 22 0a 0a 70 72 6f 63 20 64 6f 5f  lite3"..proc do_
0280: 74 65 73 74 20 7b 6e 61 6d 65 20 63 6d 64 20 65  test {name cmd e
0290: 78 70 65 63 74 65 64 7d 20 7b 0a 20 20 70 75 74  xpected} {.  put
02a0: 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 22 24 6e  s -nonewline "$n
02b0: 61 6d 65 20 2e 2e 2e 22 0a 20 20 73 65 74 20 72  ame ...".  set r
02c0: 65 73 20 5b 75 70 6c 65 76 65 6c 20 24 63 6d 64  es [uplevel $cmd
02d0: 5d 0a 20 20 69 66 20 7b 24 72 65 73 20 65 71 20  ].  if {$res eq 
02e0: 24 65 78 70 65 63 74 65 64 7d 20 7b 0a 20 20 20  $expected} {.   
02f0: 20 70 75 74 73 20 4f 6b 0a 20 20 7d 20 65 6c 73   puts Ok.  } els
0300: 65 20 7b 0a 20 20 20 20 70 75 74 73 20 45 72 72  e {.    puts Err
0310: 6f 72 0a 20 20 20 20 70 75 74 73 20 22 20 20 47  or.    puts "  G
0320: 6f 74 3a 20 24 72 65 73 22 0a 20 20 20 20 70 75  ot: $res".    pu
0330: 74 73 20 22 20 20 45 78 70 65 63 74 65 64 3a 20  ts "  Expected: 
0340: 24 65 78 70 65 63 74 65 64 22 0a 20 20 20 20 65  $expected".    e
0350: 78 69 74 0a 20 20 7d 0a 7d 0a 0a 70 72 6f 63 20  xit.  }.}..proc 
0360: 63 61 74 63 68 63 6d 64 20 7b 64 62 20 7b 63 6d  catchcmd {db {cm
0370: 64 20 22 22 7d 7d 20 7b 0a 20 20 67 6c 6f 62 61  d ""}} {.  globa
0380: 6c 20 43 4c 49 0a 20 20 73 65 74 20 6f 75 74 20  l CLI.  set out 
0390: 5b 6f 70 65 6e 20 63 6d 64 73 2e 74 78 74 20 77  [open cmds.txt w
03a0: 5d 0a 20 20 70 75 74 73 20 24 6f 75 74 20 24 63  ].  puts $out $c
03b0: 6d 64 0a 20 20 63 6c 6f 73 65 20 24 6f 75 74 0a  md.  close $out.
03c0: 20 20 73 65 74 20 6c 69 6e 65 20 22 65 78 65 63    set line "exec
03d0: 20 24 43 4c 49 20 24 64 62 20 3c 20 63 6d 64 73   $CLI $db < cmds
03e0: 2e 74 78 74 22 0a 20 20 73 65 74 20 72 63 20 5b  .txt".  set rc [
03f0: 63 61 74 63 68 20 7b 20 65 76 61 6c 20 24 6c 69  catch { eval $li
0400: 6e 65 20 7d 20 6d 73 67 5d 0a 20 20 6c 69 73 74  ne } msg].  list
0410: 20 24 72 63 20 24 6d 73 67 0a 7d 0a 0a 66 69 6c   $rc $msg.}..fil
0420: 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20  e delete -force 
0430: 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2e  test.db test.db.
0440: 6a 6f 75 72 6e 61 6c 0a 0a 23 2d 2d 2d 2d 2d 2d  journal..#------
0450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0490: 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61  ------.# Test ca
04a0: 73 65 73 20 73 68 65 6c 6c 35 2d 31 2e 2a 3a 20  ses shell5-1.*: 
04b0: 42 61 73 69 63 20 68 61 6e 64 6c 69 6e 67 20 6f  Basic handling o
04c0: 66 20 74 68 65 20 2e 69 6d 70 6f 72 74 20 61 6e  f the .import an
04d0: 64 20 2e 73 65 70 61 72 61 74 6f 72 20 63 6f 6d  d .separator com
04e0: 6d 61 6e 64 73 2e 0a 23 0a 0a 23 20 2e 69 6d 70  mands..#..# .imp
04f0: 6f 72 74 20 46 49 4c 45 20 54 41 42 4c 45 20 20  ort FILE TABLE  
0500: 20 20 20 49 6d 70 6f 72 74 20 64 61 74 61 20 66     Import data f
0510: 72 6f 6d 20 46 49 4c 45 20 69 6e 74 6f 20 54 41  rom FILE into TA
0520: 42 4c 45 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  BLE.do_test shel
0530: 6c 35 2d 31 2e 31 2e 31 20 7b 0a 20 20 63 61 74  l5-1.1.1 {.  cat
0540: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
0550: 22 2e 69 6d 70 6f 72 74 22 0a 7d 20 7b 31 20 7b  ".import".} {1 {
0560: 45 72 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20 63  Error: unknown c
0570: 6f 6d 6d 61 6e 64 20 6f 72 20 69 6e 76 61 6c 69  ommand or invali
0580: 64 20 61 72 67 75 6d 65 6e 74 73 3a 20 20 22 69  d arguments:  "i
0590: 6d 70 6f 72 74 22 2e 20 45 6e 74 65 72 20 22 2e  mport". Enter ".
05a0: 68 65 6c 70 22 20 66 6f 72 20 68 65 6c 70 7d 7d  help" for help}}
05b0: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 35 2d  .do_test shell5-
05c0: 31 2e 31 2e 32 20 7b 0a 20 20 63 61 74 63 68 63  1.1.2 {.  catchc
05d0: 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 69  md "test.db" ".i
05e0: 6d 70 6f 72 74 20 46 4f 4f 22 0a 7d 20 7b 31 20  mport FOO".} {1 
05f0: 7b 45 72 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20  {Error: unknown 
0600: 63 6f 6d 6d 61 6e 64 20 6f 72 20 69 6e 76 61 6c  command or inval
0610: 69 64 20 61 72 67 75 6d 65 6e 74 73 3a 20 20 22  id arguments:  "
0620: 69 6d 70 6f 72 74 22 2e 20 45 6e 74 65 72 20 22  import". Enter "
0630: 2e 68 65 6c 70 22 20 66 6f 72 20 68 65 6c 70 7d  .help" for help}
0640: 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 35  }.do_test shell5
0650: 2d 31 2e 31 2e 32 20 7b 0a 20 20 63 61 74 63 68  -1.1.2 {.  catch
0660: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e  cmd "test.db" ".
0670: 69 6d 70 6f 72 74 20 46 4f 4f 20 42 41 52 22 0a  import FOO BAR".
0680: 7d 20 7b 31 20 7b 45 72 72 6f 72 3a 20 6e 6f 20  } {1 {Error: no 
0690: 73 75 63 68 20 74 61 62 6c 65 3a 20 42 41 52 7d  such table: BAR}
06a0: 7d 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 35  }.do_test shell5
06b0: 2d 31 2e 31 2e 33 20 7b 0a 20 20 23 20 74 6f 6f  -1.1.3 {.  # too
06c0: 20 6d 61 6e 79 20 61 72 67 75 6d 65 6e 74 73 0a   many arguments.
06d0: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
06e0: 2e 64 62 22 20 22 2e 69 6d 70 6f 72 74 20 46 4f  .db" ".import FO
06f0: 4f 20 42 41 52 20 42 41 44 22 0a 7d 20 7b 31 20  O BAR BAD".} {1 
0700: 7b 45 72 72 6f 72 3a 20 75 6e 6b 6e 6f 77 6e 20  {Error: unknown 
0710: 63 6f 6d 6d 61 6e 64 20 6f 72 20 69 6e 76 61 6c  command or inval
0720: 69 64 20 61 72 67 75 6d 65 6e 74 73 3a 20 20 22  id arguments:  "
0730: 69 6d 70 6f 72 74 22 2e 20 45 6e 74 65 72 20 22  import". Enter "
0740: 2e 68 65 6c 70 22 20 66 6f 72 20 68 65 6c 70 7d  .help" for help}
0750: 7d 0a 0a 23 20 2e 73 65 70 61 72 61 74 6f 72 20  }..# .separator 
0760: 53 54 52 49 4e 47 20 20 20 20 20 20 43 68 61 6e  STRING      Chan
0770: 67 65 20 73 65 70 61 72 61 74 6f 72 20 75 73 65  ge separator use
0780: 64 20 62 79 20 6f 75 74 70 75 74 20 6d 6f 64 65  d by output mode
0790: 20 61 6e 64 20 2e 69 6d 70 6f 72 74 0a 64 6f 5f   and .import.do_
07a0: 74 65 73 74 20 73 68 65 6c 6c 31 2d 31 2e 32 2e  test shell1-1.2.
07b0: 31 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  1 {.  catchcmd "
07c0: 74 65 73 74 2e 64 62 22 20 22 2e 73 65 70 61 72  test.db" ".separ
07d0: 61 74 6f 72 22 0a 7d 20 7b 31 20 7b 45 72 72 6f  ator".} {1 {Erro
07e0: 72 3a 20 75 6e 6b 6e 6f 77 6e 20 63 6f 6d 6d 61  r: unknown comma
07f0: 6e 64 20 6f 72 20 69 6e 76 61 6c 69 64 20 61 72  nd or invalid ar
0800: 67 75 6d 65 6e 74 73 3a 20 20 22 73 65 70 61 72  guments:  "separ
0810: 61 74 6f 72 22 2e 20 45 6e 74 65 72 20 22 2e 68  ator". Enter ".h
0820: 65 6c 70 22 20 66 6f 72 20 68 65 6c 70 7d 7d 0a  elp" for help}}.
0830: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 31 2d 31  do_test shell1-1
0840: 2e 32 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d  .2.2 {.  catchcm
0850: 64 20 22 74 65 73 74 2e 64 62 22 20 22 2e 73 65  d "test.db" ".se
0860: 70 61 72 61 74 6f 72 20 46 4f 4f 22 0a 7d 20 7b  parator FOO".} {
0870: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 68  0 {}}.do_test sh
0880: 65 6c 6c 31 2d 31 2e 32 2e 33 20 7b 0a 20 20 23  ell1-1.2.3 {.  #
0890: 20 74 6f 6f 20 6d 61 6e 79 20 61 72 67 75 6d 65   too many argume
08a0: 6e 74 73 0a 20 20 63 61 74 63 68 63 6d 64 20 22  nts.  catchcmd "
08b0: 74 65 73 74 2e 64 62 22 20 22 2e 73 65 70 61 72  test.db" ".separ
08c0: 61 74 6f 72 20 46 4f 4f 20 42 41 44 22 0a 7d 20  ator FOO BAD".} 
08d0: 7b 31 20 7b 45 72 72 6f 72 3a 20 75 6e 6b 6e 6f  {1 {Error: unkno
08e0: 77 6e 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 69 6e  wn command or in
08f0: 76 61 6c 69 64 20 61 72 67 75 6d 65 6e 74 73 3a  valid arguments:
0900: 20 20 22 73 65 70 61 72 61 74 6f 72 22 2e 20 45    "separator". E
0910: 6e 74 65 72 20 22 2e 68 65 6c 70 22 20 66 6f 72  nter ".help" for
0920: 20 68 65 6c 70 7d 7d 0a 0a 23 20 73 65 70 61 72   help}}..# separ
0930: 61 74 6f 72 20 73 68 6f 75 6c 64 20 64 65 66 61  ator should defa
0940: 75 6c 74 20 74 6f 20 22 7c 22 0a 64 6f 5f 74 65  ult to "|".do_te
0950: 73 74 20 73 68 65 6c 6c 35 2d 31 2e 33 2e 31 20  st shell5-1.3.1 
0960: 7b 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61 74  {.  set res [cat
0970: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
0980: 22 2e 73 68 6f 77 22 5d 0a 20 20 6c 69 73 74 20  ".show"].  list 
0990: 5b 72 65 67 65 78 70 20 7b 73 65 70 61 72 61 74  [regexp {separat
09a0: 6f 72 3a 20 5c 22 5c 7c 5c 22 7d 20 24 72 65 73  or: \"\|\"} $res
09b0: 5d 0a 7d 20 7b 31 7d 0a 0a 23 20 73 65 74 20 73  ].} {1}..# set s
09c0: 65 70 61 72 61 74 6f 72 20 74 6f 20 64 69 66 66  eparator to diff
09d0: 65 72 65 6e 74 20 76 61 6c 75 65 2e 0a 23 20 63  erent value..# c
09e0: 68 65 63 6b 20 74 68 61 74 20 2e 73 68 6f 77 20  heck that .show 
09f0: 72 65 70 6f 72 74 73 20 6e 65 77 20 76 61 6c 75  reports new valu
0a00: 65 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 35  e.do_test shell5
0a10: 2d 31 2e 33 2e 32 20 7b 0a 20 20 73 65 74 20 72  -1.3.2 {.  set r
0a20: 65 73 20 5b 63 61 74 63 68 63 6d 64 20 22 74 65  es [catchcmd "te
0a30: 73 74 2e 64 62 22 20 7b 2e 73 65 70 61 72 61 74  st.db" {.separat
0a40: 6f 72 20 2c 0a 2e 73 68 6f 77 7d 5d 0a 20 20 6c  or ,..show}].  l
0a50: 69 73 74 20 5b 72 65 67 65 78 70 20 7b 73 65 70  ist [regexp {sep
0a60: 61 72 61 74 6f 72 3a 20 5c 22 2c 5c 22 7d 20 24  arator: \",\"} $
0a70: 72 65 73 5d 0a 7d 20 7b 31 7d 0a 0a 23 20 69 6d  res].} {1}..# im
0a80: 70 6f 72 74 20 66 69 6c 65 20 64 6f 65 73 6e 27  port file doesn'
0a90: 74 20 65 78 69 73 74 0a 64 6f 5f 74 65 73 74 20  t exist.do_test 
0aa0: 73 68 65 6c 6c 35 2d 31 2e 34 2e 31 20 7b 0a 20  shell5-1.4.1 {. 
0ab0: 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f   file delete -fo
0ac0: 72 63 65 20 46 4f 4f 0a 20 20 73 65 74 20 72 65  rce FOO.  set re
0ad0: 73 20 5b 63 61 74 63 68 63 6d 64 20 22 74 65 73  s [catchcmd "tes
0ae0: 74 2e 64 62 22 20 7b 43 52 45 41 54 45 20 54 41  t.db" {CREATE TA
0af0: 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 0a 2e 69  BLE t1(a, b);..i
0b00: 6d 70 6f 72 74 20 46 4f 4f 20 74 31 7d 5d 0a 7d  mport FOO t1}].}
0b10: 20 7b 31 20 7b 45 72 72 6f 72 3a 20 63 61 6e 6e   {1 {Error: cann
0b20: 6f 74 20 6f 70 65 6e 20 22 46 4f 4f 22 7d 7d 0a  ot open "FOO"}}.
0b30: 0a 23 20 65 6d 70 74 79 20 69 6d 70 6f 72 74 20  .# empty import 
0b40: 66 69 6c 65 0a 64 6f 5f 74 65 73 74 20 73 68 65  file.do_test she
0b50: 6c 6c 35 2d 31 2e 34 2e 32 20 7b 0a 20 20 66 69  ll5-1.4.2 {.  fi
0b60: 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65  le delete -force
0b70: 20 73 68 65 6c 6c 35 2e 63 73 76 0a 20 20 73 65   shell5.csv.  se
0b80: 74 20 69 6e 20 5b 6f 70 65 6e 20 73 68 65 6c 6c  t in [open shell
0b90: 35 2e 63 73 76 20 77 5d 0a 20 20 63 6c 6f 73 65  5.csv w].  close
0ba0: 20 24 69 6e 0a 20 20 73 65 74 20 72 65 73 20 5b   $in.  set res [
0bb0: 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64  catchcmd "test.d
0bc0: 62 22 20 7b 2e 69 6d 70 6f 72 74 20 73 68 65 6c  b" {.import shel
0bd0: 6c 35 2e 63 73 76 20 74 31 0a 53 45 4c 45 43 54  l5.csv t1.SELECT
0be0: 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74   COUNT(*) FROM t
0bf0: 31 3b 7d 5d 0a 7d 20 7b 30 20 30 7d 0a 0a 23 20  1;}].} {0 0}..# 
0c00: 69 6d 70 6f 72 74 20 66 69 6c 65 20 77 69 74 68  import file with
0c10: 20 31 20 72 6f 77 2c 20 31 20 63 6f 6c 75 6d 6e   1 row, 1 column
0c20: 20 28 65 78 70 65 63 74 69 6e 67 20 32 20 63 6f   (expecting 2 co
0c30: 6c 73 29 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c  ls).do_test shel
0c40: 6c 35 2d 31 2e 34 2e 33 20 7b 0a 20 20 73 65 74  l5-1.4.3 {.  set
0c50: 20 69 6e 20 5b 6f 70 65 6e 20 73 68 65 6c 6c 35   in [open shell5
0c60: 2e 63 73 76 20 77 5d 0a 20 20 70 75 74 73 20 24  .csv w].  puts $
0c70: 69 6e 20 22 31 22 0a 20 20 63 6c 6f 73 65 20 24  in "1".  close $
0c80: 69 6e 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61  in.  set res [ca
0c90: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
0ca0: 20 7b 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35   {.import shell5
0cb0: 2e 63 73 76 20 74 31 7d 5d 0a 7d 20 7b 31 20 7b  .csv t1}].} {1 {
0cc0: 45 72 72 6f 72 3a 20 73 68 65 6c 6c 35 2e 63 73  Error: shell5.cs
0cd0: 76 20 6c 69 6e 65 20 31 3a 20 65 78 70 65 63 74  v line 1: expect
0ce0: 65 64 20 32 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  ed 2 columns of 
0cf0: 64 61 74 61 20 62 75 74 20 66 6f 75 6e 64 20 31  data but found 1
0d00: 7d 7d 0a 0a 23 20 69 6d 70 6f 72 74 20 66 69 6c  }}..# import fil
0d10: 65 20 77 69 74 68 20 31 20 72 6f 77 2c 20 33 20  e with 1 row, 3 
0d20: 63 6f 6c 75 6d 6e 73 20 28 65 78 70 65 63 74 69  columns (expecti
0d30: 6e 67 20 32 20 63 6f 6c 73 29 0a 64 6f 5f 74 65  ng 2 cols).do_te
0d40: 73 74 20 73 68 65 6c 6c 35 2d 31 2e 34 2e 34 20  st shell5-1.4.4 
0d50: 7b 0a 20 20 73 65 74 20 69 6e 20 5b 6f 70 65 6e  {.  set in [open
0d60: 20 73 68 65 6c 6c 35 2e 63 73 76 20 77 5d 0a 20   shell5.csv w]. 
0d70: 20 70 75 74 73 20 24 69 6e 20 22 31 7c 32 7c 33   puts $in "1|2|3
0d80: 22 0a 20 20 63 6c 6f 73 65 20 24 69 6e 0a 20 20  ".  close $in.  
0d90: 73 65 74 20 72 65 73 20 5b 63 61 74 63 68 63 6d  set res [catchcm
0da0: 64 20 22 74 65 73 74 2e 64 62 22 20 7b 2e 69 6d  d "test.db" {.im
0db0: 70 6f 72 74 20 73 68 65 6c 6c 35 2e 63 73 76 20  port shell5.csv 
0dc0: 74 31 7d 5d 0a 7d 20 7b 31 20 7b 45 72 72 6f 72  t1}].} {1 {Error
0dd0: 3a 20 73 68 65 6c 6c 35 2e 63 73 76 20 6c 69 6e  : shell5.csv lin
0de0: 65 20 31 3a 20 65 78 70 65 63 74 65 64 20 32 20  e 1: expected 2 
0df0: 63 6f 6c 75 6d 6e 73 20 6f 66 20 64 61 74 61 20  columns of data 
0e00: 62 75 74 20 66 6f 75 6e 64 20 33 7d 7d 0a 0a 23  but found 3}}..#
0e10: 20 69 6d 70 6f 72 74 20 66 69 6c 65 20 77 69 74   import file wit
0e20: 68 20 31 20 72 6f 77 2c 20 32 20 63 6f 6c 75 6d  h 1 row, 2 colum
0e30: 6e 73 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c  ns.do_test shell
0e40: 35 2d 31 2e 34 2e 35 20 7b 0a 20 20 73 65 74 20  5-1.4.5 {.  set 
0e50: 69 6e 20 5b 6f 70 65 6e 20 73 68 65 6c 6c 35 2e  in [open shell5.
0e60: 63 73 76 20 77 5d 0a 20 20 70 75 74 73 20 24 69  csv w].  puts $i
0e70: 6e 20 22 31 7c 32 22 0a 20 20 63 6c 6f 73 65 20  n "1|2".  close 
0e80: 24 69 6e 0a 20 20 73 65 74 20 72 65 73 20 5b 63  $in.  set res [c
0e90: 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62  atchcmd "test.db
0ea0: 22 20 7b 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c  " {.import shell
0eb0: 35 2e 63 73 76 20 74 31 0a 53 45 4c 45 43 54 20  5.csv t1.SELECT 
0ec0: 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31  COUNT(*) FROM t1
0ed0: 3b 7d 5d 0a 7d 20 7b 30 20 31 7d 0a 0a 23 20 69  ;}].} {0 1}..# i
0ee0: 6d 70 6f 72 74 20 66 69 6c 65 20 77 69 74 68 20  mport file with 
0ef0: 32 20 72 6f 77 73 2c 20 32 20 63 6f 6c 75 6d 6e  2 rows, 2 column
0f00: 73 0a 23 20 6e 6f 74 65 20 77 65 20 65 6e 64 20  s.# note we end 
0f10: 75 70 20 77 69 74 68 20 33 20 72 6f 77 73 20 62  up with 3 rows b
0f20: 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 31 20  ecause of the 1 
0f30: 72 6f 77 20 0a 23 20 69 6d 70 6f 72 74 65 64 20  row .# imported 
0f40: 61 62 6f 76 65 2e 0a 64 6f 5f 74 65 73 74 20 73  above..do_test s
0f50: 68 65 6c 6c 35 2d 31 2e 34 2e 36 20 7b 0a 20 20  hell5-1.4.6 {.  
0f60: 73 65 74 20 69 6e 20 5b 6f 70 65 6e 20 73 68 65  set in [open she
0f70: 6c 6c 35 2e 63 73 76 20 77 5d 0a 20 20 70 75 74  ll5.csv w].  put
0f80: 73 20 24 69 6e 20 22 32 7c 33 22 0a 20 20 70 75  s $in "2|3".  pu
0f90: 74 73 20 24 69 6e 20 22 33 7c 34 22 0a 20 20 63  ts $in "3|4".  c
0fa0: 6c 6f 73 65 20 24 69 6e 0a 20 20 73 65 74 20 72  lose $in.  set r
0fb0: 65 73 20 5b 63 61 74 63 68 63 6d 64 20 22 74 65  es [catchcmd "te
0fc0: 73 74 2e 64 62 22 20 7b 2e 69 6d 70 6f 72 74 20  st.db" {.import 
0fd0: 73 68 65 6c 6c 35 2e 63 73 76 20 74 31 0a 53 45  shell5.csv t1.SE
0fe0: 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52  LECT COUNT(*) FR
0ff0: 4f 4d 20 74 31 3b 7d 5d 0a 7d 20 7b 30 20 33 7d  OM t1;}].} {0 3}
1000: 0a 0a 23 20 69 6d 70 6f 72 74 20 66 69 6c 65 20  ..# import file 
1010: 77 69 74 68 20 31 20 72 6f 77 2c 20 32 20 63 6f  with 1 row, 2 co
1020: 6c 75 6d 6e 73 2c 20 75 73 69 6e 67 20 61 20 63  lumns, using a c
1030: 6f 6d 6d 61 0a 64 6f 5f 74 65 73 74 20 73 68 65  omma.do_test she
1040: 6c 6c 35 2d 31 2e 34 2e 37 20 7b 0a 20 20 73 65  ll5-1.4.7 {.  se
1050: 74 20 69 6e 20 5b 6f 70 65 6e 20 73 68 65 6c 6c  t in [open shell
1060: 35 2e 63 73 76 20 77 5d 0a 20 20 70 75 74 73 20  5.csv w].  puts 
1070: 24 69 6e 20 22 34 2c 35 22 0a 20 20 63 6c 6f 73  $in "4,5".  clos
1080: 65 20 24 69 6e 0a 20 20 73 65 74 20 72 65 73 20  e $in.  set res 
1090: 5b 63 61 74 63 68 63 6d 64 20 22 74 65 73 74 2e  [catchcmd "test.
10a0: 64 62 22 20 7b 2e 73 65 70 61 72 61 74 6f 72 20  db" {.separator 
10b0: 2c 0a 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35  ,..import shell5
10c0: 2e 63 73 76 20 74 31 0a 53 45 4c 45 43 54 20 43  .csv t1.SELECT C
10d0: 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b  OUNT(*) FROM t1;
10e0: 7d 5d 0a 7d 20 7b 30 20 34 7d 0a 0a 23 20 69 6d  }].} {0 4}..# im
10f0: 70 6f 72 74 20 66 69 6c 65 20 77 69 74 68 20 31  port file with 1
1100: 20 72 6f 77 2c 20 32 20 63 6f 6c 75 6d 6e 73 2c   row, 2 columns,
1110: 20 74 65 78 74 20 64 61 74 61 0a 64 6f 5f 74 65   text data.do_te
1120: 73 74 20 73 68 65 6c 6c 35 2d 31 2e 34 2e 38 2e  st shell5-1.4.8.
1130: 31 20 7b 0a 20 20 73 65 74 20 69 6e 20 5b 6f 70  1 {.  set in [op
1140: 65 6e 20 73 68 65 6c 6c 35 2e 63 73 76 20 77 5d  en shell5.csv w]
1150: 0a 20 20 70 75 74 73 20 24 69 6e 20 22 35 7c 4e  .  puts $in "5|N
1160: 6f 77 20 69 73 20 74 68 65 20 74 69 6d 65 20 66  ow is the time f
1170: 6f 72 20 61 6c 6c 20 67 6f 6f 64 20 6d 65 6e 20  or all good men 
1180: 74 6f 20 63 6f 6d 65 20 74 6f 20 74 68 65 20 61  to come to the a
1190: 69 64 20 6f 66 20 74 68 65 69 72 20 63 6f 75 6e  id of their coun
11a0: 74 72 79 2e 22 0a 20 20 63 6c 6f 73 65 20 24 69  try.".  close $i
11b0: 6e 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61 74  n.  set res [cat
11c0: 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20  chcmd "test.db" 
11d0: 7b 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35 2e  {.import shell5.
11e0: 63 73 76 20 74 31 0a 53 45 4c 45 43 54 20 43 4f  csv t1.SELECT CO
11f0: 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 7d  UNT(*) FROM t1;}
1200: 5d 0a 7d 20 7b 30 20 35 7d 0a 0a 64 6f 5f 74 65  ].} {0 5}..do_te
1210: 73 74 20 73 68 65 6c 6c 35 2d 31 2e 34 2e 38 2e  st shell5-1.4.8.
1220: 32 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20 22  2 {.  catchcmd "
1230: 74 65 73 74 2e 64 62 22 20 7b 53 45 4c 45 43 54  test.db" {SELECT
1240: 20 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   b FROM t1 WHERE
1250: 20 61 3d 27 35 27 3b 7d 0a 7d 20 7b 30 20 7b 4e   a='5';}.} {0 {N
1260: 6f 77 20 69 73 20 74 68 65 20 74 69 6d 65 20 66  ow is the time f
1270: 6f 72 20 61 6c 6c 20 67 6f 6f 64 20 6d 65 6e 20  or all good men 
1280: 74 6f 20 63 6f 6d 65 20 74 6f 20 74 68 65 20 61  to come to the a
1290: 69 64 20 6f 66 20 74 68 65 69 72 20 63 6f 75 6e  id of their coun
12a0: 74 72 79 2e 7d 7d 0a 0a 23 20 69 6d 70 6f 72 74  try.}}..# import
12b0: 20 66 69 6c 65 20 77 69 74 68 20 31 20 72 6f 77   file with 1 row
12c0: 2c 20 32 20 63 6f 6c 75 6d 6e 73 2c 20 71 75 6f  , 2 columns, quo
12d0: 74 65 64 20 74 65 78 74 20 64 61 74 61 0a 23 20  ted text data.# 
12e0: 6e 6f 74 65 20 74 68 61 74 20 63 75 72 72 65 6e  note that curren
12f0: 74 6c 79 20 73 71 6c 69 74 65 20 64 6f 65 73 6e  tly sqlite doesn
1300: 27 74 20 73 75 70 70 6f 72 74 20 71 75 6f 74 65  't support quote
1310: 64 20 66 69 65 6c 64 73 2c 20 61 6e 64 0a 23 20  d fields, and.# 
1320: 69 6d 70 6f 72 74 73 20 74 68 65 20 65 6e 74 69  imports the enti
1330: 72 65 20 66 69 65 6c 64 2c 20 71 75 6f 74 65 73  re field, quotes
1340: 20 61 6e 64 20 61 6c 6c 2e 0a 64 6f 5f 74 65 73   and all..do_tes
1350: 74 20 73 68 65 6c 6c 35 2d 31 2e 34 2e 39 2e 31  t shell5-1.4.9.1
1360: 20 7b 0a 20 20 73 65 74 20 69 6e 20 5b 6f 70 65   {.  set in [ope
1370: 6e 20 73 68 65 6c 6c 35 2e 63 73 76 20 77 5d 0a  n shell5.csv w].
1380: 20 20 70 75 74 73 20 24 69 6e 20 22 36 7c 27 4e    puts $in "6|'N
1390: 6f 77 20 69 73 20 74 68 65 20 74 69 6d 65 20 66  ow is the time f
13a0: 6f 72 20 61 6c 6c 20 67 6f 6f 64 20 6d 65 6e 20  or all good men 
13b0: 74 6f 20 63 6f 6d 65 20 74 6f 20 74 68 65 20 61  to come to the a
13c0: 69 64 20 6f 66 20 74 68 65 69 72 20 63 6f 75 6e  id of their coun
13d0: 74 72 79 2e 27 22 0a 20 20 63 6c 6f 73 65 20 24  try.'".  close $
13e0: 69 6e 0a 20 20 73 65 74 20 72 65 73 20 5b 63 61  in.  set res [ca
13f0: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
1400: 20 7b 2e 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35   {.import shell5
1410: 2e 63 73 76 20 74 31 0a 53 45 4c 45 43 54 20 43  .csv t1.SELECT C
1420: 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b  OUNT(*) FROM t1;
1430: 7d 5d 0a 7d 20 7b 30 20 36 7d 0a 0a 64 6f 5f 74  }].} {0 6}..do_t
1440: 65 73 74 20 73 68 65 6c 6c 35 2d 31 2e 34 2e 39  est shell5-1.4.9
1450: 2e 32 20 7b 0a 20 20 63 61 74 63 68 63 6d 64 20  .2 {.  catchcmd 
1460: 22 74 65 73 74 2e 64 62 22 20 7b 53 45 4c 45 43  "test.db" {SELEC
1470: 54 20 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T b FROM t1 WHER
1480: 45 20 61 3d 27 36 27 3b 7d 0a 7d 20 7b 30 20 7b  E a='6';}.} {0 {
1490: 27 4e 6f 77 20 69 73 20 74 68 65 20 74 69 6d 65  'Now is the time
14a0: 20 66 6f 72 20 61 6c 6c 20 67 6f 6f 64 20 6d 65   for all good me
14b0: 6e 20 74 6f 20 63 6f 6d 65 20 74 6f 20 74 68 65  n to come to the
14c0: 20 61 69 64 20 6f 66 20 74 68 65 69 72 20 63 6f   aid of their co
14d0: 75 6e 74 72 79 2e 27 7d 7d 0a 0a 23 20 69 6d 70  untry.'}}..# imp
14e0: 6f 72 74 20 66 69 6c 65 20 77 69 74 68 20 31 20  ort file with 1 
14f0: 72 6f 77 2c 20 32 20 63 6f 6c 75 6d 6e 73 2c 20  row, 2 columns, 
1500: 71 75 6f 74 65 64 20 74 65 78 74 20 64 61 74 61  quoted text data
1510: 0a 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 35 2d  .do_test shell5-
1520: 31 2e 34 2e 31 30 2e 31 20 7b 0a 20 20 73 65 74  1.4.10.1 {.  set
1530: 20 69 6e 20 5b 6f 70 65 6e 20 73 68 65 6c 6c 35   in [open shell5
1540: 2e 63 73 76 20 77 5d 0a 20 20 70 75 74 73 20 24  .csv w].  puts $
1550: 69 6e 20 22 37 7c 5c 22 4e 6f 77 20 69 73 20 74  in "7|\"Now is t
1560: 68 65 20 74 69 6d 65 20 66 6f 72 20 61 6c 6c 20  he time for all 
1570: 67 6f 6f 64 20 6d 65 6e 20 74 6f 20 63 6f 6d 65  good men to come
1580: 20 74 6f 20 74 68 65 20 61 69 64 20 6f 66 20 74   to the aid of t
1590: 68 65 69 72 20 63 6f 75 6e 74 72 79 2e 5c 22 22  heir country.\""
15a0: 0a 20 20 63 6c 6f 73 65 20 24 69 6e 0a 20 20 73  .  close $in.  s
15b0: 65 74 20 72 65 73 20 5b 63 61 74 63 68 63 6d 64  et res [catchcmd
15c0: 20 22 74 65 73 74 2e 64 62 22 20 7b 2e 69 6d 70   "test.db" {.imp
15d0: 6f 72 74 20 73 68 65 6c 6c 35 2e 63 73 76 20 74  ort shell5.csv t
15e0: 31 0a 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a  1.SELECT COUNT(*
15f0: 29 20 46 52 4f 4d 20 74 31 3b 7d 5d 0a 7d 20 7b  ) FROM t1;}].} {
1600: 30 20 37 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 68  0 7}..do_test sh
1610: 65 6c 6c 35 2d 31 2e 34 2e 31 30 2e 32 20 7b 0a  ell5-1.4.10.2 {.
1620: 20 20 63 61 74 63 68 63 6d 64 20 22 74 65 73 74    catchcmd "test
1630: 2e 64 62 22 20 7b 53 45 4c 45 43 54 20 62 20 46  .db" {SELECT b F
1640: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3d 27  ROM t1 WHERE a='
1650: 37 27 3b 7d 0a 7d 20 7b 30 20 7b 22 4e 6f 77 20  7';}.} {0 {"Now 
1660: 69 73 20 74 68 65 20 74 69 6d 65 20 66 6f 72 20  is the time for 
1670: 61 6c 6c 20 67 6f 6f 64 20 6d 65 6e 20 74 6f 20  all good men to 
1680: 63 6f 6d 65 20 74 6f 20 74 68 65 20 61 69 64 20  come to the aid 
1690: 6f 66 20 74 68 65 69 72 20 63 6f 75 6e 74 72 79  of their country
16a0: 2e 22 7d 7d 0a 0a 23 20 63 68 65 63 6b 20 69 6d  ."}}..# check im
16b0: 70 6f 72 74 69 6e 67 20 76 65 72 79 20 6c 6f 6e  porting very lon
16c0: 67 20 66 69 65 6c 64 0a 64 6f 5f 74 65 73 74 20  g field.do_test 
16d0: 73 68 65 6c 6c 35 2d 31 2e 35 2e 31 20 7b 0a 20  shell5-1.5.1 {. 
16e0: 20 73 65 74 20 73 74 72 20 5b 73 74 72 69 6e 67   set str [string
16f0: 20 72 65 70 65 61 74 20 58 20 39 39 39 5d 0a 20   repeat X 999]. 
1700: 20 73 65 74 20 69 6e 20 5b 6f 70 65 6e 20 73 68   set in [open sh
1710: 65 6c 6c 35 2e 63 73 76 20 77 5d 0a 20 20 70 75  ell5.csv w].  pu
1720: 74 73 20 24 69 6e 20 22 38 7c 24 73 74 72 22 0a  ts $in "8|$str".
1730: 20 20 63 6c 6f 73 65 20 24 69 6e 0a 20 20 73 65    close $in.  se
1740: 74 20 72 65 73 20 5b 63 61 74 63 68 63 6d 64 20  t res [catchcmd 
1750: 22 74 65 73 74 2e 64 62 22 20 7b 2e 69 6d 70 6f  "test.db" {.impo
1760: 72 74 20 73 68 65 6c 6c 35 2e 63 73 76 20 74 31  rt shell5.csv t1
1770: 0a 53 45 4c 45 43 54 20 6c 65 6e 67 74 68 28 62  .SELECT length(b
1780: 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
1790: 61 3d 27 38 27 3b 7d 5d 0a 7d 20 7b 30 20 39 39  a='8';}].} {0 99
17a0: 39 7d 0a 0a 23 20 74 72 79 20 69 6d 70 6f 72 74  9}..# try import
17b0: 69 6e 67 20 69 6e 74 6f 20 61 20 74 61 62 6c 65  ing into a table
17c0: 20 77 69 74 68 20 61 20 6c 61 72 67 65 20 6e 75   with a large nu
17d0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e  mber of columns.
17e0: 0a 23 20 54 68 69 73 20 69 73 20 6c 69 6d 69 74  .# This is limit
17f0: 65 64 20 62 79 20 53 51 4c 49 54 45 5f 4d 41 58  ed by SQLITE_MAX
1800: 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
1810: 2c 20 77 68 69 63 68 20 64 65 66 61 75 6c 74 73  , which defaults
1820: 20 74 6f 20 39 39 39 2e 0a 73 65 74 20 63 6f 6c   to 999..set col
1830: 73 20 39 39 39 0a 64 6f 5f 74 65 73 74 20 73 68  s 999.do_test sh
1840: 65 6c 6c 35 2d 31 2e 36 2e 31 20 7b 0a 20 20 73  ell5-1.6.1 {.  s
1850: 65 74 20 73 71 6c 20 7b 43 52 45 41 54 45 20 54  et sql {CREATE T
1860: 41 42 4c 45 20 74 32 28 7d 0a 20 20 73 65 74 20  ABLE t2(}.  set 
1870: 64 61 74 61 20 7b 7d 0a 20 20 66 6f 72 20 7b 73  data {}.  for {s
1880: 65 74 20 69 20 31 7d 20 7b 24 69 3c 24 63 6f 6c  et i 1} {$i<$col
1890: 73 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  s} {incr i} {.  
18a0: 20 20 61 70 70 65 6e 64 20 73 71 6c 20 22 63 24    append sql "c$
18b0: 69 2c 22 0a 20 20 20 20 61 70 70 65 6e 64 20 64  i,".    append d
18c0: 61 74 61 20 22 24 69 7c 22 0a 20 20 7d 0a 20 20  ata "$i|".  }.  
18d0: 61 70 70 65 6e 64 20 73 71 6c 20 22 63 24 63 6f  append sql "c$co
18e0: 6c 73 29 3b 22 0a 20 20 61 70 70 65 6e 64 20 64  ls);".  append d
18f0: 61 74 61 20 22 24 63 6f 6c 73 22 0a 20 20 63 61  ata "$cols".  ca
1900: 74 63 68 63 6d 64 20 22 74 65 73 74 2e 64 62 22  tchcmd "test.db"
1910: 20 24 73 71 6c 0a 20 20 73 65 74 20 69 6e 20 5b   $sql.  set in [
1920: 6f 70 65 6e 20 73 68 65 6c 6c 35 2e 63 73 76 20  open shell5.csv 
1930: 77 5d 0a 20 20 70 75 74 73 20 24 69 6e 20 24 64  w].  puts $in $d
1940: 61 74 61 0a 20 20 63 6c 6f 73 65 20 24 69 6e 0a  ata.  close $in.
1950: 20 20 73 65 74 20 72 65 73 20 5b 63 61 74 63 68    set res [catch
1960: 63 6d 64 20 22 74 65 73 74 2e 64 62 22 20 7b 2e  cmd "test.db" {.
1970: 69 6d 70 6f 72 74 20 73 68 65 6c 6c 35 2e 63 73  import shell5.cs
1980: 76 20 74 32 0a 53 45 4c 45 43 54 20 43 4f 55 4e  v t2.SELECT COUN
1990: 54 28 2a 29 20 46 52 4f 4d 20 74 32 3b 7d 5d 0a  T(*) FROM t2;}].
19a0: 7d 20 7b 30 20 31 7d 0a 0a 23 20 74 72 79 20 69  } {0 1}..# try i
19b0: 6d 70 6f 72 74 69 6e 67 20 61 20 6c 61 72 67 65  mporting a large
19c0: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a   number of rows.
19d0: 73 65 74 20 72 6f 77 73 20 39 39 39 39 39 39 0a  set rows 999999.
19e0: 64 6f 5f 74 65 73 74 20 73 68 65 6c 6c 35 2d 31  do_test shell5-1
19f0: 2e 37 2e 31 20 7b 0a 20 20 73 65 74 20 69 6e 20  .7.1 {.  set in 
1a00: 5b 6f 70 65 6e 20 73 68 65 6c 6c 35 2e 63 73 76  [open shell5.csv
1a10: 20 77 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69   w].  for {set i
1a20: 20 31 7d 20 7b 24 69 3c 3d 24 72 6f 77 73 7d 20   1} {$i<=$rows} 
1a30: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 70  {incr i} {.    p
1a40: 75 74 73 20 24 69 6e 20 24 69 0a 20 20 7d 0a 20  uts $in $i.  }. 
1a50: 20 63 6c 6f 73 65 20 24 69 6e 0a 20 20 73 65 74   close $in.  set
1a60: 20 72 65 73 20 5b 63 61 74 63 68 63 6d 64 20 22   res [catchcmd "
1a70: 74 65 73 74 2e 64 62 22 20 7b 43 52 45 41 54 45  test.db" {CREATE
1a80: 20 54 41 42 4c 45 20 74 33 28 61 29 3b 0a 2e 69   TABLE t3(a);..i
1a90: 6d 70 6f 72 74 20 73 68 65 6c 6c 35 2e 63 73 76  mport shell5.csv
1aa0: 20 74 33 0a 53 45 4c 45 43 54 20 43 4f 55 4e 54   t3.SELECT COUNT
1ab0: 28 2a 29 20 46 52 4f 4d 20 74 33 3b 7d 5d 0a 7d  (*) FROM t3;}].}
1ac0: 20 5b 6c 69 73 74 20 30 20 24 72 6f 77 73 5d 0a   [list 0 $rows].
1ad0: 0a 0a 70 75 74 73 20 22 43 4c 49 20 74 65 73 74  ..puts "CLI test
1ae0: 73 20 63 6f 6d 70 6c 65 74 65 64 20 73 75 63 63  s completed succ
1af0: 65 73 73 66 75 6c 6c 79 22 0a                    essfully".