123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- # 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.
- #
- # $Id: shell2.test,v 1.7 2009/07/17 16:54:48 shaneh Exp $
- #
- # Test plan:
- #
- # shell2-1.*: Misc. test of various tickets and reported errors.
- #
- 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
- #----------------------------------------------------------------------------
- # shell2-1.*: Misc. test of various tickets and reported errors.
- #
- # Batch mode not creating databases.
- # Reported on mailing list by Ken Zalewski.
- # Ticket [aeff892c57].
- do_test shell2-1.1.1 {
- forcedelete foo.db
- set rc [ catchcmd "-batch foo.db" "CREATE TABLE t1(a);" ]
- set fexist [file exist foo.db]
- list $rc $fexist
- } {{0 {}} 1}
- # Shell silently ignores extra parameters.
- # Ticket [f5cb008a65].
- do_test shell2-1.2.1 {
- set rc [catch { eval exec $CLI \":memory:\" \"select 3\" \"select 4\" } msg]
- list $rc \
- [regexp {Error: too many options: "select 4"} $msg]
- } {1 1}
- # Test a problem reported on the mailing list. The shell was at one point
- # returning the generic SQLITE_ERROR message ("SQL error or missing database")
- # instead of the "too many levels..." message in the test below.
- #
- do_test shell2-1.3 {
- catchcmd "-batch test.db" {
- PRAGMA recursive_triggers = ON;
- CREATE TABLE t5(a PRIMARY KEY, b, c);
- INSERT INTO t5 VALUES(1, 2, 3);
- CREATE TRIGGER au_tble AFTER UPDATE ON t5 BEGIN
- UPDATE OR IGNORE t5 SET a = new.a, c = 10;
- END;
- UPDATE OR REPLACE t5 SET a = 4 WHERE a = 1;
- }
- } {1 {Error: near line 9: too many levels of trigger recursion}}
- # Shell not echoing all commands with echo on.
- # Ticket [eb620916be].
- # Test with echo off
- # NB. whitespace is important
- do_test shell2-1.4.1 {
- forcedelete foo.db
- catchcmd "foo.db" {CREATE TABLE foo(a);
- INSERT INTO foo(a) VALUES(1);
- SELECT * FROM foo;}
- } {0 1}
- # Test with echo on using command line option
- # NB. whitespace is important
- do_test shell2-1.4.2 {
- forcedelete foo.db
- catchcmd "-echo foo.db" {CREATE TABLE foo(a);
- INSERT INTO foo(a) VALUES(1);
- SELECT * FROM foo;}
- } {0 {CREATE TABLE foo(a);
- INSERT INTO foo(a) VALUES(1);
- SELECT * FROM foo;
- 1}}
- # Test with echo on using dot command
- # NB. whitespace is important
- do_test shell2-1.4.3 {
- forcedelete foo.db
- catchcmd "foo.db" {.echo ON
- CREATE TABLE foo(a);
- INSERT INTO foo(a) VALUES(1);
- SELECT * FROM foo;}
- } {0 {CREATE TABLE foo(a);
- INSERT INTO foo(a) VALUES(1);
- SELECT * FROM foo;
- 1}}
- # Test with echo on using dot command and
- # turning off mid- processing.
- # NB. whitespace is important
- do_test shell2-1.4.4 {
- forcedelete foo.db
- catchcmd "foo.db" {.echo ON
- CREATE TABLE foo(a);
- .echo OFF
- INSERT INTO foo(a) VALUES(1);
- SELECT * FROM foo;}
- } {0 {CREATE TABLE foo(a);
- .echo OFF
- 1}}
- # Test with echo on using dot command and
- # multiple commands per line.
- # NB. whitespace is important
- do_test shell2-1.4.5 {
- forcedelete foo.db
- catchcmd "foo.db" {.echo ON
- CREATE TABLE foo1(a);
- INSERT INTO foo1(a) VALUES(1);
- CREATE TABLE foo2(b);
- INSERT INTO foo2(b) VALUES(1);
- SELECT * FROM foo1; SELECT * FROM foo2;
- INSERT INTO foo1(a) VALUES(2); INSERT INTO foo2(b) VALUES(2);
- SELECT * FROM foo1; SELECT * FROM foo2;
- }
- } {0 {CREATE TABLE foo1(a);
- INSERT INTO foo1(a) VALUES(1);
- CREATE TABLE foo2(b);
- INSERT INTO foo2(b) VALUES(1);
- SELECT * FROM foo1;
- 1
- SELECT * FROM foo2;
- 1
- INSERT INTO foo1(a) VALUES(2);
- INSERT INTO foo2(b) VALUES(2);
- SELECT * FROM foo1;
- 1
- 2
- SELECT * FROM foo2;
- 1
- 2}}
- # Test with echo on and headers on using dot command and
- # multiple commands per line.
- # NB. whitespace is important
- do_test shell2-1.4.6 {
- forcedelete foo.db
- catchcmd "foo.db" {.echo ON
- .headers ON
- CREATE TABLE foo1(a);
- INSERT INTO foo1(a) VALUES(1);
- CREATE TABLE foo2(b);
- INSERT INTO foo2(b) VALUES(1);
- SELECT * FROM foo1; SELECT * FROM foo2;
- INSERT INTO foo1(a) VALUES(2); INSERT INTO foo2(b) VALUES(2);
- SELECT * FROM foo1; SELECT * FROM foo2;
- }
- } {0 {.headers ON
- CREATE TABLE foo1(a);
- INSERT INTO foo1(a) VALUES(1);
- CREATE TABLE foo2(b);
- INSERT INTO foo2(b) VALUES(1);
- SELECT * FROM foo1;
- a
- 1
- SELECT * FROM foo2;
- b
- 1
- INSERT INTO foo1(a) VALUES(2);
- INSERT INTO foo2(b) VALUES(2);
- SELECT * FROM foo1;
- a
- 1
- 2
- SELECT * FROM foo2;
- b
- 1
- 2}}
- finish_test
|