summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwangwei <[email protected]>2020-08-28 17:57:16 +0800
committerwangwei <[email protected]>2020-08-28 17:57:16 +0800
commit387a6247eab91ba9ade40be684da19ee42b270a7 (patch)
treeb4606c2e6efb99096a1aa9bbbb5b3d7987a14266
parent6fe6e50eb2d7dbb7417a99535a144da63376f912 (diff)
fix(subQuery):完善字表优化查询, 怎加对函数参数做字段校验
-rw-r--r--galaxy-data-engine/src/main/java/com/mesalab/engine/component/dialect/ClickHouseDialect.java29
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() {