mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 11:07:06 +00:00
when sql script has variables, generate sql can't be executed, this commit supports variable replement (#2259)
This commit is contained in:
@@ -2,11 +2,17 @@ package com.tencent.supersonic.headless.api.pojo;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.headless.api.pojo.enums.VariableValueType;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class SqlVariable {
|
||||
private String name;
|
||||
private VariableValueType valueType;
|
||||
|
||||
@@ -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.OntologyQuery;
|
||||
import com.tencent.supersonic.headless.core.translator.parser.Constants;
|
||||
import com.tencent.supersonic.headless.core.utils.SqlVariableParseUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.calcite.sql.SqlDataTypeSpec;
|
||||
import org.apache.calcite.sql.SqlNode;
|
||||
@@ -34,6 +35,10 @@ public class DataModelNode extends SemanticNode {
|
||||
if (dataModel.getModelDetail().getSqlQuery() != null
|
||||
&& !dataModel.getModelDetail().getSqlQuery().isEmpty()) {
|
||||
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
|
||||
&& !dataModel.getModelDetail().getTableQuery().isEmpty()) {
|
||||
if (dataModel.getModelDetail().getDbType()
|
||||
|
||||
@@ -39,6 +39,7 @@ public class ModelYamlManager {
|
||||
dataModelYamlTpl.setFilterSql(modelDetail.getFilterSql());
|
||||
dataModelYamlTpl.setFields(modelResp.getModelDetail().getFields());
|
||||
dataModelYamlTpl.setId(modelResp.getId());
|
||||
dataModelYamlTpl.setSqlVariables(modelDetail.getSqlVariables());
|
||||
return dataModelYamlTpl;
|
||||
}
|
||||
|
||||
|
||||
@@ -102,7 +102,7 @@ public class SemanticSchemaManager {
|
||||
modelDetail.getMeasures().addAll(getMeasureParams(d.getMeasures()));
|
||||
modelDetail.getDimensions().addAll(getDimensions(d.getDimensions()));
|
||||
modelDetail.getFields().addAll(d.getFields());
|
||||
|
||||
modelDetail.getSqlVariables().addAll(d.getSqlVariables());
|
||||
return dataModel;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ public class StarrocksParametersBuilder extends DefaultParametersBuilder {
|
||||
List<DatabaseParameter> databaseParameters = new ArrayList<>();
|
||||
DatabaseParameter host = new DatabaseParameter();
|
||||
host.setComment("JDBC连接");
|
||||
host.setValue("jdbc:mysql://localhost:3306/dbname");
|
||||
host.setValue("jdbc:mysql://localhost:9030/dbname");
|
||||
host.setName("url");
|
||||
host.setPlaceholder("请输入JDBC连接串");
|
||||
databaseParameters.add(host);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.tencent.supersonic.headless.server.pojo.yaml;
|
||||
|
||||
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 lombok.Data;
|
||||
|
||||
@@ -32,4 +33,6 @@ public class DataModelYamlTpl {
|
||||
private List<Field> fields;
|
||||
|
||||
private ModelSourceType modelSourceTypeEnum;
|
||||
|
||||
private List<SqlVariable> sqlVariables;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user