Update the typeof() operator to respect manifest types. (CVS 1450)

FossilOrigin-Name: 162cf42e33691f4c9ec3a25abcaa2bdcdca2b5e0
This commit is contained in:
danielk1977 2004-05-24 12:55:54 +00:00
parent 51ad0ecd28
commit 35bb9d026e
7 changed files with 53 additions and 44 deletions

View File

@ -1,5 +1,5 @@
C Non-aggregate\sSQL\sfunctions\suse\ssqlite_value*\sinstead\sof\sconst\schar\s*\sfor\nargument\svalues.\s(CVS\s1449)
D 2004-05-24T12:39:02
C Update\sthe\stypeof()\soperator\sto\srespect\smanifest\stypes.\s(CVS\s1450)
D 2004-05-24T12:55:55
F Makefile.in ab7b0d5118e2da97bac66be8684a1034e3500f5a
F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@ -32,7 +32,7 @@ F src/date.c 64fd7169c7d599ec8eaa99121d59e27ddf3d783d
F src/delete.c 2e1dda38345416a1ea1c0a6468589a7472334dac
F src/encode.c a876af473d1d636faa3dca51c7571f2e007eea37
F src/expr.c 5b283e68bd6df365b7c2ad10bd04cc54c2b4b07c
F src/func.c 3690069d7490b8486f5e54da5c2064b747245730
F src/func.c c33bad759fa3088612b07caa268d4beb4cc92a38
F src/hash.c 440c2f8cb373ee1b4e13a0988489c7cd95d55b6f
F src/hash.h 762d95f1e567664d1eafc1687de755626be962fb
F src/insert.c e510d62d23b4de4d901e7ccbbe7833b7fb3b9570
@ -55,7 +55,7 @@ F src/random.c eff68e3f257e05e81eae6c4d50a51eb88beb4ff3
F src/select.c 7d77a8bed7eeac23216d42fc1be006fb4352fcdc
F src/shell.c ed4d237b3e52a0a42512bfcc53530e46de20c28f
F src/sqlite.h.in 258c3a11c9c47cf7302cd4e94c1cac296275bb9b
F src/sqliteInt.h e1191166ac9055d6c99c97771d3f35212ef2cff2
F src/sqliteInt.h 6498bd799288f0501527f7593356edee02e1b0a1
F src/table.c af14284fa36c8d41f6829e3f2819dce07d3e2de2
F src/tclsqlite.c c8b511645f98051f41b5e0d6c3a99feeed9aeeec
F src/test1.c 27a5994f6ce76d62162dac6d1d926deee70c73dd
@ -80,7 +80,7 @@ F test/attach2.test 5472d442bb2ef1ee587e0ae7472bb68b52509a38
F test/auth.test 5c4d95cdaf539c0c236e20ce1f71a93e7dde9185
F test/bigfile.test ea904b853ce2d703b16c5ce90e2b54951bc1ae81
F test/bigrow.test 8ab252dba108f12ad64e337b0f2ff31a807ac578
F test/bind.test 87a6c083da06b05c87a2a507ca5f566af0b53602
F test/bind.test 947eea896241b90bae0928e3a655bb5d7f0680bb
F test/btree.test 08e4093c78d2bc1d54e27266f8d17fed14751125
F test/btree2.test aa4a6d05b1ea90b1acaf83ba89039dd302a88635
F test/btree4.test 3797b4305694c7af6828675b0f4b1424b8ca30e4
@ -140,7 +140,7 @@ F test/select5.test c2a6c4a003316ee42cbbd689eebef8fdce0db2ac
F test/select6.test a9e31906e700e7c7592c4d0acfc022808f718baf
F test/sort.test 0ed7ff33d8435dde289342d0a5fed662f762f700
F test/subselect.test f0fea8cf9f386d416d64d152e3c65f9116d0f50f
F test/table.test 50e4534552d0385a0e59b3a6d7dde059ced02f83
F test/table.test 71f808817b50ae3a9a693a88b3ea003f1031cdbb
F test/tableapi.test e0c4cce61e58343caa84dab33fa6823cb35fe1e1
F test/tclsqlite.test a684fc191b81e6cded8a81263663d5a130fbb013
F test/temptable.test a770ba6308d7f7332fce985086b8e06bed6430c2
@ -153,7 +153,7 @@ F test/trigger1.test 4538c1c7d6bbca5dfe619ea6e1682b07ece95b21
F test/trigger2.test 0767ab30cb5a2c8402c8524f3d566b410b6f5263
F test/trigger3.test a95ccace88291449f5eae7139ec438a42f90654d
F test/trigger4.test 542afce45774e8f8e1130b96b8675f414d6e4bd8
F test/types.test e1e0d71c8e65f8aa5d9a36751f4c8cbce6f01f7a
F test/types.test 8fa51489d4765b8baa2d3c92de32aba06315a655
F test/types2.test 5d725fcb68dbd032c6d4950d568d75fa33872687
F test/unique.test 0e38d4cc7affeef2527720d1dafd1f6870f02f2b
F test/update.test b29bd9061a1150426dab6959806fcc73a41b1217
@ -202,7 +202,7 @@ F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604
F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da
F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
P a554bf6c7075839f760a2ff944ac61b32cab0821
R 584e2db8cb6f2477ffc6bd281b266ab4
P 1e47d7384d5fdfceb6ec737c656f70be59ba5b01
R e2f680e7baa92e0e16b93c2c89142f17
U danielk1977
Z 579d136717a5636755a59ce43f57b420
Z e9ca420be0cdabd35afa6fc3433fc6b4

