aboutsummaryrefslogtreecommitdiff
path: root/src/backup.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2016-10-03 01:21:51 +0000
committerdrh <drh@noemail.net>2016-10-03 01:21:51 +0000
commitcb43a937e57113a21ee0b2ef52a532073c8d3a2d (patch)
tree71d34aeef018ea126e78b2eab4ca89b7115d055d /src/backup.c
parent1a7df58c1aae72f73c183ec7a48a19d773177ccb (diff)
downloadsqlite-cb43a937e57113a21ee0b2ef52a532073c8d3a2d.tar.gz
sqlite-cb43a937e57113a21ee0b2ef52a532073c8d3a2d.zip
Allocate Parse objects off of the stack where appropriate for a substantial
performance increase and a size reduction. FossilOrigin-Name: ea8affa9e453b201b479162f621b591e7a65a489
Diffstat (limited to 'src/backup.c')
-rw-r--r--src/backup.c22
1 files changed, 8 insertions, 14 deletions
diff --git a/src/backup.c b/src/backup.c
index eb8f15cc7..165144d96 100644
--- a/src/backup.c
+++ b/src/backup.c
@@ -83,22 +83,16 @@ static Btree *findBtree(sqlite3 *pErrorDb, sqlite3 *pDb, const char *zDb){
int i = sqlite3FindDbName(pDb, zDb);
if( i==1 ){
- Parse *pParse;
+ Parse sParse;
int rc = 0;
- pParse = sqlite3StackAllocZero(pErrorDb, sizeof(*pParse));
- if( pParse==0 ){
- sqlite3ErrorWithMsg(pErrorDb, SQLITE_NOMEM, "out of memory");
- rc = SQLITE_NOMEM_BKPT;
- }else{
- pParse->db = pDb;
- if( sqlite3OpenTempDatabase(pParse) ){
- sqlite3ErrorWithMsg(pErrorDb, pParse->rc, "%s", pParse->zErrMsg);
- rc = SQLITE_ERROR;
- }
- sqlite3DbFree(pErrorDb, pParse->zErrMsg);
- sqlite3ParserReset(pParse);
- sqlite3StackFree(pErrorDb, pParse);
+ memset(&sParse, 0, sizeof(sParse));
+ sParse.db = pDb;
+ if( sqlite3OpenTempDatabase(&sParse) ){
+ sqlite3ErrorWithMsg(pErrorDb, sParse.rc, "%s", sParse.zErrMsg);
+ rc = SQLITE_ERROR;
}
+ sqlite3DbFree(pErrorDb, sParse.zErrMsg);
+ sqlite3ParserReset(&sParse);
if( rc ){
return 0;
}