]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Updated tests for CLI. Added some basic tests for the .import command.
authorshaneh <shaneh@noemail.net>
Wed, 18 Aug 2010 17:16:26 +0000 (17:16 +0000)
committershaneh <shaneh@noemail.net>
Wed, 18 Aug 2010 17:16:26 +0000 (17:16 +0000)
FossilOrigin-Name: d46567e5d75a2b9fe96d2a7a30708b2827a0d490

manifest
manifest.uuid
tool/shell4.test
tool/shell5.test [new file with mode: 0644]

index 98f4ab55d8945bdf3b0b67521d6bb9716f0d202c..7f78b9c81f5c817149ad3fd6f1a73a75fdc9d9cb 100644 (file)
--- a/manifest
+++ b/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
index 16351f841ab311c69139164ca85b43562d88baba..bc4e5a703cda472695a69c22f093dedee6a3a6f1 100644 (file)
@@ -1 +1 @@
-56cc883d3af5574c9dafecef8aa96d1d05c01b83
\ No newline at end of file
+d46567e5d75a2b9fe96d2a7a30708b2827a0d490
\ No newline at end of file
index b4bef3afa4fa0bcc49adc86eaf8f5d5673785cbb..085c279bb3148dc4ccda9a1c392613b78fc27e0d 100644 (file)
@@ -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.
diff --git a/tool/shell5.test b/tool/shell5.test
new file mode 100644 (file)
index 0000000..a82f979
--- /dev/null
@@ -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"