18df9185cSdrh# 2009 Nov 11 28df9185cSdrh# 38df9185cSdrh# The author disclaims copyright to this source code. In place of 48df9185cSdrh# a legal notice, here is a blessing: 58df9185cSdrh# 68df9185cSdrh# May you do good and not evil. 78df9185cSdrh# May you find forgiveness for yourself and forgive others. 88df9185cSdrh# May you share freely, never taking more than you give. 98df9185cSdrh# 108df9185cSdrh#*********************************************************************** 118df9185cSdrh# 128df9185cSdrh# The focus of this file is testing the CLI shell tool. 138df9185cSdrh# 148df9185cSdrh# $Id: shell2.test,v 1.7 2009/07/17 16:54:48 shaneh Exp $ 158df9185cSdrh# 168df9185cSdrh 178df9185cSdrh# Test plan: 188df9185cSdrh# 198df9185cSdrh# shell2-1.*: Misc. test of various tickets and reported errors. 208df9185cSdrh# 218df9185cSdrhset testdir [file dirname $argv0] 228df9185cSdrhsource $testdir/tester.tcl 23089555c8Sdanset CLI [test_find_cli] 248df9185cSdrhdb close 258df9185cSdrhforcedelete test.db test.db-journal test.db-wal 268df9185cSdrhsqlite3 db test.db 278df9185cSdrh 288df9185cSdrh 298df9185cSdrh#---------------------------------------------------------------------------- 308df9185cSdrh# shell2-1.*: Misc. test of various tickets and reported errors. 318df9185cSdrh# 328df9185cSdrh 338df9185cSdrh# Batch mode not creating databases. 348df9185cSdrh# Reported on mailing list by Ken Zalewski. 358df9185cSdrh# Ticket [aeff892c57]. 368df9185cSdrhdo_test shell2-1.1.1 { 379ac99313Smistachkin forcedelete foo.db 388df9185cSdrh set rc [ catchcmd "-batch foo.db" "CREATE TABLE t1(a);" ] 398df9185cSdrh set fexist [file exist foo.db] 408df9185cSdrh list $rc $fexist 418df9185cSdrh} {{0 {}} 1} 428df9185cSdrh 438df9185cSdrh# Shell silently ignores extra parameters. 448df9185cSdrh# Ticket [f5cb008a65]. 458df9185cSdrhdo_test shell2-1.2.1 { 466b7e47faSlarrybr catchcmdex {:memory: "select+3" "select+4"} 47ac5649a9Sdrh} {0 {3 486b7e47faSlarrybr4 496b7e47faSlarrybr}} 508df9185cSdrh 518df9185cSdrh# Test a problem reported on the mailing list. The shell was at one point 528df9185cSdrh# returning the generic SQLITE_ERROR message ("SQL error or missing database") 538df9185cSdrh# instead of the "too many levels..." message in the test below. 548df9185cSdrh# 558df9185cSdrhdo_test shell2-1.3 { 568df9185cSdrh catchcmd "-batch test.db" { 578df9185cSdrh PRAGMA recursive_triggers = ON; 588df9185cSdrh CREATE TABLE t5(a PRIMARY KEY, b, c); 598df9185cSdrh INSERT INTO t5 VALUES(1, 2, 3); 608df9185cSdrh CREATE TRIGGER au_tble AFTER UPDATE ON t5 BEGIN 618df9185cSdrh UPDATE OR IGNORE t5 SET a = new.a, c = 10; 628df9185cSdrh END; 638df9185cSdrh 648df9185cSdrh UPDATE OR REPLACE t5 SET a = 4 WHERE a = 1; 658df9185cSdrh } 66633c7982Sdrh} {1 {Runtime error near line 9: too many levels of trigger recursion}} 678df9185cSdrh 688df9185cSdrh 698df9185cSdrh 708df9185cSdrh# Shell not echoing all commands with echo on. 718df9185cSdrh# Ticket [eb620916be]. 728df9185cSdrh 738df9185cSdrh# Test with echo off 748df9185cSdrh# NB. whitespace is important 758df9185cSdrhdo_test shell2-1.4.1 { 769ac99313Smistachkin forcedelete foo.db 778df9185cSdrh catchcmd "foo.db" {CREATE TABLE foo(a); 788df9185cSdrhINSERT INTO foo(a) VALUES(1); 798df9185cSdrhSELECT * FROM foo;} 808df9185cSdrh} {0 1} 818df9185cSdrh 828df9185cSdrh# Test with echo on using command line option 838df9185cSdrh# NB. whitespace is important 848df9185cSdrhdo_test shell2-1.4.2 { 859ac99313Smistachkin forcedelete foo.db 868df9185cSdrh catchcmd "-echo foo.db" {CREATE TABLE foo(a); 878df9185cSdrhINSERT INTO foo(a) VALUES(1); 888df9185cSdrhSELECT * FROM foo;} 898df9185cSdrh} {0 {CREATE TABLE foo(a); 908df9185cSdrhINSERT INTO foo(a) VALUES(1); 918df9185cSdrhSELECT * FROM foo; 928df9185cSdrh1}} 938df9185cSdrh 948df9185cSdrh# Test with echo on using dot command 958df9185cSdrh# NB. whitespace is important 968df9185cSdrhdo_test shell2-1.4.3 { 979ac99313Smistachkin forcedelete foo.db 988df9185cSdrh catchcmd "foo.db" {.echo ON 998df9185cSdrhCREATE TABLE foo(a); 1008df9185cSdrhINSERT INTO foo(a) VALUES(1); 1018df9185cSdrhSELECT * FROM foo;} 1028df9185cSdrh} {0 {CREATE TABLE foo(a); 1038df9185cSdrhINSERT INTO foo(a) VALUES(1); 1048df9185cSdrhSELECT * FROM foo; 1058df9185cSdrh1}} 1068df9185cSdrh 1078df9185cSdrh# Test with echo on using dot command and 1088df9185cSdrh# turning off mid- processing. 1098df9185cSdrh# NB. whitespace is important 1108df9185cSdrhdo_test shell2-1.4.4 { 1119ac99313Smistachkin forcedelete foo.db 1128df9185cSdrh catchcmd "foo.db" {.echo ON 1138df9185cSdrhCREATE TABLE foo(a); 1148df9185cSdrh.echo OFF 1158df9185cSdrhINSERT INTO foo(a) VALUES(1); 1168df9185cSdrhSELECT * FROM foo;} 1178df9185cSdrh} {0 {CREATE TABLE foo(a); 1188df9185cSdrh.echo OFF 1198df9185cSdrh1}} 1208df9185cSdrh 1218df9185cSdrh# Test with echo on using dot command and 1228df9185cSdrh# multiple commands per line. 1238df9185cSdrh# NB. whitespace is important 1248df9185cSdrhdo_test shell2-1.4.5 { 1259ac99313Smistachkin forcedelete foo.db 1266b7e47faSlarrybr catchcmdex "foo.db" {.echo ON 1278df9185cSdrhCREATE TABLE foo1(a); 1288df9185cSdrhINSERT INTO foo1(a) VALUES(1); 1298df9185cSdrhCREATE TABLE foo2(b); 1308df9185cSdrhINSERT INTO foo2(b) VALUES(1); 1318df9185cSdrhSELECT * FROM foo1; SELECT * FROM foo2; 1328df9185cSdrhINSERT INTO foo1(a) VALUES(2); INSERT INTO foo2(b) VALUES(2); 1338df9185cSdrhSELECT * FROM foo1; SELECT * FROM foo2; 1348df9185cSdrh} 1358df9185cSdrh} {0 {CREATE TABLE foo1(a); 1368df9185cSdrhINSERT INTO foo1(a) VALUES(1); 1378df9185cSdrhCREATE TABLE foo2(b); 1388df9185cSdrhINSERT INTO foo2(b) VALUES(1); 1398df9185cSdrhSELECT * FROM foo1; SELECT * FROM foo2; 1408df9185cSdrh1 1418df9185cSdrh1 1428df9185cSdrhINSERT INTO foo1(a) VALUES(2); INSERT INTO foo2(b) VALUES(2); 1438df9185cSdrhSELECT * FROM foo1; SELECT * FROM foo2; 1448df9185cSdrh1 1458df9185cSdrh2 1468df9185cSdrh1 1478df9185cSdrh2 1488df9185cSdrh}} 1498df9185cSdrh 150849a9d92Sdrh# Test with echo on and headers on using dot command and 151849a9d92Sdrh# multiple commands per line. 1528df9185cSdrh# NB. whitespace is important 1538df9185cSdrhdo_test shell2-1.4.6 { 1548df9185cSdrh forcedelete foo.db 1558df9185cSdrh catchcmdex "foo.db" {.echo ON 1568df9185cSdrh.headers ON 1579ac99313SmistachkinCREATE TABLE foo1(a); 1586b7e47faSlarrybrINSERT INTO foo1(a) VALUES(1); 1598df9185cSdrhCREATE TABLE foo2(b); 1608df9185cSdrhINSERT INTO foo2(b) VALUES(1); 1618df9185cSdrhSELECT * FROM foo1; SELECT * FROM foo2; 1628df9185cSdrhINSERT INTO foo1(a) VALUES(2); INSERT INTO foo2(b) VALUES(2); 1638df9185cSdrhSELECT * FROM foo1; SELECT * FROM foo2; 1648df9185cSdrh} 1658df9185cSdrh} {0 {.headers ON 1668df9185cSdrhCREATE TABLE foo1(a); 1678df9185cSdrhINSERT INTO foo1(a) VALUES(1); 1688df9185cSdrhCREATE TABLE foo2(b); 1698df9185cSdrhINSERT INTO foo2(b) VALUES(1); 1708df9185cSdrhSELECT * FROM foo1; SELECT * FROM foo2; 1718df9185cSdrha 1728df9185cSdrh1 1738df9185cSdrhb 1748df9185cSdrh1 1758df9185cSdrhINSERT INTO foo1(a) VALUES(2); INSERT INTO foo2(b) VALUES(2); 1768df9185cSdrhSELECT * FROM foo1; SELECT * FROM foo2; 1778df9185cSdrha 1788df9185cSdrh1 1798df9185cSdrh2 1808df9185cSdrhb 1818df9185cSdrh1 1828df9185cSdrh2 1838df9185cSdrh}} 1848df9185cSdrh 1858df9185cSdrh# Test for rejection of incomplete input at EOF. 1868df9185cSdrh# Reported at https://sqlite.org/forum/forumpost/718f489a43be3197 1878df9185cSdrhdo_test shell2-1.4.7 { 188849a9d92Sdrh catchcmd ":memory:" { 189849a9d92Sdrh SELECT 'unclosed;} 1908df9185cSdrh} {1 {Parse error near line 2: unrecognized token: "'unclosed;" 191*c6e2f2e6Slarrybr SELECT 'unclosed; 192*c6e2f2e6Slarrybr ^--- error here}} 193*c6e2f2e6Slarrybr 194*c6e2f2e6Slarrybrfinish_test 195*c6e2f2e6Slarrybr