(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,13 +536,18 @@ public class SqlSelectHelper {
if (!(selectStatement instanceof PlainSelect)) {
return false;
}
PlainSelect plainSelect = (PlainSelect) selectStatement;
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;
}

View File

@@ -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);
}
}