mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-11 01:42:22 +03:00
Add test cases and minor fixes to this branch.
FossilOrigin-Name: 5d6dc29d5f81738b07e4fee652fb2343fc409c2545f2f4667e8ee82d1a75f721
This commit is contained in:
14
src/select.c
14
src/select.c
@@ -3743,9 +3743,9 @@ static void recomputeColumnsUsed(
|
||||
** (17c) every term within the subquery compound must have a FROM clause
|
||||
** (17d) the outer query may not be
|
||||
** (17d1) aggregate, or
|
||||
** (17d2) DISTINCT, or
|
||||
** (17d3) a join.
|
||||
** (17e) the subquery may not contain window functions
|
||||
** (17d2) DISTINCT
|
||||
** (17e) the subquery may not contain window functions, and
|
||||
** (17f) the subquery must not be the RHS of a LEFT JOIN.
|
||||
**
|
||||
** The parent and sub-query may contain WHERE clauses. Subject to
|
||||
** rules (11), (13) and (14), they may also contain ORDER BY,
|
||||
@@ -3778,9 +3778,8 @@ static void recomputeColumnsUsed(
|
||||
**
|
||||
** (22) The subquery may not be a recursive CTE.
|
||||
**
|
||||
** (**) Subsumed into restriction (17d3). Was: If the outer query is
|
||||
** a recursive CTE, then the sub-query may not be a compound query.
|
||||
** This restriction is because transforming the
|
||||
** (23) If the outer query is a recursive CTE, then the sub-query may not be
|
||||
** a compound query. This restriction is because transforming the
|
||||
** parent to a compound query confuses the code that handles
|
||||
** recursive queries in multiSelect().
|
||||
**
|
||||
@@ -3921,12 +3920,13 @@ static int flattenSubquery(
|
||||
return 0; /* Restriction (20) */
|
||||
}
|
||||
if( isAgg || (p->selFlags & SF_Distinct)!=0 || isLeftJoin>0 ){
|
||||
return 0; /* (17d1), (17d2), or (17d3) */
|
||||
return 0; /* (17d1), (17d2), or (17f) */
|
||||
}
|
||||
for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){
|
||||
testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
|
||||
testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
|
||||
assert( pSub->pSrc!=0 );
|
||||
assert( (pSub->selFlags & SF_Recursive)==0 );
|
||||
assert( pSub->pEList->nExpr==pSub1->pEList->nExpr );
|
||||
if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0 /* (17b) */
|
||||
|| (pSub1->pPrior && pSub1->op!=TK_ALL) /* (17a) */
|
||||
|
||||
Reference in New Issue
Block a user