Test cases and minor bugfixes for incremental blob APIs. (CVS 3907)

FossilOrigin-Name: e12c522383bd40af375a52d2e68612c4dc7fd4db
diff --git a/src/vdbeblob.c b/src/vdbeblob.c
index 7c55a63..b095a5e 100644
--- a/src/vdbeblob.c
+++ b/src/vdbeblob.c
@@ -10,7 +10,7 @@
 **
 *************************************************************************
 **
-** $Id: vdbeblob.c,v 1.3 2007/05/03 11:43:33 danielk1977 Exp $
+** $Id: vdbeblob.c,v 1.4 2007/05/03 16:31:26 danielk1977 Exp $
 */
 
 #include "sqliteInt.h"
@@ -43,7 +43,6 @@
   int flags,              /* True -> read/write access, false -> read-only */
   sqlite3_blob **ppBlob
 ){
-  int rc = SQLITE_OK;
   int nAttempt = 0;
   int iCol;               /* Index of zColumn in row-record */
 
@@ -83,6 +82,8 @@
   };
 
   Vdbe *v = 0;
+  int rc = SQLITE_OK;
+  char zErr[128] = {0};
 
   do {
     Parse sParse;
@@ -98,9 +99,12 @@
 
     pTab = sqlite3LocateTable(&sParse, zTable, zDb);
     if( !pTab ){
-      sqlite3Error(db, sParse.rc, "%s", sParse.zErrMsg);
+      if( sParse.zErrMsg ){
+        sqlite3_snprintf(sizeof(zErr), zErr, "%s", sParse.zErrMsg);
+        zErr[sizeof(zErr)-1] = '\0';
+      }
       sqliteFree(sParse.zErrMsg);
-      rc = sParse.rc;
+      rc = SQLITE_ERROR;
       sqlite3SafetyOff(db);
       goto blob_open_out;
     }
@@ -112,8 +116,7 @@
       }
     }
     if( iCol==pTab->nCol ){
-      sqlite3Error(db, SQLITE_ERROR, "no such column: %s", zColumn);
-      sqliteFree(sParse.zErrMsg);
+      sprintf(zErr, "no such column: \"%s\"", zColumn);
       rc = SQLITE_ERROR;
       sqlite3SafetyOff(db);
       goto blob_open_out;
@@ -162,6 +165,7 @@
     if( rc!=SQLITE_ROW ){
       nAttempt++;
       rc = sqlite3_finalize((sqlite3_stmt *)v);
+      sprintf(zErr, "no such rowid: %lld", iRow);
       v = 0;
     }
   } while( nAttempt<5 && rc==SQLITE_SCHEMA );
@@ -191,17 +195,15 @@
     pBlob->nByte = sqlite3VdbeSerialTypeLen(type);
     *ppBlob = (sqlite3_blob *)pBlob;
     rc = SQLITE_OK;
-  }else{
-    if( rc==SQLITE_DONE ){
-      rc = SQLITE_ERROR;
-    }
+  }else if( rc==SQLITE_OK ){
+    rc = SQLITE_ERROR;
   }
 
 blob_open_out:
   if( rc!=SQLITE_OK || sqlite3MallocFailed() ){
     sqlite3_finalize((sqlite3_stmt *)v);
   }
-  sqlite3Error(db, rc, "");
+  sqlite3Error(db, rc, zErr);
   return sqlite3ApiExit(db, rc);
 }