[improvement][headless]Add company demo schema and data to integration test.

[improvement][headless]Clean code logic of headless translator.
This commit is contained in:
jerryjzhang
2024-11-25 21:35:13 +08:00
parent 860fd5d299
commit 91b16f95ff
8 changed files with 1193 additions and 1108 deletions

View File

@@ -59,38 +59,42 @@ public class DefaultSemanticTranslator implements SemanticTranslator {
SqlQueryParam sqlQueryParam = queryStatement.getSqlQueryParam();
log.info("parse with ontology: [{}]", ontologyQueryParam);
ComponentFactory.getQueryParser().parse(queryStatement);
String ontologyQueryTable = sqlQueryParam.getTable();
String ontologyQuerySql = sqlQueryParam.getSql();
String ontologySql = queryStatement.getSql();
if (!queryStatement.isOk()) {
throw new Exception(String.format("parse table [%s] error [%s]",
sqlQueryParam.getTable(), queryStatement.getErrMsg()));
throw new Exception(String.format("parse ontology table [%s] error [%s]",
ontologyQueryTable, queryStatement.getErrMsg()));
}
List<Pair<String, String>> tables = new ArrayList<>();
tables.add(Pair.of(sqlQueryParam.getTable(), queryStatement.getSql()));
tables.add(Pair.of(ontologyQueryTable, ontologySql));
if (sqlQueryParam.isSupportWith()) {
EngineType engineType =
EngineType.fromString(queryStatement.getOntology().getDatabase().getType());
if (!SqlMergeWithUtils.hasWith(engineType, sqlQueryParam.getSql())) {
if (!SqlMergeWithUtils.hasWith(engineType, ontologyQuerySql)) {
String withSql = "with " + tables.stream()
.map(t -> String.format("%s as (%s)", t.getLeft(), t.getRight()))
.collect(Collectors.joining(",")) + "\n" + sqlQueryParam.getSql();
.collect(Collectors.joining(",")) + "\n" + ontologyQuerySql;
queryStatement.setSql(withSql);
} else {
List<String> parentTableList =
tables.stream().map(Pair::getLeft).collect(Collectors.toList());
List<String> parentSqlList =
tables.stream().map(Pair::getRight).collect(Collectors.toList());
String mergeSql = SqlMergeWithUtils.mergeWith(engineType, sqlQueryParam.getSql(),
String mergeSql = SqlMergeWithUtils.mergeWith(engineType, ontologyQuerySql,
parentSqlList, parentTableList);
queryStatement.setSql(mergeSql);
}
} else {
String dsSql = sqlQueryParam.getSql();
for (Pair<String, String> tb : tables) {
dsSql = StringUtils.replace(dsSql, tb.getLeft(), "(" + tb.getRight() + ") "
+ (sqlQueryParam.isWithAlias() ? "" : tb.getLeft()), -1);
ontologyQuerySql =
StringUtils.replace(ontologyQuerySql, tb.getLeft(), "(" + tb.getRight()
+ ") " + (sqlQueryParam.isWithAlias() ? "" : tb.getLeft()), -1);
}
queryStatement.setSql(dsSql);
queryStatement.setSql(ontologyQuerySql);
}
}

View File

@@ -28,7 +28,7 @@ public class CalciteQueryParser implements QueryParser {
.enableOptimize(queryStatement.getEnableOptimize()).build())
.build();
SqlBuilder sqlBuilder = new SqlBuilder(semanticSchema);
sqlBuilder.build(queryStatement);
sqlBuilder.buildOntologySql(queryStatement);
}
}

View File

@@ -35,7 +35,7 @@ public class SqlBuilder {
this.schema = schema;
}
public void build(QueryStatement queryStatement) throws Exception {
public void buildOntologySql(QueryStatement queryStatement) throws Exception {
this.ontologyQueryParam = queryStatement.getOntologyQueryParam();
if (ontologyQueryParam.getMetrics() == null) {
ontologyQueryParam.setMetrics(new ArrayList<>());