-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
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
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
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
-9f149fdc1c6af1c663b91c878ed1903f82f80245
\ No newline at end of file
+aa0490ccd4a820a707dfb4905e67c01ffb4f758b
\ No newline at end of file
** 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 <ctype.h>
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);
** 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"
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->iColumn<pEList->nExpr );
- 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->iColumn<pEList->nExpr );
+ 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);