View File

@ -1 +1 @@
1e47d7384d5fdfceb6ec737c656f70be59ba5b01
162cf42e33691f4c9ec3a25abcaa2bdcdca2b5e0

View File

@ -16,7 +16,7 @@
** sqliteRegisterBuildinFunctions() found at the bottom of the file.
** All other code has file scope.
**
** $Id: func.c,v 1.50 2004/05/24 12:39:02 danielk1977 Exp $
** $Id: func.c,v 1.51 2004/05/24 12:55:55 danielk1977 Exp $
*/
#include <ctype.h>
#include <math.h>
@ -59,8 +59,16 @@ static void minmaxFunc(sqlite_func *context, int argc, sqlite3_value **argv){
** Return the type of the argument.
*/
static void typeofFunc(sqlite_func *context, int argc, sqlite3_value **argv){
const char *z = 0;
assert( argc==2 );
sqlite3_set_result_string(context, sqlite3_value_data(argv[1]), -1);
switch( sqlite3_value_type(argv[0]) ){
case SQLITE3_NULL: z = "null" ; break;
case SQLITE3_INTEGER: z = "integer" ; break;
case SQLITE3_TEXT: z = "text" ; break;
case SQLITE3_FLOAT: z = "real" ; break;
case SQLITE3_BLOB: z = "blob" ; break;
}
sqlite3_set_result_string(context, z, -1);
}
/*

View File

@ -11,7 +11,7 @@
*************************************************************************
** Internal interface definitions for SQLite.
**
** @(#) $Id: sqliteInt.h,v 1.248 2004/05/24 07:04:26 danielk1977 Exp $
** @(#) $Id: sqliteInt.h,v 1.249 2004/05/24 12:55:55 danielk1977 Exp $
*/
#include "config.h"
#include "sqlite.h"
@ -464,7 +464,7 @@ struct sqlite {
** points to a linked list of these structures.
*/
struct FuncDef {
void (*xFunc)(sqlite_func*,int,const char**); /* Regular function */
void (*xFunc)(sqlite_func*,int,sqlite3_value**); /* Regular function */
void (*xStep)(sqlite_func*,int,const char**); /* Aggregate function step */
void (*xFinalize)(sqlite_func*); /* Aggregate function finializer */
signed char nArg; /* Number of arguments. -1 means unlimited */

View File

@ -11,7 +11,7 @@
# This file implements regression tests for SQLite library. The
# focus of this script testing the sqlite_bind API.
#
# $Id: bind.test,v 1.6 2004/05/21 10:08:55 danielk1977 Exp $
# $Id: bind.test,v 1.7 2004/05/24 12:55:55 danielk1977 Exp $
#
set testdir [file dirname $argv0]
@ -92,8 +92,8 @@ do_test bind-2.3 {
execsql {SELECT rowid, * FROM t1}
} {1 123 456 789 2 123 -2000000000 2000000000}
do_test bind-2.4 {
execsql {SELECT classof(a), classof(b), classof(c) FROM t1}
} {INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER}
execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
} {integer integer integer integer integer integer}
do_test bind-2.5 {
execsql {
DELETE FROM t1;
@ -110,8 +110,8 @@ do_test bind-3.1 {
execsql {SELECT rowid, * FROM t1}
} {1 32 -2000000000000 2000000000000}
do_test bind-3.2 {
execsql {SELECT classof(a), classof(b), classof(c) FROM t1}
} {INTEGER INTEGER INTEGER}
execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
} {integer integer integer}
do_test bind-3.3 {
execsql {
DELETE FROM t1;
@ -128,8 +128,8 @@ do_test bind-4.1 {
execsql {SELECT rowid, * FROM t1}
} {1 1234.1234 1e-05 123456789}
do_test bind-4.2 {
execsql {SELECT classof(a), classof(b), classof(c) FROM t1}
} {REAL REAL REAL}
execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
} {real real real}
do_test bind-4.3 {
execsql {
DELETE FROM t1;
@ -146,8 +146,8 @@ do_test bind-5.1 {
execsql {SELECT rowid, * FROM t1}
} {1 {} {} {}}
do_test bind-5.2 {
execsql {SELECT classof(a), classof(b), classof(c) FROM t1}
} {NULL NULL NULL}
execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
} {null null null}
do_test bind-5.3 {
execsql {
DELETE FROM t1;
@ -164,8 +164,8 @@ do_test bind-6.1 {
execsql {SELECT rowid, * FROM t1}
} {1 hello . world}
do_test bind-6.2 {
execsql {SELECT classof(a), classof(b), classof(c) FROM t1}
} {TEXT TEXT TEXT}
execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
} {text text text}
do_test bind-6.3 {
execsql {
DELETE FROM t1;
@ -182,8 +182,8 @@ do_test bind-7.1 {
execsql {SELECT rowid, * FROM t1}
} {1 hello {} world}
do_test bind-7.2 {
execsql {SELECT classof(a), classof(b), classof(c) FROM t1}
} {TEXT TEXT TEXT}
execsql {SELECT typeof(a), typeof(b), typeof(c) FROM t1}
} {text text text}
do_test bind-7.3 {
execsql {
DELETE FROM t1;

View File

@ -11,7 +11,7 @@
# This file implements regression tests for SQLite library. The
# focus of this file is testing the CREATE TABLE statement.
#
# $Id: table.test,v 1.23 2004/05/19 21:09:32 drh Exp $
# $Id: table.test,v 1.24 2004/05/24 12:55:55 danielk1977 Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@ -473,7 +473,8 @@ do_test table-10.13 {
} {1 {unknown column "x" in foreign key definition}}
# Test for the "typeof" function.
# Test for the "typeof" function. More tests for the
# typeof() function are found in bind.test and types.test.
#
do_test table-11.1 {
execsql {
@ -492,12 +493,12 @@ do_test table-11.1 {
typeof(e), typeof(f), typeof(g), typeof(h)
FROM t7 LIMIT 1;
}
} {numeric numeric text text text numeric text numeric}
} {integer null null null null null null null}
do_test table-11.2 {
execsql {
SELECT typeof(a+b), typeof(a||b), typeof(c+d), typeof(c||d)
FROM t7 LIMIT 1;
}
} {numeric text numeric text}
} {null null null null}
finish_test

View File

@ -12,7 +12,7 @@
# it tests that the different storage classes (integer, real, text etc.)
# all work correctly.
#
# $Id: types.test,v 1.5 2004/05/20 12:41:20 drh Exp $
# $Id: types.test,v 1.6 2004/05/24 12:55:55 danielk1977 Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@ -52,14 +52,14 @@ do_test types-1.1.0 {
# literal were inserted into a column with affinity INTEGER, NUMERIC, TEXT
# or NONE, respectively.
set values {
{ 5.0 INTEGER REAL TEXT REAL }
{ 5 INTEGER INTEGER TEXT INTEGER }
{ '5.0' INTEGER REAL TEXT TEXT }
{ '-5.0' INTEGER REAL TEXT TEXT }
{ '-5.0' INTEGER REAL TEXT TEXT }
{ '5' INTEGER INTEGER TEXT TEXT }
{ 'abc' TEXT TEXT TEXT TEXT }
{ NULL NULL NULL NULL NULL }
{ 5.0 integer real text real }
{ 5 integer integer text integer }
{ '5.0' integer real text text }
{ '-5.0' integer real text text }
{ '-5.0' integer real text text }
{ '5' integer integer text text }
{ 'abc' text text text text }
{ NULL null null null null }
}
# This code tests that the storage classes specified above (in the $values
@ -75,7 +75,7 @@ foreach val $values {
execsql "INSERT INTO t1 VALUES($lit, $lit, $lit, $lit);"
do_test types-1.1.$tnum {
execsql {
SELECT classof(i), classof(n), classof(t), classof(o) FROM t1;
SELECT typeof(i), typeof(n), typeof(t), typeof(o) FROM t1;
}
} [lrange $val 1 end]
incr tnum
@ -94,7 +94,7 @@ foreach val $values {
execsql "INSERT INTO t1 SELECT $lit, $lit, $lit, $lit;"
do_test types-1.2.$tnum {
execsql {
SELECT classof(i), classof(n), classof(t), classof(o) FROM t1;
SELECT typeof(i), typeof(n), typeof(t), typeof(o) FROM t1;
}
} [lrange $val 1 end]
incr tnum
@ -112,7 +112,7 @@ foreach val $values {
execsql "UPDATE t1 SET i = $lit, n = $lit, t = $lit, o = $lit;"
do_test types-1.3.$tnum {
execsql {
SELECT classof(i), classof(n), classof(t), classof(o) FROM t1;
SELECT typeof(i), typeof(n), typeof(t), typeof(o) FROM t1;
}
} [lrange $val 1 end]
incr tnum