-C Experimental\swork\son\simplementing\san\sEXCLUDE\sclause\sfollowing\s"*"\nwildcards\sin\sa\sSELECT\sstatement.\s\sParsing\sonly\sat\sthis\spoint.
-D 2026-07-03T00:56:05.259
+C Use\sthe\sEXCLUDE\sclause\swhen\sexpanding\s"*".
+D 2026-07-03T01:27:57.796
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
F src/resolve.c d0724113da9f5c0430d2052808ce59519f51ae7c4fbb1f5ef21fe3a832956086
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
-F src/select.c f553420eaf5c72a49cef786621eea79dd8c4411671839fb05250bb49ca74a0a0
+F src/select.c 485421e23a9ee3c46252a3b5c76273a134540be4c40f0ca6c141dcc3ecdc1be9
F src/shell.c.in a4e83895cfa336065ad7f7a7dea8fc2a19d050f7ce7466621c67208acaac9e44
F src/sqlite.h.in d9ec41feb4cd804e68b174328b43beb3f1f71bba13e1c7a439efb826d301cccc
F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 0d70a15c3b35e9af3052042cd5332db1b38a66416f1c3c8a50d342395bf22c01
-R fbfb38b4a2d1f59e008a86ce344506fc
-T *branch * exclude-clause
-T *sym-exclude-clause *
-T -sym-trunk *
+P f38fc2c7d72a5f9eb99314ec3e6e399faf035066e27991fa4f73b07bb807b594
+R 384ba18da0aa70fab024ce5c96b0311d
U drh
-Z 085c7684bdb90daee11e1c534e7f72a6
+Z 3ca97555c3e8c92027f91660e1b345f5
# Remove this line to create a well-formed Fossil manifest.
int tableSeen = 0; /* Set to 1 when TABLE matches */
char *zTName = 0; /* text of name of TABLE */
int iErrOfst;
+ ExprList *pExclude; /* The EXCLUDE clause, or NULL */
if( pE->op==TK_DOT ){
assert( (selFlags & SF_NestedFrom)==0 );
assert( pE->pLeft!=0 );
zTName = pE->pLeft->u.zToken;
assert( ExprUseWOfst(pE->pLeft) );
iErrOfst = pE->pRight->w.iOfst;
+ assert( ExprUseXList(pE->pRight) );
+ pExclude = pE->pRight->x.pList;
}else{
assert( ExprUseWOfst(pE) );
iErrOfst = pE->w.iOfst;
+ assert( ExprUseXList(pE) );
+ pExclude = pE->x.pList;
}
for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
int nAdd; /* Number of cols including rowid */
nAdd = pTab->nCol;
if( VisibleRowid(pTab) && (selFlags & SF_NestedFrom)!=0 ) nAdd++;
for(j=0; j<nAdd; j++){
- const char *zName;
- struct ExprList_item *pX; /* Newly added ExprList term */
+ const char *zName;
+ struct ExprList_item *pEx; /* Matching pExclude term */
+ struct ExprList_item *pX; /* Newly added ExprList term */
if( j==pTab->nCol ){
zName = sqlite3RowidAlias(pTab);
){
continue;
}
+
+ /* Check for EXCLUDE columns */
+ pEx = 0;
+ if( pExclude ){
+ int kk;
+ for(kk=0; kk<pExclude->nExpr; kk++){
+ if( sqlite3_stricmp(pExclude->a[kk].zEName,zName)==0 ){
+ pEx = &pExclude->a[kk];
+ break;
+ }
+ }
+ if( pEx && pEx->fg.eEName==ENAME_EXCLUDE ) continue;
+ }
}
assert( zName );
tableSeen = 1;
continue;
}
}
- pRight = sqlite3Expr(db, TK_ID, zName);
- if( (pTabList->nSrc>1
- && ( (pFrom->fg.jointype & JT_LTORJ)==0
- || (selFlags & SF_NestedFrom)!=0
- || !inAnyUsingClause(zName,pFrom,pTabList->nSrc-i-1)
- )
- )
- || IN_RENAME_OBJECT
- ){
- Expr *pLeft;
- pLeft = sqlite3Expr(db, TK_ID, zTabName);
- pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
- if( IN_RENAME_OBJECT && pE->pLeft ){
- sqlite3RenameTokenRemap(pParse, pLeft, pE->pLeft);
- }
- if( zSchemaName ){
- pLeft = sqlite3Expr(db, TK_ID, zSchemaName);
- pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pExpr);
- }
+ if( pEx && pEx->fg.eEName==ENAME_REPLACE ){
+ pExpr = sqlite3ExprDup(db, pEx->pExpr, 0);
}else{
- pExpr = pRight;
+ pRight = sqlite3Expr(db, TK_ID, zName);
+ if( (pTabList->nSrc>1
+ && ( (pFrom->fg.jointype & JT_LTORJ)==0
+ || (selFlags & SF_NestedFrom)!=0
+ || !inAnyUsingClause(zName,pFrom,pTabList->nSrc-i-1)
+ )
+ )
+ || IN_RENAME_OBJECT
+ ){
+ Expr *pLeft;
+ pLeft = sqlite3Expr(db, TK_ID, zTabName);
+ pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
+ if( IN_RENAME_OBJECT && pE->pLeft ){
+ sqlite3RenameTokenRemap(pParse, pLeft, pE->pLeft);
+ }
+ if( zSchemaName ){
+ pLeft = sqlite3Expr(db, TK_ID, zSchemaName);
+ pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pExpr);
+ }
+ }else{
+ pExpr = pRight;
+ }
}
sqlite3ExprSetErrorOffset(pExpr, iErrOfst);
pNew = sqlite3ExprListAppend(pParse, pNew, pExpr);
){
pX->fg.bNoExpand = 1;
}
+ }else if( pEx && pEx->fg.eEName==ENAME_RENAME ){
+ pX->zEName = sqlite3DbStrDup(db, pEx->pExpr->u.zToken);
}else if( longNames ){
pX->zEName = sqlite3MPrintf(db, "%s.%s", zTabName, zName);
pX->fg.eEName = ENAME_NAME;