diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/SemanticNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/SemanticNode.java index 9f85d4abb..8757d3e6d 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/SemanticNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/SemanticNode.java @@ -78,7 +78,8 @@ public static SqlNode parse(String expression, SqlValidatorScope scope, EngineTy scope.getValidator().getCatalogReader().getRootSchema(), engineType); if (Configuration.getSqlAdvisor(sqlValidatorWithHints, engineType).getReservedAndKeyWords() .contains(expression.toUpperCase())) { - if (engineType == EngineType.HANADB || engineType == EngineType.PRESTO || engineType == EngineType.TRINO) { + if (engineType == EngineType.HANADB || engineType == EngineType.PRESTO + || engineType == EngineType.TRINO) { expression = String.format("\"%s\"", expression); } else { expression = String.format("`%s`", expression); @@ -166,9 +167,9 @@ public static SqlNode getTable(SqlNode sqlNode) { if (sqlNode instanceof SqlBasicCall) { SqlBasicCall sqlBasicCall = (SqlBasicCall) sqlNode; if (sqlBasicCall.getOperator().getKind().equals(SqlKind.AS)) { - if (sqlBasicCall.getOperandList().get(0) instanceof SqlSelect) { - SqlSelect table = (SqlSelect) sqlBasicCall.getOperandList().get(0); - return table; + SqlNode innerQuery = sqlBasicCall.getOperandList().get(0); + if (innerQuery instanceof SqlCall) { + return innerQuery; } } } diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/SqlBuilder.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/SqlBuilder.java index 3617d6df4..b9db3dc5d 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/SqlBuilder.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/SqlBuilder.java @@ -69,7 +69,13 @@ public String buildOntologySql(QueryStatement queryStatement) throws Exception { SqlNode parserNode = tableView.build(); DatabaseResp database = queryStatement.getOntology().getDatabase(); EngineType engineType = EngineType.fromString(database.getType()); - parserNode = optimizeParseNode(parserNode, engineType); + try { + parserNode = optimizeParseNode(parserNode, engineType); + } catch (Exception e) { + // failure in optimization phase doesn't affect the query result, + // just ignore it + log.error("optimizeParseNode error", e); + } return SemanticNode.getSql(parserNode, engineType); }