Updated tests for CLI. Added some basic tests for the .import command.
FossilOrigin-Name: d46567e5d75a2b9fe96d2a7a30708b2827a0d490
This commit is contained in:
parent
5a9e07eb40
commit
1b8f78ca57
15
manifest
15
manifest
@ -1,5 +1,5 @@
|
||||
C Disable\sthe\sSQLITE_MAX_PAGE_SIZE\scompile\stime\soption\s(it\sis\snow\salways\sset\sto\s65536).\sFix\ssome\sother\sproblems\sin\stest\sfiles.
|
||||
D 2010-08-18T15:25:17
|
||||
C Updated\stests\sfor\sCLI.\s\sAdded\ssome\sbasic\stests\sfor\sthe\s.import\scommand.
|
||||
D 2010-08-18T17:16:26
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in ec08dc838fd8110fe24c92e5130bcd91cbb1ff2e
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
@ -830,7 +830,8 @@ F tool/restore_jrnl.tcl 6957a34f8f1f0f8285e07536225ec3b292a9024a
|
||||
F tool/shell1.test 930444cadb71ce9ce78bc6cd14ec21e6b69776ea
|
||||
F tool/shell2.test 5dc76b8005b465f420fed8241621da7513060ff3
|
||||
F tool/shell3.test 4fad469e8003938426355afdf34155f08c587836
|
||||
F tool/shell4.test b8d99dc22399a256f1090f6d755f666f394ba02b
|
||||
F tool/shell4.test 35f9c3d452b4e76d5013c63e1fd07478a62f14ce
|
||||
F tool/shell5.test 62bfaf9267296da1b91e4b1c03e44e7b393f6a94
|
||||
F tool/showdb.c 01c20e8181941b714fe07f72c64a7560fee17ff9
|
||||
F tool/showjournal.c ec3b171be148656827c4949fbfb8ab4370822f87
|
||||
F tool/showwal.c f09e5a80a293919290ec85a6a37c85a5ddcf37d9
|
||||
@ -843,7 +844,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
||||
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||
P 3497f54ac2f85746c50fe6f94380a22033f2464b
|
||||
R a73eece0710a0475fa95dd2e2d9fb72f
|
||||
U dan
|
||||
Z 22aea5abe93efb349f9f67cf7e694881
|
||||
P 56cc883d3af5574c9dafecef8aa96d1d05c01b83
|
||||
R f8071fb87093491279a52abcb3066064
|
||||
U shaneh
|
||||
Z 27e86cf284ab8d3eda267dae6456bdb0
|
||||
|
@ -1 +1 @@
|
||||
56cc883d3af5574c9dafecef8aa96d1d05c01b83
|
||||
d46567e5d75a2b9fe96d2a7a30708b2827a0d490
|
@ -10,6 +10,7 @@
|
||||
#***********************************************************************
|
||||
#
|
||||
# The focus of this file is testing the CLI shell tool.
|
||||
# These tests are specific to the .stats command.
|
||||
#
|
||||
# $Id: shell4.test,v 1.7 2009/07/17 16:54:48 shaneh Exp $
|
||||
#
|
||||
@ -19,8 +20,6 @@
|
||||
# shell4-1.*: Basic tests specific to the "stats" command.
|
||||
#
|
||||
|
||||
package require sqlite3
|
||||
|
||||
set CLI "./sqlite3"
|
||||
|
||||
proc do_test {name cmd expected} {
|
||||
@ -36,15 +35,6 @@ proc do_test {name cmd expected} {
|
||||
}
|
||||
}
|
||||
|
||||
proc execsql {sql} {
|
||||
uplevel [list db eval $sql]
|
||||
}
|
||||
|
||||
proc catchsql {sql} {
|
||||
set rc [catch {uplevel [list db eval $sql]} msg]
|
||||
list $rc $msg
|
||||
}
|
||||
|
||||
proc catchcmd {db {cmd ""}} {
|
||||
global CLI
|
||||
set out [open cmds.txt w]
|
||||
@ -56,7 +46,6 @@ proc catchcmd {db {cmd ""}} {
|
||||
}
|
||||
|
||||
file delete -force test.db test.db.journal
|
||||
sqlite3 db test.db
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Test cases shell4-1.*: Tests specific to the "stats" command.
|
||||
|
243
tool/shell5.test
Normal file
243
tool/shell5.test
Normal file
@ -0,0 +1,243 @@
|
||||
# 2010 August 4
|
||||
#
|
||||
# The author disclaims copyright to this source code. In place of
|
||||
# a legal notice, here is a blessing:
|
||||
#
|
||||
# May you do good and not evil.
|
||||
# May you find forgiveness for yourself and forgive others.
|
||||
# May you share freely, never taking more than you give.
|
||||
#
|
||||
#***********************************************************************
|
||||
#
|
||||
# The focus of this file is testing the CLI shell tool.
|
||||
# These tests are specific to the .import command.
|
||||
#
|
||||
# $Id: shell5.test,v 1.7 2009/07/17 16:54:48 shaneh Exp $
|
||||
#
|
||||
|
||||
# Test plan:
|
||||
#
|
||||
# shell5-1.*: Basic tests specific to the ".import" command.
|
||||
#
|
||||
|
||||
set CLI "./sqlite3"
|
||||
|
||||
proc do_test {name cmd expected} {
|
||||
puts -nonewline "$name ..."
|
||||
set res [uplevel $cmd]
|
||||
if {$res eq $expected} {
|
||||
puts Ok
|
||||
} else {
|
||||
puts Error
|
||||
puts " Got: $res"
|
||||
puts " Expected: $expected"
|
||||
exit
|
||||
}
|
||||
}
|
||||
|
||||
proc catchcmd {db {cmd ""}} {
|
||||
global CLI
|
||||
set out [open cmds.txt w]
|
||||
puts $out $cmd
|
||||
close $out
|
||||
set line "exec $CLI $db < cmds.txt"
|
||||
set rc [catch { eval $line } msg]
|
||||
list $rc $msg
|
||||
}
|
||||
|
||||
file delete -force test.db test.db.journal
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Test cases shell5-1.*: Basic handling of the .import and .separator commands.
|
||||
#
|
||||
|
||||
# .import FILE TABLE Import data from FILE into TABLE
|
||||
do_test shell5-1.1.1 {
|
||||
catchcmd "test.db" ".import"
|
||||
} {1 {Error: unknown command or invalid arguments: "import". Enter ".help" for help}}
|
||||
do_test shell5-1.1.2 {
|
||||
catchcmd "test.db" ".import FOO"
|
||||
} {1 {Error: unknown command or invalid arguments: "import". Enter ".help" for help}}
|
||||
do_test shell5-1.1.2 {
|
||||
catchcmd "test.db" ".import FOO BAR"
|
||||
} {1 {Error: no such table: BAR}}
|
||||
do_test shell5-1.1.3 {
|
||||
# too many arguments
|
||||
catchcmd "test.db" ".import FOO BAR BAD"
|
||||
} {1 {Error: unknown command or invalid arguments: "import". Enter ".help" for help}}
|
||||
|
||||
# .separator STRING Change separator used by output mode and .import
|
||||
do_test shell1-1.2.1 {
|
||||
catchcmd "test.db" ".separator"
|
||||
} {1 {Error: unknown command or invalid arguments: "separator". Enter ".help" for help}}
|
||||
do_test shell1-1.2.2 {
|
||||
catchcmd "test.db" ".separator FOO"
|
||||
} {0 {}}
|
||||
do_test shell1-1.2.3 {
|
||||
# too many arguments
|
||||
catchcmd "test.db" ".separator FOO BAD"
|
||||
} {1 {Error: unknown command or invalid arguments: "separator". Enter ".help" for help}}
|
||||
|
||||
# separator should default to "|"
|
||||
do_test shell5-1.3.1 {
|
||||
set res [catchcmd "test.db" ".show"]
|
||||
list [regexp {separator: \"\|\"} $res]
|
||||
} {1}
|
||||
|
||||
# set separator to different value.
|
||||
# check that .show reports new value
|
||||
do_test shell5-1.3.2 {
|
||||
set res [catchcmd "test.db" {.separator ,
|
||||
.show}]
|
||||
list [regexp {separator: \",\"} $res]
|
||||
} {1}
|
||||
|
||||
# import file doesn't exist
|
||||
do_test shell5-1.4.1 {
|
||||
file delete -force FOO
|
||||
set res [catchcmd "test.db" {CREATE TABLE t1(a, b);
|
||||
.import FOO t1}]
|
||||
} {1 {Error: cannot open "FOO"}}
|
||||
|
||||
# empty import file
|
||||
do_test shell5-1.4.2 {
|
||||
file delete -force shell5.csv
|
||||
set in [open shell5.csv w]
|
||||
close $in
|
||||
set res [catchcmd "test.db" {.import shell5.csv t1
|
||||
SELECT COUNT(*) FROM t1;}]
|
||||
} {0 0}
|
||||
|
||||
# import file with 1 row, 1 column (expecting 2 cols)
|
||||
do_test shell5-1.4.3 {
|
||||
set in [open shell5.csv w]
|
||||
puts $in "1"
|
||||
close $in
|
||||
set res [catchcmd "test.db" {.import shell5.csv t1}]
|
||||
} {1 {Error: shell5.csv line 1: expected 2 columns of data but found 1}}
|
||||
|
||||
# import file with 1 row, 3 columns (expecting 2 cols)
|
||||
do_test shell5-1.4.4 {
|
||||
set in [open shell5.csv w]
|
||||
puts $in "1|2|3"
|
||||
close $in
|
||||
set res [catchcmd "test.db" {.import shell5.csv t1}]
|
||||
} {1 {Error: shell5.csv line 1: expected 2 columns of data but found 3}}
|
||||
|
||||
# import file with 1 row, 2 columns
|
||||
do_test shell5-1.4.5 {
|
||||
set in [open shell5.csv w]
|
||||
puts $in "1|2"
|
||||
close $in
|
||||
set res [catchcmd "test.db" {.import shell5.csv t1
|
||||
SELECT COUNT(*) FROM t1;}]
|
||||
} {0 1}
|
||||
|
||||
# import file with 2 rows, 2 columns
|
||||
# note we end up with 3 rows because of the 1 row
|
||||
# imported above.
|
||||
do_test shell5-1.4.6 {
|
||||
set in [open shell5.csv w]
|
||||
puts $in "2|3"
|
||||
puts $in "3|4"
|
||||
close $in
|
||||
set res [catchcmd "test.db" {.import shell5.csv t1
|
||||
SELECT COUNT(*) FROM t1;}]
|
||||
} {0 3}
|
||||
|
||||
# import file with 1 row, 2 columns, using a comma
|
||||
do_test shell5-1.4.7 {
|
||||
set in [open shell5.csv w]
|
||||
puts $in "4,5"
|
||||
close $in
|
||||
set res [catchcmd "test.db" {.separator ,
|
||||
.import shell5.csv t1
|
||||
SELECT COUNT(*) FROM t1;}]
|
||||
} {0 4}
|
||||
|
||||
# import file with 1 row, 2 columns, text data
|
||||
do_test shell5-1.4.8.1 {
|
||||
set in [open shell5.csv w]
|
||||
puts $in "5|Now is the time for all good men to come to the aid of their country."
|
||||
close $in
|
||||
set res [catchcmd "test.db" {.import shell5.csv t1
|
||||
SELECT COUNT(*) FROM t1;}]
|
||||
} {0 5}
|
||||
|
||||
do_test shell5-1.4.8.2 {
|
||||
catchcmd "test.db" {SELECT b FROM t1 WHERE a='5';}
|
||||
} {0 {Now is the time for all good men to come to the aid of their country.}}
|
||||
|
||||
# import file with 1 row, 2 columns, quoted text data
|
||||
# note that currently sqlite doesn't support quoted fields, and
|
||||
# imports the entire field, quotes and all.
|
||||
do_test shell5-1.4.9.1 {
|
||||
set in [open shell5.csv w]
|
||||
puts $in "6|'Now is the time for all good men to come to the aid of their country.'"
|
||||
close $in
|
||||
set res [catchcmd "test.db" {.import shell5.csv t1
|
||||
SELECT COUNT(*) FROM t1;}]
|
||||
} {0 6}
|
||||
|
||||
do_test shell5-1.4.9.2 {
|
||||
catchcmd "test.db" {SELECT b FROM t1 WHERE a='6';}
|
||||
} {0 {'Now is the time for all good men to come to the aid of their country.'}}
|
||||
|
||||
# import file with 1 row, 2 columns, quoted text data
|
||||
do_test shell5-1.4.10.1 {
|
||||
set in [open shell5.csv w]
|
||||
puts $in "7|\"Now is the time for all good men to come to the aid of their country.\""
|
||||
close $in
|
||||
set res [catchcmd "test.db" {.import shell5.csv t1
|
||||
SELECT COUNT(*) FROM t1;}]
|
||||
} {0 7}
|
||||
|
||||
do_test shell5-1.4.10.2 {
|
||||
catchcmd "test.db" {SELECT b FROM t1 WHERE a='7';}
|
||||
} {0 {"Now is the time for all good men to come to the aid of their country."}}
|
||||
|
||||
# check importing very long field
|
||||
do_test shell5-1.5.1 {
|
||||
set str [string repeat X 999]
|
||||
set in [open shell5.csv w]
|
||||
puts $in "8|$str"
|
||||
close $in
|
||||
set res [catchcmd "test.db" {.import shell5.csv t1
|
||||
SELECT length(b) FROM t1 WHERE a='8';}]
|
||||
} {0 999}
|
||||
|
||||
# try importing into a table with a large number of columns.
|
||||
# This is limited by SQLITE_MAX_VARIABLE_NUMBER, which defaults to 999.
|
||||
set cols 999
|
||||
do_test shell5-1.6.1 {
|
||||
set sql {CREATE TABLE t2(}
|
||||
set data {}
|
||||
for {set i 1} {$i<$cols} {incr i} {
|
||||
append sql "c$i,"
|
||||
append data "$i|"
|
||||
}
|
||||
append sql "c$cols);"
|
||||
append data "$cols"
|
||||
catchcmd "test.db" $sql
|
||||
set in [open shell5.csv w]
|
||||
puts $in $data
|
||||
close $in
|
||||
set res [catchcmd "test.db" {.import shell5.csv t2
|
||||
SELECT COUNT(*) FROM t2;}]
|
||||
} {0 1}
|
||||
|
||||
# try importing a large number of rows
|
||||
set rows 999999
|
||||
do_test shell5-1.7.1 {
|
||||
set in [open shell5.csv w]
|
||||
for {set i 1} {$i<=$rows} {incr i} {
|
||||
puts $in $i
|
||||
}
|
||||
close $in
|
||||
set res [catchcmd "test.db" {CREATE TABLE t3(a);
|
||||
.import shell5.csv t3
|
||||
SELECT COUNT(*) FROM t3;}]
|
||||
} [list 0 $rows]
|
||||
|
||||
|
||||
puts "CLI tests completed successfully"
|
Loading…
x
Reference in New Issue
Block a user