xref: /sqlite-3.40.0/test/shell2.test (revision c6e2f2e6)
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