[fix][headless] Fix the issue where filterSql is not working.

This commit is contained in:
beat4ocean
2025-03-05 16:30:05 +08:00
parent 61685d31f3
commit 0e6050e8ce
7 changed files with 32 additions and 11 deletions

View File

@@ -40,11 +40,23 @@ public class DataModelNode extends SemanticNode {
.equalsIgnoreCase(EngineType.POSTGRESQL.getName())) {
String fullTableName = String.join(".public.",
dataModel.getModelDetail().getTableQuery().split("\\."));
sqlTable = "select * from " + fullTableName;
sqlTable = "SELECT * FROM " + fullTableName;
} else {
sqlTable = "select * from " + dataModel.getModelDetail().getTableQuery();
sqlTable = "SELECT * FROM " + dataModel.getModelDetail().getTableQuery();
}
}
// String filterSql = dataModel.getFilterSql();
String filterSql = dataModel.getModelDetail().getFilterSql();
if (filterSql != null && !filterSql.isEmpty()) {
boolean sqlContainWhere = sqlTable.toUpperCase().matches("(?s).*\\bWHERE\\b.*");
if (sqlContainWhere) {
sqlTable = String.format("%s AND %s", sqlTable, filterSql);
} else {
sqlTable = String.format("%s WHERE %s", sqlTable, filterSql);
}
}
if (sqlTable.isEmpty()) {
throw new Exception("DataModelNode build error [tableSqlNode not found]");
}
@@ -69,7 +81,7 @@ public class DataModelNode extends SemanticNode {
}
private static void addSchemaTable(SqlValidatorScope scope, ModelResp dataModel, String db,
String tb, Set<String> fields) throws Exception {
String tb, Set<String> fields) throws Exception {
Set<String> dateInfo = new HashSet<>();
Set<String> dimensions = new HashSet<>();
Set<String> metrics = new HashSet<>();
@@ -106,7 +118,7 @@ public class DataModelNode extends SemanticNode {
}
public static List<SqlNode> getExtendField(Map<String, String> exprList,
SqlValidatorScope scope, EngineType engineType) throws Exception {
SqlValidatorScope scope, EngineType engineType) throws Exception {
List<SqlNode> sqlNodeList = new ArrayList<>();
for (String expr : exprList.keySet()) {
sqlNodeList.add(parse(expr, scope, engineType));
@@ -127,7 +139,7 @@ public class DataModelNode extends SemanticNode {
}
public static List<ModelResp> getQueryDataModels(Ontology ontology,
OntologyQuery ontologyQuery) {
OntologyQuery ontologyQuery) {
// get query measures and dimensions
Set<String> queryMeasures = new HashSet<>();
Set<String> queryDimensions = new HashSet<>();
@@ -162,7 +174,7 @@ public class DataModelNode extends SemanticNode {
}
public static void getQueryDimensionMeasure(Ontology ontology, OntologyQuery ontologyQuery,
Set<String> queryDimensions, Set<String> queryMeasures) {
Set<String> queryDimensions, Set<String> queryMeasures) {
ontologyQuery.getMetrics().forEach(m -> {
if (Objects.nonNull(m.getMetricDefineByMeasureParams())) {
m.getMetricDefineByMeasureParams().getMeasures()
@@ -215,7 +227,7 @@ public class DataModelNode extends SemanticNode {
}
private static boolean checkMatch(ModelResp baseDataModel, Set<String> queryMeasures,
Set<String> queryDimension) {
Set<String> queryDimension) {
boolean isAllMatch = true;
Set<String> baseMeasures = baseDataModel.getMeasures().stream().map(Measure::getName)
.collect(Collectors.toSet());
@@ -248,8 +260,8 @@ public class DataModelNode extends SemanticNode {
}
private static List<ModelResp> findRelatedModelsByRelation(Ontology ontology,
OntologyQuery ontologyQuery, ModelResp baseDataModel, Set<String> queryDimensions,
Set<String> queryMeasures) {
OntologyQuery ontologyQuery, ModelResp baseDataModel, Set<String> queryDimensions,
Set<String> queryMeasures) {
Set<String> joinDataModelNames = new HashSet<>();
List<ModelResp> joinDataModels = new ArrayList<>();
Set<String> before = new HashSet<>();
@@ -333,7 +345,7 @@ public class DataModelNode extends SemanticNode {
}
private static void sortJoinRelation(List<JoinRelation> joinRelations, String next,
Set<Long> visited, List<JoinRelation> sortedJoins) {
Set<Long> visited, List<JoinRelation> sortedJoins) {
for (JoinRelation link : joinRelations) {
if (!visited.contains(link.getId())) {
if (link.getLeft().equals(next) || link.getRight().equals(next)) {
@@ -348,7 +360,7 @@ public class DataModelNode extends SemanticNode {
}
private static List<ModelResp> findRelatedModelsByIdentifier(Ontology ontology,
ModelResp baseDataModel, Set<String> queryDimension, Set<String> measures) {
ModelResp baseDataModel, Set<String> queryDimension, Set<String> measures) {
Set<String> baseIdentifiers = baseDataModel.getModelDetail().getIdentifiers().stream()
.map(Identify::getName).collect(Collectors.toSet());
if (baseIdentifiers.isEmpty()) {