]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a bug in the query flattener when trying to find the datatype of the
authordrh <drh@noemail.net>
Fri, 13 Feb 2004 16:22:22 +0000 (16:22 +0000)
committerdrh <drh@noemail.net>
Fri, 13 Feb 2004 16:22:22 +0000 (16:22 +0000)
rowid of a view.  Also fix a problem with sqlite_compile() and authorization
failures. (CVS 1236)

FossilOrigin-Name: aa0490ccd4a820a707dfb4905e67c01ffb4f758b

manifest
manifest.uuid
src/build.c
src/select.c

index b376e03d6951aebb12edf4ad172855086c1e0d06..535ec83417c9defead2420c521bd75664dab1e18 100644 (file)
--- 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
index 22137f05ec7c7ed547c4538e6033172467f77376..cc79ba63e59c78eca00383e3922f5ef25c765b90 100644 (file)
@@ -1 +1 @@
-9f149fdc1c6af1c663b91c878ed1903f82f80245
\ No newline at end of file
+aa0490ccd4a820a707dfb4905e67c01ffb4f758b
\ No newline at end of file
index c1c3478be284fcbaf1f511dc4d0604dd972e1e05..a63aa527b6d4898c9fef9d1d8386ab456c8b0b97 100644 (file)
@@ -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 <ctype.h>
@@ -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);
index 4b9c1bd35efe4a7401ac628e05fac8c7093e0e43..81b2bfbd1cc54e3e4446d704d747ba4dd406e050 100644 (file)
@@ -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->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);