Fix a problem with inserting zeroblob() into an indexed column. (CVS 3982)

FossilOrigin-Name: ccef5d2daaa5a88dd3f23666f022296ef42f9d73
This commit is contained in:
danielk1977 2007-05-11 07:08:28 +00:00
parent 4e05c83bc3
commit d908f5ab7f
4 changed files with 26 additions and 23 deletions

View File

@ -1,5 +1,5 @@
C Additional\sparsing\sbugs\sfixed.\s(CVS\s3981)
D 2007-05-11T01:44:51
C Fix\sa\sproblem\swith\sinserting\szeroblob()\sinto\san\sindexed\scolumn.\s(CVS\s3982)
D 2007-05-11T07:08:28
F Makefile.in 87b200ad9970907f76df734d29dff3d294c10935
F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@ -132,7 +132,7 @@ F src/update.c 3359041db390a8f856d67272f299600e2104f350
F src/utf.c be7c64eed83fa3c01e0c42905e1c311dcd1be704
F src/util.c 4f6bbcec2b2b1884d652b82c9f8949ede4618d68
F src/vacuum.c 8bd895d29e7074e78d4e80f948e35ddc9cf2beef
F src/vdbe.c 308c698ad96a43249e12cb5067a4a823a6dea307
F src/vdbe.c d1be8d8605608b6d7d925d40e1eb96e30d646fbc
F src/vdbe.h 001c5b257567c1d3de7feb2203aac71d0d7b16a3
F src/vdbeInt.h bddb7931fc1216fda6f6720e18d2a9b1e0f8fc96
F src/vdbeapi.c 3ca7808c67a10b5c20150108b431d520d141e93e
@ -248,7 +248,7 @@ F test/fts2l.test 4c53c89ce3919003765ff4fd8d98ecf724d97dd3
F test/fts2m.test 4b30142ead6f3ed076e880a2a464064c5ad58c51
F test/fts2n.test a70357e72742681eaebfdbe9007b87ff3b771638
F test/func.test bf30bac1c5ce10448ab739994268cf18f8b3fa30
F test/fuzz.test db1bffeeb367b0e9147a1822db5c8c17c6f0b2ab
F test/fuzz.test 1015e6a1452e14d36797977923593a938ba35d2f
F test/fuzz2.test fdbea571808441c12c91e9cd038eb77b4692d42b
F test/hook.test 7e7645fd9a033f79cce8fdff151e32715e7ec50a
F test/icu.test e6bfae7f625c88fd14df6f540fe835bdfc1e4329
@ -488,7 +488,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
P d146f01a02579339c5dc86bbe59f246bd6c05c63
R 7125d6d53e0b2202166323742c3b01c2
U drh
Z 23c6aad98fcd55bc5de6b8a43a789f0e
P d12a8924c6083cdff14990b4fd036ca386c2e34a
R 680b3290f2d024e3ae05a79ad5b14302
U danielk1977
Z 9cd69253fcac83ce88c7739ef57267d1

View File

@ -1 +1 @@
d12a8924c6083cdff14990b4fd036ca386c2e34a
ccef5d2daaa5a88dd3f23666f022296ef42f9d73

View File

@ -43,7 +43,7 @@
** in this file for details. If in doubt, do not deviate from existing
** commenting and indentation practices when changing or adding code.
**
** $Id: vdbe.c,v 1.615 2007/05/10 21:14:03 drh Exp $
** $Id: vdbe.c,v 1.616 2007/05/11 07:08:28 danielk1977 Exp $
*/
#include "sqliteInt.h"
#include "os.h"
@ -919,7 +919,7 @@ case OP_Pull: { /* no-push */
Deephemeralize(pTos);
for(i=0; i<pOp->p1; i++, pFrom++){
Deephemeralize(&pFrom[1]);
assert( (pFrom->flags & MEM_Ephem)==0 );
assert( (pFrom[1].flags & MEM_Ephem)==0 );
*pFrom = pFrom[1];
if( pFrom->flags & MEM_Short ){
assert( pFrom->flags & (MEM_Str|MEM_Blob) );
@ -2276,6 +2276,9 @@ case OP_MakeRecord: {
if( pRec->flags&MEM_Null ){
containsNull = 1;
}
if( pRec->flags&MEM_Zero && pRec->n>0 ){
sqlite3VdbeMemExpandBlob(pRec);
}
serial_type = sqlite3VdbeSerialType(pRec, file_format);
len = sqlite3VdbeSerialTypeLen(serial_type);
nData += len;
@ -2283,7 +2286,6 @@ case OP_MakeRecord: {
if( pRec->flags & MEM_Zero ){
/* Only pure zero-filled BLOBs can be input to this Opcode.
** We do not allow blobs with a prefix and a zero-filled tail. */
assert( pRec->n==0 );
nZero += pRec->u.i;
}else if( len ){
nZero = 0;
@ -3830,12 +3832,15 @@ case OP_IdxInsert: { /* no-push */
assert( p->apCsr[i]!=0 );
assert( pTos->flags & MEM_Blob );
if( (pCrsr = (pC = p->apCsr[i])->pCursor)!=0 ){
int nKey = pTos->n;
const char *zKey = pTos->z;
assert( pC->isTable==0 );
rc = sqlite3BtreeInsert(pCrsr, zKey, nKey, "", 0, 0, pOp->p2);
assert( pC->deferredMoveto==0 );
pC->cacheStatus = CACHE_STALE;
rc = sqlite3VdbeMemExpandBlob(pTos);
if( rc==SQLITE_OK ){
int nKey = pTos->n;
const char *zKey = pTos->z;
rc = sqlite3BtreeInsert(pCrsr, zKey, nKey, "", 0, 0, pOp->p2);
assert( pC->deferredMoveto==0 );
pC->cacheStatus = CACHE_STALE;
}
}
Release(pTos);
pTos--;

View File

@ -13,7 +13,7 @@
# (a.k.a. "fuzz") and sending it into the parser to try to generate
# errors.
#
# $Id: fuzz.test,v 1.4 2007/05/11 00:20:08 drh Exp $
# $Id: fuzz.test,v 1.5 2007/05/11 07:08:29 danielk1977 Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@ -135,13 +135,11 @@ do_test fuzz-1.6 {
do_test fuzz-1.7 {
execsql {
SELECT (
SELECT zeroblob(1000) FROM (
SELECT * FROM (SELECT 'first') ORDER BY NOT 'in'
)
SELECT ( SELECT zeroblob(1000) FROM (
SELECT * FROM (SELECT 'first') ORDER BY NOT 'in')
)
}
} {}
} [execsql {SELECT zeroblob(1000)}]
#----------------------------------------------------------------
# Test some fuzzily generated expressions.