sqlite/test/types3.test
drh 262addd9ab All tests in "make test" now pass with Tcl9, except for about 198 cases where
the error involves small differences in the rendering to floating point
values.

FossilOrigin-Name: 8e27f5326c69aa4fb6f3f1f42668ab1b08140ab0a614ac4a9d94679c8fb9734e
2024-07-30 20:39:05 +00:00

125 lines
3.4 KiB
Plaintext

# 2005 June 25
#
# 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.
#
#***********************************************************************
# This file implements regression tests for SQLite library. The focus
# of this file is testing the interaction of SQLite manifest types
# with Tcl dual-representations.
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
# A variable with only a string representation comes in as TEXT
do_test types3-1.1 {
set V [format %s xxxxx]
concat [tcl_variable_type V] [execsql {SELECT typeof(:V)}]
} {text}
# A variable with an integer representation comes in as INTEGER
do_test types3-1.2 {
set V [expr {int(1+2)}]
concat [tcl_variable_type V] [execsql {SELECT typeof(:V)}]
} {int integer}
set V [expr {1+12345678012345}]
if {[tcl_variable_type V]=="wideInt"} {
do_test types3-1.3 {
set V [expr {1+123456789012345}]
concat [tcl_variable_type V] [execsql {SELECT typeof(:V)}]
} {wideInt integer}
} else {
do_test types3-1.3 {
set V [expr {1+123456789012345}]
concat [tcl_variable_type V] [execsql {SELECT typeof(:V)}]
} {int integer}
}
# A double variable comes in as REAL
do_test types3-1.4 {
set V [expr {1.0+1}]
concat [tcl_variable_type V] [execsql {SELECT typeof(:V)}]
} {double real}
# A byte-array variable comes in a BLOB if it has no string representation
# or as TEXT if there is a string representation.
#
do_test types3-1.5 {
set V [binary format a3 abc]
concat [tcl_variable_type V] [execsql {SELECT typeof(:V)}]
} {bytearray blob}
do_test types3-1.6 {
set V "abc"
binary scan $V a3 x
concat [tcl_variable_type V] [execsql {SELECT typeof(:V)}]
} {bytearray text}
# Check to make sure return values are of the right types.
#
ifcapable bloblit {
do_test types3-2.1 {
set V [db one {SELECT x'616263'}]
tcl_variable_type V
} bytearray
}
do_test types3-2.2 {
set V [db one {SELECT 123}]
tcl_variable_type V
} int
set Vx [expr {1+wide(123456789123456)}]
do_test types3-2.3 {
set V [db one {SELECT 1234567890123456}]
tcl_variable_type V
} [tcl_variable_type Vx]
do_test types3-2.4.1 {
set V [db one {SELECT 1234567890123456.1}]
tcl_variable_type V
} double
do_test types3-2.4.2 {
set V [db one {SELECT 1234567890123.456}]
tcl_variable_type V
} double
do_test types3-2.5 {
set V [db one {SELECT '1234567890123456.0'}]
tcl_variable_type V
} {}
do_test types3-2.6 {
set V [db one {SELECT NULL}]
tcl_variable_type V
} {}
# See https://sqlite.org/forum/forumpost/3776b48e71
#
# On a text-affinity comparison of two values where one of
# the values has both MEM_Str and a numeric type like MEM_Int,
# make sure that only the MEM_Str representation is used.
#
sqlite3_create_function db
do_execsql_test types3-3.1 {
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(x TEXT PRIMARY KEY);
INSERT INTO t1 VALUES('1');
SELECT * FROM t1 WHERE NOT x=upper(1);
} {}
do_execsql_test types3-3.2 {
SELECT * FROM t1 WHERE NOT x=add_text_type(1);
} {}
do_execsql_test types3-3.3 {
SELECT * FROM t1 WHERE NOT x=add_int_type('1');
} {}
do_execsql_test types3-3.4 {
DELETE FROM t1;
INSERT INTO t1 VALUES(1.25);
SELECT * FROM t1 WHERE NOT x=add_real_type('1.25');
} {}
do_execsql_test types3-3.5 {
SELECT * FROM t1 WHERE NOT x=add_text_type(1.25);
} {}
finish_test