diff options
| author | wangwei <[email protected]> | 2023-02-01 18:08:16 +0800 |
|---|---|---|
| committer | wangwei <[email protected]> | 2023-02-01 18:08:16 +0800 |
| commit | 8327f50512f0d2fa9ed47f1196c02478d427d60b (patch) | |
| tree | 3e2790ab34e0990b7eabb9c74aabbc25fd273b7b | |
| parent | c5c5295ee6fb7875388511cdc2350351aebecded (diff) | |
| -rw-r--r-- | src/main/java/com/mesalab/common/utils/sqlparser/TopSQLVisitor.java | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/main/java/com/mesalab/common/utils/sqlparser/TopSQLVisitor.java b/src/main/java/com/mesalab/common/utils/sqlparser/TopSQLVisitor.java index de475683..659607f9 100644 --- a/src/main/java/com/mesalab/common/utils/sqlparser/TopSQLVisitor.java +++ b/src/main/java/com/mesalab/common/utils/sqlparser/TopSQLVisitor.java @@ -36,7 +36,7 @@ public class TopSQLVisitor implements OrderByVisitor, GroupByVisitor, SelectItem private List<String> orderByList; private List<String> selectItemExprList; private List<String> selectItemAliasList; - private List<String> functionList; + private List<Function> functionList; private SelectBody innerSelectBody = null; private SelectBody originalSelectBody = null; @@ -171,12 +171,14 @@ public class TopSQLVisitor implements OrderByVisitor, GroupByVisitor, SelectItem } List unsupportedFunctionList = functionList.stream().filter(o -> - StringUtil.isBlank(SQLFunctionUtil.getDistributedGroupByFunction(o))).collect(Collectors.toList()); + StringUtil.isBlank(SQLFunctionUtil.getDistributedGroupByFunction(o.getName().toLowerCase(Locale.ROOT)))).collect(Collectors.toList()); if(unsupportedFunctionList.size() > 0) { return false; } - - List unsupportedGroupByList = groupByList.stream().filter(o -> + if (functionList.stream().anyMatch(o -> (o.isDistinct()) || o.isUnique())) { + return false; + } + List unsupportedGroupByList = groupByList.stream().filter(o -> !selectItemExprList.contains(o) && !selectItemAliasList.contains(o) ).collect(Collectors.toList()); if(unsupportedGroupByList.size() > 0) { return false; @@ -215,7 +217,7 @@ public class TopSQLVisitor implements OrderByVisitor, GroupByVisitor, SelectItem Expression expression = selectExpressionItem.getExpression(); this.selectItemExprList.add(expression.toString()); if (expression instanceof Function) { - functionList.add(((Function) expression).getName().toLowerCase(Locale.ROOT)); + functionList.add(((Function) expression)); } if (StrUtil.isEmptyIfStr(selectExpressionItem.getAlias())) { if (expression instanceof Column) { |
