Faster allocation of new sqlite3_stmt objects.
FossilOrigin-Name: 891f1f72187f0f9ec0d24fda98cc08be3ae3c3ff8b27c4e409ee7135c3106398
This commit is contained in:
parent
b6991796b4
commit
81f9159b5e
14
manifest
14
manifest
@ -1,5 +1,5 @@
|
||||
C Move\sthe\snOpAlloc\sfield\sfrom\sParse\sinto\sVdbe\sto\savoid\san\sextra\spointer\ndeference\son\sthe\sfast\spath\sin\ssqlite3VdbeAddOp3().
|
||||
D 2018-12-28T20:14:03.641
|
||||
C Faster\sallocation\sof\snew\ssqlite3_stmt\sobjects.
|
||||
D 2018-12-28T20:48:07.501
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6
|
||||
@ -583,9 +583,9 @@ F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157
|
||||
F src/vacuum.c 3ffe64ecfc94b7528c5d7bdb1c3a19d72fec63f2aa846e3b90f8de5dbbddf5aa
|
||||
F src/vdbe.c 8869a60f4b910c0f6d4ae0f0e23b7a835cae7ed67aa0ce2053d1bbe3e9facc53
|
||||
F src/vdbe.h 8990d668a89890a33326b0a29b992c4014b72f3b6cdcd9ee0e190593c247f9b0
|
||||
F src/vdbeInt.h 24975074bd9e3b375afefc79ac01f63edc8e823938b410398b4139ce73ceaed6
|
||||
F src/vdbeInt.h a76d5eed62c76bcd8de7afd3147fac1bc40c5a870582664bcd7d071ef437c37f
|
||||
F src/vdbeapi.c 57a2d794a8833f269b878dbc24e955369bdb379af6c4e93ebc5ce1a20fa3daf4
|
||||
F src/vdbeaux.c 742fb6de47b5db220371552f01685c0133ce3218fff5c84ca0cf0118a1329d08
|
||||
F src/vdbeaux.c c5d6c0afa98dbc42eac7f74da9f126fe33ec38fa13fec0790b268547f3d96ff2
|
||||
F src/vdbeblob.c f5c70f973ea3a9e915d1693278a5f890dc78594300cf4d54e64f2b0917c94191
|
||||
F src/vdbemem.c 7b3305bc4a5139f4536ac9b5f61da0f915e49d2e3fdfa87dfdfa9d7aba8bc1e9
|
||||
F src/vdbesort.c 90aad5a92608f2dd771c96749beabdb562c9d881131a860a7a5bccf66dc3be7f
|
||||
@ -1795,7 +1795,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||
P c4d44542d259bbec11aea60ae94fcb4acd53e97e125723cae078cf0f8873f8ef
|
||||
R 1ab45fb4eb1f997b9040d140828d5b55
|
||||
P 8f10efc29dea7b816b1ba401726c268950d6671d890f686911269082a241d8d9
|
||||
R 7062d8a270754e07b86fa92b28527403
|
||||
U drh
|
||||
Z b6640113f9663b2a5c9ad0fe2d11cd40
|
||||
Z 74c93f83e36562633bb10d90f0e5b0ee
|
||||
|
@ -1 +1 @@
|
||||
8f10efc29dea7b816b1ba401726c268950d6671d890f686911269082a241d8d9
|
||||
891f1f72187f0f9ec0d24fda98cc08be3ae3c3ff8b27c4e409ee7135c3106398
|
@ -385,6 +385,10 @@ struct Vdbe {
|
||||
i64 nFkConstraint; /* Number of imm. FK constraints this VM */
|
||||
i64 nStmtDefCons; /* Number of def. constraints when stmt started */
|
||||
i64 nStmtDefImmCons; /* Number of def. imm constraints when stmt started */
|
||||
Mem *aMem; /* The memory locations */
|
||||
Mem **apArg; /* Arguments to currently executing user function */
|
||||
VdbeCursor **apCsr; /* One element of this array for each open cursor */
|
||||
Mem *aVar; /* Values for the OP_Variable opcode. */
|
||||
|
||||
/* When allocating a new Vdbe object, all of the fields below should be
|
||||
** initialized to zero or NULL */
|
||||
@ -392,13 +396,9 @@ struct Vdbe {
|
||||
Op *aOp; /* Space to hold the virtual machine's program */
|
||||
int nOp; /* Number of instructions in the program */
|
||||
int nOpAlloc; /* Slots allocated for aOp[] */
|
||||
Mem *aMem; /* The memory locations */
|
||||
Mem **apArg; /* Arguments to currently executing user function */
|
||||
Mem *aColName; /* Column names to return */
|
||||
Mem *pResultSet; /* Pointer to an array of results */
|
||||
char *zErrMsg; /* Error message written here */
|
||||
VdbeCursor **apCsr; /* One element of this array for each open cursor */
|
||||
Mem *aVar; /* Values for the OP_Variable opcode. */
|
||||
VList *pVList; /* Name of variables */
|
||||
#ifndef SQLITE_OMIT_TRACE
|
||||
i64 startTime; /* Time when query started - used for profiling */
|
||||
|
@ -2187,19 +2187,27 @@ void sqlite3VdbeMakeReady(
|
||||
** the leftover memory at the end of the opcode array. This can significantly
|
||||
** reduce the amount of memory held by a prepared statement.
|
||||
*/
|
||||
do {
|
||||
x.nNeeded = 0;
|
||||
p->aMem = allocSpace(&x, p->aMem, nMem*sizeof(Mem));
|
||||
p->aVar = allocSpace(&x, p->aVar, nVar*sizeof(Mem));
|
||||
p->apArg = allocSpace(&x, p->apArg, nArg*sizeof(Mem*));
|
||||
p->apCsr = allocSpace(&x, p->apCsr, nCursor*sizeof(VdbeCursor*));
|
||||
x.nNeeded = 0;
|
||||
p->aMem = allocSpace(&x, 0, nMem*sizeof(Mem));
|
||||
p->aVar = allocSpace(&x, 0, nVar*sizeof(Mem));
|
||||
p->apArg = allocSpace(&x, 0, nArg*sizeof(Mem*));
|
||||
p->apCsr = allocSpace(&x, 0, nCursor*sizeof(VdbeCursor*));
|
||||
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
|
||||
p->anExec = allocSpace(&x, p->anExec, p->nOp*sizeof(i64));
|
||||
p->anExec = allocSpace(&x, 0, p->nOp*sizeof(i64));
|
||||
#endif
|
||||
if( x.nNeeded==0 ) break;
|
||||
if( x.nNeeded ){
|
||||
x.pSpace = p->pFree = sqlite3DbMallocRawNN(db, x.nNeeded);
|
||||
x.nFree = x.nNeeded;
|
||||
}while( !db->mallocFailed );
|
||||
if( !db->mallocFailed ){
|
||||
p->aMem = allocSpace(&x, p->aMem, nMem*sizeof(Mem));
|
||||
p->aVar = allocSpace(&x, p->aVar, nVar*sizeof(Mem));
|
||||
p->apArg = allocSpace(&x, p->apArg, nArg*sizeof(Mem*));
|
||||
p->apCsr = allocSpace(&x, p->apCsr, nCursor*sizeof(VdbeCursor*));
|
||||
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
|
||||
p->anExec = allocSpace(&x, p->anExec, p->nOp*sizeof(i64));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
p->pVList = pParse->pVList;
|
||||
pParse->pVList = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user