Files
sqlite/test/shell3.test
drh 3bd23b0d78 Fix the behavior dot-commands that appear as command line arguments to the
CLI so that their effect persists into subsequent commands on the command
line.  This fix also improves error messages caused by command line
arguments. 
[forum:/forumpost/2026-03-10T19:26:06z|Forum post 2026-03-10T19:26:06z].

FossilOrigin-Name: ff084ae341eab5c4ce9403defee03adc448c05f77648a954f0942a38f640080b
2026-03-10 21:01:59 +00:00

149 lines
3.6 KiB
Plaintext

# 2009 Dec 16
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#***********************************************************************
# TESTRUNNER: shell
#
# The focus of this file is testing the CLI shell tool.
#
# $Id: shell2.test,v 1.7 2009/07/17 16:54:48 shaneh Exp $
#
# Test plan:
#
# shell3-1.*: Basic tests for running SQL statments from command line.
# shell3-2.*: Basic tests for running SQL file from command line.
# shell3-3.*: Basic tests for processing odd SQL constructs.
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set CLI [test_cli_invocation]
db close
forcedelete test.db test.db-journal test.db-wal
sqlite3 db test.db
# There are inconsistencies in command-line argument quoting on Windows.
# In particular, individual applications are responsible for command-line
# parsing in Windows, not the shell. Depending on whether the sqlite3.exe
# program is compiled with MinGW or MSVC, the command-line parsing is
# different. This causes problems for the tests below. To avoid
# issues, these tests are disabled for windows.
#
if {$::tcl_platform(platform) eq "windows"} {
finish_test
return
}
#----------------------------------------------------------------------------
# shell3-1.*: Basic tests for running SQL statments from command line.
#
# Run SQL statement from command line
do_test shell3-1.1 {
forcedelete foo.db
set rc [ catchcmd "foo.db \"CREATE TABLE t1(a);\"" ]
set fexist [file exist foo.db]
list $rc $fexist
} {{0 {}} 1}
do_test shell3-1.2 {
catchcmd "foo.db" ".tables"
} {0 t1}
do_test shell3-1.3 {
catchcmd "foo.db \"DROP TABLE t1;\""
} {0 {}}
do_test shell3-1.4 {
catchcmd "foo.db" ".tables"
} {0 {}}
do_test shell3-1.5 {
catchcmd "foo.db \"CREATE TABLE t1(a); DROP TABLE t1;\""
} {0 {}}
do_test shell3-1.6 {
catchcmd "foo.db" ".tables"
} {0 {}}
do_test shell3-1.7 {
catchcmd "foo.db \"CREATE TABLE\""
} {1 {Parse error in 2nd command line argument: incomplete input}}
#----------------------------------------------------------------------------
# shell3-2.*: Basic tests for running SQL file from command line.
#
# Run SQL file from command line
do_test shell3-2.1 {
forcedelete foo.db
set rc [ catchcmd "foo.db" "CREATE TABLE t1(a);" ]
set fexist [file exist foo.db]
list $rc $fexist
} {{0 {}} 1}
do_test shell3-2.2 {
catchcmd "foo.db" ".tables"
} {0 t1}
do_test shell3-2.3 {
catchcmd "foo.db" "DROP TABLE t1;"
} {0 {}}
do_test shell3-2.4 {
catchcmd "foo.db" ".tables"
} {0 {}}
do_test shell3-2.5 {
catchcmd "foo.db" "CREATE TABLE t1(a); DROP TABLE t1;"
} {0 {}}
do_test shell3-2.6 {
catchcmd "foo.db" ".tables"
} {0 {}}
do_test shell3-2.7 {
catchcmd "foo.db" "CREATE TABLE"
} {1 {Parse error near line 1: incomplete input}}
#----------------------------------------------------------------------------
# shell3-3.*: Basic tests for processing odd SQL constructs.
#
# Run combinations of odd identifiers, comments, semicolon placement
do_test shell3-3.1 {
forcedelete foo.db
set rc [ catchcmd "foo.db" {CREATE TABLE t1("
a--.
" --x
); CREATE TABLE t2("a[""b""]");
.header on
INSERT INTO t1 VALUES ('
x''y');
INSERT INTO t2 VALUES ('
/*.
.*/ x
''y');
SELECT * from t1 limit 1;
SELECT * from t2 limit 1;
} ]
set fexist [file exist foo.db]
list $rc $fexist
} {{0 {
a--.
x'y
a["b"]
/*.
.*/ x
'y}} 1}
do_test shell3-3.2 {
catchcmd "" {
.open xyz.db
SELECT ;
}
} {1 {Parse error near line 3: near ";": syntax error
SELECT ;
^--- error here}}
finish_test