123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812 |
- # 2009 Nov 11
- #
- # 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.
- #
- #
- # Test plan:
- #
- # shell1-1.*: Basic command line option handling.
- # shell1-2.*: Basic "dot" command token parsing.
- # shell1-3.*: Basic test that "dot" command can be called.
- #
- set testdir [file dirname $argv0]
- source $testdir/tester.tcl
- if {$tcl_platform(platform)=="windows"} {
- set CLI "sqlite3.exe"
- } else {
- set CLI "./sqlite3"
- }
- if {![file executable $CLI]} {
- finish_test
- return
- }
- db close
- forcedelete test.db test.db-journal test.db-wal
- sqlite3 db test.db
- #----------------------------------------------------------------------------
- # Test cases shell1-1.*: Basic command line option handling.
- #
- # invalid option
- do_test shell1-1.1.1 {
- set res [catchcmd "-bad test.db" ""]
- set rc [lindex $res 0]
- list $rc \
- [regexp {Error: unknown option: -bad} $res]
- } {1 1}
- # error on extra options
- do_test shell1-1.1.2 {
- set res [catchcmd "-bad test.db \"select 3\" \"select 4\"" ""]
- set rc [lindex $res 0]
- list $rc \
- [regexp {Error: too many options: "select 4"} $res]
- } {1 1}
- # error on extra options
- do_test shell1-1.1.3 {
- set res [catchcmd "-bad FOO test.db BAD" ".quit"]
- set rc [lindex $res 0]
- list $rc \
- [regexp {Error: too many options: "BAD"} $res]
- } {1 1}
- # -help
- do_test shell1-1.2.1 {
- set res [catchcmd "-help test.db" ""]
- set rc [lindex $res 0]
- list $rc \
- [regexp {Usage} $res] \
- [regexp {\-init} $res] \
- [regexp {\-version} $res]
- } {1 1 1 1}
- # -init filename read/process named file
- do_test shell1-1.3.1 {
- catchcmd "-init FOO test.db" ""
- } {0 {}}
- do_test shell1-1.3.2 {
- set res [catchcmd "-init FOO test.db .quit BAD" ""]
- set rc [lindex $res 0]
- list $rc \
- [regexp {Error: too many options: "BAD"} $res]
- } {1 1}
- # -echo print commands before execution
- do_test shell1-1.4.1 {
- catchcmd "-echo test.db" ""
- } {0 {}}
- # -[no]header turn headers on or off
- do_test shell1-1.5.1 {
- catchcmd "-header test.db" ""
- } {0 {}}
- do_test shell1-1.5.2 {
- catchcmd "-noheader test.db" ""
- } {0 {}}
- # -bail stop after hitting an error
- do_test shell1-1.6.1 {
- catchcmd "-bail test.db" ""
- } {0 {}}
- # -interactive force interactive I/O
- do_test shell1-1.7.1 {
- set res [catchcmd "-interactive test.db" ".quit"]
- set rc [lindex $res 0]
- list $rc \
- [regexp {SQLite version} $res] \
- [regexp {Enter SQL statements} $res]
- } {0 1 1}
- # -batch force batch I/O
- do_test shell1-1.8.1 {
- catchcmd "-batch test.db" ""
- } {0 {}}
- # -column set output mode to 'column'
- do_test shell1-1.9.1 {
- catchcmd "-column test.db" ""
- } {0 {}}
- # -csv set output mode to 'csv'
- do_test shell1-1.10.1 {
- catchcmd "-csv test.db" ""
- } {0 {}}
- # -html set output mode to HTML
- do_test shell1-1.11.1 {
- catchcmd "-html test.db" ""
- } {0 {}}
- # -line set output mode to 'line'
- do_test shell1-1.12.1 {
- catchcmd "-line test.db" ""
- } {0 {}}
- # -list set output mode to 'list'
- do_test shell1-1.13.1 {
- catchcmd "-list test.db" ""
- } {0 {}}
- # -separator 'x' set output field separator (|)
- do_test shell1-1.14.1 {
- catchcmd "-separator 'x' test.db" ""
- } {0 {}}
- do_test shell1-1.14.2 {
- catchcmd "-separator x test.db" ""
- } {0 {}}
- do_test shell1-1.14.3 {
- set res [catchcmd "-separator" ""]
- set rc [lindex $res 0]
- list $rc \
- [regexp {Error: missing argument to -separator} $res]
- } {1 1}
- # -stats print memory stats before each finalize
- do_test shell1-1.14b.1 {
- catchcmd "-stats test.db" ""
- } {0 {}}
- # -nullvalue 'text' set text string for NULL values
- do_test shell1-1.15.1 {
- catchcmd "-nullvalue 'x' test.db" ""
- } {0 {}}
- do_test shell1-1.15.2 {
- catchcmd "-nullvalue x test.db" ""
- } {0 {}}
- do_test shell1-1.15.3 {
- set res [catchcmd "-nullvalue" ""]
- set rc [lindex $res 0]
- list $rc \
- [regexp {Error: missing argument to -nullvalue} $res]
- } {1 1}
- # -version show SQLite version
- do_test shell1-1.16.1 {
- set x [catchcmd "-version test.db" ""]
- } {/3.[0-9.]+ 20\d\d-[01]\d-\d\d \d\d:\d\d:\d\d [0-9a-f]+/}
- #----------------------------------------------------------------------------
- # Test cases shell1-2.*: Basic "dot" command token parsing.
- #
- # check first token handling
- do_test shell1-2.1.1 {
- catchcmd "test.db" ".foo"
- } {1 {Error: unknown command or invalid arguments: "foo". Enter ".help" for help}}
- do_test shell1-2.1.2 {
- catchcmd "test.db" ".\"foo OFF\""
- } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for help}}
- do_test shell1-2.1.3 {
- catchcmd "test.db" ".\'foo OFF\'"
- } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for help}}
- # unbalanced quotes
- do_test shell1-2.2.1 {
- catchcmd "test.db" ".\"foo OFF"
- } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for help}}
- do_test shell1-2.2.2 {
- catchcmd "test.db" ".\'foo OFF"
- } {1 {Error: unknown command or invalid arguments: "foo OFF". Enter ".help" for help}}
- do_test shell1-2.2.3 {
- catchcmd "test.db" ".explain \"OFF"
- } {0 {}}
- do_test shell1-2.2.4 {
- catchcmd "test.db" ".explain \'OFF"
- } {0 {}}
- do_test shell1-2.2.5 {
- catchcmd "test.db" ".mode \"insert FOO"
- } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}}
- do_test shell1-2.2.6 {
- catchcmd "test.db" ".mode \'insert FOO"
- } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}}
- # check multiple tokens, and quoted tokens
- do_test shell1-2.3.1 {
- catchcmd "test.db" ".explain 1"
- } {0 {}}
- do_test shell1-2.3.2 {
- catchcmd "test.db" ".explain on"
- } {0 {}}
- do_test shell1-2.3.3 {
- catchcmd "test.db" ".explain \"1 2 3\""
- } {1 {ERROR: Not a boolean value: "1 2 3". Assuming "no".}}
- do_test shell1-2.3.4 {
- catchcmd "test.db" ".explain \"OFF\""
- } {0 {}}
- do_test shell1-2.3.5 {
- catchcmd "test.db" ".\'explain\' \'OFF\'"
- } {0 {}}
- do_test shell1-2.3.6 {
- catchcmd "test.db" ".explain \'OFF\'"
- } {0 {}}
- do_test shell1-2.3.7 {
- catchcmd "test.db" ".\'explain\' \'OFF\'"
- } {0 {}}
- # check quoted args are unquoted
- do_test shell1-2.4.1 {
- catchcmd "test.db" ".mode FOO"
- } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}}
- do_test shell1-2.4.2 {
- catchcmd "test.db" ".mode csv"
- } {0 {}}
- do_test shell1-2.4.2 {
- catchcmd "test.db" ".mode \"csv\""
- } {0 {}}
- #----------------------------------------------------------------------------
- # Test cases shell1-3.*: Basic test that "dot" command can be called.
- #
- # .backup ?DB? FILE Backup DB (default "main") to FILE
- do_test shell1-3.1.1 {
- catchcmd "test.db" ".backup"
- } {1 {missing FILENAME argument on .backup}}
- do_test shell1-3.1.2 {
- catchcmd "test.db" ".backup FOO"
- } {0 {}}
- do_test shell1-3.1.3 {
- catchcmd "test.db" ".backup FOO BAR"
- } {1 {Error: unknown database FOO}}
- do_test shell1-3.1.4 {
- # too many arguments
- catchcmd "test.db" ".backup FOO BAR BAD"
- } {1 {too many arguments to .backup}}
- # .bail ON|OFF Stop after hitting an error. Default OFF
- do_test shell1-3.2.1 {
- catchcmd "test.db" ".bail"
- } {1 {Error: unknown command or invalid arguments: "bail". Enter ".help" for help}}
- do_test shell1-3.2.2 {
- catchcmd "test.db" ".bail ON"
- } {0 {}}
- do_test shell1-3.2.3 {
- catchcmd "test.db" ".bail OFF"
- } {0 {}}
- do_test shell1-3.2.4 {
- # too many arguments
- catchcmd "test.db" ".bail OFF BAD"
- } {1 {Error: unknown command or invalid arguments: "bail". Enter ".help" for help}}
- # .databases List names and files of attached databases
- do_test shell1-3.3.1 {
- catchcmd "-csv test.db" ".databases"
- } "/0 +.*main +[string map {/ .} [string range [get_pwd] 0 10]].*/"
- do_test shell1-3.3.2 {
- # too many arguments
- catchcmd "test.db" ".databases BAD"
- } {1 {Error: unknown command or invalid arguments: "databases". Enter ".help" for help}}
- # .dump ?TABLE? ... Dump the database in an SQL text format
- # If TABLE specified, only dump tables matching
- # LIKE pattern TABLE.
- do_test shell1-3.4.1 {
- set res [catchcmd "test.db" ".dump"]
- list [regexp {BEGIN TRANSACTION;} $res] \
- [regexp {COMMIT;} $res]
- } {1 1}
- do_test shell1-3.4.2 {
- set res [catchcmd "test.db" ".dump FOO"]
- list [regexp {BEGIN TRANSACTION;} $res] \
- [regexp {COMMIT;} $res]
- } {1 1}
- do_test shell1-3.4.3 {
- # too many arguments
- catchcmd "test.db" ".dump FOO BAD"
- } {1 {Error: unknown command or invalid arguments: "dump". Enter ".help" for help}}
- # .echo ON|OFF Turn command echo on or off
- do_test shell1-3.5.1 {
- catchcmd "test.db" ".echo"
- } {1 {Error: unknown command or invalid arguments: "echo". Enter ".help" for help}}
- do_test shell1-3.5.2 {
- catchcmd "test.db" ".echo ON"
- } {0 {}}
- do_test shell1-3.5.3 {
- catchcmd "test.db" ".echo OFF"
- } {0 {}}
- do_test shell1-3.5.4 {
- # too many arguments
- catchcmd "test.db" ".echo OFF BAD"
- } {1 {Error: unknown command or invalid arguments: "echo". Enter ".help" for help}}
- # .exit Exit this program
- do_test shell1-3.6.1 {
- catchcmd "test.db" ".exit"
- } {0 {}}
- # .explain ON|OFF Turn output mode suitable for EXPLAIN on or off.
- do_test shell1-3.7.1 {
- catchcmd "test.db" ".explain"
- # explain is the exception to the booleans. without an option, it turns it on.
- } {0 {}}
- do_test shell1-3.7.2 {
- catchcmd "test.db" ".explain ON"
- } {0 {}}
- do_test shell1-3.7.3 {
- catchcmd "test.db" ".explain OFF"
- } {0 {}}
- do_test shell1-3.7.4 {
- # too many arguments
- catchcmd "test.db" ".explain OFF BAD"
- } {1 {Error: unknown command or invalid arguments: "explain". Enter ".help" for help}}
- # .header(s) ON|OFF Turn display of headers on or off
- do_test shell1-3.9.1 {
- catchcmd "test.db" ".header"
- } {1 {Error: unknown command or invalid arguments: "header". Enter ".help" for help}}
- do_test shell1-3.9.2 {
- catchcmd "test.db" ".header ON"
- } {0 {}}
- do_test shell1-3.9.3 {
- catchcmd "test.db" ".header OFF"
- } {0 {}}
- do_test shell1-3.9.4 {
- # too many arguments
- catchcmd "test.db" ".header OFF BAD"
- } {1 {Error: unknown command or invalid arguments: "header". Enter ".help" for help}}
- do_test shell1-3.9.5 {
- catchcmd "test.db" ".headers"
- } {1 {Error: unknown command or invalid arguments: "headers". Enter ".help" for help}}
- do_test shell1-3.9.6 {
- catchcmd "test.db" ".headers ON"
- } {0 {}}
- do_test shell1-3.9.7 {
- catchcmd "test.db" ".headers OFF"
- } {0 {}}
- do_test shell1-3.9.8 {
- # too many arguments
- catchcmd "test.db" ".headers OFF BAD"
- } {1 {Error: unknown command or invalid arguments: "headers". Enter ".help" for help}}
- # .help Show this message
- do_test shell1-3.10.1 {
- set res [catchcmd "test.db" ".help"]
- # look for a few of the possible help commands
- list [regexp {.help} $res] \
- [regexp {.quit} $res] \
- [regexp {.show} $res]
- } {1 1 1}
- do_test shell1-3.10.2 {
- # we allow .help to take extra args (it is help after all)
- set res [catchcmd "test.db" ".help BAD"]
- # look for a few of the possible help commands
- list [regexp {.help} $res] \
- [regexp {.quit} $res] \
- [regexp {.show} $res]
- } {1 1 1}
- # .import FILE TABLE Import data from FILE into TABLE
- do_test shell1-3.11.1 {
- catchcmd "test.db" ".import"
- } {1 {Error: unknown command or invalid arguments: "import". Enter ".help" for help}}
- do_test shell1-3.11.2 {
- catchcmd "test.db" ".import FOO"
- } {1 {Error: unknown command or invalid arguments: "import". Enter ".help" for help}}
- #do_test shell1-3.11.2 {
- # catchcmd "test.db" ".import FOO BAR"
- #} {1 {Error: no such table: BAR}}
- do_test shell1-3.11.3 {
- # too many arguments
- catchcmd "test.db" ".import FOO BAR BAD"
- } {1 {Error: unknown command or invalid arguments: "import". Enter ".help" for help}}
- # .indices ?TABLE? Show names of all indices
- # If TABLE specified, only show indices for tables
- # matching LIKE pattern TABLE.
- do_test shell1-3.12.1 {
- catchcmd "test.db" ".indices"
- } {0 {}}
- do_test shell1-3.12.2 {
- catchcmd "test.db" ".indices FOO"
- } {0 {}}
- do_test shell1-3.12.3 {
- # too many arguments
- catchcmd "test.db" ".indices FOO BAD"
- } {1 {Error: unknown command or invalid arguments: "indices". Enter ".help" for help}}
- # .mode MODE ?TABLE? Set output mode where MODE is one of:
- # csv Comma-separated values
- # column Left-aligned columns. (See .width)
- # html HTML <table> code
- # insert SQL insert statements for TABLE
- # line One value per line
- # list Values delimited by .separator string
- # tabs Tab-separated values
- # tcl TCL list elements
- do_test shell1-3.13.1 {
- catchcmd "test.db" ".mode"
- } {1 {Error: unknown command or invalid arguments: "mode". Enter ".help" for help}}
- do_test shell1-3.13.2 {
- catchcmd "test.db" ".mode FOO"
- } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}}
- do_test shell1-3.13.3 {
- catchcmd "test.db" ".mode csv"
- } {0 {}}
- do_test shell1-3.13.4 {
- catchcmd "test.db" ".mode column"
- } {0 {}}
- do_test shell1-3.13.5 {
- catchcmd "test.db" ".mode html"
- } {0 {}}
- do_test shell1-3.13.6 {
- catchcmd "test.db" ".mode insert"
- } {0 {}}
- do_test shell1-3.13.7 {
- catchcmd "test.db" ".mode line"
- } {0 {}}
- do_test shell1-3.13.8 {
- catchcmd "test.db" ".mode list"
- } {0 {}}
- do_test shell1-3.13.9 {
- catchcmd "test.db" ".mode tabs"
- } {0 {}}
- do_test shell1-3.13.10 {
- catchcmd "test.db" ".mode tcl"
- } {0 {}}
- do_test shell1-3.13.11 {
- # too many arguments
- catchcmd "test.db" ".mode tcl BAD"
- } {1 {Error: invalid arguments: "BAD". Enter ".help" for help}}
- # don't allow partial mode type matches
- do_test shell1-3.13.12 {
- catchcmd "test.db" ".mode l"
- } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}}
- do_test shell1-3.13.13 {
- catchcmd "test.db" ".mode li"
- } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}}
- do_test shell1-3.13.14 {
- catchcmd "test.db" ".mode lin"
- } {1 {Error: mode should be one of: column csv html insert line list tabs tcl}}
- # .nullvalue STRING Print STRING in place of NULL values
- do_test shell1-3.14.1 {
- catchcmd "test.db" ".nullvalue"
- } {1 {Error: unknown command or invalid arguments: "nullvalue". Enter ".help" for help}}
- do_test shell1-3.14.2 {
- catchcmd "test.db" ".nullvalue FOO"
- } {0 {}}
- do_test shell1-3.14.3 {
- # too many arguments
- catchcmd "test.db" ".nullvalue FOO BAD"
- } {1 {Error: unknown command or invalid arguments: "nullvalue". Enter ".help" for help}}
- # .output FILENAME Send output to FILENAME
- do_test shell1-3.15.1 {
- catchcmd "test.db" ".output"
- } {1 {Error: unknown command or invalid arguments: "output". Enter ".help" for help}}
- do_test shell1-3.15.2 {
- catchcmd "test.db" ".output FOO"
- } {0 {}}
- do_test shell1-3.15.3 {
- # too many arguments
- catchcmd "test.db" ".output FOO BAD"
- } {1 {Error: unknown command or invalid arguments: "output". Enter ".help" for help}}
- # .output stdout Send output to the screen
- do_test shell1-3.16.1 {
- catchcmd "test.db" ".output stdout"
- } {0 {}}
- do_test shell1-3.16.2 {
- # too many arguments
- catchcmd "test.db" ".output stdout BAD"
- } {1 {Error: unknown command or invalid arguments: "output". Enter ".help" for help}}
- # .prompt MAIN CONTINUE Replace the standard prompts
- do_test shell1-3.17.1 {
- catchcmd "test.db" ".prompt"
- } {1 {Error: unknown command or invalid arguments: "prompt". Enter ".help" for help}}
- do_test shell1-3.17.2 {
- catchcmd "test.db" ".prompt FOO"
- } {0 {}}
- do_test shell1-3.17.3 {
- catchcmd "test.db" ".prompt FOO BAR"
- } {0 {}}
- do_test shell1-3.17.4 {
- # too many arguments
- catchcmd "test.db" ".prompt FOO BAR BAD"
- } {1 {Error: unknown command or invalid arguments: "prompt". Enter ".help" for help}}
- # .quit Exit this program
- do_test shell1-3.18.1 {
- catchcmd "test.db" ".quit"
- } {0 {}}
- do_test shell1-3.18.2 {
- # too many arguments
- catchcmd "test.db" ".quit BAD"
- } {1 {Error: unknown command or invalid arguments: "quit". Enter ".help" for help}}
- # .read FILENAME Execute SQL in FILENAME
- do_test shell1-3.19.1 {
- catchcmd "test.db" ".read"
- } {1 {Error: unknown command or invalid arguments: "read". Enter ".help" for help}}
- do_test shell1-3.19.2 {
- forcedelete FOO
- catchcmd "test.db" ".read FOO"
- } {1 {Error: cannot open "FOO"}}
- do_test shell1-3.19.3 {
- # too many arguments
- catchcmd "test.db" ".read FOO BAD"
- } {1 {Error: unknown command or invalid arguments: "read". Enter ".help" for help}}
- # .restore ?DB? FILE Restore content of DB (default "main") from FILE
- do_test shell1-3.20.1 {
- catchcmd "test.db" ".restore"
- } {1 {Error: unknown command or invalid arguments: "restore". Enter ".help" for help}}
- do_test shell1-3.20.2 {
- catchcmd "test.db" ".restore FOO"
- } {0 {}}
- do_test shell1-3.20.3 {
- catchcmd "test.db" ".restore FOO BAR"
- } {1 {Error: unknown database FOO}}
- do_test shell1-3.20.4 {
- # too many arguments
- catchcmd "test.db" ".restore FOO BAR BAD"
- } {1 {Error: unknown command or invalid arguments: "restore". Enter ".help" for help}}
- # .schema ?TABLE? Show the CREATE statements
- # If TABLE specified, only show tables matching
- # LIKE pattern TABLE.
- do_test shell1-3.21.1 {
- catchcmd "test.db" ".schema"
- } {0 {}}
- do_test shell1-3.21.2 {
- catchcmd "test.db" ".schema FOO"
- } {0 {}}
- do_test shell1-3.21.3 {
- # too many arguments
- catchcmd "test.db" ".schema FOO BAD"
- } {1 {Error: unknown command or invalid arguments: "schema". Enter ".help" for help}}
- do_test shell1-3.21.4 {
- catchcmd "test.db" {
- CREATE TABLE t1(x);
- CREATE VIEW v2 AS SELECT x+1 AS y FROM t1;
- CREATE VIEW v1 AS SELECT y+1 FROM v2;
- }
- catchcmd "test.db" ".schema"
- } {0 {CREATE TABLE t1(x);
- CREATE VIEW v2 AS SELECT x+1 AS y FROM t1;
- CREATE VIEW v1 AS SELECT y+1 FROM v2;}}
- db eval {DROP VIEW v1; DROP VIEW v2; DROP TABLE t1;}
- # .separator STRING Change separator used by output mode and .import
- do_test shell1-3.22.1 {
- catchcmd "test.db" ".separator"
- } {1 {Error: unknown command or invalid arguments: "separator". Enter ".help" for help}}
- do_test shell1-3.22.2 {
- catchcmd "test.db" ".separator FOO"
- } {0 {}}
- do_test shell1-3.22.3 {
- # too many arguments
- catchcmd "test.db" ".separator FOO BAD"
- } {1 {Error: unknown command or invalid arguments: "separator". Enter ".help" for help}}
- # .show Show the current values for various settings
- do_test shell1-3.23.1 {
- set res [catchcmd "test.db" ".show"]
- list [regexp {echo:} $res] \
- [regexp {explain:} $res] \
- [regexp {headers:} $res] \
- [regexp {mode:} $res] \
- [regexp {nullvalue:} $res] \
- [regexp {output:} $res] \
- [regexp {separator:} $res] \
- [regexp {stats:} $res] \
- [regexp {width:} $res]
- } {1 1 1 1 1 1 1 1 1}
- do_test shell1-3.23.2 {
- # too many arguments
- catchcmd "test.db" ".show BAD"
- } {1 {Error: unknown command or invalid arguments: "show". Enter ".help" for help}}
- # .stats ON|OFF Turn stats on or off
- do_test shell1-3.23b.1 {
- catchcmd "test.db" ".stats"
- } {1 {Error: unknown command or invalid arguments: "stats". Enter ".help" for help}}
- do_test shell1-3.23b.2 {
- catchcmd "test.db" ".stats ON"
- } {0 {}}
- do_test shell1-3.23b.3 {
- catchcmd "test.db" ".stats OFF"
- } {0 {}}
- do_test shell1-3.23b.4 {
- # too many arguments
- catchcmd "test.db" ".stats OFF BAD"
- } {1 {Error: unknown command or invalid arguments: "stats". Enter ".help" for help}}
- # .tables ?TABLE? List names of tables
- # If TABLE specified, only list tables matching
- # LIKE pattern TABLE.
- do_test shell1-3.24.1 {
- catchcmd "test.db" ".tables"
- } {0 {}}
- do_test shell1-3.24.2 {
- catchcmd "test.db" ".tables FOO"
- } {0 {}}
- do_test shell1-3.24.3 {
- # too many arguments
- catchcmd "test.db" ".tables FOO BAD"
- } {1 {Error: unknown command or invalid arguments: "tables". Enter ".help" for help}}
- # .timeout MS Try opening locked tables for MS milliseconds
- do_test shell1-3.25.1 {
- catchcmd "test.db" ".timeout"
- } {1 {Error: unknown command or invalid arguments: "timeout". Enter ".help" for help}}
- do_test shell1-3.25.2 {
- catchcmd "test.db" ".timeout zzz"
- # this should be treated the same as a '0' timeout
- } {0 {}}
- do_test shell1-3.25.3 {
- catchcmd "test.db" ".timeout 1"
- } {0 {}}
- do_test shell1-3.25.4 {
- # too many arguments
- catchcmd "test.db" ".timeout 1 BAD"
- } {1 {Error: unknown command or invalid arguments: "timeout". Enter ".help" for help}}
- # .width NUM NUM ... Set column widths for "column" mode
- do_test shell1-3.26.1 {
- catchcmd "test.db" ".width"
- } {1 {Error: unknown command or invalid arguments: "width". Enter ".help" for help}}
- do_test shell1-3.26.2 {
- catchcmd "test.db" ".width xxx"
- # this should be treated the same as a '0' width for col 1
- } {0 {}}
- do_test shell1-3.26.3 {
- catchcmd "test.db" ".width xxx yyy"
- # this should be treated the same as a '0' width for col 1 and 2
- } {0 {}}
- do_test shell1-3.26.4 {
- catchcmd "test.db" ".width 1 1"
- # this should be treated the same as a '1' width for col 1 and 2
- } {0 {}}
- do_test shell1-3.26.5 {
- catchcmd "test.db" ".mode column\n.width 10 -10\nSELECT 'abcdefg', 123456;"
- # this should be treated the same as a '1' width for col 1 and 2
- } {0 {abcdefg 123456}}
- do_test shell1-3.26.6 {
- catchcmd "test.db" ".mode column\n.width -10 10\nSELECT 'abcdefg', 123456;"
- # this should be treated the same as a '1' width for col 1 and 2
- } {0 { abcdefg 123456 }}
- # .timer ON|OFF Turn the CPU timer measurement on or off
- do_test shell1-3.27.1 {
- catchcmd "test.db" ".timer"
- } {1 {Error: unknown command or invalid arguments: "timer". Enter ".help" for help}}
- do_test shell1-3.27.2 {
- catchcmd "test.db" ".timer ON"
- } {0 {}}
- do_test shell1-3.27.3 {
- catchcmd "test.db" ".timer OFF"
- } {0 {}}
- do_test shell1-3.27.4 {
- # too many arguments
- catchcmd "test.db" ".timer OFF BAD"
- } {1 {Error: unknown command or invalid arguments: "timer". Enter ".help" for help}}
- do_test shell1-3-28.1 {
- catchcmd test.db \
- ".log stdout\nSELECT coalesce(sqlite_log(123,'hello'),'456');"
- } "0 {(123) hello\n456}"
- do_test shell1-3-29.1 {
- catchcmd "test.db" ".print this is a test"
- } {0 {this is a test}}
- # dot-command argument quoting
- do_test shell1-3-30.1 {
- catchcmd {test.db} {.print "this\"is'a\055test" 'this\"is\\a\055test'}
- } {0 {this"is'a-test this\"is\\a\055test}}
- do_test shell1-3-31.1 {
- catchcmd {test.db} {.print "this\nis\ta\\test" 'this\nis\ta\\test'}
- } [list 0 "this\nis\ta\\test this\\nis\\ta\\\\test"]
- # Test the output of the ".dump" command
- #
- do_test shell1-4.1 {
- db close
- forcedelete test.db
- sqlite3 db test.db
- db eval {
- PRAGMA encoding=UTF16;
- CREATE TABLE t1(x);
- INSERT INTO t1 VALUES(null), (''), (1), (2.25), ('hello'), (x'807f');
- }
- catchcmd test.db {.dump}
- } {0 {PRAGMA foreign_keys=OFF;
- BEGIN TRANSACTION;
- CREATE TABLE t1(x);
- INSERT INTO "t1" VALUES(NULL);
- INSERT INTO "t1" VALUES('');
- INSERT INTO "t1" VALUES(1);
- INSERT INTO "t1" VALUES(2.25);
- INSERT INTO "t1" VALUES('hello');
- INSERT INTO "t1" VALUES(X'807F');
- COMMIT;}}
- # Test the output of ".mode insert"
- #
- do_test shell1-4.2 {
- catchcmd test.db ".mode insert t1\nselect * from t1;"
- } {0 {INSERT INTO t1 VALUES(NULL);
- INSERT INTO t1 VALUES('');
- INSERT INTO t1 VALUES(1);
- INSERT INTO t1 VALUES(2.25);
- INSERT INTO t1 VALUES('hello');
- INSERT INTO t1 VALUES(X'807f');}}
- # Test the output of ".mode tcl"
- #
- do_test shell1-4.3 {
- db close
- forcedelete test.db
- sqlite3 db test.db
- db eval {
- PRAGMA encoding=UTF8;
- CREATE TABLE t1(x);
- INSERT INTO t1 VALUES(null), (''), (1), (2.25), ('hello'), (x'807f');
- }
- catchcmd test.db ".mode tcl\nselect * from t1;"
- } {0 {""
- ""
- "1"
- "2.25"
- "hello"
- "\200\177"}}
- # Test the output of ".mode tcl" with multiple columns
- #
- do_test shell1-4.4 {
- db eval {
- CREATE TABLE t2(x,y);
- INSERT INTO t2 VALUES(null, ''), (1, 2.25), ('hello', x'807f');
- }
- catchcmd test.db ".mode tcl\nselect * from t2;"
- } {0 {"" ""
- "1" "2.25"
- "hello" "\200\177"}}
- # Test the output of ".mode tcl" with ".nullvalue"
- #
- do_test shell1-4.5 {
- catchcmd test.db ".mode tcl\n.nullvalue NULL\nselect * from t2;"
- } {0 {"NULL" ""
- "1" "2.25"
- "hello" "\200\177"}}
- # Test the output of ".mode tcl" with Tcl reserved characters
- #
- do_test shell1-4.6 {
- db eval {
- CREATE TABLE tcl1(x);
- INSERT INTO tcl1 VALUES('"'), ('['), (']'), ('\{'), ('\}'), (';'), ('$');
- }
- foreach {x y} [catchcmd test.db ".mode tcl\nselect * from tcl1;"] break
- list $x $y [llength $y]
- } {0 {"\""
- "["
- "]"
- "\\{"
- "\\}"
- ";"
- "$"} 7}
- finish_test
|