]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
A few more bugfixes. Test cases pass now. (CVS 1472)
authordanielk1977 <danielk1977@noemail.net>
Thu, 27 May 2004 10:30:52 +0000 (10:30 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Thu, 27 May 2004 10:30:52 +0000 (10:30 +0000)
FossilOrigin-Name: c9e3015faffb650d8dbf1f7f95a7057a36361bac

manifest
manifest.uuid
src/func.c
src/select.c
src/test1.c
src/vdbemem.c
test/capi3.test
test/func.test

index b333d406e131c2629db2967063d181fee71dce2c..fd9f36f69349adf0c85d3cc12813db8b0b5053c3 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Various\sbugfixes.\s68\sTest\scases\sstill\sfail.\s(CVS\s1471)
-D 2004-05-27T09:28:42
+C A\sfew\smore\sbugfixes.\sTest\scases\spass\snow.\s(CVS\s1472)
+D 2004-05-27T10:30:53
 F Makefile.in ab7b0d5118e2da97bac66be8684a1034e3500f5a
 F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@@ -32,7 +32,7 @@ F src/date.c 0eb922af5c5f5e2455f8dc2f98023ed3e04a857e
 F src/delete.c 66c5ab98cbad7e6b315fc997bfe6c8080784a701
 F src/encode.c a876af473d1d636faa3dca51c7571f2e007eea37
 F src/expr.c 3f43cae2c8cf51ea8ee2abbf4dcc900b1326c5d6
-F src/func.c 17303ed9137d7d4c5a738cb70b5300fc237217de
+F src/func.c 1fe0763675eb38b6e3992d3edfbec2271798b658
 F src/hash.c 440c2f8cb373ee1b4e13a0988489c7cd95d55b6f
 F src/hash.h 762d95f1e567664d1eafc1687de755626be962fb
 F src/insert.c dd117e8b3f50e943e6cf5fbcf4bbdc0b907b0b4c
@@ -53,13 +53,13 @@ F src/parse.y 1a39b21982af48cf5c61a4085eece9cab84f9b71
 F src/pragma.c f2b05b087a5764802296a28d7abdd75728beedee
 F src/printf.c ef750e8e2398ca7e8b58be991075f08c6a7f0e53
 F src/random.c eff68e3f257e05e81eae6c4d50a51eb88beb4ff3
-F src/select.c e90e2a147273cdcdb1ee9e14574ab28f04382e63
+F src/select.c 2ba142a490ab2777b6a086e7c0d078a952331109
 F src/shell.c ed4d237b3e52a0a42512bfcc53530e46de20c28f
 F src/sqlite.h.in cda883efb11c6f767eaf3fea06b3e3419d9cfe7f
 F src/sqliteInt.h dbf4fd06e89cdab13f4f1129d76bf79a38ec2b39
 F src/table.c af14284fa36c8d41f6829e3f2819dce07d3e2de2
 F src/tclsqlite.c 86daf7bf6ba715bf0f0c7a47beb1d947a15cb868
-F src/test1.c 32c2135b95c94c9a8155b6a471ccaa702778c3f8
+F src/test1.c 08da53d31d5b3eb11ac988f933fc6efa508712e4
 F src/test2.c 6195a1ca2c8d0d2d93644e86da3289b403486872
 F src/test3.c 5e4a6d596f982f6f47a5f9f75ede9b4a3b739968
 F src/test4.c 34848a9fd31aa65857b20a8bfc03aff77d8c3426
@@ -75,7 +75,7 @@ F src/vdbe.h e73f890e0f2a6c42b183d7d6937947930fe4fdeb
 F src/vdbeInt.h fab8bb7f7a7f4e0714d9b3217c3db97366e16b99
 F src/vdbeapi.c b0bb1f98c899ba00c8a5cbca612c2a28a1bb79de
 F src/vdbeaux.c f36130df1ceff0c461590304a3738cf9da506a0f
-F src/vdbemem.c 6e843650b8d49481e64e3dd47fe8fdba4ab94689
+F src/vdbemem.c 9deb5973516c42a93d500956bd09d50ead35644c
 F src/where.c efe5d25fe18cd7381722457898cd863e84097a0c
 F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242
 F test/attach.test cb9b884344e6cfa5e165965d5b1adea679a24c83
@@ -90,7 +90,7 @@ F test/btree4.test 3797b4305694c7af6828675b0f4b1424b8ca30e4
 F test/btree5.test 8e5ff32c02e685d36516c6499add9375fe1377f2
 F test/btree6.test a5ede6bfbbb2ec8b27e62813612c0f28e8f3e027
 F test/capi2.test 8fb64e8ab7f78b8254cd4d04bb96822167f731b2
-F test/capi3.test 4ac3a6c5f73317afc3fe1c183f715b20095264b4
+F test/capi3.test 3d4d431c3b889893504d59064a018642013fd740
 F test/conflict.test 0911bb2f079046914a6e9c3341b36658c4e2103e
 F test/copy.test f07ea8d60878da7a67416ab62f78e9706b9d3c45
 F test/crashtest1.c 09c1c7d728ccf4feb9e481671e29dda5669bbcc2
@@ -101,7 +101,7 @@ F test/enc2.test 669f46b4e298a22fb515cb52c55eb8dca57d8b4a
 F test/expr.test 8b62f3fcac64fbd5c3d43d7a7984245743dcbe65
 F test/fkey1.test d65c824459916249bee501532d6154ddab0b5db7
 F test/format3.test 149cc166c97923fa60def047e90dd3fb32bba916
-F test/func.test e77f46af34c23081c3aacb84f25238b808bd7202
+F test/func.test 0ef8b2ae7ecc53067cd17cc1484a4a43392760d5
 F test/hook.test 1a67ce0cd64a6455d016962542f2822458dccc49
 F test/in.test 0de39b02ceeca90993b096822fb5a884661c5b47
 F test/index.test 3d50e19807186682de60c53f507a831c1b4a38a2
@@ -205,7 +205,7 @@ F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604
 F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da
 F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1
 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4
-P f33d15d95f195e26e1ef396158597a2caa06f374
-R 4eac96782e19eea7402fcc99da6a8349
+P 67a140cf78d99e38ccd94751c4f8ead1a2b96859
+R 382aedd8344dcd75ae00b092ce46368c
 U danielk1977
-Z b27cf317a49b62f4bb1221f66ee3bfcf
+Z f32afbbe0a3d491153953c08c35e38ee
index 9b982b3ef2b7d4e7bb7febae12eca511b0ae7492..e88bc0fa28cd0545854fc122d93606f39d4d1bfd 100644 (file)
@@ -1 +1 @@
-67a140cf78d99e38ccd94751c4f8ead1a2b96859
\ No newline at end of file
+c9e3015faffb650d8dbf1f7f95a7057a36361bac
\ No newline at end of file
index 31dd1f2fef3bc208941abbc8e380943cc38a0d09..c1b9863823eb47a16ca49a65119e338fde612138 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.60 2004/05/27 09:28:42 danielk1977 Exp $
+** $Id: func.c,v 1.61 2004/05/27 10:30:53 danielk1977 Exp $
 */
 #include <ctype.h>
 #include <math.h>
@@ -42,7 +42,9 @@ static void minmaxFunc(
   mask = (int)sqlite3_user_data(context);
   assert( mask==-1 || mask==0 );
   iBest = 0;
+  if( sqlite3_value_type(argv[0])==SQLITE3_NULL ) return;
   for(i=1; i<argc; i++){
+    if( sqlite3_value_type(argv[i])==SQLITE3_NULL ) return;
     if( (sqlite3MemCompare(argv[iBest], argv[i], 0)^mask)>=0 ){
       iBest = i;
     }
@@ -107,7 +109,9 @@ static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
   assert( argc==1 );
   switch( sqlite3_value_type(argv[0]) ){
     case SQLITE3_INTEGER: {
-      sqlite3_result_int64(context, -sqlite3_value_int64(argv[0]));
+      i64 iVal = sqlite3_value_int64(argv[0]);
+      if( iVal<0 ) iVal = iVal * -1;
+      sqlite3_result_int64(context, iVal);
       break;
     }
     case SQLITE3_NULL: {
@@ -115,7 +119,9 @@ static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
       break;
     }
     default: {
-      sqlite3_result_double(context, -sqlite3_value_double(argv[0]));
+      double rVal = sqlite3_value_double(argv[0]);
+      if( rVal<0 ) rVal = rVal * -1.0;
+      sqlite3_result_double(context, rVal);
       break;
     }
   }
index 36431d91e8797ce751c99bbba26046e194eb7d88..1a8d46176e9ad434aa3b1c861755d124651e1155 100644 (file)
@@ -12,7 +12,7 @@
 ** This file contains C code routines that are called by the parser
 ** to handle SELECT statements in SQLite.
 **
-** $Id: select.c,v 1.178 2004/05/26 16:54:44 drh Exp $
+** $Id: select.c,v 1.179 2004/05/27 10:30:53 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 
@@ -2119,6 +2119,7 @@ int sqlite3Select(
     case SRT_Union:
     case SRT_Except:
     case SRT_Discard:
+    case SRT_Set:
       pOrderBy = 0;
       break;
     default:
index 095e5b276386240c3b485fb0fb32ed7e80d13979..c3ec5ded157ec8fb820ceea077a0eff4a6286d2e 100644 (file)
@@ -13,7 +13,7 @@
 ** is not included in the SQLite library.  It is used for automated
 ** testing of the SQLite library.
 **
-** $Id: test1.c,v 1.62 2004/05/27 09:28:43 danielk1977 Exp $
+** $Id: test1.c,v 1.63 2004/05/27 10:31:10 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 #include "tcl.h"
@@ -1585,6 +1585,7 @@ static int test_stmt_utf8(
   sqlite3_stmt *pStmt;
   int col;
   const char *(*xFunc)(sqlite3_stmt*, int) = clientData;
+  const char *zRet;
 
   if( objc!=3 ){
     Tcl_AppendResult(interp, "wrong # args: should be \"", 
@@ -1594,7 +1595,10 @@ static int test_stmt_utf8(
 
   if( getStmtPointer(interp, Tcl_GetString(objv[1]), &pStmt) ) return TCL_ERROR;
   if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;
-  Tcl_SetResult(interp, (char *)xFunc(pStmt, col), 0);
+  zRet = xFunc(pStmt, col);
+  if( zRet ){
+    Tcl_SetResult(interp, (char *)zRet, 0);
+  }
   return TCL_OK;
 }
 
@@ -1627,8 +1631,10 @@ static int test_stmt_utf16(
   if( Tcl_GetIntFromObj(interp, objv[2], &col) ) return TCL_ERROR;
 
   zName16 = xFunc(pStmt, col);
-  pRet = Tcl_NewByteArrayObj(zName16, sqlite3utf16ByteLen(zName16, -1)+2);
-  Tcl_SetObjResult(interp, pRet);
+  if( zName16 ){
+    pRet = Tcl_NewByteArrayObj(zName16, sqlite3utf16ByteLen(zName16, -1)+2);
+    Tcl_SetObjResult(interp, pRet);
+  }
 
   return TCL_OK;
 }
index 05e304d1ec7e0680cf78e53a74f648dd8af0479e..3cf07d58ba0b73c592b8c38a63d6fbafdff5032e 100644 (file)
@@ -66,7 +66,7 @@ int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){
     int i;
     u8 *pFrom, *pTo;
     sqlite3VdbeMemMakeWriteable(pMem);
-    for(i=0, pFrom=pMem->z, pTo=&pMem->z[1]; i<pMem->n; i+=2, pFrom++, pTo++){
+    for(i=0, pFrom=pMem->z, pTo=&pMem->z[1]; i<pMem->n; i+=2, pFrom+=2,pTo+=2){
       u8 temp = *pFrom;
       *pFrom = *pTo;
       *pTo = temp;
@@ -179,7 +179,7 @@ int sqlite3VdbeMemStringify(Mem *pMem, int enc){
     ** FIX ME: It would be better if sqlite3_snprintf() could do UTF-16.
     */
     u8 *z = pMem->zShort;
-    if( fg & MEM_Real ){
+    if( fg & MEM_Real || (pMem->type==SQLITE3_FLOAT) ){
       sqlite3_snprintf(NBFS, z, "%.15g", pMem->r);
     }else{
       assert( fg & MEM_Int );
@@ -223,9 +223,7 @@ int sqlite3VdbeMemIntegerify(Mem *pMem){
   }else{
     pMem->i = 0;
   }
-  releaseMem(pMem);
-  pMem->flags = MEM_Int;
-  pMem->type = SQLITE3_INTEGER;
+  pMem->flags |= MEM_Int;
   return SQLITE_OK;
 }
 
@@ -235,9 +233,10 @@ int sqlite3VdbeMemIntegerify(Mem *pMem){
 ** converted into 0.0.
 */
 int sqlite3VdbeMemRealify(Mem *pMem){
-  if( pMem->flags & MEM_Int ){
+  if( pMem->flags & MEM_Real ){
+    /* Do nothing */
+  }else if( (pMem->flags & MEM_Int) && pMem->type!=SQLITE3_TEXT ){
     pMem->r = pMem->i;
-    pMem->flags |= MEM_Real;
   }else if( pMem->flags & (MEM_Str|MEM_Blob) ){
     if( sqlite3VdbeChangeEncoding(pMem, TEXT_Utf8)
        || sqlite3VdbeMemNulTerminate(pMem) ){
@@ -245,14 +244,10 @@ int sqlite3VdbeMemRealify(Mem *pMem){
     }
     assert( pMem->z );
     pMem->r = sqlite3AtoF(pMem->z, 0);
-    releaseMem(pMem);
-    pMem->flags = MEM_Real;
-    pMem->type = SQLITE3_FLOAT;
   }else{
     pMem->r = 0.0;
-    pMem->flags = MEM_Real;
-    pMem->type = SQLITE3_FLOAT;
   }
+  pMem->flags |= MEM_Real;
   return SQLITE_OK;
 }
 
index c3745e1a53cd427582937038d38e746d71857085..dd40738fbff37ea0ff1b0968a92d18d5425c48b0 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this script testing the callback-free C/C++ API.
 #
-# $Id: capi3.test,v 1.8 2004/05/27 09:28:44 danielk1977 Exp $
+# $Id: capi3.test,v 1.9 2004/05/27 10:31:12 danielk1977 Exp $
 #
 
 set testdir [file dirname $argv0]
@@ -328,21 +328,21 @@ do_test capi3-5.2 {
 } SQLITE_ROW
 
 check_header $STMT capi3-5.3 {a b c} {VARIANT BLOB VARCHAR(16)}
-check_data $STMT capi3-5.4 {INTEGER INTEGER TEXT} {1 2 3} {1 2 3} {1 2 3}
+check_data $STMT capi3-5.4 {INTEGER INTEGER TEXT} {1 2 3} {1.0 2.0 3.0} {1 2 3}
 
 do_test capi3-5.5 {
   sqlite3_step $STMT
 } SQLITE_ROW
 
 check_header $STMT capi3-5.6 {a b c} {VARIANT BLOB VARCHAR(16)}
-check_data $STMT capi3-5.7 {TEXT TEXT NULL} {0 0 0} {0 0 0} {one two {}}
+check_data $STMT capi3-5.7 {TEXT TEXT NULL} {0 0 0} {0.0 0.0 0.0} {one two {}}
 
 do_test capi3-5.8 {
   sqlite3_step $STMT
 } SQLITE_ROW
 
 check_header $STMT capi3-5.9 {a b c} {VARIANT BLOB VARCHAR(16)}
-check_data $STMT capi3-5.10 {REAL REAL TEXT} {1 1 1} {1.2 1.3 1.4} {1.2 1.3 1.4}
+check_data $STMT capi3-5.10 {FLOAT FLOAT TEXT} {1 1 1} {1.2 1.3 1.4} {1.2 1.3 1.4}
 
 do_test capi3-5.11 {
   sqlite3_step $STMT
index bdd2a31f77d8b8aafce22c020a855a75e71dd6ba..c3c84cead44b0857a7694c692d9bfff55cd99d3c 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is testing built-in functions.
 #
-# $Id: func.test,v 1.17 2004/05/14 11:00:53 danielk1977 Exp $
+# $Id: func.test,v 1.18 2004/05/27 10:31:12 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -173,7 +173,7 @@ do_test func-4.4.1 {
 } {1 {} 345 {} 67890}
 do_test func-4.4.2 {
   execsql {SELECT abs(t1) FROM tbl1}
-} {this program is free software}
+} {0 0 0 0 0}
 
 do_test func-4.5 {
   catchsql {SELECT round(a,b,c) FROM t1}