xref: /sqlite-3.40.0/test/tclsqlite.test (revision c023e03e)
1# 2001 September 15
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# This file implements regression tests for TCL interface to the
12# SQLite library.
13#
14# Actually, all tests are based on the TCL interface, so the main
15# interface is pretty well tested.  This file contains some addition
16# tests for fringe issues that the main test suite does not cover.
17#
18# $Id: tclsqlite.test,v 1.15 2003/08/23 22:40:54 drh Exp $
19
20set testdir [file dirname $argv0]
21source $testdir/tester.tcl
22
23# Check the error messages generated by tclsqlite
24#
25do_test tcl-1.1 {
26  set v [catch {sqlite bogus} msg]
27  lappend v $msg
28} {1 {wrong # args: should be "sqlite HANDLE FILENAME ?MODE?"}}
29do_test tcl-1.2 {
30  set v [catch {db bogus} msg]
31  lappend v $msg
32} {1 {bad option "bogus": must be authorizer, busy, changes, close, complete, errorcode, eval, function, last_insert_rowid, onecolumn, timeout, or trace}}
33do_test tcl-1.3 {
34  execsql {CREATE TABLE t1(a int, b int)}
35  execsql {INSERT INTO t1 VALUES(10,20)}
36  set v [catch {
37    db eval {SELECT * FROM t1} data {
38      error "The error message"
39    }
40  } msg]
41  lappend v $msg
42} {1 {The error message}}
43do_test tcl-1.4 {
44  set v [catch {
45    db eval {SELECT * FROM t2} data {
46      error "The error message"
47    }
48  } msg]
49  lappend v $msg
50} {1 {no such table: t2}}
51do_test tcl-1.5 {
52  set v [catch {
53    db eval {SELECT * FROM t1} data {
54      break
55    }
56  } msg]
57  lappend v $msg
58} {0 {}}
59do_test tcl-1.6 {
60  set v [catch {
61    db eval {SELECT * FROM t1} data {
62      expr x*
63    }
64  } msg]
65  regsub {:.*$} $msg {} msg
66  lappend v $msg
67} {1 {syntax error in expression "x*"}}
68
69if {[sqlite -encoding]=="UTF-8" && [sqlite -tcl-uses-utf]} {
70  do_test tcl-2.1 {
71    execsql "CREATE TABLE t\u0123x(a int, b\u1235 float)"
72    execsql "PRAGMA table_info(t\u0123x)"
73  } "0 a int 0 {} 0 1 b\u1235 float 0 {} 0"
74  do_test tcl-2.2 {
75    execsql "INSERT INTO t\u0123x VALUES(1,2.3)"
76    db eval "SELECT * FROM t\u0123x" result break
77    set result(*)
78  } "a b\u1235"
79}
80
81if {[sqlite -encoding]=="iso8859" && [sqlite -tcl-uses-utf]} {
82  do_test tcl-2.1 {
83    execsql "CREATE TABLE t\251x(a int, b\306 float)"
84    execsql "PRAGMA table_info(t\251x)"
85  } "0 a int 0 {} 0 1 b\306 float 0 {} 0"
86  do_test tcl-2.2 {
87    execsql "INSERT INTO t\251x VALUES(1,2.3)"
88    db eval "SELECT * FROM t\251x" result break
89    set result(*)
90  } "a b\306"
91}
92
93# Test the onecolumn method
94#
95do_test tcl-3.1 {
96  execsql {
97    INSERT INTO t1 SELECT a*2, b*2 FROM t1;
98    INSERT INTO t1 SELECT a*2+1, b*2+1 FROM t1;
99    INSERT INTO t1 SELECT a*2+3, b*2+3 FROM t1;
100  }
101  db onecolumn {SELECT * FROM t1 ORDER BY a}
102} {10}
103do_test tcl-3.2 {
104  db onecolumn {SELECT * FROM t1 WHERE a<0}
105} {}
106do_test tcl-3.3 {
107  set rc [catch {db onecolumn} errmsg]
108  lappend rc $errmsg
109} {1 {wrong # args: should be "db onecolumn SQL"}}
110
111
112finish_test
113