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)) {
|
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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user