mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 11:07:06 +00:00
(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:
@@ -536,12 +536,17 @@ public class SqlSelectHelper {
|
||||
if (!(selectStatement instanceof PlainSelect)) {
|
||||
return false;
|
||||
}
|
||||
PlainSelect plainSelect = (PlainSelect) selectStatement;
|
||||
GroupByElement groupBy = plainSelect.getGroupBy();
|
||||
if (Objects.nonNull(groupBy)) {
|
||||
GroupByVisitor replaceVisitor = new GroupByVisitor();
|
||||
groupBy.accept(replaceVisitor);
|
||||
return replaceVisitor.isHasAggregateFunction();
|
||||
|
||||
List<PlainSelect> withItem = getWithItem(selectStatement);
|
||||
withItem.add((PlainSelect) selectStatement);
|
||||
|
||||
for (PlainSelect plainSelect : withItem) {
|
||||
GroupByElement groupBy = plainSelect.getGroupBy();
|
||||
if (Objects.nonNull(groupBy)) {
|
||||
GroupByVisitor replaceVisitor = new GroupByVisitor();
|
||||
groupBy.accept(replaceVisitor);
|
||||
return replaceVisitor.isHasAggregateFunction();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -333,4 +333,13 @@ class SqlSelectHelperTest {
|
||||
selectFields = SqlSelectHelper.gePureSelectFields(sql);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user