1 2#pragma ident "%Z%%M% %I% %E% SMI" 3 4# 2001 September 15 5# 6# The author disclaims copyright to this source code. In place of 7# a legal notice, here is a blessing: 8# 9# May you do good and not evil. 10# May you find forgiveness for yourself and forgive others. 11# May you share freely, never taking more than you give. 12# 13#*********************************************************************** 14# This file implements regression tests for TCL interface to the 15# SQLite library. 16# 17# Actually, all tests are based on the TCL interface, so the main 18# interface is pretty well tested. This file contains some addition 19# tests for fringe issues that the main test suite does not cover. 20# 21# $Id: tclsqlite.test,v 1.20.2.1 2004/07/19 19:30:50 drh Exp $ 22 23set testdir [file dirname $argv0] 24source $testdir/tester.tcl 25 26# Check the error messages generated by tclsqlite 27# 28if {[sqlite -has-codec]} { 29 set r "sqlite_orig HANDLE FILENAME ?-key CODEC-KEY?" 30} else { 31 set r "sqlite HANDLE FILENAME ?MODE?" 32} 33do_test tcl-1.1 { 34 set v [catch {sqlite bogus} msg] 35 lappend v $msg 36} [list 1 "wrong # args: should be \"$r\""] 37do_test tcl-1.2 { 38 set v [catch {db bogus} msg] 39 lappend v $msg 40} {1 {bad option "bogus": must be authorizer, busy, changes, close, commit_hook, complete, errorcode, eval, function, last_insert_rowid, last_statement_changes, onecolumn, progress, rekey, timeout, or trace}} 41do_test tcl-1.3 { 42 execsql {CREATE TABLE t1(a int, b int)} 43 execsql {INSERT INTO t1 VALUES(10,20)} 44 set v [catch { 45 db eval {SELECT * FROM t1} data { 46 error "The error message" 47 } 48 } msg] 49 lappend v $msg 50} {1 {The error message}} 51do_test tcl-1.4 { 52 set v [catch { 53 db eval {SELECT * FROM t2} data { 54 error "The error message" 55 } 56 } msg] 57 lappend v $msg 58} {1 {no such table: t2}} 59do_test tcl-1.5 { 60 set v [catch { 61 db eval {SELECT * FROM t1} data { 62 break 63 } 64 } msg] 65 lappend v $msg 66} {0 {}} 67do_test tcl-1.6 { 68 set v [catch { 69 db eval {SELECT * FROM t1} data { 70 expr x* 71 } 72 } msg] 73 regsub {:.*$} $msg {} msg 74 lappend v $msg 75} {1 {syntax error in expression "x*"}} 76 77if {[sqlite -encoding]=="UTF-8" && [sqlite -tcl-uses-utf]} { 78 catch {unset ::result} 79 do_test tcl-2.1 { 80 execsql "CREATE TABLE t\u0123x(a int, b\u1235 float)" 81 execsql "PRAGMA table_info(t\u0123x)" 82 } "0 a int 0 {} 0 1 b\u1235 float 0 {} 0" 83 do_test tcl-2.2 { 84 execsql "INSERT INTO t\u0123x VALUES(1,2.3)" 85 db eval "SELECT * FROM t\u0123x" result break 86 set result(*) 87 } "a b\u1235" 88} 89 90if {[sqlite -encoding]=="iso8859" && [sqlite -tcl-uses-utf]} { 91 do_test tcl-2.1 { 92 execsql "CREATE TABLE t\251x(a int, b\306 float)" 93 execsql "PRAGMA table_info(t\251x)" 94 } "0 a int 0 {} 0 1 b\306 float 0 {} 0" 95 do_test tcl-2.2 { 96 execsql "INSERT INTO t\251x VALUES(1,2.3)" 97 db eval "SELECT * FROM t\251x" result break 98 set result(*) 99 } "a b\306" 100} 101 102# Test the onecolumn method 103# 104do_test tcl-3.1 { 105 execsql { 106 INSERT INTO t1 SELECT a*2, b*2 FROM t1; 107 INSERT INTO t1 SELECT a*2+1, b*2+1 FROM t1; 108 INSERT INTO t1 SELECT a*2+3, b*2+3 FROM t1; 109 } 110 set rc [catch {db onecolumn {SELECT * FROM t1 ORDER BY a}} msg] 111 lappend rc $msg 112} {0 10} 113do_test tcl-3.2 { 114 db onecolumn {SELECT * FROM t1 WHERE a<0} 115} {} 116do_test tcl-3.3 { 117 set rc [catch {db onecolumn} errmsg] 118 lappend rc $errmsg 119} {1 {wrong # args: should be "db onecolumn SQL"}} 120 121 122finish_test 123