aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2009-04-10 14:27:59 +0000
committerdrh <drh@noemail.net>2009-04-10 14:27:59 +0000
commit73d34e92f485b20f5697bbcd3a3dd33f3314dcad (patch)
tree0f1db5d21f5f5f867672968ee9e66bb4694a5392 /src
parentf7590db0994d13dbba56635dc6e9c03de1442aa9 (diff)
downloadsqlite-73d34e92f485b20f5697bbcd3a3dd33f3314dcad.tar.gz
sqlite-73d34e92f485b20f5697bbcd3a3dd33f3314dcad.zip
Simplifications and additional comments on the sqlite3_get_table()
implementation. Changes to facilitate full branch test coverage. (CVS 6482) FossilOrigin-Name: 57e3e6b3cb54e6626bee41a084c927ee264b6d03
Diffstat (limited to 'src')
-rw-r--r--src/table.c33
1 files changed, 15 insertions, 18 deletions
diff --git a/src/table.c b/src/table.c
index c57ac1772..cf0a3ee0b 100644
--- a/src/table.c
+++ b/src/table.c
@@ -16,7 +16,7 @@
** These routines are in a separate files so that they will not be linked
** if they are not used.
**
-** $Id: table.c,v 1.39 2009/01/19 20:49:10 drh Exp $
+** $Id: table.c,v 1.40 2009/04/10 14:28:00 drh Exp $
*/
#include "sqliteInt.h"
#include <stdlib.h>
@@ -29,14 +29,13 @@
** to the callback function is uses to build the result.
*/
typedef struct TabResult {
- char **azResult;
- char *zErrMsg;
- int nResult;
- int nAlloc;
- int nRow;
- int nColumn;
- int nData;
- int rc;
+ char **azResult; /* Accumulated output */
+ char *zErrMsg; /* Error message text, if an error occurs */
+ int nAlloc; /* Slots allocated for azResult[] */
+ int nRow; /* Number of rows in the result */
+ int nColumn; /* Number of columns in the result */
+ int nData; /* Slots used in azResult[]. (nRow+1)*nColumn */
+ int rc; /* Return code from sqlite3_exec() */
} TabResult;
/*
@@ -45,10 +44,10 @@ typedef struct TabResult {
** memory as necessary.
*/
static int sqlite3_get_table_cb(void *pArg, int nCol, char **argv, char **colv){
- TabResult *p = (TabResult*)pArg;
- int need;
- int i;
- char *z;
+ TabResult *p = (TabResult*)pArg; /* Result accumulator */
+ int need; /* Slots needed in p->azResult[] */
+ int i; /* Loop counter */
+ char *z; /* A single column of result */
/* Make sure there is enough space in p->azResult to hold everything
** we need to remember from this invocation of the callback.
@@ -58,9 +57,9 @@ static int sqlite3_get_table_cb(void *pArg, int nCol, char **argv, char **colv){
}else{
need = nCol;
}
- if( p->nData + need >= p->nAlloc ){
+ if( p->nData + need > p->nAlloc ){
char **azNew;
- p->nAlloc = p->nAlloc*2 + need + 1;
+ p->nAlloc = p->nAlloc*2 + need;
azNew = sqlite3_realloc( p->azResult, sizeof(char*)*p->nAlloc );
if( azNew==0 ) goto malloc_failed;
p->azResult = azNew;
@@ -134,7 +133,6 @@ int sqlite3_get_table(
if( pnRow ) *pnRow = 0;
if( pzErrMsg ) *pzErrMsg = 0;
res.zErrMsg = 0;
- res.nResult = 0;
res.nRow = 0;
res.nColumn = 0;
res.nData = 1;
@@ -168,13 +166,12 @@ int sqlite3_get_table(
}
if( res.nAlloc>res.nData ){
char **azNew;
- azNew = sqlite3_realloc( res.azResult, sizeof(char*)*(res.nData+1) );
+ azNew = sqlite3_realloc( res.azResult, sizeof(char*)*res.nData );
if( azNew==0 ){
sqlite3_free_table(&res.azResult[1]);
db->errCode = SQLITE_NOMEM;
return SQLITE_NOMEM;
}
- res.nAlloc = res.nData+1;
res.azResult = azNew;
}
*pazResult = &res.azResult[1];