-C Fix\smemory\sallocation\sin\sthe\s".table"\scommand\sof\sthe\s.cli\swhen\sthe\snumber\nof\stables\sin\sthe\sdatabase\sfile\sapproaches\s2\sbillion.
-D 2025-10-15T10:52:45.276
+C Improve\sperformance\sof\sthe\sshell\stool\s".ar"\scommand\swhen\sit\sis\sgiven\sa\slarge\snumber\sof\sarguments.
+D 2025-10-15T15:54:38.242
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F src/resolve.c f8d1d011aba0964ff1bdccd049d4d2c2fec217efd90d202a4bb775e926b2c25d
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c b95181711d59c36d9789e67f76c4cfec64b99f9629a50be5e6566e117b87d957
-F src/shell.c.in f5243232283bdafe9804cdfb02d3d6dbfd992a69e88e911726053a4c6959d41f
+F src/shell.c.in cd2cc9a78e36311f0aed2aaa4241ca6078030841a9cc931032e8f50eb495703c
F src/sqlite.h.in 10faecc456d3962c7cedae70d69305f7c80129f28dd8524bd8a06b3eac955e54
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
F src/sqlite3ext.h 7f236ca1b175ffe03316d974ef57df79b3938466c28d2f95caef5e08c57f3a52
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 1738f0bdf5941a70684c82d2040561e53a272595026a837a9f9bab8508a46480
-R 1dbf964e481b54df9bb3b131a4237ef8
-U drh
-Z fd056c381ae9f263080e8efcbef5c8b3
+P 5cbccab499bc3983aac1f57355552db607dee6c7ef4eb00d794dbee89c18db70
+R 4fa60e65ba608ab32ad88339468e7a7d
+T *branch * ar-performance-improvement
+T *sym-ar-performance-improvement *
+T -sym-trunk *
+U dan
+Z beccb22416da2df34cf401db7c5c23db
# Remove this line to create a well-formed Fossil manifest.
-branch trunk
-tag trunk
+branch ar-performance-improvement
+tag ar-performance-improvement
-5cbccab499bc3983aac1f57355552db607dee6c7ef4eb00d794dbee89c18db70
+0398897067ca5cdedfef0ce7a034ba6d5a2ce6104605ef4ed1c7549499435b44
char **pzWhere /* OUT: New WHERE clause */
){
char *zWhere = 0;
- const char *zSameOp = (pAr->bGlob)? "GLOB" : "=";
if( *pRc==SQLITE_OK ){
if( pAr->nArg==0 ){
zWhere = sqlite3_mprintf("1");
}else{
+ char *z1 = sqlite3_mprintf(pAr->bGlob ? "" : "name IN(");
+ char *z2 = sqlite3_mprintf("");
+ const char *zSep1 = "";
+ const char *zSep2 = "";
+
int i;
- const char *zSep = "";
- for(i=0; i<pAr->nArg; i++){
+ for(i=0; i<pAr->nArg && z1 && z2; i++){
const char *z = pAr->azArg[i];
- zWhere = sqlite3_mprintf(
- "%z%s name %s '%q' OR substr(name,1,%d) %s '%q/'",
- zWhere, zSep, zSameOp, z, strlen30(z)+1, zSameOp, z
- );
- if( zWhere==0 ){
- *pRc = SQLITE_NOMEM;
- break;
+ int n = strlen30(z);
+
+ if( pAr->bGlob ){
+ z1 = sqlite3_mprintf("%z%sname GLOB '%q'", z1, zSep2, z);
+ z2 = sqlite3_mprintf(
+ "%z%ssubstr(name,1,%d) GLOB '%q/'", z2, zSep2, n+1,z
+ );
+ }else{
+ z1 = sqlite3_mprintf("%z%s'%q'", z1, zSep1, z);
+ z2 = sqlite3_mprintf("%z%ssubstr(name,1,%d) = '%q/'",z2,zSep2,n+1,z);
}
- zSep = " OR ";
+ zSep1 = ", ";
+ zSep2 = " OR ";
+ }
+ if( z1==0 || z2==0 ){
+ *pRc = SQLITE_NOMEM;
+ }else{
+ zWhere = sqlite3_mprintf("(%s%s OR (name GLOB '*/*' AND (%s))) ",
+ z1, pAr->bGlob==0 ? ")" : "", z2
+ );
}
+ sqlite3_free(z1);
+ sqlite3_free(z2);
}
}
*pzWhere = zWhere;