aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2019-12-12 22:11:33 +0000
committerdrh <drh@noemail.net>2019-12-12 22:11:33 +0000
commitcbb9da337e7f8dc4e6bea59399a0394ec390f1f2 (patch)
tree9e2fc1883495a5eeb3e2ad2e5167486fd567afed /src/expr.c
parentc947d6a4dcdfe6f0185a22464cf97153cabb8052 (diff)
downloadsqlite-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.c10
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);