-C If\scompiled\swith\sthe\s-DVDBE_PROFILE=1\soption,\sspecial\scode\sis\sinserted\sthat\nuses\sthe\spentium\sRDTSC\sinstruction\sto\scompute\svery\sprecise\sruntimes\son\sall\nVDBE\sopcodes.\s\s(This\sonly\sworks\son\si586\sprocessors,\sof\scourse.)\s\sThe\sresults\nare\swritten\sinto\sthe\svdbe_profile.out\sfile\sfor\sanalysis.\sHopefully,\sthis\nnew\sfeature\swill\sreveal\shot\sspots\sthat\scan\sbe\soptimized\sto\smake\sthe\sVDBE\srun\nfaster.\s(CVS\s807)
-D 2003-01-01T23:06:21
+C Code\soptimizations\sto\shelp\sthe\slibrary\srun\sfaster.\s(CVS\s808)
+D 2003-01-02T14:43:56
F Makefile.in 868c17a1ae1c07603d491274cc8f86c04acf2a1e
F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906
F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd
F publish.sh e5b83867d14708ed58cec8cba0a4f201e969474d
F spec.template 238f7db425a78dc1bb7682e56e3834c7270a3f5e
F sqlite.1 83f4a9d37bdf2b7ef079a82d54eaf2e3509ee6ea
-F src/btree.c 215d4b322c98fbff795095fa253d9ea108d4b9de
+F src/btree.c 6a2a9bb701a60df4abe2fb7047b25787c90e1ffd
F src/btree.h 17710339f7a8f46e3c7d6d0d4648ef19c584ffda
-F src/build.c 415dce8886aabb6d45851caed7014707056d668b
+F src/build.c 8569ac014609add4b796260d3567a5090b90056d
F src/delete.c aad9d4051ab46e6f6391ea5f7b8994a7c05bdd15
F src/encode.c 6c9c87d5b7b2c0101d011ebc283a80abf672a4d1
F src/expr.c 9427b4d1d04ede1095994b8e042abe2e6fea7443
F src/func.c 90c583f0b91220f7cd411a2407deaf9327245d63
-F src/hash.c 6a6236b89c8c060c65dabd300a1c8ce7c10edb72
+F src/hash.c 4fc39feb7b7711f6495ee9f2159559bedb043e1f
F src/hash.h cd0433998bc1a3759d244e1637fe5a3c13b53bf8
F src/insert.c 764300a0bd8074a2174946c0bf8a550bd833397a
F src/main.c cee05c2ba23b5e78f9671f319dbd68e2130e0f68
F src/md5.c fe4f9c9c6f71dfc26af8da63e4d04489b1430565
F src/os.c 740022806209e44cab0abddfb1fee65c77702e21
F src/os.h 09fd96b4d733aae2f3b98b2ae9ceea40b8fd780d
-F src/pager.c ebc73e7c314e7d8ff6c5728bb96831aaa9efb2e4
+F src/pager.c 255c5d14ff489071021bf1374654836f2516abb3
F src/pager.h 540833e8cb826b80ce2e39aa917deee5e12db626
F src/parse.y 469c9636ff713e63c00234662209f11668671ae9
F src/printf.c 5c50fc1da75c8f5bf432b1ad17d91d6653acd167
F src/shell.c 53185af128613a2bac79d50128f4c17794f0f992
F src/shell.tcl 27ecbd63dd88396ad16d81ab44f73e6c0ea9d20e
F src/sqlite.h.in 98b1574b2362abe02c4a4c73b9dbf99bcd713ab3
-F src/sqliteInt.h 4eb6290304c9225752ca9cc4fdda5bc480d14176
+F src/sqliteInt.h 65dfa06bc49ebff83361bfb259ee4c675534808a
F src/table.c eed2098c9b577aa17f8abe89313a9c4413f57d63
F src/tclsqlite.c 9f2c00a92338c51171ded8943bd42d77f7e69e64
F src/test1.c a46e9f61915b32787c5d5a05a4b92e4dacc437d9
F src/tokenize.c 75e3bb37305b64e118e709752066f494c4f93c30
F src/trigger.c 5ba917fc226b96065108da28186c2efaec53e481
F src/update.c 881e4c8e7c786545da4fd2d95da19252b2e31137
-F src/util.c 8f19c71e45d1a5a3ff2e9a3eef8f36296d87ea43
-F src/vdbe.c 0baebb3f0c624e59bf6710cd9fc15db01c7fc31e
+F src/util.c e2d108842e02810d3d3242cac0e024b09cdb3c4a
+F src/vdbe.c 572ee028e01d2811dee1ad4d5161ce82e31e88d4
F src/vdbe.h 754eba497cfe0c3e352b9c101ab2f811f10d0a55
F src/where.c af235636b7bc7f7f42ee1c7162d1958ad0102cab
F test/all.test 873d30e25a41b3aa48fec5633a7ec1816e107029
F www/sqlite.tcl ae3dcfb077e53833b59d4fcc94d8a12c50a44098
F www/tclsqlite.tcl 1db15abeb446aad0caf0b95b8b9579720e4ea331
F www/vdbe.tcl 2013852c27a02a091d39a766bc87cff329f21218
-P ee95eefe12c48f28412461125c231122e0d4277a
-R c487959d68c24b3808f56b254c4d4b49
+P a1c071ea18766932c90275c704e078134c67be68
+R 007ca29b327fd24b8c788dde75e1f089
U drh
-Z 2e2dd169d3dae32e223fb4d52d6a727e
+Z 65610790d7e7e89a7d7be7a3a45c0c23
-a1c071ea18766932c90275c704e078134c67be68
\ No newline at end of file
+db745e87dc26cf1a35cdcec18f4b659742e14120
\ No newline at end of file
** May you share freely, never taking more than you give.
**
*************************************************************************
-** $Id: btree.c,v 1.75 2002/12/04 22:29:28 drh Exp $
+** $Id: btree.c,v 1.76 2003/01/02 14:43:56 drh Exp $
**
** This file implements a external (disk-based) database using BTrees.
** For a detailed discussion of BTrees, refer to
MemPage *pPage;
pPage = pCur->pPage;
- if( pPage==0 || pCur->idx >= pPage->nCell ){
+ assert( pPage!=0 );
+ if( pCur->idx >= pPage->nCell ){
*pSize = 0;
}else{
pCell = pPage->apCell[pCur->idx];
** Read part of the key associated with cursor pCur. A maximum
** of "amt" bytes will be transfered into zBuf[]. The transfer
** begins at "offset". The number of bytes actually read is
-** returned. The amount returned will be smaller than the
-** amount requested if there are not enough bytes in the key
-** to satisfy the request.
+** returned.
+**
+** Change: It used to be that the amount returned will be smaller
+** than the amount requested if there are not enough bytes in the key
+** to satisfy the request. But now, it must be the case that there
+** is enough data available to satisfy the request. If not, an exception
+** is raised. The change was made in an effort to boost performance
+** by eliminating unneeded tests.
*/
int sqliteBtreeKey(BtCursor *pCur, int offset, int amt, char *zBuf){
- Cell *pCell;
MemPage *pPage;
- if( amt<0 ) return 0;
- if( offset<0 ) return 0;
- if( amt==0 ) return 0;
+ assert( amt>=0 );
+ assert( offset>=0 );
+ assert( pCur->pPage!=0 );
pPage = pCur->pPage;
- if( pPage==0 ) return 0;
if( pCur->idx >= pPage->nCell ){
return 0;
}
- pCell = pPage->apCell[pCur->idx];
- if( amt+offset > NKEY(pCur->pBt, pCell->h) ){
- amt = NKEY(pCur->pBt, pCell->h) - offset;
- if( amt<=0 ){
- return 0;
- }
- }
+ assert( amt+offset <= NKEY(pCur->pBt, pPage->apCell[pCur->idx]->h) );
getPayload(pCur, offset, amt, zBuf);
return amt;
}
MemPage *pPage;
pPage = pCur->pPage;
- if( pPage==0 || pCur->idx >= pPage->nCell ){
+ assert( pPage!=0 );
+ if( pCur->idx >= pPage->nCell ){
*pSize = 0;
}else{
pCell = pPage->apCell[pCur->idx];
int sqliteBtreeData(BtCursor *pCur, int offset, int amt, char *zBuf){
Cell *pCell;
MemPage *pPage;
- int nData;
- if( amt<0 ) return 0;
- if( offset<0 ) return 0;
- if( amt==0 ) return 0;
+ assert( amt>=0 );
+ assert( offset>=0 );
+ assert( pCur->pPage!=0 );
pPage = pCur->pPage;
- if( pPage==0 || pCur->idx >= pPage->nCell ){
+ if( pCur->idx >= pPage->nCell ){
return 0;
}
pCell = pPage->apCell[pCur->idx];
- nData = NDATA(pCur->pBt, pCell->h);
- if( amt+offset > nData ){
- amt = nData - offset;
- if( amt<=0 ){
- return 0;
- }
- }
+ assert( amt+offset <= NDATA(pCur->pBt, pCell->h) );
getPayload(pCur, offset + NKEY(pCur->pBt, pCell->h), amt, zBuf);
return amt;
}
/*
** Advance the cursor to the next entry in the database. If
-** successful and pRes!=NULL then set *pRes=0. If the cursor
+** successful then set *pRes=0. If the cursor
** was already pointing to the last entry in the database before
-** this routine was called, then set *pRes=1 if pRes!=NULL.
+** this routine was called, then set *pRes=1.
*/
int sqliteBtreeNext(BtCursor *pCur, int *pRes){
int rc;
+ assert( pRes!=0 );
+ /* assert( pCur->pPage!=0 ); */
if( pCur->pPage==0 ){
- if( pRes ) *pRes = 1;
+ *pRes = 1;
return SQLITE_ABORT;
}
assert( pCur->pPage->isInit );
assert( pCur->eSkip!=SKIP_INVALID );
if( pCur->pPage->nCell==0 ){
- if( pRes ) *pRes = 1;
+ *pRes = 1;
return SQLITE_OK;
}
assert( pCur->idx<pCur->pPage->nCell );
if( pCur->eSkip==SKIP_NEXT ){
pCur->eSkip = SKIP_NONE;
- if( pRes ) *pRes = 0;
+ *pRes = 0;
return SQLITE_OK;
}
pCur->eSkip = SKIP_NONE;
rc = moveToChild(pCur, SWAB32(pCur->pBt, pCur->pPage->u.hdr.rightChild));
if( rc ) return rc;
rc = moveToLeftmost(pCur);
- if( rc ) return rc;
- if( pRes ) *pRes = 0;
- return SQLITE_OK;
+ *pRes = 0;
+ return rc;
}
do{
if( pCur->pPage->pParent==0 ){
- if( pRes ) *pRes = 1;
+ *pRes = 1;
return SQLITE_OK;
}
rc = moveToParent(pCur);
- if( rc ) return rc;
- }while( pCur->idx>=pCur->pPage->nCell );
- if( pRes ) *pRes = 0;
- return SQLITE_OK;
+ }while( rc==SQLITE_OK && pCur->idx>=pCur->pPage->nCell );
+ *pRes = 0;
+ return rc;
}
rc = moveToLeftmost(pCur);
- if( rc ) return rc;
- if( pRes ) *pRes = 0;
- return SQLITE_OK;
+ *pRes = 0;
+ return rc;
}
/*
BtCursor leafCur;
Cell *pNext;
int szNext;
+ int notUsed;
getTempCursor(pCur, &leafCur);
- rc = sqliteBtreeNext(&leafCur, 0);
+ rc = sqliteBtreeNext(&leafCur, ¬Used);
if( rc!=SQLITE_OK ){
return SQLITE_CORRUPT;
}
/* Check that keys are in the right order
*/
cur.idx = i;
- zKey2 = sqliteMalloc( nKey2+1 );
+ zKey2 = sqliteMallocRaw( nKey2+1 );
getPayload(&cur, 0, nKey2, zKey2);
if( zKey1 && keyCompare(zKey1, nKey1, zKey2, nKey2)>=0 ){
checkAppendMsg(pCheck, zContext, "Key is out of order");
unlockBtreeIfUnused(pBt);
return 0;
}
- sCheck.anRef = sqliteMalloc( (sCheck.nPage+1)*sizeof(sCheck.anRef[0]) );
+ sCheck.anRef = sqliteMallocRaw( (sCheck.nPage+1)*sizeof(sCheck.anRef[0]) );
sCheck.anRef[1] = 1;
for(i=2; i<=sCheck.nPage; i++){ sCheck.anRef[i] = 0; }
sCheck.zErrMsg = 0;
** ROLLBACK
** PRAGMA
**
-** $Id: build.c,v 1.117 2002/12/03 02:22:52 drh Exp $
+** $Id: build.c,v 1.118 2003/01/02 14:43:56 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
zEnd = "\n)";
}
n += 35 + 6*p->nCol;
- zStmt = sqliteMalloc( n );
+ zStmt = sqliteMallocRaw( n );
if( zStmt==0 ) return 0;
strcpy(zStmt, p->isTemp ? "CREATE TEMP TABLE " : "CREATE TABLE ");
k = strlen(zStmt);
assert( pIdx!=0 && pIdx->pTable!=0 );
pTab = pIdx->pTable;
n = pIdx->nColumn;
- zType = sqliteMalloc( n+1 );
+ zType = sqliteMallocRaw( n+1 );
if( zType==0 ) return;
for(i=0; i<n; i++){
int iCol = pIdx->aiColumn[i];
** This is the implementation of generic hash-tables
** used in SQLite.
**
-** $Id: hash.c,v 1.8 2002/05/21 23:44:30 drh Exp $
+** $Id: hash.c,v 1.9 2003/01/02 14:43:57 drh Exp $
*/
#include "sqliteInt.h"
#include <assert.h>
new_elem = (HashElem*)sqliteMalloc( sizeof(HashElem) );
if( new_elem==0 ) return data;
if( pH->copyKey && pKey!=0 ){
- new_elem->pKey = sqliteMalloc( nKey );
+ new_elem->pKey = sqliteMallocRaw( nKey );
if( new_elem->pKey==0 ){
sqliteFree(new_elem);
return data;
** file simultaneously, or one process from reading the database while
** another is writing.
**
-** @(#) $Id: pager.c,v 1.62 2002/12/28 01:06:30 drh Exp $
+** @(#) $Id: pager.c,v 1.63 2003/01/02 14:43:57 drh Exp $
*/
#include "os.h" /* Must be first to enable large file support */
#include "sqliteInt.h"
pPager->nMiss++;
if( pPager->nPage<pPager->mxPage || pPager->pFirst==0 ){
/* Create a new page */
- pPg = sqliteMalloc( sizeof(*pPg) + SQLITE_PAGE_SIZE + pPager->nExtra );
+ pPg = sqliteMallocRaw( sizeof(*pPg) + SQLITE_PAGE_SIZE + pPager->nExtra );
if( pPg==0 ){
*ppPage = 0;
pager_unwritelock(pPager);
pPager->errMask |= PAGER_ERR_MEM;
return SQLITE_NOMEM;
}
+ memset(pPg, 0, sizeof(*pPg));
pPg->pPager = pPager;
pPg->pNextAll = pPager->pAll;
if( pPager->pAll ){
*************************************************************************
** Internal interface definitions for SQLite.
**
-** @(#) $Id: sqliteInt.h,v 1.150 2002/12/04 20:01:06 drh Exp $
+** @(#) $Id: sqliteInt.h,v 1.151 2003/01/02 14:43:57 drh Exp $
*/
#include "config.h"
#include "sqlite.h"
** by an AWK script to determine if there are any leaks.
*/
#ifdef MEMORY_DEBUG
-# define sqliteMalloc(X) sqliteMalloc_(X,__FILE__,__LINE__)
+# define sqliteMalloc(X) sqliteMalloc_(X,1,__FILE__,__LINE__)
+# define sqliteMallocRaw(X) sqliteMalloc_(X,0,__FILE__,__LINE__)
# define sqliteFree(X) sqliteFree_(X,__FILE__,__LINE__)
# define sqliteRealloc(X,Y) sqliteRealloc_(X,Y,__FILE__,__LINE__)
# define sqliteStrDup(X) sqliteStrDup_(X,__FILE__,__LINE__)
int sqliteSortCompare(const char *, const char *);
void sqliteRealToSortable(double r, char *);
#ifdef MEMORY_DEBUG
- void *sqliteMalloc_(int,char*,int);
+ void *sqliteMalloc_(int,int,char*,int);
void sqliteFree_(void*,char*,int);
void *sqliteRealloc_(void*,int,char*,int);
char *sqliteStrDup_(const char*,char*,int);
char *sqliteStrNDup_(const char*, int,char*,int);
#else
void *sqliteMalloc(int);
+ void *sqliteMallocRaw(int);
void sqliteFree(void*);
void *sqliteRealloc(void*,int);
char *sqliteStrDup(const char*);
** This file contains functions for allocating memory, comparing
** strings, and stuff like that.
**
-** $Id: util.c,v 1.53 2002/12/17 13:05:26 drh Exp $
+** $Id: util.c,v 1.54 2003/01/02 14:43:57 drh Exp $
*/
#include "sqliteInt.h"
#include <stdarg.h>
** Allocate new memory and set it to zero. Return NULL if
** no memory is available.
*/
-void *sqliteMalloc_(int n, char *zFile, int line){
+void *sqliteMalloc_(int n, int bZero, char *zFile, int line){
void *p;
int *pi;
int k;
pi[1] = n;
pi[k+2] = 0xdead3344;
p = &pi[2];
- memset(p, 0, n);
+ memset(p, bZero==0, n);
#if MEMORY_DEBUG>1
fprintf(stderr,"%06d malloc %d bytes at 0x%x from %s:%d\n",
++memcnt, n, (int)p, zFile,line);
int *oldPi, *pi, k, oldN, oldK;
void *p;
if( oldP==0 ){
- return sqliteMalloc_(n,zFile,line);
+ return sqliteMalloc_(n,1,zFile,line);
}
if( n==0 ){
sqliteFree_(oldP,zFile,line);
if( n>oldN ){
memset(&((char*)p)[oldN], 0, n-oldN);
}
- memset(oldPi, 0, (oldK+3)*sizeof(int));
+ memset(oldPi, 0xab, (oldK+3)*sizeof(int));
free(oldPi);
#if MEMORY_DEBUG>1
fprintf(stderr,"%06d realloc %d to %d bytes at 0x%x to 0x%x at %s:%d\n",
char *sqliteStrDup_(const char *z, char *zFile, int line){
char *zNew;
if( z==0 ) return 0;
- zNew = sqliteMalloc_(strlen(z)+1, zFile, line);
+ zNew = sqliteMalloc_(strlen(z)+1, 0, zFile, line);
if( zNew ) strcpy(zNew, z);
return zNew;
}
char *sqliteStrNDup_(const char *z, int n, char *zFile, int line){
char *zNew;
if( z==0 ) return 0;
- zNew = sqliteMalloc_(n+1, zFile, line);
+ zNew = sqliteMalloc_(n+1, 0, zFile, line);
if( zNew ){
memcpy(zNew, z, n);
zNew[n] = 0;
/*
** Allocate new memory and set it to zero. Return NULL if
-** no memory is available.
+** no memory is available. See also sqliteMallocRaw().
*/
void *sqliteMalloc(int n){
void *p;
return p;
}
+/*
+** Allocate new memory but do not set it to zero. Return NULL if
+** no memory is available. See also sqliteMalloc().
+*/
+void *sqliteMallocRaw(int n){
+ void *p;
+ if( n==0 ) return 0;
+ p = malloc(n);
+ if( p==0 ){
+ sqlite_malloc_failed++;
+ return 0;
+ }
+ return p;
+}
+
/*
** Free memory previously obtained from sqliteMalloc()
*/
char *sqliteStrDup(const char *z){
char *zNew;
if( z==0 ) return 0;
- zNew = sqliteMalloc(strlen(z)+1);
+ zNew = sqliteMallocRaw(strlen(z)+1);
if( zNew ) strcpy(zNew, z);
return zNew;
}
char *sqliteStrNDup(const char *z, int n){
char *zNew;
if( z==0 ) return 0;
- zNew = sqliteMalloc(n+1);
+ zNew = sqliteMallocRaw(n+1);
if( zNew ){
memcpy(zNew, z, n);
zNew[n] = 0;
}
va_end(ap);
sqliteFree(*pz);
- *pz = zResult = sqliteMalloc( nByte );
+ *pz = zResult = sqliteMallocRaw( nByte );
if( zResult==0 ){
return;
}
}
va_end(ap);
sqliteFree(*pz);
- *pz = zResult = sqliteMalloc( nByte + 1 );
+ *pz = zResult = sqliteMallocRaw( nByte + 1 );
if( zResult==0 ) return;
va_start(ap, pz);
while( (z = va_arg(ap, const char*))!=0 ){
** in this file for details. If in doubt, do not deviate from existing
** commenting and indentation practices when changing or adding code.
**
-** $Id: vdbe.c,v 1.188 2003/01/01 23:06:21 drh Exp $
+** $Id: vdbe.c,v 1.189 2003/01/02 14:43:57 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
p->s.flags = STK_Str;
p->z = p->s.z;
}else{
- p->z = sqliteMalloc( n+1 );
+ p->z = sqliteMallocRaw( n+1 );
if( p->z ){
memcpy(p->z, zResult, n);
p->z[n] = 0;
char **pzStack = &p->zStack[i];
char *z;
assert( (pStack->flags & STK_Ephem)!=0 );
- z = sqliteMalloc( pStack->n );
+ z = sqliteMallocRaw( pStack->n );
if( z==0 ) return 1;
memcpy(z, *pzStack, pStack->n);
*pzStack = z;
zStack[j] = aStack[j].z;
aStack[j].flags &= ~(STK_Static|STK_Dyn|STK_Ephem);
}else{
- zStack[j] = sqliteMalloc( aStack[j].n );
+ zStack[j] = sqliteMallocRaw( aStack[j].n );
if( zStack[j]==0 ) goto no_mem;
memcpy(zStack[j], zStack[i], aStack[j].n);
aStack[j].flags &= ~(STK_Static|STK_Ephem);
zStack[p->tos] = 0;
break;
}
- zNew = sqliteMalloc( nByte );
+ zNew = sqliteMallocRaw( nByte );
if( zNew==0 ) goto no_mem;
j = 0;
for(i=p->tos-nField+1; i<=p->tos; i++){
rc = SQLITE_TOOBIG;
goto abort_due_to_error;
}
- zNewRecord = sqliteMalloc( nByte );
+ zNewRecord = sqliteMallocRaw( nByte );
if( zNewRecord==0 ) goto no_mem;
j = 0;
addr = idxWidth*(nField+1) + addUnique*sizeof(uniqueCnt);
goto abort_due_to_error;
}
if( addRowid ) nByte += sizeof(u32);
- zNewKey = sqliteMalloc( nByte );
+ zNewKey = sqliteMallocRaw( nByte );
if( zNewKey==0 ) goto no_mem;
j = 0;
for(i=p->tos-nField+1; i<=p->tos; i++){
zStack[tos] = aStack[tos].z;
aStack[tos].n = amt;
}else{
- char *z = sqliteMalloc( amt );
+ char *z = sqliteMallocRaw( amt );
if( z==0 ) goto no_mem;
aStack[tos].flags = STK_Str | STK_Dyn;
zStack[tos] = z;
goto abort_due_to_error;
}
if( amt>NBFS ){
- z = sqliteMalloc( amt );
+ z = sqliteMallocRaw( amt );
aStack[tos].flags = STK_Str | STK_Dyn;
}else{
z = aStack[tos].z;
*/
case OP_Prev:
case OP_Next: {
- int i = pOp->p1;
Cursor *pC;
BtCursor *pCrsr;
- if( VERIFY( i>=0 && i<p->nCursor && )
- (pCrsr = (pC = &p->aCsr[i])->pCursor)!=0 ){
+ if( VERIFY( pOp->p1>=0 && pOp->p1<p->nCursor && )
+ (pCrsr = (pC = &p->aCsr[pOp->p1])->pCursor)!=0 ){
int res;
if( pC->nullRow ){
res = 1;
VERIFY( if( p->tos<0 ) goto not_enough_stack; )
pKeylist = p->pList;
if( pKeylist==0 || pKeylist->nUsed>=pKeylist->nKey ){
- pKeylist = sqliteMalloc( sizeof(Keylist)+999*sizeof(pKeylist->aKey[0]) );
+ pKeylist = sqliteMallocRaw( sizeof(Keylist)+999*sizeof(pKeylist->aKey[0]) );
if( pKeylist==0 ) goto no_mem;
pKeylist->nKey = 1000;
pKeylist->nRead = 0;
Sorter *pSorter;
VERIFY( if( tos<1 ) goto not_enough_stack; )
if( Stringify(p, tos) || Stringify(p, nos) ) goto no_mem;
- pSorter = sqliteMalloc( sizeof(Sorter) );
+ pSorter = sqliteMallocRaw( sizeof(Sorter) );
if( pSorter==0 ) goto no_mem;
pSorter->pNext = p->pSort;
p->pSort = pSorter;
}
}
nByte += sizeof(char*)*(nField+1);
- azArg = sqliteMalloc( nByte );
+ azArg = sqliteMallocRaw( nByte );
if( azArg==0 ) goto no_mem;
z = (char*)&azArg[nField+1];
for(j=0, i=p->tos-nField+1; i<=p->tos; i++, j++){
nByte += aStack[i].n+2;
}
}
- zNewKey = sqliteMalloc( nByte );
+ zNewKey = sqliteMallocRaw( nByte );
if( zNewKey==0 ) goto no_mem;
j = 0;
k = 0;
if( (flags & STK_Static)!=0 || (pOp->p2 && (flags & STK_Dyn)!=0) ){
pMem->z = zStack[tos];
}else if( flags & STK_Str ){
- pMem->z = sqliteMalloc( pMem->s.n );
+ pMem->z = sqliteMallocRaw( pMem->s.n );
if( pMem->z==0 ) goto no_mem;
memcpy(pMem->z, zStack[tos], pMem->s.n);
pMem->s.flags |= STK_Dyn;