diff options
author | drh <drh@noemail.net> | 2019-12-12 22:11:33 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2019-12-12 22:11:33 +0000 |
commit | cbb9da337e7f8dc4e6bea59399a0394ec390f1f2 (patch) | |
tree | 9e2fc1883495a5eeb3e2ad2e5167486fd567afed /src/expr.c | |
parent | c947d6a4dcdfe6f0185a22464cf97153cabb8052 (diff) | |
download | sqlite-cbb9da337e7f8dc4e6bea59399a0394ec390f1f2.tar.gz sqlite-cbb9da337e7f8dc4e6bea59399a0394ec390f1f2.zip |
Work toward reducing the incremental size of an ExprList object to 24-byte
per entry, from 32-bytes (on a 64-bit machine). This helps the new
mini-lookaside allocator to run better by avoiding excessive reallocs.
The current change mostly works, but still has a few loose ends to tie up.
This check-in is merely a snapshot to save my work.
FossilOrigin-Name: fdda76cfb01bf2b19522ac4558b443634d28a69b0828677c42682b645eae1f3b
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/expr.c b/src/expr.c index f9c57baa9..0ca1d0407 100644 --- a/src/expr.c +++ b/src/expr.c @@ -1437,11 +1437,10 @@ ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags){ } } pItem->zEName = sqlite3DbStrDup(db, pOldItem->zEName); - pItem->zSpan = sqlite3DbStrDup(db, pOldItem->zSpan); pItem->sortFlags = pOldItem->sortFlags; + pItem->eEName = pOldItem->eEName; pItem->done = 0; pItem->bNulls = pOldItem->bNulls; - pItem->bSpanIsTab = pOldItem->bSpanIsTab; pItem->bSorterRef = pOldItem->bSorterRef; pItem->u = pOldItem->u; } @@ -1773,8 +1772,10 @@ void sqlite3ExprListSetSpan( if( pList ){ struct ExprList_item *pItem = &pList->a[pList->nExpr-1]; assert( pList->nExpr>0 ); - sqlite3DbFree(db, pItem->zSpan); - pItem->zSpan = sqlite3DbSpanDup(db, zStart, zEnd); + if( pItem->zEName==0 ){ + pItem->zEName = sqlite3DbSpanDup(db, zStart, zEnd); + pItem->eEName = ENAME_SPAN; + } } } @@ -1805,7 +1806,6 @@ static SQLITE_NOINLINE void exprListDeleteNN(sqlite3 *db, ExprList *pList){ do{ sqlite3ExprDelete(db, pItem->pExpr); sqlite3DbFree(db, pItem->zEName); - sqlite3DbFree(db, pItem->zSpan); pItem++; }while( --i>0 ); sqlite3DbFreeNN(db, pList); |