diff --git a/manifest b/manifest index b376e03d69..535ec83417 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\suninitialized\svariable\sintroduced\sby\scheck-in\s(1202).\s(CVS\s1235) -D 2004-02-13T14:07:13 +C Fix\sa\sbug\sin\sthe\squery\sflattener\swhen\strying\sto\sfind\sthe\sdatatype\sof\sthe\nrowid\sof\sa\sview.\s\sAlso\sfix\sa\sproblem\swith\ssqlite_compile()\sand\sauthorization\nfailures.\s(CVS\s1236) +D 2004-02-13T16:22:23 F Makefile.in cfd75c46b335881999333a9e4b982fa8491f200b F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd @@ -26,7 +26,7 @@ F src/auth.c c59ad0dab501888f8b1fccc25e2f5965d2265116 F src/btree.c 9aefacf529226b5875b487d59e9be0224961ef3d F src/btree.h 41cb3ff6ebc3f6da2d0a074e39ff8c7a2287469f F src/btree_rb.c 32b2cb4285c0fbd53b89de021637b63d52257e54 -F src/build.c 2a02df7931cb0ea153c1e29324292cd943d4f73c +F src/build.c f25e98306518b76190c526bf970ebcda60919674 F src/copy.c 9e47975ea96751c658bcf1a0c4f0bb7c6ee61e73 F src/date.c c9d2bfd40b1c95f8f97d53a5eba981d7167c7b61 F src/delete.c 0778fe05df0a1d62ac27fd1a3dba237c186ff4d1 @@ -46,7 +46,7 @@ F src/parse.y 1e311dc6aae9261f8641abca9328dd6193083753 F src/pragma.c 89d62c31c6f0a43376fe8d20549b87a6d30c467a F src/printf.c 84e4ea4ba49cbbf930e95e82295127ad5843ae1f F src/random.c 775913e0b7fbd6295d21f12a7bd35b46387c44b2 -F src/select.c a3a203f9b68c899ac69dbc5fa11cd649fd8acd06 +F src/select.c da4f383736a5dacf7ff856de091ffd1ca9874623 F src/shell.c f6975f87264d04398c9ffa51117c6e3a7f4f4396 F src/sqlite.h.in 64f016cd5ce190643a0f47760188fdf4e0b2227e F src/sqliteInt.h c45fbae6278407111d7a00aa9280ddc0f51344ad @@ -184,7 +184,7 @@ F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604 F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4 -P 5fe8f02306cf1c0af2148835cee0df3003ad0874 -R 37f801315d07f57c3a703640bb77ce36 +P 9f149fdc1c6af1c663b91c878ed1903f82f80245 +R 0a1abd4879d35c7c70d8d469ebb2575b U drh -Z 05d7354095b873584dabb1ae129be199 +Z ccb3ee1ecce4c81620c08fbe0b8c5332 diff --git a/manifest.uuid b/manifest.uuid index 22137f05ec..cc79ba63e5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9f149fdc1c6af1c663b91c878ed1903f82f80245 \ No newline at end of file +aa0490ccd4a820a707dfb4905e67c01ffb4f758b \ No newline at end of file diff --git a/src/build.c b/src/build.c index c1c3478be2..a63aa527b6 100644 --- a/src/build.c +++ b/src/build.c @@ -23,7 +23,7 @@ ** ROLLBACK ** PRAGMA ** -** $Id: build.c,v 1.166 2004/02/12 18:46:39 drh Exp $ +** $Id: build.c,v 1.167 2004/02/13 16:22:23 drh Exp $ */ #include "sqliteInt.h" #include @@ -83,7 +83,14 @@ void sqliteExec(Parse *pParse){ if( sqlite_malloc_failed ) return; xCallback = pParse->xCallback; - if( xCallback==0 && pParse->useCallback ) xCallback = fakeCallback; + if( xCallback==0 ){ + if( pParse->useCallback ){ + xCallback = fakeCallback; + }else if( v==0 ){ + v = sqliteGetVdbe(pParse); + sqliteVdbeAddOp(v, OP_Halt, 0, 0); + } + } if( v && pParse->nErr==0 ){ FILE *trace = (db->flags & SQLITE_VdbeTrace)!=0 ? stdout : 0; sqliteVdbeTrace(v, trace); diff --git a/src/select.c b/src/select.c index 4b9c1bd35e..81b2bfbd1c 100644 --- a/src/select.c +++ b/src/select.c @@ -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.152 2004/02/12 15:31:21 drh Exp $ +** $Id: select.c,v 1.153 2004/02/13 16:22:23 drh Exp $ */ #include "sqliteInt.h" @@ -1526,25 +1526,29 @@ static int multiSelect(Parse *pParse, Select *p, int eDest, int iParm){ static void substExprList(ExprList*,int,ExprList*); /* Forward Decl */ static void substExpr(Expr *pExpr, int iTable, ExprList *pEList){ if( pExpr==0 ) return; - if( pExpr->op==TK_COLUMN && pExpr->iTable==iTable && pExpr->iColumn>=0 ){ - Expr *pNew; - assert( pEList!=0 && pExpr->iColumnnExpr ); - assert( pExpr->pLeft==0 && pExpr->pRight==0 && pExpr->pList==0 ); - pNew = pEList->a[pExpr->iColumn].pExpr; - assert( pNew!=0 ); - pExpr->op = pNew->op; - pExpr->dataType = pNew->dataType; - assert( pExpr->pLeft==0 ); - pExpr->pLeft = sqliteExprDup(pNew->pLeft); - assert( pExpr->pRight==0 ); - pExpr->pRight = sqliteExprDup(pNew->pRight); - assert( pExpr->pList==0 ); - pExpr->pList = sqliteExprListDup(pNew->pList); - pExpr->iTable = pNew->iTable; - pExpr->iColumn = pNew->iColumn; - pExpr->iAgg = pNew->iAgg; - sqliteTokenCopy(&pExpr->token, &pNew->token); - sqliteTokenCopy(&pExpr->span, &pNew->span); + if( pExpr->op==TK_COLUMN && pExpr->iTable==iTable ){ + if( pExpr->iColumn<0 ){ + pExpr->op = TK_NULL; + }else{ + Expr *pNew; + assert( pEList!=0 && pExpr->iColumnnExpr ); + assert( pExpr->pLeft==0 && pExpr->pRight==0 && pExpr->pList==0 ); + pNew = pEList->a[pExpr->iColumn].pExpr; + assert( pNew!=0 ); + pExpr->op = pNew->op; + pExpr->dataType = pNew->dataType; + assert( pExpr->pLeft==0 ); + pExpr->pLeft = sqliteExprDup(pNew->pLeft); + assert( pExpr->pRight==0 ); + pExpr->pRight = sqliteExprDup(pNew->pRight); + assert( pExpr->pList==0 ); + pExpr->pList = sqliteExprListDup(pNew->pList); + pExpr->iTable = pNew->iTable; + pExpr->iColumn = pNew->iColumn; + pExpr->iAgg = pNew->iAgg; + sqliteTokenCopy(&pExpr->token, &pNew->token); + sqliteTokenCopy(&pExpr->span, &pNew->span); + } }else{ substExpr(pExpr->pLeft, iTable, pEList); substExpr(pExpr->pRight, iTable, pEList);