shell2.test 4.6 KB

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