From f764236657c2c3515b7709c87beeca3648525418 Mon Sep 17 00:00:00 2001 From: jerryjzhang Date: Wed, 5 Mar 2025 16:48:40 +0800 Subject: [PATCH] (improvement)(headless)Optimize compatibility and robustness in ontology query translation. --- .../core/translator/parser/calcite/SemanticNode.java | 9 +++++---- .../core/translator/parser/calcite/SqlBuilder.java | 8 +++++++- 2 files changed, 12 insertions(+), 5 deletions(-) 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 abstract class SemanticNode { 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 abstract class SemanticNode { 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 class SqlBuilder { 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); }