Annotation of embedaddon/sqlite3/tool/shell2.test, revision 1.1
1.1 ! misho 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: #
! 21:
! 22: package require sqlite3
! 23:
! 24: set CLI "./sqlite3"
! 25:
! 26: proc do_test {name cmd expected} {
! 27: puts -nonewline "$name ..."
! 28: set res [uplevel $cmd]
! 29: if {$res eq $expected} {
! 30: puts Ok
! 31: } else {
! 32: puts Error
! 33: puts " Got: $res"
! 34: puts " Expected: $expected"
! 35: exit
! 36: }
! 37: }
! 38:
! 39: proc execsql {sql} {
! 40: uplevel [list db eval $sql]
! 41: }
! 42:
! 43: proc catchsql {sql} {
! 44: set rc [catch {uplevel [list db eval $sql]} msg]
! 45: list $rc $msg
! 46: }
! 47:
! 48: proc catchcmd {db {cmd ""}} {
! 49: global CLI
! 50: set out [open cmds.txt w]
! 51: puts $out $cmd
! 52: close $out
! 53: set line "exec $CLI $db < cmds.txt"
! 54: set rc [catch { eval $line } msg]
! 55: list $rc $msg
! 56: }
! 57:
! 58: file delete -force test.db test.db.journal
! 59: sqlite3 db test.db
! 60:
! 61:
! 62: #----------------------------------------------------------------------------
! 63: # shell2-1.*: Misc. test of various tickets and reported errors.
! 64: #
! 65:
! 66: # Batch mode not creating databases.
! 67: # Reported on mailing list by Ken Zalewski.
! 68: # Ticket [aeff892c57].
! 69: do_test shell2-1.1.1 {
! 70: file delete -force foo.db
! 71: set rc [ catchcmd "-batch foo.db" "CREATE TABLE t1(a);" ]
! 72: set fexist [file exist foo.db]
! 73: list $rc $fexist
! 74: } {{0 {}} 1}
! 75:
! 76: # Shell silently ignores extra parameters.
! 77: # Ticket [f5cb008a65].
! 78: do_test shell2-1.2.1 {
! 79: set rc [catch { eval exec $CLI \":memory:\" \"select 3\" \"select 4\" } msg]
! 80: list $rc \
! 81: [regexp {Error: too many options: "select 4"} $msg]
! 82: } {1 1}
! 83:
! 84: # Test a problem reported on the mailing list. The shell was at one point
! 85: # returning the generic SQLITE_ERROR message ("SQL error or missing database")
! 86: # instead of the "too many levels..." message in the test below.
! 87: #
! 88: do_test shell2-1.3 {
! 89: catchcmd "-batch test.db" {
! 90: PRAGMA recursive_triggers = ON;
! 91: CREATE TABLE t5(a PRIMARY KEY, b, c);
! 92: INSERT INTO t5 VALUES(1, 2, 3);
! 93: CREATE TRIGGER au_tble AFTER UPDATE ON t5 BEGIN
! 94: UPDATE OR IGNORE t5 SET a = new.a, c = 10;
! 95: END;
! 96:
! 97: UPDATE OR REPLACE t5 SET a = 4 WHERE a = 1;
! 98: }
! 99: } {1 {Error: near line 9: too many levels of trigger recursion}}
! 100:
! 101:
! 102:
! 103: # Shell not echoing all commands with echo on.
! 104: # Ticket [eb620916be].
! 105:
! 106: # Test with echo off
! 107: # NB. whitespace is important
! 108: do_test shell2-1.4.1 {
! 109: file delete -force foo.db
! 110: catchcmd "foo.db" {CREATE TABLE foo(a);
! 111: INSERT INTO foo(a) VALUES(1);
! 112: SELECT * FROM foo;}
! 113: } {0 1}
! 114:
! 115: # Test with echo on using command line option
! 116: # NB. whitespace is important
! 117: do_test shell2-1.4.2 {
! 118: file delete -force foo.db
! 119: catchcmd "-echo foo.db" {CREATE TABLE foo(a);
! 120: INSERT INTO foo(a) VALUES(1);
! 121: SELECT * FROM foo;}
! 122: } {0 {CREATE TABLE foo(a);
! 123: INSERT INTO foo(a) VALUES(1);
! 124: SELECT * FROM foo;
! 125: 1}}
! 126:
! 127: # Test with echo on using dot command
! 128: # NB. whitespace is important
! 129: do_test shell2-1.4.3 {
! 130: file delete -force foo.db
! 131: catchcmd "foo.db" {.echo ON
! 132: CREATE TABLE foo(a);
! 133: INSERT INTO foo(a) VALUES(1);
! 134: SELECT * FROM foo;}
! 135: } {0 {CREATE TABLE foo(a);
! 136: INSERT INTO foo(a) VALUES(1);
! 137: SELECT * FROM foo;
! 138: 1}}
! 139:
! 140: # Test with echo on using dot command and
! 141: # turning off mid- processing.
! 142: # NB. whitespace is important
! 143: do_test shell2-1.4.4 {
! 144: file delete -force foo.db
! 145: catchcmd "foo.db" {.echo ON
! 146: CREATE TABLE foo(a);
! 147: .echo OFF
! 148: INSERT INTO foo(a) VALUES(1);
! 149: SELECT * FROM foo;}
! 150: } {0 {CREATE TABLE foo(a);
! 151: .echo OFF
! 152: 1}}
! 153:
! 154: # Test with echo on using dot command and
! 155: # multiple commands per line.
! 156: # NB. whitespace is important
! 157: do_test shell2-1.4.5 {
! 158: file delete -force foo.db
! 159: catchcmd "foo.db" {.echo ON
! 160: CREATE TABLE foo1(a);
! 161: INSERT INTO foo1(a) VALUES(1);
! 162: CREATE TABLE foo2(b);
! 163: INSERT INTO foo2(b) VALUES(1);
! 164: SELECT * FROM foo1; SELECT * FROM foo2;
! 165: INSERT INTO foo1(a) VALUES(2); INSERT INTO foo2(b) VALUES(2);
! 166: SELECT * FROM foo1; SELECT * FROM foo2;
! 167: }
! 168: } {0 {CREATE TABLE foo1(a);
! 169: INSERT INTO foo1(a) VALUES(1);
! 170: CREATE TABLE foo2(b);
! 171: INSERT INTO foo2(b) VALUES(1);
! 172: SELECT * FROM foo1;
! 173: 1
! 174: SELECT * FROM foo2;
! 175: 1
! 176: INSERT INTO foo1(a) VALUES(2);
! 177: INSERT INTO foo2(b) VALUES(2);
! 178: SELECT * FROM foo1;
! 179: 1
! 180: 2
! 181: SELECT * FROM foo2;
! 182: 1
! 183: 2}}
! 184:
! 185: # Test with echo on and headers on using dot command and
! 186: # multiple commands per line.
! 187: # NB. whitespace is important
! 188: do_test shell2-1.4.6 {
! 189: file delete -force foo.db
! 190: catchcmd "foo.db" {.echo ON
! 191: .headers ON
! 192: CREATE TABLE foo1(a);
! 193: INSERT INTO foo1(a) VALUES(1);
! 194: CREATE TABLE foo2(b);
! 195: INSERT INTO foo2(b) VALUES(1);
! 196: SELECT * FROM foo1; SELECT * FROM foo2;
! 197: INSERT INTO foo1(a) VALUES(2); INSERT INTO foo2(b) VALUES(2);
! 198: SELECT * FROM foo1; SELECT * FROM foo2;
! 199: }
! 200: } {0 {.headers ON
! 201: CREATE TABLE foo1(a);
! 202: INSERT INTO foo1(a) VALUES(1);
! 203: CREATE TABLE foo2(b);
! 204: INSERT INTO foo2(b) VALUES(1);
! 205: SELECT * FROM foo1;
! 206: a
! 207: 1
! 208: SELECT * FROM foo2;
! 209: b
! 210: 1
! 211: INSERT INTO foo1(a) VALUES(2);
! 212: INSERT INTO foo2(b) VALUES(2);
! 213: SELECT * FROM foo1;
! 214: a
! 215: 1
! 216: 2
! 217: SELECT * FROM foo2;
! 218: b
! 219: 1
! 220: 2}}
! 221:
! 222: puts "CLI tests completed successfully"
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>