]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
A couple of test cases and fixes for blob literals. (CVS 1474)
authordanielk1977 <danielk1977@noemail.net>
Thu, 27 May 2004 13:35:19 +0000 (13:35 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Thu, 27 May 2004 13:35:19 +0000 (13:35 +0000)
FossilOrigin-Name: 6d552af67cf6fa6935373ba39de5c47ebf613eb9

manifest
manifest.uuid
src/sqliteInt.h
src/tclsqlite.c
src/tokenize.c
src/util.c
src/vdbeaux.c
src/vdbemem.c

index 123e64a487ea9487fa8b9e2fd22feb3dfba3f9c2..757dde68a8cf9e2ef0abdda38d47b56c19ef13e1 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Alter\sthe\sTcl\seval\ssub-command\sso\sthat\sit\ssupports\sblobs.\s(CVS\s1473)
-D 2004-05-27T12:11:32
+C A\scouple\sof\stest\scases\sand\sfixes\sfor\sblob\sliterals.\s(CVS\s1474)
+D 2004-05-27T13:35:20
 F Makefile.in ab7b0d5118e2da97bac66be8684a1034e3500f5a
 F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
@@ -56,26 +56,26 @@ F src/random.c eff68e3f257e05e81eae6c4d50a51eb88beb4ff3
 F src/select.c 2ba142a490ab2777b6a086e7c0d078a952331109
 F src/shell.c ed4d237b3e52a0a42512bfcc53530e46de20c28f
 F src/sqlite.h.in cda883efb11c6f767eaf3fea06b3e3419d9cfe7f
-F src/sqliteInt.h dbf4fd06e89cdab13f4f1129d76bf79a38ec2b39
+F src/sqliteInt.h 9c528cc7a41efafb0443655d29eafd10d8378952
 F src/table.c af14284fa36c8d41f6829e3f2819dce07d3e2de2
-F src/tclsqlite.c 6fab79639917c37dce1ddb2e9dcf3bc1b09001ec
+F src/tclsqlite.c 877d0b96013a25b03ed6bd2d32917c42e84403bc
 F src/test1.c 08da53d31d5b3eb11ac988f933fc6efa508712e4
 F src/test2.c 6195a1ca2c8d0d2d93644e86da3289b403486872
 F src/test3.c 5e4a6d596f982f6f47a5f9f75ede9b4a3b739968
 F src/test4.c 34848a9fd31aa65857b20a8bfc03aff77d8c3426
 F src/test5.c 9a1f15133f6955f067c5246e564723b5f23ff221
-F src/tokenize.c 28ece63a104850f2e06bd7121aeb3449858a27f3
+F src/tokenize.c d40f90119182bf1a026a008453f28fcc6b101738
 F src/trigger.c 11afe9abfba13a2ba142944c797c952e162d117f
 F src/update.c 96461bcf4e946697e83c09c77c7e61b545a2f66e
 F src/utf.c 59b5c8f06a4384a9f64933d6c57a2de02ce3673b
-F src/util.c 179c1347c712dff6671fc5d2dc9d2b009b542a97
+F src/util.c d299404febd509556e720fbecadd880756b0f899
 F src/vacuum.c 8734f89742f246abd91dbd3e087fc153bddbfbad
 F src/vdbe.c 54a758cc50b7eb9fe67fab9f2804d3b900536538
 F src/vdbe.h e73f890e0f2a6c42b183d7d6937947930fe4fdeb
 F src/vdbeInt.h fab8bb7f7a7f4e0714d9b3217c3db97366e16b99
 F src/vdbeapi.c b0bb1f98c899ba00c8a5cbca612c2a28a1bb79de
-F src/vdbeaux.c f36130df1ceff0c461590304a3738cf9da506a0f
-F src/vdbemem.c 9deb5973516c42a93d500956bd09d50ead35644c
+F src/vdbeaux.c 5b886ac74a68e7e956259eba53e3d002a8ddc6a7
+F src/vdbemem.c b487e8a903012de1c0b7f603e8efeede2b51b21d
 F src/where.c efe5d25fe18cd7381722457898cd863e84097a0c
 F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242
 F test/attach.test cb9b884344e6cfa5e165965d5b1adea679a24c83
@@ -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 c9e3015faffb650d8dbf1f7f95a7057a36361bac
-R f916301fbb891efd9f50955fcfaa0d10
+P b5d5f0ad717ef43a9714dd1cc40e20d1b94a3e58
+R 7c513f920546909cc1b3f1b4f4017169
 U danielk1977
-Z c10836444240fdf809d1ebf5efde5c0a
+Z b0c4aedb51c268e31583548cc1d9df58
index 9840f247a24c144e5f4b952f957d2215218b3219..2e2eebdb44cf9de75e483a28eafa2278921911ce 100644 (file)
@@ -1 +1 @@
-b5d5f0ad717ef43a9714dd1cc40e20d1b94a3e58
\ No newline at end of file
+6d552af67cf6fa6935373ba39de5c47ebf613eb9
\ No newline at end of file
index 4b4b825f9449f2a7f59136fa1c1ba7a0a8f6daec..270d38382b3facefbf01ecf5e694eeba5a1a5d5b 100644 (file)
@@ -11,7 +11,7 @@
 *************************************************************************
 ** Internal interface definitions for SQLite.
 **
-** @(#) $Id: sqliteInt.h,v 1.254 2004/05/27 01:53:56 drh Exp $
+** @(#) $Id: sqliteInt.h,v 1.255 2004/05/27 13:35:20 danielk1977 Exp $
 */
 #include "config.h"
 #include "sqlite.h"
@@ -1351,3 +1351,4 @@ int sqlite3atoi64(const char*, i64*);
 void sqlite3Error(sqlite *, int, const char*,...);
 int sqlite3utfTranslate(const void *, int , u8 , void **, int *, u8);
 u8 sqlite3UtfReadBom(const void *zData, int nData);
+char *sqlite3HexToBlob(const char *z);
index a8dc7c09ba24a90674adbd7f22393ff5fa4d247d..29e6093037227951945f59e2e33a8b1033e69f3d 100644 (file)
@@ -11,7 +11,7 @@
 *************************************************************************
 ** A TCL Interface to SQLite
 **
-** $Id: tclsqlite.c,v 1.74 2004/05/27 12:11:32 danielk1977 Exp $
+** $Id: tclsqlite.c,v 1.75 2004/05/27 13:35:20 danielk1977 Exp $
 */
 #ifndef NO_TCL     /* Omit this whole file if TCL is unavailable */
 
@@ -815,10 +815,8 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
           if( SQLITE3_BLOB!=sqlite3_column_type(pStmt, i) ){
             pVal = Tcl_NewStringObj(sqlite3_column_text(pStmt, i), -1);
           }else{
-            pVal = Tcl_NewByteArrayObj(
-              sqlite3_column_blob(pStmt, i),
-              sqlite3_column_bytes(pStmt, i)
-            );
+            int bytes = sqlite3_column_bytes(pStmt, i);
+            pVal = Tcl_NewByteArrayObj(sqlite3_column_blob(pStmt, i), bytes);
           }
   
           if( objc==5 ){
index 122e614406c5e460ec9ccfcc2fb460ae3440ca64..77d7600031393ddf648ab1a3dce3be37877865fb 100644 (file)
@@ -15,7 +15,7 @@
 ** individual tokens and sends those tokens one-by-one over to the
 ** parser for analysis.
 **
-** $Id: tokenize.c,v 1.71 2004/05/27 09:28:43 danielk1977 Exp $
+** $Id: tokenize.c,v 1.72 2004/05/27 13:35:20 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 #include "os.h"
@@ -377,14 +377,19 @@ static int sqliteGetToken(const unsigned char *z, int *tokenType){
     }
     case 'x': case 'X': {
       if( z[1]=='\'' || z[1]=='"' ){
-        int delim = z[0];
-        for(i=1; z[i]; i++){
+        int delim = z[1];
+        *tokenType = TK_BLOB;
+        for(i=2; z[i]; i++){
           if( z[i]==delim ){
+            if( i%2 ) *tokenType = TK_ILLEGAL;
             break;
           }
+          if( !isxdigit(z[i]) ){
+            *tokenType = TK_ILLEGAL;
+            return i;
+          }
         }
         if( z[i] ) i++;
-        *tokenType = TK_BLOB;
         return i;
       }
       /* Otherwise fall through to the next case */
index 8f5334966e60f1ed26a407f0a61e3f0b33372a71..27c94bc020cbe37077311c05d73cae0f7f93c92b 100644 (file)
@@ -14,7 +14,7 @@
 ** This file contains functions for allocating memory, comparing
 ** strings, and stuff like that.
 **
-** $Id: util.c,v 1.91 2004/05/27 09:28:43 danielk1977 Exp $
+** $Id: util.c,v 1.92 2004/05/27 13:35:20 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 #include <stdarg.h>
@@ -1307,7 +1307,7 @@ char * sqlite3HexToBlob(const char *z){
 
   zBlob = (char *)sqliteMalloc(n/2);
 
-  for(i=0; i<n; i+=2){
+  for(i=0; i<n; i++){
     u8 c;
 
     if     ( z[i]>47 && z[i]<58 ) c = (z[i]-48)<<4;
@@ -1317,6 +1317,7 @@ char * sqlite3HexToBlob(const char *z){
       sqliteFree(zBlob);
       return 0;
     }
+    i++;
     if     ( z[i]>47 && z[i]<58 ) c += (z[i]-48);
     else if( z[i]>64 && z[i]<71 ) c += (z[i]-55);
     else if( z[i]>96 && z[i]<103 ) c += (z[i]-87);
@@ -1327,6 +1328,7 @@ char * sqlite3HexToBlob(const char *z){
 
     zBlob[i/2] = c;
   }
+  return zBlob;
 }
 
 
index 56155d903750d193bef0c4bbea77dc349faedc74..5028dc938188456fd625974e0b21f8859bd14a6c 100644 (file)
@@ -612,20 +612,22 @@ int sqlite3VdbeList(
 */
 static int translateOp(Op *pOp){
   if( pOp->opcode==OP_HexBlob ){
-    char *zBlob = sqlite3HexToBlob(pOp->p3);
-    if( !zBlob ){
-      if( sqlite3_malloc_failed ){
-        return SQLITE_NOMEM;
-      }
-      return SQLITE_ERROR;
-    }
     pOp->p1 = strlen(pOp->p3)/2;
-    if( pOp->p3type==P3_DYNAMIC ){
-      sqliteFree(pOp->p3);
+    if( pOp->p1 ){
+      char *zBlob = sqlite3HexToBlob(pOp->p3);
+      if( !zBlob ) return SQLITE_NOMEM;
+      if( pOp->p3type==P3_DYNAMIC ){
+        sqliteFree(pOp->p3);
+      }
+      pOp->p3 = zBlob;
+      pOp->p3type = P3_DYNAMIC;
+    }else{
+      pOp->p3type = P3_STATIC;
+      pOp->p3 = "";
     }
-    pOp->p3 = zBlob;
-    pOp->p3type = P3_DYNAMIC;
+    pOp->opcode = OP_Blob;
   }
+  return SQLITE_OK;
 }
 
 /*
@@ -699,7 +701,7 @@ void sqlite3VdbeMakeReady(
     }
   }
 #endif
-  {
+  if( !isExplain ){
     int i;
     for(i=0; i<p->nOp; i++){
       translateOp(&p->aOp[i]);
index 3cf07d58ba0b73c592b8c38a63d6fbafdff5032e..205150e03887d5a5742ec801a4076d2e207faf4f 100644 (file)
@@ -315,9 +315,9 @@ int sqlite3VdbeMemSetStr(
 
   pMem->z = (char *)z;
   if( eCopy ){
-    pMem->flags = MEM_Ephem|MEM_Str;
+    pMem->flags = MEM_Ephem;
   }else{
-    pMem->flags = MEM_Static|MEM_Str;
+    pMem->flags = MEM_Static;
   }
   pMem->enc = enc;
   pMem->type = enc==0 ? SQLITE3_BLOB : SQLITE3_TEXT;
@@ -328,6 +328,7 @@ int sqlite3VdbeMemSetStr(
       break;
 
     case TEXT_Utf8:
+      pMem->flags |= MEM_Str;
       if( n<0 ){
         pMem->n = strlen(z);
         pMem->flags |= MEM_Term;
@@ -336,6 +337,7 @@ int sqlite3VdbeMemSetStr(
 
     case TEXT_Utf16le:
     case TEXT_Utf16be:
+      pMem->flags |= MEM_Str;
       if( n<0 ){
         pMem->n = sqlite3utf16ByteLen(z,-1);
         pMem->flags |= MEM_Term;