mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-15 11:41:13 +03:00
A new implementation of sqlite3VdbeMakeLabel() is faster and makes fewer
memory allocations by deferring memory allocation until sqlite3VdbeResolveLabel() is called, at which point the code generator has a better idea of how big the relocation table needs to be. The sqlite3VdbeMakeLabel() routine now takes a Parse* parameter instead of Vdbe*. FossilOrigin-Name: 4a0929ac76d8aa5dd65eac3b83d6bbf41e505e01d175ca0fb2b19ba02d439415
This commit is contained in:
@@ -565,7 +565,7 @@ static int codeEqualityTerm(
|
||||
|
||||
pLoop->wsFlags |= WHERE_IN_ABLE;
|
||||
if( pLevel->u.in.nIn==0 ){
|
||||
pLevel->addrNxt = sqlite3VdbeMakeLabel(v);
|
||||
pLevel->addrNxt = sqlite3VdbeMakeLabel(pParse);
|
||||
}
|
||||
|
||||
i = pLevel->u.in.nIn;
|
||||
@@ -1213,8 +1213,8 @@ Bitmask sqlite3WhereCodeOneLoopStart(
|
||||
** there are no IN operators in the constraints, the "addrNxt" label
|
||||
** is the same as "addrBrk".
|
||||
*/
|
||||
addrBrk = pLevel->addrBrk = pLevel->addrNxt = sqlite3VdbeMakeLabel(v);
|
||||
addrCont = pLevel->addrCont = sqlite3VdbeMakeLabel(v);
|
||||
addrBrk = pLevel->addrBrk = pLevel->addrNxt = sqlite3VdbeMakeLabel(pParse);
|
||||
addrCont = pLevel->addrCont = sqlite3VdbeMakeLabel(pParse);
|
||||
|
||||
/* If this is the right table of a LEFT OUTER JOIN, allocate and
|
||||
** initialize a memory cell that records if this table matches any
|
||||
@@ -1835,7 +1835,7 @@ Bitmask sqlite3WhereCodeOneLoopStart(
|
||||
int regReturn = ++pParse->nMem; /* Register used with OP_Gosub */
|
||||
int regRowset = 0; /* Register for RowSet object */
|
||||
int regRowid = 0; /* Register holding rowid */
|
||||
int iLoopBody = sqlite3VdbeMakeLabel(v); /* Start of loop body */
|
||||
int iLoopBody = sqlite3VdbeMakeLabel(pParse);/* Start of loop body */
|
||||
int iRetInit; /* Address of regReturn init */
|
||||
int untestedTerms = 0; /* Some terms not completely tested */
|
||||
int ii; /* Loop counter */
|
||||
|
||||
Reference in New Issue
Block a user