Annotation of embedaddon/sqlite3/tool/shell5.test, revision 1.1.1.1

1.1       misho       1: # 2010 August 4
                      2: #
                      3: # The author disclaims copyright to this source code.  In place of
                      4: # a legal notice, here is a blessing:
                      5: #
                      6: #    May you do good and not evil.
                      7: #    May you find forgiveness for yourself and forgive others.
                      8: #    May you share freely, never taking more than you give.
                      9: #
                     10: #***********************************************************************
                     11: #
                     12: # The focus of this file is testing the CLI shell tool.
                     13: # These tests are specific to the .import command.
                     14: #
                     15: # $Id: shell5.test,v 1.7 2009/07/17 16:54:48 shaneh Exp $
                     16: #
                     17: 
                     18: # Test plan:
                     19: #
                     20: #   shell5-1.*: Basic tests specific to the ".import" command.
                     21: #
                     22: 
                     23: set CLI "./sqlite3"
                     24: 
                     25: proc do_test {name cmd expected} {
                     26:   puts -nonewline "$name ..."
                     27:   set res [uplevel $cmd]
                     28:   if {$res eq $expected} {
                     29:     puts Ok
                     30:   } else {
                     31:     puts Error
                     32:     puts "  Got: $res"
                     33:     puts "  Expected: $expected"
                     34:     exit
                     35:   }
                     36: }
                     37: 
                     38: proc catchcmd {db {cmd ""}} {
                     39:   global CLI
                     40:   set out [open cmds.txt w]
                     41:   puts $out $cmd
                     42:   close $out
                     43:   set line "exec $CLI $db < cmds.txt"
                     44:   set rc [catch { eval $line } msg]
                     45:   list $rc $msg
                     46: }
                     47: 
                     48: file delete -force test.db test.db.journal
                     49: 
                     50: #----------------------------------------------------------------------------
                     51: # Test cases shell5-1.*: Basic handling of the .import and .separator commands.
                     52: #
                     53: 
                     54: # .import FILE TABLE     Import data from FILE into TABLE
                     55: do_test shell5-1.1.1 {
                     56:   catchcmd "test.db" ".import"
                     57: } {1 {Error: unknown command or invalid arguments:  "import". Enter ".help" for help}}
                     58: do_test shell5-1.1.2 {
                     59:   catchcmd "test.db" ".import FOO"
                     60: } {1 {Error: unknown command or invalid arguments:  "import". Enter ".help" for help}}
                     61: do_test shell5-1.1.2 {
                     62:   catchcmd "test.db" ".import FOO BAR"
                     63: } {1 {Error: no such table: BAR}}
                     64: do_test shell5-1.1.3 {
                     65:   # too many arguments
                     66:   catchcmd "test.db" ".import FOO BAR BAD"
                     67: } {1 {Error: unknown command or invalid arguments:  "import". Enter ".help" for help}}
                     68: 
                     69: # .separator STRING      Change separator used by output mode and .import
                     70: do_test shell1-1.2.1 {
                     71:   catchcmd "test.db" ".separator"
                     72: } {1 {Error: unknown command or invalid arguments:  "separator". Enter ".help" for help}}
                     73: do_test shell1-1.2.2 {
                     74:   catchcmd "test.db" ".separator FOO"
                     75: } {0 {}}
                     76: do_test shell1-1.2.3 {
                     77:   # too many arguments
                     78:   catchcmd "test.db" ".separator FOO BAD"
                     79: } {1 {Error: unknown command or invalid arguments:  "separator". Enter ".help" for help}}
                     80: 
                     81: # separator should default to "|"
                     82: do_test shell5-1.3.1 {
                     83:   set res [catchcmd "test.db" ".show"]
                     84:   list [regexp {separator: \"\|\"} $res]
                     85: } {1}
                     86: 
                     87: # set separator to different value.
                     88: # check that .show reports new value
                     89: do_test shell5-1.3.2 {
                     90:   set res [catchcmd "test.db" {.separator ,
                     91: .show}]
                     92:   list [regexp {separator: \",\"} $res]
                     93: } {1}
                     94: 
                     95: # import file doesn't exist
                     96: do_test shell5-1.4.1 {
                     97:   file delete -force FOO
                     98:   set res [catchcmd "test.db" {CREATE TABLE t1(a, b);
                     99: .import FOO t1}]
                    100: } {1 {Error: cannot open "FOO"}}
                    101: 
                    102: # empty import file
                    103: do_test shell5-1.4.2 {
                    104:   file delete -force shell5.csv
                    105:   set in [open shell5.csv w]
                    106:   close $in
                    107:   set res [catchcmd "test.db" {.import shell5.csv t1
                    108: SELECT COUNT(*) FROM t1;}]
                    109: } {0 0}
                    110: 
                    111: # import file with 1 row, 1 column (expecting 2 cols)
                    112: do_test shell5-1.4.3 {
                    113:   set in [open shell5.csv w]
                    114:   puts $in "1"
                    115:   close $in
                    116:   set res [catchcmd "test.db" {.import shell5.csv t1}]
                    117: } {1 {Error: shell5.csv line 1: expected 2 columns of data but found 1}}
                    118: 
                    119: # import file with 1 row, 3 columns (expecting 2 cols)
                    120: do_test shell5-1.4.4 {
                    121:   set in [open shell5.csv w]
                    122:   puts $in "1|2|3"
                    123:   close $in
                    124:   set res [catchcmd "test.db" {.import shell5.csv t1}]
                    125: } {1 {Error: shell5.csv line 1: expected 2 columns of data but found 3}}
                    126: 
                    127: # import file with 1 row, 2 columns
                    128: do_test shell5-1.4.5 {
                    129:   set in [open shell5.csv w]
                    130:   puts $in "1|2"
                    131:   close $in
                    132:   set res [catchcmd "test.db" {.import shell5.csv t1
                    133: SELECT COUNT(*) FROM t1;}]
                    134: } {0 1}
                    135: 
                    136: # import file with 2 rows, 2 columns
                    137: # note we end up with 3 rows because of the 1 row 
                    138: # imported above.
                    139: do_test shell5-1.4.6 {
                    140:   set in [open shell5.csv w]
                    141:   puts $in "2|3"
                    142:   puts $in "3|4"
                    143:   close $in
                    144:   set res [catchcmd "test.db" {.import shell5.csv t1
                    145: SELECT COUNT(*) FROM t1;}]
                    146: } {0 3}
                    147: 
                    148: # import file with 1 row, 2 columns, using a comma
                    149: do_test shell5-1.4.7 {
                    150:   set in [open shell5.csv w]
                    151:   puts $in "4,5"
                    152:   close $in
                    153:   set res [catchcmd "test.db" {.separator ,
                    154: .import shell5.csv t1
                    155: SELECT COUNT(*) FROM t1;}]
                    156: } {0 4}
                    157: 
                    158: # import file with 1 row, 2 columns, text data
                    159: do_test shell5-1.4.8.1 {
                    160:   set in [open shell5.csv w]
                    161:   puts $in "5|Now is the time for all good men to come to the aid of their country."
                    162:   close $in
                    163:   set res [catchcmd "test.db" {.import shell5.csv t1
                    164: SELECT COUNT(*) FROM t1;}]
                    165: } {0 5}
                    166: 
                    167: do_test shell5-1.4.8.2 {
                    168:   catchcmd "test.db" {SELECT b FROM t1 WHERE a='5';}
                    169: } {0 {Now is the time for all good men to come to the aid of their country.}}
                    170: 
                    171: # import file with 1 row, 2 columns, quoted text data
                    172: # note that currently sqlite doesn't support quoted fields, and
                    173: # imports the entire field, quotes and all.
                    174: do_test shell5-1.4.9.1 {
                    175:   set in [open shell5.csv w]
                    176:   puts $in "6|'Now is the time for all good men to come to the aid of their country.'"
                    177:   close $in
                    178:   set res [catchcmd "test.db" {.import shell5.csv t1
                    179: SELECT COUNT(*) FROM t1;}]
                    180: } {0 6}
                    181: 
                    182: do_test shell5-1.4.9.2 {
                    183:   catchcmd "test.db" {SELECT b FROM t1 WHERE a='6';}
                    184: } {0 {'Now is the time for all good men to come to the aid of their country.'}}
                    185: 
                    186: # import file with 1 row, 2 columns, quoted text data
                    187: do_test shell5-1.4.10.1 {
                    188:   set in [open shell5.csv w]
                    189:   puts $in "7|\"Now is the time for all good men to come to the aid of their country.\""
                    190:   close $in
                    191:   set res [catchcmd "test.db" {.import shell5.csv t1
                    192: SELECT COUNT(*) FROM t1;}]
                    193: } {0 7}
                    194: 
                    195: do_test shell5-1.4.10.2 {
                    196:   catchcmd "test.db" {SELECT b FROM t1 WHERE a='7';}
                    197: } {0 {"Now is the time for all good men to come to the aid of their country."}}
                    198: 
                    199: # check importing very long field
                    200: do_test shell5-1.5.1 {
                    201:   set str [string repeat X 999]
                    202:   set in [open shell5.csv w]
                    203:   puts $in "8|$str"
                    204:   close $in
                    205:   set res [catchcmd "test.db" {.import shell5.csv t1
                    206: SELECT length(b) FROM t1 WHERE a='8';}]
                    207: } {0 999}
                    208: 
                    209: # try importing into a table with a large number of columns.
                    210: # This is limited by SQLITE_MAX_VARIABLE_NUMBER, which defaults to 999.
                    211: set cols 999
                    212: do_test shell5-1.6.1 {
                    213:   set sql {CREATE TABLE t2(}
                    214:   set data {}
                    215:   for {set i 1} {$i<$cols} {incr i} {
                    216:     append sql "c$i,"
                    217:     append data "$i|"
                    218:   }
                    219:   append sql "c$cols);"
                    220:   append data "$cols"
                    221:   catchcmd "test.db" $sql
                    222:   set in [open shell5.csv w]
                    223:   puts $in $data
                    224:   close $in
                    225:   set res [catchcmd "test.db" {.import shell5.csv t2
                    226: SELECT COUNT(*) FROM t2;}]
                    227: } {0 1}
                    228: 
                    229: # try importing a large number of rows
                    230: set rows 999999
                    231: do_test shell5-1.7.1 {
                    232:   set in [open shell5.csv w]
                    233:   for {set i 1} {$i<=$rows} {incr i} {
                    234:     puts $in $i
                    235:   }
                    236:   close $in
                    237:   set res [catchcmd "test.db" {CREATE TABLE t3(a);
                    238: .import shell5.csv t3
                    239: SELECT COUNT(*) FROM t3;}]
                    240: } [list 0 $rows]
                    241: 
                    242: 
                    243: puts "CLI tests completed successfully"

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>