-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
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
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
-b5d5f0ad717ef43a9714dd1cc40e20d1b94a3e58
\ No newline at end of file
+6d552af67cf6fa6935373ba39de5c47ebf613eb9
\ No newline at end of file
*************************************************************************
** 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"
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);
*************************************************************************
** 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 */
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 ){
** 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"
}
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 */
** 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>
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;
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);
zBlob[i/2] = c;
}
+ return zBlob;
}
*/
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;
}
/*
}
}
#endif
- {
+ if( !isExplain ){
int i;
for(i=0; i<p->nOp; i++){
translateOp(&p->aOp[i]);
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;
break;
case TEXT_Utf8:
+ pMem->flags |= MEM_Str;
if( n<0 ){
pMem->n = strlen(z);
pMem->flags |= MEM_Term;
case TEXT_Utf16le:
case TEXT_Utf16be:
+ pMem->flags |= MEM_Str;
if( n<0 ){
pMem->n = sqlite3utf16ByteLen(z,-1);
pMem->flags |= MEM_Term;