]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix some issues with out-of-memory recovery. (CVS 4710)
authordrh <drh@noemail.net>
Sun, 13 Jan 2008 19:02:11 +0000 (19:02 +0000)
committerdrh <drh@noemail.net>
Sun, 13 Jan 2008 19:02:11 +0000 (19:02 +0000)
FossilOrigin-Name: 23181f86896e7c9e993e00032e735e67ee6b2e71

manifest
manifest.uuid
src/expr.c
src/select.c
src/trigger.c

index 84b6a5a032089f37ff051c5426ae7ee4d6c3468c..7b80d9ef2e24517b628ee134148354bd8969d98b 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C The\ssqlite3_trace()\scallback\snow\sprints\sa\smessage\sas\seach\strigger\sfires\nwithin\sa\sstatement.\s(CVS\s4709)
-D 2008-01-12T21:35:57
+C Fix\ssome\sissues\swith\sout-of-memory\srecovery.\s(CVS\s4710)
+D 2008-01-13T19:02:11
 F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7
 F Makefile.in 30789bf70614bad659351660d76b8e533f3340e9
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -92,7 +92,7 @@ F src/complete.c 4cf68fd75d60257524cbe74f87351b9848399131
 F src/date.c 49c5a6d2de6c12000905b4d36868b07d3011bbf6
 F src/delete.c 00e536847b8eedc5d35f89f7f38a8a7c1d2a22f9
 F src/experimental.c 1b2d1a6cd62ecc39610e97670332ca073c50792b
-F src/expr.c 14130c27fba6fa3c14dcfc4891c534a8ee71cc3c
+F src/expr.c be1018f2911bd93e6fc34f216ed263ce733569b6
 F src/func.c 996071cf0af9d967e58b69fce1909555059ebc7d
 F src/hash.c 45a7005aac044b6c86bd7e49c44bc15d30006d6c
 F src/hash.h 031cd9f915aff27e12262cb9eb570ac1b8326b53
@@ -131,7 +131,7 @@ F src/pragma.c b4e77e057990bb2c295c63327406d9bcbf6c9c08
 F src/prepare.c c31a879d6795f4765fd0b113675c6debbc96b7fd
 F src/printf.c eb27822ba2eec669161409ca31279a24c26ac910
 F src/random.c 4a22746501bf36b0a088c66e38dde5daba6a35da
-F src/select.c 34c138d90771a5919fa181f7ddde75277d6a9fc6
+F src/select.c 16ba6ec0b3de4971579e66964ba2f25e0b43c78b
 F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96
 F src/shell.c 5391e889384d2062249f668110d64ed16f601c4b
 F src/sqlite.h.in 2a7e3776534bbe6ff2cdc058f3abebe91e7e429f
@@ -163,7 +163,7 @@ F src/test_server.c a6ece6c835e7eae835054124e09e947e422b1ac5
 F src/test_tclvar.c b2d1115e4d489179d3f029e765211b2ad527ba59
 F src/test_thread.c e297dd41db0b249646e69f97d36ec13e56e8b730
 F src/tokenize.c a4e04438c11fed2c67ec47fe3edbef9cca2d1b48
-F src/trigger.c da3e11df34d34c4341d9417d8033facbae16d9e8
+F src/trigger.c 3a863b9952164ab5de58406c26daf06144bbddc4
 F src/update.c aad823f97a930e6982264299863837d4c6107d3b
 F src/utf.c ef4b7d83bae533b76c3e1bf635b113fdad86a736
 F src/util.c 05f31144bbd3f1a24f4139ae029c42545cb72624
@@ -606,7 +606,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
 F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P 426f31ecdd05d1179a2e49c2ca1666011cede9c6
-R 3435d52d4f2b4750bec1183c99c98b94
+P 110c000d86bd4a0b4b946c62d11a435426b02d16
+R f95030f95502c6367aca6894c92c5e05
 U drh
-Z 0d14628a3647710d605d98d6d56b6e09
+Z 562fbfe4435b61e96b57af5488c68d5b
index a8a5ebd4e0558f3e0b80fbd7363254201e252605..09b6698ccb25a6ec83b3f6f770129155d608f2eb 100644 (file)
@@ -1 +1 @@
-110c000d86bd4a0b4b946c62d11a435426b02d16
\ No newline at end of file
+23181f86896e7c9e993e00032e735e67ee6b2e71
\ No newline at end of file
index 9f272665717dc90fb7b94bd1074cee318d42aed4..52a0f29def096a4ca369e80b1212190c49e2ed4f 100644 (file)
@@ -12,7 +12,7 @@
 ** This file contains routines used for analyzing expressions and
 ** for generating VDBE code that evaluates expressions in SQLite.
 **
-** $Id: expr.c,v 1.344 2008/01/12 19:03:49 drh Exp $
+** $Id: expr.c,v 1.345 2008/01/13 19:02:11 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -2418,7 +2418,8 @@ int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){
 */
 int sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){
   int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
-  if( inReg!=target ){
+  assert( pParse->pVdbe || pParse->db->mallocFailed );
+  if( inReg!=target && pParse->pVdbe ){
     sqlite3VdbeAddOp2(pParse->pVdbe, (inReg>0 ? OP_SCopy : OP_Move), 
                       inReg, target);
   }
index f5547aa8cf35a379a09dcee02854db7989787af7..fa9f457631ac9e3cebc72502dd3b9919cbf1c3a1 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.400 2008/01/12 21:35:57 drh Exp $
+** $Id: select.c,v 1.401 2008/01/13 19:02:11 drh Exp $
 */
 #include "sqliteInt.h"
 
@@ -3540,7 +3540,7 @@ int sqlite3Select(
       flag = minMaxQuery(pParse, p);
       if( flag ){
         pMinMax = sqlite3ExprListDup(db, p->pEList->a[0].pExpr->pList);
-        if( pMinMax ){
+        if( pMinMax && !db->mallocFailed ){
           pMinMax->a[0].sortOrder = ((flag==ORDERBY_MIN)?0:1);
           pMinMax->a[0].pExpr->op = TK_COLUMN;
           pDel = pMinMax;
index 3d3348d7596cb1a300832af0f78de0f79ad84ac0..310d60f1baf2dad87c82019f8e2819a99d8dee8b 100644 (file)
@@ -765,6 +765,7 @@ int sqlite3CodeRowTrigger(
   u32 *piNewColMask    /* OUT: Mask of columns used from the NEW.* table */
 ){
   Trigger *p;
+  sqlite3 *db = pParse->db;
   TriggerStack trigStackEntry;
 
   trigStackEntry.oldColMask = 0;
@@ -777,7 +778,6 @@ int sqlite3CodeRowTrigger(
 
   for(p=pTab->pTrigger; p; p=p->pNext){
     int fire_this = 0;
-    sqlite3 *db = pParse->db;
 
     /* Determine whether we should code this trigger */
     if( 
@@ -808,7 +808,7 @@ int sqlite3CodeRowTrigger(
 
 #ifndef SQLITE_OMIT_TRACE
       sqlite3VdbeAddOp4(pParse->pVdbe, OP_Trace, 0, 0, 0,
-                        sqlite3_mprintf("-- TRIGGER %s", p->name),
+                        sqlite3MPrintf(db, "-- TRIGGER %s", p->name),
                         P4_DYNAMIC);
 #endif
       memset(&sNC, 0, sizeof(sNC));