mirror of
https://github.com/sqlite/sqlite.git
synced 2025-12-24 14:17:58 +03:00
Omit some redundant calls to strlen() used to find the size of
Expr.u.zToken in sqliteExprDup(). This inefficiency was seen while working on the previous check-in, and I thought it best to fix it while it was fresh in mind. FossilOrigin-Name: b7a84eff5dcdf5b2ff81331097cdc64d0c5d16a4ae224320f39b64541ec72dc7
This commit is contained in:
12
manifest
12
manifest
@@ -1,5 +1,5 @@
|
||||
C Improvements\sto\sthe\ssqlite3ExprDup()\slogic\sfor\sfaster\sperformance\sand\sbetter\nrun-time\serror\sdetection.\s\sThis\scheck-in\sfixes\sthe\s5x\soversize\smemory\sallocation\nbug\sfrom\s[f371e4c0f8ea73ae]\sas\swell\sas\sall\sother\sknown\sissues\sthat\sresult\sfrom\nhanding\sthe\sORDER\sBY\sclause\sof\san\saggregate\sfunction\soff\sof\sthe\spLeft\spointer\nof\sthe\sExpr\sobject.
|
||||
D 2023-10-20T17:15:15.399
|
||||
C Omit\ssome\sredundant\scalls\sto\sstrlen()\sused\sto\sfind\sthe\ssize\sof\nExpr.u.zToken\sin\ssqliteExprDup().\s\sThis\sinefficiency\swas\sseen\swhile\sworking\non\sthe\sprevious\scheck-in,\sand\sI\sthought\sit\sbest\sto\sfix\sit\swhile\sit\swas\nfresh\sin\smind.
|
||||
D 2023-10-20T18:09:08.595
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||
@@ -669,7 +669,7 @@ F src/date.c eebc54a00e888d3c56147779e9f361b77d62fd69ff2008c5373946aa1ba1d574
|
||||
F src/dbpage.c 80e46e1df623ec40486da7a5086cb723b0275a6e2a7b01d9f9b5da0f04ba2782
|
||||
F src/dbstat.c 3b677254d512fcafd4d0b341bf267b38b235ccfddbef24f9154e19360fa22e43
|
||||
F src/delete.c cb766727c78e715f9fb7ec8a7d03658ed2a3016343ca687acfcec9083cdca500
|
||||
F src/expr.c 2cf43de9cb6eaed600d689ca0276a8dbb5a56c0fea7e94b2120d9de95d8df309
|
||||
F src/expr.c ddb8e310561c761b29f993490eaa64b8a3496032140db74b5ebaeca4a7c96cb3
|
||||
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
|
||||
F src/fkey.c 360a9b644efc9e05746e0b5b6ccb4760fd039d287ebdf090723b9c97f6d163d9
|
||||
F src/func.c e8d7b3587a225f4f1116f720b72090511fe9feb936e960bd26a053cea6a17a63
|
||||
@@ -2134,8 +2134,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||
P fc9f82ea084159eaf3dd1757b96d17d1201b00c4e06455a7dcd8067172b25f28
|
||||
R 24ff7529cedac4d1c2b0acdaefc5dd9f
|
||||
P f5c01676fd281e938181b846dd2024d050f597dc6a7a91928beab9d8553dfdb5
|
||||
R d3b5a604b96f76db93b01c4a13c3d7ea
|
||||
U drh
|
||||
Z 6942ed424b94726ba0e7696f899b042d
|
||||
Z 496ee78f77a1d59f8f48d2e1597d6cd9
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
||||
@@ -1 +1 @@
|
||||
f5c01676fd281e938181b846dd2024d050f597dc6a7a91928beab9d8553dfdb5
|
||||
b7a84eff5dcdf5b2ff81331097cdc64d0c5d16a4ae224320f39b64541ec72dc7
|
||||
26
src/expr.c
26
src/expr.c
@@ -1578,6 +1578,7 @@ static Expr *exprDup(
|
||||
Expr *pNew; /* Value to return */
|
||||
EdupBuf sEdupBuf; /* Memory space from which to build Expr object */
|
||||
u32 staticFlag; /* EP_Static if space not obtained from malloc */
|
||||
int nToken = -1; /* Space needed for p->u.zToken. -1 means unknown */
|
||||
|
||||
assert( db!=0 );
|
||||
assert( p );
|
||||
@@ -1594,7 +1595,16 @@ static Expr *exprDup(
|
||||
assert( sEdupBuf.zAlloc!=0 );
|
||||
assert( dupFlags==EXPRDUP_REDUCE );
|
||||
}else{
|
||||
int nAlloc = dupFlags ? dupedExprSize(p) : dupedExprNodeSize(p, 0);
|
||||
int nAlloc;
|
||||
if( dupFlags ){
|
||||
nAlloc = dupedExprSize(p);
|
||||
}else if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
|
||||
nToken = sqlite3Strlen30NN(p->u.zToken)+1;
|
||||
nAlloc = EXPR_FULLSIZE + nToken;
|
||||
}else{
|
||||
nToken = 0;
|
||||
nAlloc = EXPR_FULLSIZE;
|
||||
}
|
||||
sEdupBuf.zAlloc = sqlite3DbMallocRawNN(db, nAlloc);
|
||||
#ifdef SQLITE_DEBUG
|
||||
sEdupBuf.zEnd = sEdupBuf.zAlloc ? sEdupBuf.zAlloc+nAlloc : 0;
|
||||
@@ -1612,11 +1622,12 @@ static Expr *exprDup(
|
||||
*/
|
||||
const unsigned nStructSize = dupedExprStructSize(p, dupFlags);
|
||||
const int nNewSize = nStructSize & 0xfff;
|
||||
int nToken;
|
||||
if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
|
||||
nToken = sqlite3Strlen30(p->u.zToken) + 1;
|
||||
}else{
|
||||
nToken = 0;
|
||||
if( nToken<0 ){
|
||||
if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
|
||||
nToken = sqlite3Strlen30(p->u.zToken) + 1;
|
||||
}else{
|
||||
nToken = 0;
|
||||
}
|
||||
}
|
||||
if( dupFlags ){
|
||||
assert( (int)(sEdupBuf.zEnd - sEdupBuf.zAlloc) >= nNewSize+nToken );
|
||||
@@ -1643,7 +1654,8 @@ static Expr *exprDup(
|
||||
}
|
||||
|
||||
/* Copy the p->u.zToken string, if any. */
|
||||
if( nToken ){
|
||||
assert( nToken>=0 );
|
||||
if( nToken>0 ){
|
||||
char *zToken = pNew->u.zToken = (char*)sEdupBuf.zAlloc;
|
||||
memcpy(zToken, p->u.zToken, nToken);
|
||||
sEdupBuf.zAlloc += nToken;
|
||||
|
||||
Reference in New Issue
Block a user