(improvement)(headless) Determine if there are any 'GROUP BY' fields that require compatibility with self-queries in WITH clauses. (#1734)

This commit is contained in:
lexluo09
2024-09-29 11:28:31 +08:00
committed by GitHub
parent 75f0e4d106
commit 5a163936a8
2 changed files with 20 additions and 6 deletions

View File

@@ -536,12 +536,17 @@ public class SqlSelectHelper {
if (!(selectStatement instanceof PlainSelect)) { if (!(selectStatement instanceof PlainSelect)) {
return false; return false;
} }
PlainSelect plainSelect = (PlainSelect) selectStatement;
GroupByElement groupBy = plainSelect.getGroupBy(); List<PlainSelect> withItem = getWithItem(selectStatement);
if (Objects.nonNull(groupBy)) { withItem.add((PlainSelect) selectStatement);
GroupByVisitor replaceVisitor = new GroupByVisitor();
groupBy.accept(replaceVisitor); for (PlainSelect plainSelect : withItem) {
return replaceVisitor.isHasAggregateFunction(); GroupByElement groupBy = plainSelect.getGroupBy();
if (Objects.nonNull(groupBy)) {
GroupByVisitor replaceVisitor = new GroupByVisitor();
groupBy.accept(replaceVisitor);
return replaceVisitor.isHasAggregateFunction();
}
} }
return false; return false;
} }

View File

@@ -333,4 +333,13 @@ class SqlSelectHelperTest {
selectFields = SqlSelectHelper.gePureSelectFields(sql); selectFields = SqlSelectHelper.gePureSelectFields(sql);
Assert.assertEquals(selectFields.size(), 2); Assert.assertEquals(selectFields.size(), 2);
} }
@Test
void testHasGroupBy() {
String sql =
"WITH DepartmentVisits AS (SELECT 部门, SUM(访问次数) AS pv FROM 超音数数据集 WHERE 数据日期 >= '2024-08-29' "
+ "AND 数据日期 <= '2024-09-29' GROUP BY 部门) SELECT COUNT(*) FROM DepartmentVisits WHERE pv > 100";
Boolean hasGroupBy = SqlSelectHelper.hasGroupBy(sql);
Assert.assertEquals(hasGroupBy, true);
}
} }