]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Update the typeof() operator to respect manifest types. (CVS 1450)
authordanielk1977 <danielk1977@noemail.net>
Mon, 24 May 2004 12:55:54 +0000 (12:55 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Mon, 24 May 2004 12:55:54 +0000 (12:55 +0000)
FossilOrigin-Name: 162cf42e33691f4c9ec3a25abcaa2bdcdca2b5e0

manifest
manifest.uuid
src/func.c
src/sqliteInt.h
test/bind.test
test/table.test
test/types.test

index f969f54ce2f7c561d7c4351f3498a3d86a0e267d..a9715549a3c7ef7beee069fa0549eeb023aad5ab 100644 (file)
--- a/manifest
+++ b/manifest
@@ -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
index 4daa42614deb81e2ff0ccda4ffcf091601f9baed..864e491c336c929922827ae8fcf9b7d430e6b23e 100644 (file)
@@ -1 +1 @@
-1e47d7384d5fdfceb6ec737c656f70be59ba5b01
\ No newline at end of file
+162cf42e33691f4c9ec3a25abcaa2bdcdca2b5e0
\ No newline at end of file
index ea30997a331a20b70655ef78fa65eb0e46311cbd..a5ded41f51bd00604c58c56c8a8ebffb71ecdbba 100644 (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);
 }
 
 /*
index 1c99bd80ee979bceb2b63422ded2a4e85af44e9f..7a518ca8e1e48fd74d81351faee2484add8b5919 100644 (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 */
index 76b36d671020858293e573bde42f3cd38cb53308..cd5c21a0bc8827f4f4bf0f03e3c95496f2f659ae 100644 (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;
index 461179c28dd2bfad082c637207c697ea92ea5bda..5367ac40465b2b234df76ed98b1792c015d27f3f 100644 (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
index e37bdb475370f82a1fefa830198f792774f548ab..7d9cbb67d4aac02cc7512d36fc02693c880e0e4f 100644 (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