mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-07 02:42:48 +03:00
Add the slightly faster sqlite3DbMallocRawNN(db,n) routine for the majority
cases where db is guaranteed to be not NULL. FossilOrigin-Name: 0a802e96ab06e2643834b83671fa8353da1a348d
This commit is contained in:
50
manifest
50
manifest
@@ -1,5 +1,5 @@
|
|||||||
C OOM\sfailures\son\ssqlite3_errmsg16()\sin\san\sapp-defined\sfunction\sare\sno\slonger\nbenign.
|
C Add\sthe\sslightly\sfaster\ssqlite3DbMallocRawNN(db,n)\sroutine\sfor\sthe\smajority\ncases\swhere\sdb\sis\sguaranteed\sto\sbe\snot\sNULL.
|
||||||
D 2016-02-05T04:50:27.680
|
D 2016-02-05T13:38:36.171
|
||||||
F Makefile.in 027c1603f255390c43a426671055a31c0a65fdb4
|
F Makefile.in 027c1603f255390c43a426671055a31c0a65fdb4
|
||||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||||
F Makefile.msc 72b7858f02017611c3ac1ddc965251017fed0845
|
F Makefile.msc 72b7858f02017611c3ac1ddc965251017fed0845
|
||||||
@@ -285,8 +285,8 @@ F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
|
|||||||
F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
|
F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786
|
||||||
F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
|
F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
|
||||||
F src/alter.c e4a5132e6264e002ab87c268108f416df3f1fb10
|
F src/alter.c e4a5132e6264e002ab87c268108f416df3f1fb10
|
||||||
F src/analyze.c 5338dbbc9f12087b38d74234de00907bdf023a92
|
F src/analyze.c fbf0e80d83cc893734e872f932f249a056b86e11
|
||||||
F src/attach.c b943546856ac657c702e1a92fb7adcf67c1dc397
|
F src/attach.c c16c2648a577fa3def2adfa48c28901376389bc5
|
||||||
F src/auth.c b56c78ebe40a2110fd361379f7e8162d23f92240
|
F src/auth.c b56c78ebe40a2110fd361379f7e8162d23f92240
|
||||||
F src/backup.c 2869a76c03eb393ee795416e2387005553df72bc
|
F src/backup.c 2869a76c03eb393ee795416e2387005553df72bc
|
||||||
F src/bitvec.c 1a78d450a17c5016710eec900bedfc5729bf9bdf
|
F src/bitvec.c 1a78d450a17c5016710eec900bedfc5729bf9bdf
|
||||||
@@ -294,27 +294,27 @@ F src/btmutex.c bc87dd3b062cc26edfe79918de2200ccb8d41e73
|
|||||||
F src/btree.c 0b359bcc2316a57acf12f583253974ad22b4654f
|
F src/btree.c 0b359bcc2316a57acf12f583253974ad22b4654f
|
||||||
F src/btree.h 368ceeb4bd9312dc8df2ffd64b4b7dbcf4db5f8e
|
F src/btree.h 368ceeb4bd9312dc8df2ffd64b4b7dbcf4db5f8e
|
||||||
F src/btreeInt.h c18b7d2a3494695133e4e60ee36061d37f45d9a5
|
F src/btreeInt.h c18b7d2a3494695133e4e60ee36061d37f45d9a5
|
||||||
F src/build.c 784c61366e79092b16e116372e66930775d2e6dc
|
F src/build.c 198eaa849c193f28b802ed135b2483c68ef7a35c
|
||||||
F src/callback.c ed6c2a4a712eb7287ff64e20e3c23265dfb8a7ce
|
F src/callback.c ed6c2a4a712eb7287ff64e20e3c23265dfb8a7ce
|
||||||
F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
|
F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f
|
||||||
F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198
|
F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198
|
||||||
F src/date.c 997651e3ee6c2818fbf7fcdb7156cef9eb3ece20
|
F src/date.c ca17321bc17cca8f40e0843edea4fafff974998e
|
||||||
F src/dbstat.c b2ec6793eef97aebb4d171d490a4ffdfa9f2475c
|
F src/dbstat.c b2ec6793eef97aebb4d171d490a4ffdfa9f2475c
|
||||||
F src/delete.c 33ed87dc0746b1f8ce186f62b608bf40801af9c0
|
F src/delete.c 48802aa3ee6339f576d074336d3ae1b5f40e240f
|
||||||
F src/expr.c fddb1b19d77730d423ef2c219ae17e10087554ba
|
F src/expr.c fbf0706199aea23c54efe36b6932d8307c4eb872
|
||||||
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
|
F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
|
||||||
F src/fkey.c dc893ee37a21868fcf07e3d941c7663957807ad2
|
F src/fkey.c 08edad1fce30f761f14b3997e89bad58f9f7f4e0
|
||||||
F src/func.c 86e55fee35b9577e485f47d9dd5c1d34cd513288
|
F src/func.c 86e55fee35b9577e485f47d9dd5c1d34cd513288
|
||||||
F src/global.c bd5a0af3f30b0c01be6db756c626cd3c33a3d260
|
F src/global.c bd5a0af3f30b0c01be6db756c626cd3c33a3d260
|
||||||
F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5
|
F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5
|
||||||
F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094
|
F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094
|
||||||
F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
|
F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
|
||||||
F src/insert.c e3e2811c69318ff62d8a764b01f5a5677d846b1e
|
F src/insert.c b84359365bace233919db550a15f131923190efc
|
||||||
F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
|
F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
|
||||||
F src/legacy.c b1b0880fc474abfab89e737b0ecfde0bd7a60902
|
F src/legacy.c b1b0880fc474abfab89e737b0ecfde0bd7a60902
|
||||||
F src/loadext.c 84996d7d70a605597d79c1f1d7b2012a5fd34f2b
|
F src/loadext.c 84996d7d70a605597d79c1f1d7b2012a5fd34f2b
|
||||||
F src/main.c 62b7fe3ed245757d1ff2e6268a7ec0bc30100308
|
F src/main.c 62b7fe3ed245757d1ff2e6268a7ec0bc30100308
|
||||||
F src/malloc.c 92ca6e16c90fb10f97844c08061bd8381423eb89
|
F src/malloc.c 55ebb1701ebd39985dbcc497aaecb09192b69682
|
||||||
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
|
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
|
||||||
F src/mem1.c 6919bcf12f221868ea066eec27e579fed95ce98b
|
F src/mem1.c 6919bcf12f221868ea066eec27e579fed95ce98b
|
||||||
F src/mem2.c f1940d9e91948dd6a908fbb9ce3835c36b5d83c3
|
F src/mem2.c f1940d9e91948dd6a908fbb9ce3835c36b5d83c3
|
||||||
@@ -347,13 +347,13 @@ F src/prepare.c c12b786713df3e8270c0f85f988c5359d8b4d87c
|
|||||||
F src/printf.c 63e6fb12bbe702dd664dc3703776c090383a5a26
|
F src/printf.c 63e6fb12bbe702dd664dc3703776c090383a5a26
|
||||||
F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
|
F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
|
||||||
F src/resolve.c 9f7ce3a3c087afb7597b7c916c99126ff3f12f0c
|
F src/resolve.c 9f7ce3a3c087afb7597b7c916c99126ff3f12f0c
|
||||||
F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
|
F src/rowset.c 9fe4b3ad7cc00944386bb600233d8f523de07a6e
|
||||||
F src/select.c 07178f2ae1239404874492ba7e3b9a46361ebbbc
|
F src/select.c 57646a44ba9a0bc4aa926ae9c79b8199c246844b
|
||||||
F src/shell.c dcd7a83645ef2a58ee9c6d0ea4714d877d7835c4
|
F src/shell.c dcd7a83645ef2a58ee9c6d0ea4714d877d7835c4
|
||||||
F src/sqlite.h.in cf22ad1d52dca2c9862d63833e581028119aab7e
|
F src/sqlite.h.in cf22ad1d52dca2c9862d63833e581028119aab7e
|
||||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
||||||
F src/sqlite3ext.h dfbe62ffd95b99afe2140d8c35b180d11924072d
|
F src/sqlite3ext.h dfbe62ffd95b99afe2140d8c35b180d11924072d
|
||||||
F src/sqliteInt.h e251b755c71c343434bce1e82c6593603c7af364
|
F src/sqliteInt.h 3aeaff9611acd790c8e76719b33db09ab885d537
|
||||||
F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
|
F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46
|
||||||
F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
|
F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba
|
||||||
F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
|
F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e
|
||||||
@@ -409,28 +409,28 @@ F src/threads.c bbfb74450643cb5372a43ad4f6cffd7e9dfcecb0
|
|||||||
F src/tokenize.c 214b783d6138e9f9fbb6b225ce9a376db3b03d42
|
F src/tokenize.c 214b783d6138e9f9fbb6b225ce9a376db3b03d42
|
||||||
F src/treeview.c dc39ccf04e9331237388b9cb73289c9d87ea050b
|
F src/treeview.c dc39ccf04e9331237388b9cb73289c9d87ea050b
|
||||||
F src/trigger.c e14840ee0c3e549e758ec9bf3e4146e166002280
|
F src/trigger.c e14840ee0c3e549e758ec9bf3e4146e166002280
|
||||||
F src/update.c 17332f9fe818cbc0444c36a811800af8498af4c3
|
F src/update.c 310ca7adb86a7d1f2afae46905b21c83580f3e17
|
||||||
F src/utf.c 10cc2519e82e3369344d0969ad4b1a333dc86d18
|
F src/utf.c 10cc2519e82e3369344d0969ad4b1a333dc86d18
|
||||||
F src/util.c 72d40df0a52d3f30b462a15f0e094fcbade6dc82
|
F src/util.c 49ce0a65306c1c51d61cb5bc214c71cb62452de6
|
||||||
F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
|
F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
|
||||||
F src/vdbe.c 2e49c5d1b8f2f24f91ddd6c6b003d8e7fbbc4e56
|
F src/vdbe.c c193299e595a13eba247738e22fce25c49346a6c
|
||||||
F src/vdbe.h 7a733ea8aac1b77305a67698e784fa3484ee3337
|
F src/vdbe.h 7a733ea8aac1b77305a67698e784fa3484ee3337
|
||||||
F src/vdbeInt.h 4b69d5451bcadd473e745af53ef1e8abfdce0a79
|
F src/vdbeInt.h 4b69d5451bcadd473e745af53ef1e8abfdce0a79
|
||||||
F src/vdbeapi.c 9324f6baee1a1b2284c6543e98f916888a81e459
|
F src/vdbeapi.c 9324f6baee1a1b2284c6543e98f916888a81e459
|
||||||
F src/vdbeaux.c 777461529f862623e9164eb954fc53e54ddd650a
|
F src/vdbeaux.c 49b536284c2b8a823dd342d653e18145ca2b393a
|
||||||
F src/vdbeblob.c 3b570b730109e8f653d9d2081649f6e7015113db
|
F src/vdbeblob.c 3b570b730109e8f653d9d2081649f6e7015113db
|
||||||
F src/vdbemem.c 9a6736339ca581f3b9503d5a1a40b7d718ca4635
|
F src/vdbemem.c 68fcfac37dc6601d98c32cc5adee4d39f2c1b7b4
|
||||||
F src/vdbesort.c ef3c6d1f1a7d44cf67bb2bee59ea3d1fe5bad174
|
F src/vdbesort.c ef3c6d1f1a7d44cf67bb2bee59ea3d1fe5bad174
|
||||||
F src/vdbetrace.c f75c5455d8cf389ef86a8bfdfd3177e0e3692484
|
F src/vdbetrace.c f75c5455d8cf389ef86a8bfdfd3177e0e3692484
|
||||||
F src/vtab.c 2cc0b7bb253851c8718b8850dfaed8592b6dc7f8
|
F src/vtab.c bef51b4f693d82b4b0184457faa8625654534091
|
||||||
F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
|
F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
|
||||||
F src/wal.c d21b99fd1458159d0b1ecdccc8ee6ada4fdc4c54
|
F src/wal.c d21b99fd1458159d0b1ecdccc8ee6ada4fdc4c54
|
||||||
F src/wal.h 2f7c831cf3b071fa548bf2d5cac640846a7ff19c
|
F src/wal.h 2f7c831cf3b071fa548bf2d5cac640846a7ff19c
|
||||||
F src/walker.c 0f142b5bd3ed2041fc52d773880748b212e63354
|
F src/walker.c 0f142b5bd3ed2041fc52d773880748b212e63354
|
||||||
F src/where.c 8bdb43e09d4e7f20bb371154799da39c25b51dfd
|
F src/where.c d89fd5cff448ab5c5ca492dd9793b35ffe31ab35
|
||||||
F src/whereInt.h 78b6b4de94db84aecbdc07fe3e38f648eb391e9a
|
F src/whereInt.h 78b6b4de94db84aecbdc07fe3e38f648eb391e9a
|
||||||
F src/wherecode.c 791a784bbf8749d560fdb0b990b607bc4f44a38d
|
F src/wherecode.c 791a784bbf8749d560fdb0b990b607bc4f44a38d
|
||||||
F src/whereexpr.c 85ee2de9ff0fe40a4afaf2a477bd6c9a808548b3
|
F src/whereexpr.c de117970b29471177a6901d60ad83a194671dc03
|
||||||
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
||||||
F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
|
F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
|
||||||
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
|
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
|
||||||
@@ -1426,7 +1426,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
|
|||||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||||
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
|
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
|
||||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||||
P a8846aeed9992c6c9f1c8bd6e996a4cbe891751e
|
P 9efb223f4ce8ccc00515f8f016f7c494c9ae5096
|
||||||
R d0bf71e8097462f80d2341a6f602c53f
|
R a3e65991654c830e3de734323ec006f3
|
||||||
U drh
|
U drh
|
||||||
Z 1d703e36553aaf91d3187c59187314d2
|
Z 1d7c8b6479ccf726221b089b3d2b622f
|
||||||
|
@@ -1 +1 @@
|
|||||||
9efb223f4ce8ccc00515f8f016f7c494c9ae5096
|
0a802e96ab06e2643834b83671fa8353da1a348d
|
@@ -313,7 +313,7 @@ static void sampleClear(sqlite3 *db, Stat4Sample *p){
|
|||||||
static void sampleSetRowid(sqlite3 *db, Stat4Sample *p, int n, const u8 *pData){
|
static void sampleSetRowid(sqlite3 *db, Stat4Sample *p, int n, const u8 *pData){
|
||||||
assert( db!=0 );
|
assert( db!=0 );
|
||||||
if( p->nRowid ) sqlite3DbFree(db, p->u.aRowid);
|
if( p->nRowid ) sqlite3DbFree(db, p->u.aRowid);
|
||||||
p->u.aRowid = sqlite3DbMallocRaw(db, n);
|
p->u.aRowid = sqlite3DbMallocRawNN(db, n);
|
||||||
if( p->u.aRowid ){
|
if( p->u.aRowid ){
|
||||||
p->nRowid = n;
|
p->nRowid = n;
|
||||||
memcpy(p->u.aRowid, pData, n);
|
memcpy(p->u.aRowid, pData, n);
|
||||||
@@ -1115,7 +1115,7 @@ static void analyzeOneTable(
|
|||||||
if( nColTest>0 ){
|
if( nColTest>0 ){
|
||||||
int endDistinctTest = sqlite3VdbeMakeLabel(v);
|
int endDistinctTest = sqlite3VdbeMakeLabel(v);
|
||||||
int *aGotoChng; /* Array of jump instruction addresses */
|
int *aGotoChng; /* Array of jump instruction addresses */
|
||||||
aGotoChng = sqlite3DbMallocRaw(db, sizeof(int)*nColTest);
|
aGotoChng = sqlite3DbMallocRawNN(db, sizeof(int)*nColTest);
|
||||||
if( aGotoChng==0 ) continue;
|
if( aGotoChng==0 ) continue;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -109,7 +109,7 @@ static void attachFunc(
|
|||||||
** hash tables.
|
** hash tables.
|
||||||
*/
|
*/
|
||||||
if( db->aDb==db->aDbStatic ){
|
if( db->aDb==db->aDbStatic ){
|
||||||
aNew = sqlite3DbMallocRaw(db, sizeof(db->aDb[0])*3 );
|
aNew = sqlite3DbMallocRawNN(db, sizeof(db->aDb[0])*3 );
|
||||||
if( aNew==0 ) return;
|
if( aNew==0 ) return;
|
||||||
memcpy(aNew, db->aDb, sizeof(db->aDb[0])*2);
|
memcpy(aNew, db->aDb, sizeof(db->aDb[0])*2);
|
||||||
}else{
|
}else{
|
||||||
|
@@ -3702,8 +3702,9 @@ SrcList *sqlite3SrcListAppend(
|
|||||||
){
|
){
|
||||||
struct SrcList_item *pItem;
|
struct SrcList_item *pItem;
|
||||||
assert( pDatabase==0 || pTable!=0 ); /* Cannot have C without B */
|
assert( pDatabase==0 || pTable!=0 ); /* Cannot have C without B */
|
||||||
|
assert( db!=0 );
|
||||||
if( pList==0 ){
|
if( pList==0 ){
|
||||||
pList = sqlite3DbMallocRaw(db, sizeof(SrcList) );
|
pList = sqlite3DbMallocRawNN(db, sizeof(SrcList) );
|
||||||
if( pList==0 ) return 0;
|
if( pList==0 ) return 0;
|
||||||
pList->nAlloc = 1;
|
pList->nAlloc = 1;
|
||||||
pList->nSrc = 0;
|
pList->nSrc = 0;
|
||||||
|
@@ -967,7 +967,7 @@ static void strftimeFunc(
|
|||||||
sqlite3_result_error_toobig(context);
|
sqlite3_result_error_toobig(context);
|
||||||
return;
|
return;
|
||||||
}else{
|
}else{
|
||||||
z = sqlite3DbMallocRaw(db, (int)n);
|
z = sqlite3DbMallocRawNN(db, (int)n);
|
||||||
if( z==0 ){
|
if( z==0 ){
|
||||||
sqlite3_result_error_nomem(context);
|
sqlite3_result_error_nomem(context);
|
||||||
return;
|
return;
|
||||||
|
@@ -439,7 +439,7 @@ void sqlite3DeleteFrom(
|
|||||||
** one, so just keep it in its register(s) and fall through to the
|
** one, so just keep it in its register(s) and fall through to the
|
||||||
** delete code. */
|
** delete code. */
|
||||||
nKey = nPk; /* OP_Found will use an unpacked key */
|
nKey = nPk; /* OP_Found will use an unpacked key */
|
||||||
aToOpen = sqlite3DbMallocRaw(db, nIdx+2);
|
aToOpen = sqlite3DbMallocRawNN(db, nIdx+2);
|
||||||
if( aToOpen==0 ){
|
if( aToOpen==0 ){
|
||||||
sqlite3WhereEnd(pWInfo);
|
sqlite3WhereEnd(pWInfo);
|
||||||
goto delete_from_cleanup;
|
goto delete_from_cleanup;
|
||||||
|
27
src/expr.c
27
src/expr.c
@@ -453,6 +453,7 @@ Expr *sqlite3ExprAlloc(
|
|||||||
int nExtra = 0;
|
int nExtra = 0;
|
||||||
int iValue = 0;
|
int iValue = 0;
|
||||||
|
|
||||||
|
assert( db!=0 );
|
||||||
if( pToken ){
|
if( pToken ){
|
||||||
if( op!=TK_INTEGER || pToken->z==0
|
if( op!=TK_INTEGER || pToken->z==0
|
||||||
|| sqlite3GetInt32(pToken->z, &iValue)==0 ){
|
|| sqlite3GetInt32(pToken->z, &iValue)==0 ){
|
||||||
@@ -460,7 +461,7 @@ Expr *sqlite3ExprAlloc(
|
|||||||
assert( iValue>=0 );
|
assert( iValue>=0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pNew = sqlite3DbMallocRaw(db, sizeof(Expr)+nExtra);
|
pNew = sqlite3DbMallocRawNN(db, sizeof(Expr)+nExtra);
|
||||||
if( pNew ){
|
if( pNew ){
|
||||||
memset(pNew, 0, sizeof(Expr));
|
memset(pNew, 0, sizeof(Expr));
|
||||||
pNew->op = (u8)op;
|
pNew->op = (u8)op;
|
||||||
@@ -857,6 +858,7 @@ static int dupedExprSize(Expr *p, int flags){
|
|||||||
static Expr *exprDup(sqlite3 *db, Expr *p, int flags, u8 **pzBuffer){
|
static Expr *exprDup(sqlite3 *db, Expr *p, int flags, u8 **pzBuffer){
|
||||||
Expr *pNew = 0; /* Value to return */
|
Expr *pNew = 0; /* Value to return */
|
||||||
assert( flags==0 || flags==EXPRDUP_REDUCE );
|
assert( flags==0 || flags==EXPRDUP_REDUCE );
|
||||||
|
assert( db!=0 );
|
||||||
if( p ){
|
if( p ){
|
||||||
const int isReduced = (flags&EXPRDUP_REDUCE);
|
const int isReduced = (flags&EXPRDUP_REDUCE);
|
||||||
u8 *zAlloc;
|
u8 *zAlloc;
|
||||||
@@ -869,7 +871,7 @@ static Expr *exprDup(sqlite3 *db, Expr *p, int flags, u8 **pzBuffer){
|
|||||||
zAlloc = *pzBuffer;
|
zAlloc = *pzBuffer;
|
||||||
staticFlag = EP_Static;
|
staticFlag = EP_Static;
|
||||||
}else{
|
}else{
|
||||||
zAlloc = sqlite3DbMallocRaw(db, dupedExprSize(p, flags));
|
zAlloc = sqlite3DbMallocRawNN(db, dupedExprSize(p, flags));
|
||||||
}
|
}
|
||||||
pNew = (Expr *)zAlloc;
|
pNew = (Expr *)zAlloc;
|
||||||
|
|
||||||
@@ -992,12 +994,13 @@ ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags){
|
|||||||
ExprList *pNew;
|
ExprList *pNew;
|
||||||
struct ExprList_item *pItem, *pOldItem;
|
struct ExprList_item *pItem, *pOldItem;
|
||||||
int i;
|
int i;
|
||||||
|
assert( db!=0 );
|
||||||
if( p==0 ) return 0;
|
if( p==0 ) return 0;
|
||||||
pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
|
pNew = sqlite3DbMallocRawNN(db, sizeof(*pNew) );
|
||||||
if( pNew==0 ) return 0;
|
if( pNew==0 ) return 0;
|
||||||
pNew->nExpr = i = p->nExpr;
|
pNew->nExpr = i = p->nExpr;
|
||||||
if( (flags & EXPRDUP_REDUCE)==0 ) for(i=1; i<p->nExpr; i+=i){}
|
if( (flags & EXPRDUP_REDUCE)==0 ) for(i=1; i<p->nExpr; i+=i){}
|
||||||
pNew->a = pItem = sqlite3DbMallocRaw(db, i*sizeof(p->a[0]) );
|
pNew->a = pItem = sqlite3DbMallocRawNN(db, i*sizeof(p->a[0]) );
|
||||||
if( pItem==0 ){
|
if( pItem==0 ){
|
||||||
sqlite3DbFree(db, pNew);
|
sqlite3DbFree(db, pNew);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1028,9 +1031,10 @@ SrcList *sqlite3SrcListDup(sqlite3 *db, SrcList *p, int flags){
|
|||||||
SrcList *pNew;
|
SrcList *pNew;
|
||||||
int i;
|
int i;
|
||||||
int nByte;
|
int nByte;
|
||||||
|
assert( db!=0 );
|
||||||
if( p==0 ) return 0;
|
if( p==0 ) return 0;
|
||||||
nByte = sizeof(*p) + (p->nSrc>0 ? sizeof(p->a[0]) * (p->nSrc-1) : 0);
|
nByte = sizeof(*p) + (p->nSrc>0 ? sizeof(p->a[0]) * (p->nSrc-1) : 0);
|
||||||
pNew = sqlite3DbMallocRaw(db, nByte );
|
pNew = sqlite3DbMallocRawNN(db, nByte );
|
||||||
if( pNew==0 ) return 0;
|
if( pNew==0 ) return 0;
|
||||||
pNew->nSrc = pNew->nAlloc = p->nSrc;
|
pNew->nSrc = pNew->nAlloc = p->nSrc;
|
||||||
for(i=0; i<p->nSrc; i++){
|
for(i=0; i<p->nSrc; i++){
|
||||||
@@ -1067,11 +1071,12 @@ SrcList *sqlite3SrcListDup(sqlite3 *db, SrcList *p, int flags){
|
|||||||
IdList *sqlite3IdListDup(sqlite3 *db, IdList *p){
|
IdList *sqlite3IdListDup(sqlite3 *db, IdList *p){
|
||||||
IdList *pNew;
|
IdList *pNew;
|
||||||
int i;
|
int i;
|
||||||
|
assert( db!=0 );
|
||||||
if( p==0 ) return 0;
|
if( p==0 ) return 0;
|
||||||
pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
|
pNew = sqlite3DbMallocRawNN(db, sizeof(*pNew) );
|
||||||
if( pNew==0 ) return 0;
|
if( pNew==0 ) return 0;
|
||||||
pNew->nId = p->nId;
|
pNew->nId = p->nId;
|
||||||
pNew->a = sqlite3DbMallocRaw(db, p->nId*sizeof(p->a[0]) );
|
pNew->a = sqlite3DbMallocRawNN(db, p->nId*sizeof(p->a[0]) );
|
||||||
if( pNew->a==0 ){
|
if( pNew->a==0 ){
|
||||||
sqlite3DbFree(db, pNew);
|
sqlite3DbFree(db, pNew);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1089,8 +1094,9 @@ IdList *sqlite3IdListDup(sqlite3 *db, IdList *p){
|
|||||||
}
|
}
|
||||||
Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
|
Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
|
||||||
Select *pNew, *pPrior;
|
Select *pNew, *pPrior;
|
||||||
|
assert( db!=0 );
|
||||||
if( p==0 ) return 0;
|
if( p==0 ) return 0;
|
||||||
pNew = sqlite3DbMallocRaw(db, sizeof(*p) );
|
pNew = sqlite3DbMallocRawNN(db, sizeof(*p) );
|
||||||
if( pNew==0 ) return 0;
|
if( pNew==0 ) return 0;
|
||||||
pNew->pEList = sqlite3ExprListDup(db, p->pEList, flags);
|
pNew->pEList = sqlite3ExprListDup(db, p->pEList, flags);
|
||||||
pNew->pSrc = sqlite3SrcListDup(db, p->pSrc, flags);
|
pNew->pSrc = sqlite3SrcListDup(db, p->pSrc, flags);
|
||||||
@@ -1136,13 +1142,14 @@ ExprList *sqlite3ExprListAppend(
|
|||||||
Expr *pExpr /* Expression to be appended. Might be NULL */
|
Expr *pExpr /* Expression to be appended. Might be NULL */
|
||||||
){
|
){
|
||||||
sqlite3 *db = pParse->db;
|
sqlite3 *db = pParse->db;
|
||||||
|
assert( db!=0 );
|
||||||
if( pList==0 ){
|
if( pList==0 ){
|
||||||
pList = sqlite3DbMallocRaw(db, sizeof(ExprList) );
|
pList = sqlite3DbMallocRawNN(db, sizeof(ExprList) );
|
||||||
if( pList==0 ){
|
if( pList==0 ){
|
||||||
goto no_mem;
|
goto no_mem;
|
||||||
}
|
}
|
||||||
pList->nExpr = 0;
|
pList->nExpr = 0;
|
||||||
pList->a = sqlite3DbMallocRaw(db, sizeof(pList->a[0]));
|
pList->a = sqlite3DbMallocRawNN(db, sizeof(pList->a[0]));
|
||||||
if( pList->a==0 ) goto no_mem;
|
if( pList->a==0 ) goto no_mem;
|
||||||
}else if( (pList->nExpr & (pList->nExpr-1))==0 ){
|
}else if( (pList->nExpr & (pList->nExpr-1))==0 ){
|
||||||
struct ExprList_item *a;
|
struct ExprList_item *a;
|
||||||
|
@@ -219,7 +219,7 @@ int sqlite3FkLocateIndex(
|
|||||||
}
|
}
|
||||||
}else if( paiCol ){
|
}else if( paiCol ){
|
||||||
assert( nCol>1 );
|
assert( nCol>1 );
|
||||||
aiCol = (int *)sqlite3DbMallocRaw(pParse->db, nCol*sizeof(int));
|
aiCol = (int *)sqlite3DbMallocRawNN(pParse->db, nCol*sizeof(int));
|
||||||
if( !aiCol ) return 1;
|
if( !aiCol ) return 1;
|
||||||
*paiCol = aiCol;
|
*paiCol = aiCol;
|
||||||
}
|
}
|
||||||
|
@@ -230,7 +230,7 @@ static int autoIncBegin(
|
|||||||
pInfo = pToplevel->pAinc;
|
pInfo = pToplevel->pAinc;
|
||||||
while( pInfo && pInfo->pTab!=pTab ){ pInfo = pInfo->pNext; }
|
while( pInfo && pInfo->pTab!=pTab ){ pInfo = pInfo->pNext; }
|
||||||
if( pInfo==0 ){
|
if( pInfo==0 ){
|
||||||
pInfo = sqlite3DbMallocRaw(pParse->db, sizeof(*pInfo));
|
pInfo = sqlite3DbMallocRawNN(pParse->db, sizeof(*pInfo));
|
||||||
if( pInfo==0 ) return 0;
|
if( pInfo==0 ) return 0;
|
||||||
pInfo->pNext = pToplevel->pAinc;
|
pInfo->pNext = pToplevel->pAinc;
|
||||||
pToplevel->pAinc = pInfo;
|
pToplevel->pAinc = pInfo;
|
||||||
@@ -787,7 +787,7 @@ void sqlite3Insert(
|
|||||||
int nIdx;
|
int nIdx;
|
||||||
nIdx = sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, 0, -1, 0,
|
nIdx = sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, 0, -1, 0,
|
||||||
&iDataCur, &iIdxCur);
|
&iDataCur, &iIdxCur);
|
||||||
aRegIdx = sqlite3DbMallocRaw(db, sizeof(int)*(nIdx+1));
|
aRegIdx = sqlite3DbMallocRawNN(db, sizeof(int)*(nIdx+1));
|
||||||
if( aRegIdx==0 ){
|
if( aRegIdx==0 ){
|
||||||
goto insert_cleanup;
|
goto insert_cleanup;
|
||||||
}
|
}
|
||||||
|
91
src/malloc.c
91
src/malloc.c
@@ -575,10 +575,24 @@ void *sqlite3MallocZero(u64 n){
|
|||||||
** the mallocFailed flag in the connection pointer.
|
** the mallocFailed flag in the connection pointer.
|
||||||
*/
|
*/
|
||||||
void *sqlite3DbMallocZero(sqlite3 *db, u64 n){
|
void *sqlite3DbMallocZero(sqlite3 *db, u64 n){
|
||||||
void *p = sqlite3DbMallocRaw(db, n);
|
void *p;
|
||||||
if( p ){
|
testcase( db==0 );
|
||||||
memset(p, 0, (size_t)n);
|
p = sqlite3DbMallocRaw(db, n);
|
||||||
}
|
if( p ) memset(p, 0, (size_t)n);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Finish the work of sqlite3DbMallocRawNN for the unusual and
|
||||||
|
** slower case when the allocation cannot be fulfilled using lookaside.
|
||||||
|
*/
|
||||||
|
static SQLITE_NOINLINE void *dbMallocRawFinish(sqlite3 *db, u64 n){
|
||||||
|
void *p;
|
||||||
|
assert( db!=0 );
|
||||||
|
p = sqlite3Malloc(n);
|
||||||
|
if( !p ) sqlite3OomFault(db);
|
||||||
|
sqlite3MemdebugSetType(p,
|
||||||
|
(db->lookaside.bDisable==0) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -600,50 +614,48 @@ void *sqlite3DbMallocZero(sqlite3 *db, u64 n){
|
|||||||
**
|
**
|
||||||
** In other words, if a subsequent malloc (ex: "b") worked, it is assumed
|
** In other words, if a subsequent malloc (ex: "b") worked, it is assumed
|
||||||
** that all prior mallocs (ex: "a") worked too.
|
** that all prior mallocs (ex: "a") worked too.
|
||||||
|
**
|
||||||
|
** The sqlite3MallocRawNN() variant guarantees that the "db" parameter is
|
||||||
|
** not a NULL pointer.
|
||||||
*/
|
*/
|
||||||
static SQLITE_NOINLINE void *dbMallocRawFinish(sqlite3 *db, u64 n);
|
|
||||||
void *sqlite3DbMallocRaw(sqlite3 *db, u64 n){
|
void *sqlite3DbMallocRaw(sqlite3 *db, u64 n){
|
||||||
assert( db==0 || sqlite3_mutex_held(db->mutex) );
|
void *p;
|
||||||
assert( db==0 || db->pnBytesFreed==0 );
|
if( db ) return sqlite3DbMallocRawNN(db, n);
|
||||||
|
p = sqlite3Malloc(n);
|
||||||
|
sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
void *sqlite3DbMallocRawNN(sqlite3 *db, u64 n){
|
||||||
|
assert( db!=0 );
|
||||||
|
assert( sqlite3_mutex_held(db->mutex) );
|
||||||
|
assert( db->pnBytesFreed==0 );
|
||||||
#ifndef SQLITE_OMIT_LOOKASIDE
|
#ifndef SQLITE_OMIT_LOOKASIDE
|
||||||
if( db ){
|
LookasideSlot *pBuf;
|
||||||
LookasideSlot *pBuf;
|
if( db->lookaside.bDisable==0 ){
|
||||||
if( db->lookaside.bDisable==0 ){
|
assert( db->mallocFailed==0 );
|
||||||
assert( db->mallocFailed==0 );
|
if( n>db->lookaside.sz ){
|
||||||
if( n>db->lookaside.sz ){
|
db->lookaside.anStat[1]++;
|
||||||
db->lookaside.anStat[1]++;
|
}else if( (pBuf = db->lookaside.pFree)==0 ){
|
||||||
}else if( (pBuf = db->lookaside.pFree)==0 ){
|
db->lookaside.anStat[2]++;
|
||||||
db->lookaside.anStat[2]++;
|
}else{
|
||||||
}else{
|
db->lookaside.pFree = pBuf->pNext;
|
||||||
db->lookaside.pFree = pBuf->pNext;
|
db->lookaside.nOut++;
|
||||||
db->lookaside.nOut++;
|
db->lookaside.anStat[0]++;
|
||||||
db->lookaside.anStat[0]++;
|
if( db->lookaside.nOut>db->lookaside.mxOut ){
|
||||||
if( db->lookaside.nOut>db->lookaside.mxOut ){
|
db->lookaside.mxOut = db->lookaside.nOut;
|
||||||
db->lookaside.mxOut = db->lookaside.nOut;
|
|
||||||
}
|
|
||||||
return (void*)pBuf;
|
|
||||||
}
|
}
|
||||||
}else if( db->mallocFailed ){
|
return (void*)pBuf;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
}else if( db->mallocFailed ){
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if( db && db->mallocFailed ){
|
if( db->mallocFailed ){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return dbMallocRawFinish(db, n);
|
return dbMallocRawFinish(db, n);
|
||||||
}
|
}
|
||||||
static SQLITE_NOINLINE void *dbMallocRawFinish(sqlite3 *db, u64 n){
|
|
||||||
void *p = sqlite3Malloc(n);
|
|
||||||
if( !p && db ){
|
|
||||||
sqlite3OomFault(db);
|
|
||||||
}
|
|
||||||
sqlite3MemdebugSetType(p,
|
|
||||||
(db && db->lookaside.bDisable==0) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP);
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Forward declaration */
|
/* Forward declaration */
|
||||||
static SQLITE_NOINLINE void *dbReallocFinish(sqlite3 *db, void *p, u64 n);
|
static SQLITE_NOINLINE void *dbReallocFinish(sqlite3 *db, void *p, u64 n);
|
||||||
@@ -654,7 +666,7 @@ static SQLITE_NOINLINE void *dbReallocFinish(sqlite3 *db, void *p, u64 n);
|
|||||||
*/
|
*/
|
||||||
void *sqlite3DbRealloc(sqlite3 *db, void *p, u64 n){
|
void *sqlite3DbRealloc(sqlite3 *db, void *p, u64 n){
|
||||||
assert( db!=0 );
|
assert( db!=0 );
|
||||||
if( p==0 ) return sqlite3DbMallocRaw(db, n);
|
if( p==0 ) return sqlite3DbMallocRawNN(db, n);
|
||||||
assert( sqlite3_mutex_held(db->mutex) );
|
assert( sqlite3_mutex_held(db->mutex) );
|
||||||
if( isLookaside(db,p) && n<=db->lookaside.sz ) return p;
|
if( isLookaside(db,p) && n<=db->lookaside.sz ) return p;
|
||||||
return dbReallocFinish(db, p, n);
|
return dbReallocFinish(db, p, n);
|
||||||
@@ -665,7 +677,7 @@ static SQLITE_NOINLINE void *dbReallocFinish(sqlite3 *db, void *p, u64 n){
|
|||||||
assert( p!=0 );
|
assert( p!=0 );
|
||||||
if( db->mallocFailed==0 ){
|
if( db->mallocFailed==0 ){
|
||||||
if( isLookaside(db, p) ){
|
if( isLookaside(db, p) ){
|
||||||
pNew = sqlite3DbMallocRaw(db, n);
|
pNew = sqlite3DbMallocRawNN(db, n);
|
||||||
if( pNew ){
|
if( pNew ){
|
||||||
memcpy(pNew, p, db->lookaside.sz);
|
memcpy(pNew, p, db->lookaside.sz);
|
||||||
sqlite3DbFree(db, p);
|
sqlite3DbFree(db, p);
|
||||||
@@ -721,11 +733,12 @@ char *sqlite3DbStrDup(sqlite3 *db, const char *z){
|
|||||||
}
|
}
|
||||||
char *sqlite3DbStrNDup(sqlite3 *db, const char *z, u64 n){
|
char *sqlite3DbStrNDup(sqlite3 *db, const char *z, u64 n){
|
||||||
char *zNew;
|
char *zNew;
|
||||||
|
assert( db!=0 );
|
||||||
if( z==0 ){
|
if( z==0 ){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
assert( (n&0x7fffffff)==n );
|
assert( (n&0x7fffffff)==n );
|
||||||
zNew = sqlite3DbMallocRaw(db, n+1);
|
zNew = sqlite3DbMallocRawNN(db, n+1);
|
||||||
if( zNew ){
|
if( zNew ){
|
||||||
memcpy(zNew, z, (size_t)n);
|
memcpy(zNew, z, (size_t)n);
|
||||||
zNew[n] = 0;
|
zNew[n] = 0;
|
||||||
|
@@ -181,7 +181,7 @@ static struct RowSetEntry *rowSetEntryAlloc(RowSet *p){
|
|||||||
assert( p!=0 );
|
assert( p!=0 );
|
||||||
if( p->nFresh==0 ){
|
if( p->nFresh==0 ){
|
||||||
struct RowSetChunk *pNew;
|
struct RowSetChunk *pNew;
|
||||||
pNew = sqlite3DbMallocRaw(p->db, sizeof(*pNew));
|
pNew = sqlite3DbMallocRawNN(p->db, sizeof(*pNew));
|
||||||
if( pNew==0 ){
|
if( pNew==0 ){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -112,7 +112,7 @@ Select *sqlite3SelectNew(
|
|||||||
Select *pNew;
|
Select *pNew;
|
||||||
Select standin;
|
Select standin;
|
||||||
sqlite3 *db = pParse->db;
|
sqlite3 *db = pParse->db;
|
||||||
pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
|
pNew = sqlite3DbMallocRawNN(db, sizeof(*pNew) );
|
||||||
if( pNew==0 ){
|
if( pNew==0 ){
|
||||||
assert( db->mallocFailed );
|
assert( db->mallocFailed );
|
||||||
pNew = &standin;
|
pNew = &standin;
|
||||||
@@ -2870,7 +2870,7 @@ static int multiSelectOrderBy(
|
|||||||
** to the right and the left are evaluated, they use the correct
|
** to the right and the left are evaluated, they use the correct
|
||||||
** collation.
|
** collation.
|
||||||
*/
|
*/
|
||||||
aPermute = sqlite3DbMallocRaw(db, sizeof(int)*(nOrderBy + 1));
|
aPermute = sqlite3DbMallocRawNN(db, sizeof(int)*(nOrderBy + 1));
|
||||||
if( aPermute ){
|
if( aPermute ){
|
||||||
struct ExprList_item *pItem;
|
struct ExprList_item *pItem;
|
||||||
aPermute[0] = nOrderBy;
|
aPermute[0] = nOrderBy;
|
||||||
|
@@ -3227,6 +3227,7 @@ void *sqlite3Malloc(u64);
|
|||||||
void *sqlite3MallocZero(u64);
|
void *sqlite3MallocZero(u64);
|
||||||
void *sqlite3DbMallocZero(sqlite3*, u64);
|
void *sqlite3DbMallocZero(sqlite3*, u64);
|
||||||
void *sqlite3DbMallocRaw(sqlite3*, u64);
|
void *sqlite3DbMallocRaw(sqlite3*, u64);
|
||||||
|
void *sqlite3DbMallocRawNN(sqlite3*, u64);
|
||||||
char *sqlite3DbStrDup(sqlite3*,const char*);
|
char *sqlite3DbStrDup(sqlite3*,const char*);
|
||||||
char *sqlite3DbStrNDup(sqlite3*,const char*, u64);
|
char *sqlite3DbStrNDup(sqlite3*,const char*, u64);
|
||||||
void *sqlite3Realloc(void*, u64);
|
void *sqlite3Realloc(void*, u64);
|
||||||
|
@@ -197,7 +197,7 @@ void sqlite3Update(
|
|||||||
/* Allocate space for aXRef[], aRegIdx[], and aToOpen[].
|
/* Allocate space for aXRef[], aRegIdx[], and aToOpen[].
|
||||||
** Initialize aXRef[] and aToOpen[] to their default values.
|
** Initialize aXRef[] and aToOpen[] to their default values.
|
||||||
*/
|
*/
|
||||||
aXRef = sqlite3DbMallocRaw(db, sizeof(int) * (pTab->nCol+nIdx) + nIdx+2 );
|
aXRef = sqlite3DbMallocRawNN(db, sizeof(int) * (pTab->nCol+nIdx) + nIdx+2 );
|
||||||
if( aXRef==0 ) goto update_cleanup;
|
if( aXRef==0 ) goto update_cleanup;
|
||||||
aRegIdx = aXRef+pTab->nCol;
|
aRegIdx = aXRef+pTab->nCol;
|
||||||
aToOpen = (u8*)(aRegIdx+nIdx);
|
aToOpen = (u8*)(aRegIdx+nIdx);
|
||||||
|
@@ -1150,7 +1150,7 @@ void *sqlite3HexToBlob(sqlite3 *db, const char *z, int n){
|
|||||||
char *zBlob;
|
char *zBlob;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
zBlob = (char *)sqlite3DbMallocRaw(db, n/2 + 1);
|
zBlob = (char *)sqlite3DbMallocRawNN(db, n/2 + 1);
|
||||||
n--;
|
n--;
|
||||||
if( zBlob ){
|
if( zBlob ){
|
||||||
for(i=0; i<n; i+=2){
|
for(i=0; i<n; i+=2){
|
||||||
|
@@ -1626,7 +1626,7 @@ case OP_Function0: {
|
|||||||
assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) );
|
assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) );
|
||||||
assert( n==0 || (pOp->p2>0 && pOp->p2+n<=(p->nMem-p->nCursor)+1) );
|
assert( n==0 || (pOp->p2>0 && pOp->p2+n<=(p->nMem-p->nCursor)+1) );
|
||||||
assert( pOp->p3<pOp->p2 || pOp->p3>=pOp->p2+n );
|
assert( pOp->p3<pOp->p2 || pOp->p3>=pOp->p2+n );
|
||||||
pCtx = sqlite3DbMallocRaw(db, sizeof(*pCtx) + (n-1)*sizeof(sqlite3_value*));
|
pCtx = sqlite3DbMallocRawNN(db, sizeof(*pCtx) + (n-1)*sizeof(sqlite3_value*));
|
||||||
if( pCtx==0 ) goto no_mem;
|
if( pCtx==0 ) goto no_mem;
|
||||||
pCtx->pOut = 0;
|
pCtx->pOut = 0;
|
||||||
pCtx->pFunc = pOp->p4.pFunc;
|
pCtx->pFunc = pOp->p4.pFunc;
|
||||||
@@ -2870,7 +2870,7 @@ case OP_Savepoint: {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Create a new savepoint structure. */
|
/* Create a new savepoint structure. */
|
||||||
pNew = sqlite3DbMallocRaw(db, sizeof(Savepoint)+nName+1);
|
pNew = sqlite3DbMallocRawNN(db, sizeof(Savepoint)+nName+1);
|
||||||
if( pNew ){
|
if( pNew ){
|
||||||
pNew->zName = (char *)&pNew[1];
|
pNew->zName = (char *)&pNew[1];
|
||||||
memcpy(pNew->zName, zName, nName+1);
|
memcpy(pNew->zName, zName, nName+1);
|
||||||
@@ -5420,7 +5420,7 @@ case OP_IntegrityCk: {
|
|||||||
assert( p->bIsReader );
|
assert( p->bIsReader );
|
||||||
nRoot = pOp->p2;
|
nRoot = pOp->p2;
|
||||||
assert( nRoot>0 );
|
assert( nRoot>0 );
|
||||||
aRoot = sqlite3DbMallocRaw(db, sizeof(int)*(nRoot+1) );
|
aRoot = sqlite3DbMallocRawNN(db, sizeof(int)*(nRoot+1) );
|
||||||
if( aRoot==0 ) goto no_mem;
|
if( aRoot==0 ) goto no_mem;
|
||||||
assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) );
|
assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) );
|
||||||
pnErr = &aMem[pOp->p3];
|
pnErr = &aMem[pOp->p3];
|
||||||
@@ -5917,7 +5917,7 @@ case OP_AggStep0: {
|
|||||||
assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) );
|
assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) );
|
||||||
assert( n==0 || (pOp->p2>0 && pOp->p2+n<=(p->nMem-p->nCursor)+1) );
|
assert( n==0 || (pOp->p2>0 && pOp->p2+n<=(p->nMem-p->nCursor)+1) );
|
||||||
assert( pOp->p3<pOp->p2 || pOp->p3>=pOp->p2+n );
|
assert( pOp->p3<pOp->p2 || pOp->p3>=pOp->p2+n );
|
||||||
pCtx = sqlite3DbMallocRaw(db, sizeof(*pCtx) + (n-1)*sizeof(sqlite3_value*));
|
pCtx = sqlite3DbMallocRawNN(db, sizeof(*pCtx) + (n-1)*sizeof(sqlite3_value*));
|
||||||
if( pCtx==0 ) goto no_mem;
|
if( pCtx==0 ) goto no_mem;
|
||||||
pCtx->pMem = 0;
|
pCtx->pMem = 0;
|
||||||
pCtx->pFunc = pOp->p4.pFunc;
|
pCtx->pFunc = pOp->p4.pFunc;
|
||||||
|
@@ -289,7 +289,7 @@ int sqlite3VdbeAddOp4Dup8(
|
|||||||
const u8 *zP4, /* The P4 operand */
|
const u8 *zP4, /* The P4 operand */
|
||||||
int p4type /* P4 operand type */
|
int p4type /* P4 operand type */
|
||||||
){
|
){
|
||||||
char *p4copy = sqlite3DbMallocRaw(sqlite3VdbeDb(p), 8);
|
char *p4copy = sqlite3DbMallocRawNN(sqlite3VdbeDb(p), 8);
|
||||||
if( p4copy ) memcpy(p4copy, zP4, 8);
|
if( p4copy ) memcpy(p4copy, zP4, 8);
|
||||||
return sqlite3VdbeAddOp4(p, op, p1, p2, p3, p4copy, p4type);
|
return sqlite3VdbeAddOp4(p, op, p1, p2, p3, p4copy, p4type);
|
||||||
}
|
}
|
||||||
|
@@ -116,6 +116,7 @@ int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){
|
|||||||
SQLITE_NOINLINE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){
|
SQLITE_NOINLINE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){
|
||||||
assert( sqlite3VdbeCheckMemInvariants(pMem) );
|
assert( sqlite3VdbeCheckMemInvariants(pMem) );
|
||||||
assert( (pMem->flags&MEM_RowSet)==0 );
|
assert( (pMem->flags&MEM_RowSet)==0 );
|
||||||
|
testcase( pMem->db==0 );
|
||||||
|
|
||||||
/* If the bPreserve flag is set to true, then the memory cell must already
|
/* If the bPreserve flag is set to true, then the memory cell must already
|
||||||
** contain a valid string or blob value. */
|
** contain a valid string or blob value. */
|
||||||
@@ -719,7 +720,7 @@ void sqlite3VdbeMemSetRowSet(Mem *pMem){
|
|||||||
assert( db!=0 );
|
assert( db!=0 );
|
||||||
assert( (pMem->flags & MEM_RowSet)==0 );
|
assert( (pMem->flags & MEM_RowSet)==0 );
|
||||||
sqlite3VdbeMemRelease(pMem);
|
sqlite3VdbeMemRelease(pMem);
|
||||||
pMem->zMalloc = sqlite3DbMallocRaw(db, 64);
|
pMem->zMalloc = sqlite3DbMallocRawNN(db, 64);
|
||||||
if( db->mallocFailed ){
|
if( db->mallocFailed ){
|
||||||
pMem->flags = MEM_Null;
|
pMem->flags = MEM_Null;
|
||||||
pMem->szMalloc = 0;
|
pMem->szMalloc = 0;
|
||||||
@@ -1440,7 +1441,7 @@ static void recordFunc(
|
|||||||
db = sqlite3_context_db_handle(context);
|
db = sqlite3_context_db_handle(context);
|
||||||
|
|
||||||
nRet = 1 + nSerial + nVal;
|
nRet = 1 + nSerial + nVal;
|
||||||
aRet = sqlite3DbMallocRaw(db, nRet);
|
aRet = sqlite3DbMallocRawNN(db, nRet);
|
||||||
if( aRet==0 ){
|
if( aRet==0 ){
|
||||||
sqlite3_result_error_nomem(context);
|
sqlite3_result_error_nomem(context);
|
||||||
}else{
|
}else{
|
||||||
|
@@ -49,7 +49,7 @@ static int createModule(
|
|||||||
rc = SQLITE_MISUSE_BKPT;
|
rc = SQLITE_MISUSE_BKPT;
|
||||||
}else{
|
}else{
|
||||||
Module *pMod;
|
Module *pMod;
|
||||||
pMod = (Module *)sqlite3DbMallocRaw(db, sizeof(Module) + nName + 1);
|
pMod = (Module *)sqlite3DbMallocRawNN(db, sizeof(Module) + nName + 1);
|
||||||
if( pMod ){
|
if( pMod ){
|
||||||
Module *pDel;
|
Module *pDel;
|
||||||
char *zCopy = (char *)(&pMod[1]);
|
char *zCopy = (char *)(&pMod[1]);
|
||||||
|
@@ -1735,7 +1735,7 @@ static int whereLoopResize(sqlite3 *db, WhereLoop *p, int n){
|
|||||||
WhereTerm **paNew;
|
WhereTerm **paNew;
|
||||||
if( p->nLSlot>=n ) return SQLITE_OK;
|
if( p->nLSlot>=n ) return SQLITE_OK;
|
||||||
n = (n+7)&~7;
|
n = (n+7)&~7;
|
||||||
paNew = sqlite3DbMallocRaw(db, sizeof(p->aLTerm[0])*n);
|
paNew = sqlite3DbMallocRawNN(db, sizeof(p->aLTerm[0])*n);
|
||||||
if( paNew==0 ) return SQLITE_NOMEM;
|
if( paNew==0 ) return SQLITE_NOMEM;
|
||||||
memcpy(paNew, p->aLTerm, sizeof(p->aLTerm[0])*p->nLSlot);
|
memcpy(paNew, p->aLTerm, sizeof(p->aLTerm[0])*p->nLSlot);
|
||||||
if( p->aLTerm!=p->aLTermSpace ) sqlite3DbFree(db, p->aLTerm);
|
if( p->aLTerm!=p->aLTermSpace ) sqlite3DbFree(db, p->aLTerm);
|
||||||
@@ -2032,7 +2032,7 @@ static int whereLoopInsert(WhereLoopBuilder *pBuilder, WhereLoop *pTemplate){
|
|||||||
#endif
|
#endif
|
||||||
if( p==0 ){
|
if( p==0 ){
|
||||||
/* Allocate a new WhereLoop to add to the end of the list */
|
/* Allocate a new WhereLoop to add to the end of the list */
|
||||||
*ppPrev = p = sqlite3DbMallocRaw(db, sizeof(WhereLoop));
|
*ppPrev = p = sqlite3DbMallocRawNN(db, sizeof(WhereLoop));
|
||||||
if( p==0 ) return SQLITE_NOMEM;
|
if( p==0 ) return SQLITE_NOMEM;
|
||||||
whereLoopInit(p);
|
whereLoopInit(p);
|
||||||
p->pNextLoop = 0;
|
p->pNextLoop = 0;
|
||||||
@@ -3529,7 +3529,7 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
|
|||||||
/* Allocate and initialize space for aTo, aFrom and aSortCost[] */
|
/* Allocate and initialize space for aTo, aFrom and aSortCost[] */
|
||||||
nSpace = (sizeof(WherePath)+sizeof(WhereLoop*)*nLoop)*mxChoice*2;
|
nSpace = (sizeof(WherePath)+sizeof(WhereLoop*)*nLoop)*mxChoice*2;
|
||||||
nSpace += sizeof(LogEst) * nOrderBy;
|
nSpace += sizeof(LogEst) * nOrderBy;
|
||||||
pSpace = sqlite3DbMallocRaw(db, nSpace);
|
pSpace = sqlite3DbMallocRawNN(db, nSpace);
|
||||||
if( pSpace==0 ) return SQLITE_NOMEM;
|
if( pSpace==0 ) return SQLITE_NOMEM;
|
||||||
aTo = (WherePath*)pSpace;
|
aTo = (WherePath*)pSpace;
|
||||||
aFrom = aTo+mxChoice;
|
aFrom = aTo+mxChoice;
|
||||||
|
@@ -64,7 +64,7 @@ static int whereClauseInsert(WhereClause *pWC, Expr *p, u16 wtFlags){
|
|||||||
if( pWC->nTerm>=pWC->nSlot ){
|
if( pWC->nTerm>=pWC->nSlot ){
|
||||||
WhereTerm *pOld = pWC->a;
|
WhereTerm *pOld = pWC->a;
|
||||||
sqlite3 *db = pWC->pWInfo->pParse->db;
|
sqlite3 *db = pWC->pWInfo->pParse->db;
|
||||||
pWC->a = sqlite3DbMallocRaw(db, sizeof(pWC->a[0])*pWC->nSlot*2 );
|
pWC->a = sqlite3DbMallocRawNN(db, sizeof(pWC->a[0])*pWC->nSlot*2 );
|
||||||
if( pWC->a==0 ){
|
if( pWC->a==0 ){
|
||||||
if( wtFlags & TERM_DYNAMIC ){
|
if( wtFlags & TERM_DYNAMIC ){
|
||||||
sqlite3ExprDelete(db, p);
|
sqlite3ExprDelete(db, p);
|
||||||
@@ -549,7 +549,7 @@ static void exprAnalyzeOrTerm(
|
|||||||
WhereAndInfo *pAndInfo;
|
WhereAndInfo *pAndInfo;
|
||||||
assert( (pOrTerm->wtFlags & (TERM_ANDINFO|TERM_ORINFO))==0 );
|
assert( (pOrTerm->wtFlags & (TERM_ANDINFO|TERM_ORINFO))==0 );
|
||||||
chngToIN = 0;
|
chngToIN = 0;
|
||||||
pAndInfo = sqlite3DbMallocRaw(db, sizeof(*pAndInfo));
|
pAndInfo = sqlite3DbMallocRawNN(db, sizeof(*pAndInfo));
|
||||||
if( pAndInfo ){
|
if( pAndInfo ){
|
||||||
WhereClause *pAndWC;
|
WhereClause *pAndWC;
|
||||||
WhereTerm *pAndTerm;
|
WhereTerm *pAndTerm;
|
||||||
|
Reference in New Issue
Block a user