when sql script has variables, generate sql can't be executed, this commit supports variable replement (#2259)
Some checks failed
supersonic CentOS CI / build (21) (push) Has been cancelled
supersonic mac CI / build (21) (push) Has been cancelled
supersonic ubuntu CI / build (21) (push) Has been cancelled
supersonic windows CI / build (21) (push) Has been cancelled

This commit is contained in:
wanglongqiang
2025-05-20 22:35:28 +08:00
committed by GitHub
parent be0447ae15
commit 0709575cd9
6 changed files with 17 additions and 2 deletions

View File

@@ -2,11 +2,17 @@ package com.tencent.supersonic.headless.api.pojo;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.tencent.supersonic.headless.api.pojo.enums.VariableValueType; import com.tencent.supersonic.headless.api.pojo.enums.VariableValueType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List; import java.util.List;
@Data @Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SqlVariable { public class SqlVariable {
private String name; private String name;
private VariableValueType valueType; private VariableValueType valueType;

View File

@@ -14,6 +14,7 @@ import com.tencent.supersonic.headless.core.pojo.JoinRelation;
import com.tencent.supersonic.headless.core.pojo.Ontology; import com.tencent.supersonic.headless.core.pojo.Ontology;
import com.tencent.supersonic.headless.core.pojo.OntologyQuery; import com.tencent.supersonic.headless.core.pojo.OntologyQuery;
import com.tencent.supersonic.headless.core.translator.parser.Constants; import com.tencent.supersonic.headless.core.translator.parser.Constants;
import com.tencent.supersonic.headless.core.utils.SqlVariableParseUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.calcite.sql.SqlDataTypeSpec; import org.apache.calcite.sql.SqlDataTypeSpec;
import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.SqlNode;
@@ -34,6 +35,10 @@ public class DataModelNode extends SemanticNode {
if (dataModel.getModelDetail().getSqlQuery() != null if (dataModel.getModelDetail().getSqlQuery() != null
&& !dataModel.getModelDetail().getSqlQuery().isEmpty()) { && !dataModel.getModelDetail().getSqlQuery().isEmpty()) {
sqlTable = dataModel.getModelDetail().getSqlQuery(); sqlTable = dataModel.getModelDetail().getSqlQuery();
// if model has sqlVariables, parse sqlVariables
if (Objects.nonNull(dataModel.getModelDetail().getSqlVariables()) || (CollectionUtils.isEmpty(dataModel.getModelDetail().getSqlVariables()))) {
sqlTable = SqlVariableParseUtils.parse(sqlTable, dataModel.getModelDetail().getSqlVariables(), Lists.newArrayList());
}
} else if (dataModel.getModelDetail().getTableQuery() != null } else if (dataModel.getModelDetail().getTableQuery() != null
&& !dataModel.getModelDetail().getTableQuery().isEmpty()) { && !dataModel.getModelDetail().getTableQuery().isEmpty()) {
if (dataModel.getModelDetail().getDbType() if (dataModel.getModelDetail().getDbType()

View File

@@ -39,6 +39,7 @@ public class ModelYamlManager {
dataModelYamlTpl.setFilterSql(modelDetail.getFilterSql()); dataModelYamlTpl.setFilterSql(modelDetail.getFilterSql());
dataModelYamlTpl.setFields(modelResp.getModelDetail().getFields()); dataModelYamlTpl.setFields(modelResp.getModelDetail().getFields());
dataModelYamlTpl.setId(modelResp.getId()); dataModelYamlTpl.setId(modelResp.getId());
dataModelYamlTpl.setSqlVariables(modelDetail.getSqlVariables());
return dataModelYamlTpl; return dataModelYamlTpl;
} }

View File

@@ -102,7 +102,7 @@ public class SemanticSchemaManager {
modelDetail.getMeasures().addAll(getMeasureParams(d.getMeasures())); modelDetail.getMeasures().addAll(getMeasureParams(d.getMeasures()));
modelDetail.getDimensions().addAll(getDimensions(d.getDimensions())); modelDetail.getDimensions().addAll(getDimensions(d.getDimensions()));
modelDetail.getFields().addAll(d.getFields()); modelDetail.getFields().addAll(d.getFields());
modelDetail.getSqlVariables().addAll(d.getSqlVariables());
return dataModel; return dataModel;
} }

View File

@@ -15,7 +15,7 @@ public class StarrocksParametersBuilder extends DefaultParametersBuilder {
List<DatabaseParameter> databaseParameters = new ArrayList<>(); List<DatabaseParameter> databaseParameters = new ArrayList<>();
DatabaseParameter host = new DatabaseParameter(); DatabaseParameter host = new DatabaseParameter();
host.setComment("JDBC连接"); host.setComment("JDBC连接");
host.setValue("jdbc:mysql://localhost:3306/dbname"); host.setValue("jdbc:mysql://localhost:9030/dbname");
host.setName("url"); host.setName("url");
host.setPlaceholder("请输入JDBC连接串"); host.setPlaceholder("请输入JDBC连接串");
databaseParameters.add(host); databaseParameters.add(host);

View File

@@ -1,6 +1,7 @@
package com.tencent.supersonic.headless.server.pojo.yaml; package com.tencent.supersonic.headless.server.pojo.yaml;
import com.tencent.supersonic.headless.api.pojo.Field; import com.tencent.supersonic.headless.api.pojo.Field;
import com.tencent.supersonic.headless.api.pojo.SqlVariable;
import com.tencent.supersonic.headless.api.pojo.enums.ModelSourceType; import com.tencent.supersonic.headless.api.pojo.enums.ModelSourceType;
import lombok.Data; import lombok.Data;
@@ -32,4 +33,6 @@ public class DataModelYamlTpl {
private List<Field> fields; private List<Field> fields;
private ModelSourceType modelSourceTypeEnum; private ModelSourceType modelSourceTypeEnum;
private List<SqlVariable> sqlVariables;
} }