diff options
| author | wangwei <[email protected]> | 2020-08-28 17:57:16 +0800 |
|---|---|---|
| committer | wangwei <[email protected]> | 2020-08-28 17:57:16 +0800 |
| commit | 387a6247eab91ba9ade40be684da19ee42b270a7 (patch) | |
| tree | b4606c2e6efb99096a1aa9bbbb5b3d7987a14266 | |
| parent | 6fe6e50eb2d7dbb7417a99535a144da63376f912 (diff) | |
fix(subQuery):完善字表优化查询, 怎加对函数参数做字段校验
| -rw-r--r-- | galaxy-data-engine/src/main/java/com/mesalab/engine/component/dialect/ClickHouseDialect.java | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/galaxy-data-engine/src/main/java/com/mesalab/engine/component/dialect/ClickHouseDialect.java b/galaxy-data-engine/src/main/java/com/mesalab/engine/component/dialect/ClickHouseDialect.java index d4e3506..468f347 100644 --- a/galaxy-data-engine/src/main/java/com/mesalab/engine/component/dialect/ClickHouseDialect.java +++ b/galaxy-data-engine/src/main/java/com/mesalab/engine/component/dialect/ClickHouseDialect.java @@ -609,12 +609,16 @@ public class ClickHouseDialect extends AbstractDataSourceDialect { if (orderField.startsWith("\"") && orderField.endsWith("\"")) { orderField = orderField.substring(1, orderField.length() - 1); } - String originalField = aliasFields.get(orderField); - if (StringUtil.isNotBlank(originalField) && !isFieldOfSchema(schema, originalField)) { - return false; - } - if (StringUtil.isBlank(originalField) && !isFieldOfSchema(schema, orderField)) { - return false; + String originalField = StringUtil.isBlank(aliasFields.get(orderField)) ? orderField : aliasFields.get(orderField); + Expression expression = parserException(originalField); + if (expression instanceof Function) { + if (!getValidityByFunctionParamsInSchema(schema, (Function) expression)) { + return false; + } + } else { + if (!isFieldOfSchema(schema, originalField)) { + return false; + } } } return true; @@ -691,6 +695,10 @@ public class ClickHouseDialect extends AbstractDataSourceDialect { if (!bool) { setSubIndexValidFlag(false); } + } else if (where instanceof Parenthesis) { + Parenthesis whereExpressionParenthesis = (Parenthesis) where; + Expression expression = whereExpressionParenthesis.getExpression(); + setValidityByWhereExpressionsInSchema(expression, masterTableSchema, indexTableSchema); } else { setSubIndexValidFlag(false); return; @@ -831,6 +839,15 @@ public class ClickHouseDialect extends AbstractDataSourceDialect { } + private Expression parserException(String originalField) { + try { + return CCJSqlParserUtil.parseExpression(originalField); + } catch (JSQLParserException e) { + e.printStackTrace(); + throw new BusinessException("parseExpression error: " + originalField); + } + } + @Override public Dialect executeQuery() { |
