1# 2009 Nov 11 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# 14# $Id: shell2.test,v 1.7 2009/07/17 16:54:48 shaneh Exp $ 15# 16 17# Test plan: 18# 19# shell2-1.*: Misc. test of various tickets and reported errors. 20# 21set testdir [file dirname $argv0] 22source $testdir/tester.tcl 23set CLI [test_find_cli] 24db close 25forcedelete test.db test.db-journal test.db-wal 26sqlite3 db test.db 27 28 29#---------------------------------------------------------------------------- 30# shell2-1.*: Misc. test of various tickets and reported errors. 31# 32 33# Batch mode not creating databases. 34# Reported on mailing list by Ken Zalewski. 35# Ticket [aeff892c57]. 36do_test shell2-1.1.1 { 37 forcedelete foo.db 38 set rc [ catchcmd "-batch foo.db" "CREATE TABLE t1(a);" ] 39 set fexist [file exist foo.db] 40 list $rc $fexist 41} {{0 {}} 1} 42 43# Shell silently ignores extra parameters. 44# Ticket [f5cb008a65]. 45do_test shell2-1.2.1 { 46 set rc [catch { eval exec $CLI \":memory:\" \"select+3\" \"select+4\" } msg] 47 list $rc $msg 48} {0 {3 494}} 50 51# Test a problem reported on the mailing list. The shell was at one point 52# returning the generic SQLITE_ERROR message ("SQL error or missing database") 53# instead of the "too many levels..." message in the test below. 54# 55do_test shell2-1.3 { 56 catchcmd "-batch test.db" { 57 PRAGMA recursive_triggers = ON; 58 CREATE TABLE t5(a PRIMARY KEY, b, c); 59 INSERT INTO t5 VALUES(1, 2, 3); 60 CREATE TRIGGER au_tble AFTER UPDATE ON t5 BEGIN 61 UPDATE OR IGNORE t5 SET a = new.a, c = 10; 62 END; 63 64 UPDATE OR REPLACE t5 SET a = 4 WHERE a = 1; 65 } 66} {1 {Error: near line 9: too many levels of trigger recursion}} 67 68 69 70# Shell not echoing all commands with echo on. 71# Ticket [eb620916be]. 72 73# Test with echo off 74# NB. whitespace is important 75do_test shell2-1.4.1 { 76 forcedelete foo.db 77 catchcmd "foo.db" {CREATE TABLE foo(a); 78INSERT INTO foo(a) VALUES(1); 79SELECT * FROM foo;} 80} {0 1} 81 82# Test with echo on using command line option 83# NB. whitespace is important 84do_test shell2-1.4.2 { 85 forcedelete foo.db 86 catchcmd "-echo foo.db" {CREATE TABLE foo(a); 87INSERT INTO foo(a) VALUES(1); 88SELECT * FROM foo;} 89} {0 {CREATE TABLE foo(a); 90INSERT INTO foo(a) VALUES(1); 91SELECT * FROM foo; 921}} 93 94# Test with echo on using dot command 95# NB. whitespace is important 96do_test shell2-1.4.3 { 97 forcedelete foo.db 98 catchcmd "foo.db" {.echo ON 99CREATE TABLE foo(a); 100INSERT INTO foo(a) VALUES(1); 101SELECT * FROM foo;} 102} {0 {CREATE TABLE foo(a); 103INSERT INTO foo(a) VALUES(1); 104SELECT * FROM foo; 1051}} 106 107# Test with echo on using dot command and 108# turning off mid- processing. 109# NB. whitespace is important 110do_test shell2-1.4.4 { 111 forcedelete foo.db 112 catchcmd "foo.db" {.echo ON 113CREATE TABLE foo(a); 114.echo OFF 115INSERT INTO foo(a) VALUES(1); 116SELECT * FROM foo;} 117} {0 {CREATE TABLE foo(a); 118.echo OFF 1191}} 120 121# Test with echo on using dot command and 122# multiple commands per line. 123# NB. whitespace is important 124do_test shell2-1.4.5 { 125 forcedelete foo.db 126 catchcmd "foo.db" {.echo ON 127CREATE TABLE foo1(a); 128INSERT INTO foo1(a) VALUES(1); 129CREATE TABLE foo2(b); 130INSERT INTO foo2(b) VALUES(1); 131SELECT * FROM foo1; SELECT * FROM foo2; 132INSERT INTO foo1(a) VALUES(2); INSERT INTO foo2(b) VALUES(2); 133SELECT * FROM foo1; SELECT * FROM foo2; 134} 135} {0 {CREATE TABLE foo1(a); 136INSERT INTO foo1(a) VALUES(1); 137CREATE TABLE foo2(b); 138INSERT INTO foo2(b) VALUES(1); 139SELECT * FROM foo1; 1401 141SELECT * FROM foo2; 1421 143INSERT INTO foo1(a) VALUES(2); 144INSERT INTO foo2(b) VALUES(2); 145SELECT * FROM foo1; 1461 1472 148SELECT * FROM foo2; 1491 1502 151}} 152 153# Test with echo on and headers on using dot command and 154# multiple commands per line. 155# NB. whitespace is important 156do_test shell2-1.4.6 { 157 forcedelete foo.db 158 catchcmd "foo.db" {.echo ON 159.headers ON 160CREATE TABLE foo1(a); 161INSERT INTO foo1(a) VALUES(1); 162CREATE TABLE foo2(b); 163INSERT INTO foo2(b) VALUES(1); 164SELECT * FROM foo1; SELECT * FROM foo2; 165INSERT INTO foo1(a) VALUES(2); INSERT INTO foo2(b) VALUES(2); 166SELECT * FROM foo1; SELECT * FROM foo2; 167} 168} {0 {.headers ON 169CREATE TABLE foo1(a); 170INSERT INTO foo1(a) VALUES(1); 171CREATE TABLE foo2(b); 172INSERT INTO foo2(b) VALUES(1); 173SELECT * FROM foo1; 174a 1751 176SELECT * FROM foo2; 177b 1781 179INSERT INTO foo1(a) VALUES(2); 180INSERT INTO foo2(b) VALUES(2); 181SELECT * FROM foo1; 182a 1831 1842 185SELECT * FROM foo2; 186b 1871 1882 189}} 190 191finish_test 192