[fix][headless] Fix issue filterSql is not working. (#2157)
Some checks are pending
supersonic CentOS CI / build (21) (push) Waiting to run
supersonic mac CI / build (21) (push) Waiting to run
supersonic ubuntu CI / build (21) (push) Waiting to run
supersonic windows CI / build (21) (push) Waiting to run

This commit is contained in:
beat4ocean
2025-03-12 13:53:08 +08:00
committed by GitHub
parent f05a4b523c
commit 0c8c2d4804
7 changed files with 23 additions and 2 deletions

View File

@@ -24,6 +24,8 @@ public class ModelDetail {
private String tableQuery; private String tableQuery;
private String filterSql;
private List<Identify> identifiers = Lists.newArrayList(); private List<Identify> identifiers = Lists.newArrayList();
private List<Dimension> dimensions = Lists.newArrayList(); private List<Dimension> dimensions = Lists.newArrayList();

View File

@@ -19,6 +19,8 @@ public class ModelBuildReq {
private String sql; private String sql;
private String filterSql;
private String catalog; private String catalog;
private String db; private String db;

View File

@@ -40,11 +40,23 @@ public class DataModelNode extends SemanticNode {
.equalsIgnoreCase(EngineType.POSTGRESQL.getName())) { .equalsIgnoreCase(EngineType.POSTGRESQL.getName())) {
String fullTableName = String.join(".public.", String fullTableName = String.join(".public.",
dataModel.getModelDetail().getTableQuery().split("\\.")); dataModel.getModelDetail().getTableQuery().split("\\."));
sqlTable = "select * from " + fullTableName; sqlTable = "SELECT * FROM " + fullTableName;
} else { } 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()) { if (sqlTable.isEmpty()) {
throw new Exception("DataModelNode build error [tableSqlNode not found]"); throw new Exception("DataModelNode build error [tableSqlNode not found]");
} }

View File

@@ -36,6 +36,7 @@ public class ModelYamlManager {
} else { } else {
dataModelYamlTpl.setTableQuery(modelDetail.getTableQuery()); dataModelYamlTpl.setTableQuery(modelDetail.getTableQuery());
} }
dataModelYamlTpl.setFilterSql(modelDetail.getFilterSql());
dataModelYamlTpl.setFields(modelResp.getModelDetail().getFields()); dataModelYamlTpl.setFields(modelResp.getModelDetail().getFields());
dataModelYamlTpl.setId(modelResp.getId()); dataModelYamlTpl.setId(modelResp.getId());
return dataModelYamlTpl; return dataModelYamlTpl;

View File

@@ -97,6 +97,7 @@ public class SemanticSchemaManager {
modelDetail.setDbType(d.getType()); modelDetail.setDbType(d.getType());
modelDetail.setSqlQuery(d.getSqlQuery()); modelDetail.setSqlQuery(d.getSqlQuery());
modelDetail.setTableQuery(d.getTableQuery()); modelDetail.setTableQuery(d.getTableQuery());
modelDetail.setFilterSql(d.getFilterSql());
modelDetail.getIdentifiers().addAll(getIdentify(d.getIdentifiers())); modelDetail.getIdentifiers().addAll(getIdentify(d.getIdentifiers()));
modelDetail.getMeasures().addAll(getMeasureParams(d.getMeasures())); modelDetail.getMeasures().addAll(getMeasureParams(d.getMeasures()));
modelDetail.getDimensions().addAll(getDimensions(d.getDimensions())); modelDetail.getDimensions().addAll(getDimensions(d.getDimensions()));

View File

@@ -21,6 +21,8 @@ public class DataModelYamlTpl {
private String tableQuery; private String tableQuery;
private String filterSql;
private List<IdentifyYamlTpl> identifiers; private List<IdentifyYamlTpl> identifiers;
private List<DimensionYamlTpl> dimensions; private List<DimensionYamlTpl> dimensions;

View File

@@ -179,6 +179,7 @@ public class ModelConverter {
} }
} }
modelDetail.setFields(fields); modelDetail.setFields(fields);
modelDetail.setFilterSql(modelBuildReq.getFilterSql());
modelReq.setModelDetail(modelDetail); modelReq.setModelDetail(modelDetail);
return modelReq; return modelReq;
} }