Skip to content

Commit 0709575

Browse files
when sql script has variables, generate sql can't be executed, this commit supports variable replement (#2259)
1 parent be0447a commit 0709575

File tree

6 files changed

+17
-2
lines changed

6 files changed

+17
-2
lines changed

headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SqlVariable.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@
22

33
import com.google.common.collect.Lists;
44
import com.tencent.supersonic.headless.api.pojo.enums.VariableValueType;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Builder;
57
import lombok.Data;
8+
import lombok.NoArgsConstructor;
69

710
import java.util.List;
811

912
@Data
13+
@Builder
14+
@AllArgsConstructor
15+
@NoArgsConstructor
1016
public class SqlVariable {
1117
private String name;
1218
private VariableValueType valueType;

headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/DataModelNode.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.tencent.supersonic.headless.core.pojo.Ontology;
1515
import com.tencent.supersonic.headless.core.pojo.OntologyQuery;
1616
import com.tencent.supersonic.headless.core.translator.parser.Constants;
17+
import com.tencent.supersonic.headless.core.utils.SqlVariableParseUtils;
1718
import lombok.extern.slf4j.Slf4j;
1819
import org.apache.calcite.sql.SqlDataTypeSpec;
1920
import org.apache.calcite.sql.SqlNode;
@@ -34,6 +35,10 @@ public static SqlNode build(ModelResp dataModel, SqlValidatorScope scope) throws
3435
if (dataModel.getModelDetail().getSqlQuery() != null
3536
&& !dataModel.getModelDetail().getSqlQuery().isEmpty()) {
3637
sqlTable = dataModel.getModelDetail().getSqlQuery();
38+
// if model has sqlVariables, parse sqlVariables
39+
if (Objects.nonNull(dataModel.getModelDetail().getSqlVariables()) || (CollectionUtils.isEmpty(dataModel.getModelDetail().getSqlVariables()))) {
40+
sqlTable = SqlVariableParseUtils.parse(sqlTable, dataModel.getModelDetail().getSqlVariables(), Lists.newArrayList());
41+
}
3742
} else if (dataModel.getModelDetail().getTableQuery() != null
3843
&& !dataModel.getModelDetail().getTableQuery().isEmpty()) {
3944
if (dataModel.getModelDetail().getDbType()

headless/server/src/main/java/com/tencent/supersonic/headless/server/manager/ModelYamlManager.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public static synchronized DataModelYamlTpl convert2YamlObj(ModelResp modelResp,
3939
dataModelYamlTpl.setFilterSql(modelDetail.getFilterSql());
4040
dataModelYamlTpl.setFields(modelResp.getModelDetail().getFields());
4141
dataModelYamlTpl.setId(modelResp.getId());
42+
dataModelYamlTpl.setSqlVariables(modelDetail.getSqlVariables());
4243
return dataModelYamlTpl;
4344
}
4445

headless/server/src/main/java/com/tencent/supersonic/headless/server/manager/SemanticSchemaManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public static ModelResp getDataModel(final DataModelYamlTpl d) {
102102
modelDetail.getMeasures().addAll(getMeasureParams(d.getMeasures()));
103103
modelDetail.getDimensions().addAll(getDimensions(d.getDimensions()));
104104
modelDetail.getFields().addAll(d.getFields());
105-
105+
modelDetail.getSqlVariables().addAll(d.getSqlVariables());
106106
return dataModel;
107107
}
108108

headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/StarrocksParametersBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public List<DatabaseParameter> build() {
1515
List<DatabaseParameter> databaseParameters = new ArrayList<>();
1616
DatabaseParameter host = new DatabaseParameter();
1717
host.setComment("JDBC连接");
18-
host.setValue("jdbc:mysql://localhost:3306/dbname");
18+
host.setValue("jdbc:mysql://localhost:9030/dbname");
1919
host.setName("url");
2020
host.setPlaceholder("请输入JDBC连接串");
2121
databaseParameters.add(host);

headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/yaml/DataModelYamlTpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.tencent.supersonic.headless.server.pojo.yaml;
22

33
import com.tencent.supersonic.headless.api.pojo.Field;
4+
import com.tencent.supersonic.headless.api.pojo.SqlVariable;
45
import com.tencent.supersonic.headless.api.pojo.enums.ModelSourceType;
56
import lombok.Data;
67

@@ -32,4 +33,6 @@ public class DataModelYamlTpl {
3233
private List<Field> fields;
3334

3435
private ModelSourceType modelSourceTypeEnum;
36+
37+
private List<SqlVariable> sqlVariables;
3538
}

0 commit comments

Comments
 (0)