mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-11 12:07:42 +00:00
Modify s2ql to s2sql and add LLMSemanticQuery containing S2SQLQuery and MetricInterpretQuery. (#350)
This commit is contained in:
@@ -6,7 +6,7 @@ import lombok.ToString;
|
||||
|
||||
@Data
|
||||
@ToString
|
||||
public class QueryS2QLReq {
|
||||
public class QueryS2SQLReq {
|
||||
|
||||
private Long modelId;
|
||||
|
||||
@@ -62,11 +62,11 @@ public class QueryStructReq {
|
||||
/**
|
||||
* Later deleted for compatibility only
|
||||
*/
|
||||
private String s2QL;
|
||||
private String s2SQL;
|
||||
/**
|
||||
* Later deleted for compatibility only
|
||||
*/
|
||||
private String logicSql;
|
||||
private String correctS2SQL;
|
||||
|
||||
public List<String> getGroups() {
|
||||
if (!CollectionUtils.isEmpty(this.groups)) {
|
||||
@@ -171,7 +171,7 @@ public class QueryStructReq {
|
||||
* @param queryStructReq
|
||||
* @return
|
||||
*/
|
||||
public QueryS2QLReq convert(QueryStructReq queryStructReq) {
|
||||
public QueryS2SQLReq convert(QueryStructReq queryStructReq) {
|
||||
String sql = null;
|
||||
try {
|
||||
sql = buildSql(queryStructReq);
|
||||
@@ -179,7 +179,7 @@ public class QueryStructReq {
|
||||
log.error("buildSql error", e);
|
||||
}
|
||||
|
||||
QueryS2QLReq result = new QueryS2QLReq();
|
||||
QueryS2SQLReq result = new QueryS2SQLReq();
|
||||
result.setSql(sql);
|
||||
result.setModelId(queryStructReq.getModelId());
|
||||
result.setVariables(new HashMap<>());
|
||||
|
||||
@@ -20,16 +20,16 @@ import com.tencent.supersonic.semantic.model.domain.Catalog;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.SemanticSchemaManager;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.planner.AggPlanner;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.planner.MaterializationPlanner;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DataType;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Materialization;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Materialization.TimePartType;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.MaterializationElement;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Measure;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.SemanticModel;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.TimeRange;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DataType;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Materialization;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Materialization.TimePartType;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.MaterializationElement;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Measure;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.SemanticModel;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.TimeRange;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SemanticSchema;
|
||||
import com.tencent.supersonic.semantic.query.persistence.pojo.QueryStatement;
|
||||
import com.tencent.supersonic.semantic.query.utils.QueryStructUtils;
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.tencent.supersonic.semantic.api.query.request.MetricReq;
|
||||
import com.tencent.supersonic.semantic.model.domain.Catalog;
|
||||
import com.tencent.supersonic.semantic.query.parser.SqlParser;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.planner.AggPlanner;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.SemanticModel;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.SemanticModel;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SemanticSchema;
|
||||
import com.tencent.supersonic.semantic.query.persistence.pojo.QueryStatement;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -11,16 +11,16 @@ import com.tencent.supersonic.semantic.api.model.yaml.MeasureYamlTpl;
|
||||
import com.tencent.supersonic.semantic.api.model.yaml.MetricTypeParamsYamlTpl;
|
||||
import com.tencent.supersonic.semantic.api.model.yaml.MetricYamlTpl;
|
||||
import com.tencent.supersonic.semantic.model.domain.Catalog;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DataType;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DimensionTimeTypeParams;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Identify;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Measure;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.MetricTypeParams;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.SemanticModel;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DataType;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DimensionTimeTypeParams;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Identify;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Measure;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.MetricTypeParams;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.SemanticModel;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SemanticSchema;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
@@ -3,8 +3,8 @@ package com.tencent.supersonic.semantic.query.parser.calcite.planner;
|
||||
|
||||
import com.tencent.supersonic.semantic.api.query.enums.AggOption;
|
||||
import com.tencent.supersonic.semantic.api.query.request.MetricReq;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SchemaBuilder;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SemanticSchema;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.Renderer;
|
||||
|
||||
@@ -4,15 +4,15 @@ import com.tencent.supersonic.common.util.calcite.SqlParseUtils;
|
||||
import com.tencent.supersonic.semantic.api.query.enums.AggOption;
|
||||
import com.tencent.supersonic.semantic.api.query.request.MetricReq;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.Configuration;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Identify;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Materialization;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Materialization.TimePartType;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.MaterializationElement;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Measure;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.TimeRange;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Identify;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Materialization;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Materialization.TimePartType;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.MaterializationElement;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Measure;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.TimeRange;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SchemaBuilder;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SemanticSchema;
|
||||
import com.tencent.supersonic.semantic.query.persistence.pojo.QueryStatement;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2ql;
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2sql;
|
||||
|
||||
public class Constants {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2ql;
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2sql;
|
||||
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Materialization.TimePartType;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Materialization.TimePartType;
|
||||
import java.util.List;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2ql;
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2sql;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2ql;
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2sql;
|
||||
|
||||
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SemanticItem;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2ql;
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2sql;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2ql;
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2sql;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2ql;
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2sql;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2ql;
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2sql;
|
||||
|
||||
import java.util.List;
|
||||
import lombok.Builder;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2ql;
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2sql;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2ql;
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2sql;
|
||||
|
||||
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SemanticItem;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2ql;
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2sql;
|
||||
|
||||
import java.util.List;
|
||||
import lombok.Data;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2ql;
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2sql;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2ql;
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.s2sql;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
@@ -2,7 +2,7 @@ package com.tencent.supersonic.semantic.query.parser.calcite.schema;
|
||||
|
||||
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.Configuration;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.S2QLSqlValidatorImpl;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.S2SQLSqlValidatorImpl;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@@ -35,9 +35,9 @@ public class SchemaBuilder {
|
||||
Configuration.typeFactory,
|
||||
Configuration.config
|
||||
);
|
||||
S2QLSqlValidatorImpl s2QLSqlValidator = new S2QLSqlValidatorImpl(Configuration.operatorTable, catalogReader,
|
||||
S2SQLSqlValidatorImpl s2SQLSqlValidator = new S2SQLSqlValidatorImpl(Configuration.operatorTable, catalogReader,
|
||||
Configuration.typeFactory, Configuration.validatorConfig);
|
||||
return new ParameterScope(s2QLSqlValidator, nameToTypeMap);
|
||||
return new ParameterScope(s2SQLSqlValidator, nameToTypeMap);
|
||||
}
|
||||
|
||||
public static CalciteSchema getMaterializationSchema() {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.schema;
|
||||
|
||||
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Materialization;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.SemanticModel;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Materialization;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.SemanticModel;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -5,11 +5,11 @@ import com.tencent.supersonic.semantic.api.query.request.MetricReq;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.node.MeasureNode;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.node.MetricNode;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.node.SemanticNode;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Identify;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Measure;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Identify;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Measure;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SemanticSchema;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
@@ -5,9 +5,9 @@ import org.apache.calcite.sql.SqlOperatorTable;
|
||||
import org.apache.calcite.sql.validate.SqlValidatorCatalogReader;
|
||||
import org.apache.calcite.sql.validate.SqlValidatorImpl;
|
||||
|
||||
public class S2QLSqlValidatorImpl extends SqlValidatorImpl {
|
||||
public class S2SQLSqlValidatorImpl extends SqlValidatorImpl {
|
||||
|
||||
public S2QLSqlValidatorImpl(SqlOperatorTable opTab, SqlValidatorCatalogReader catalogReader,
|
||||
public S2SQLSqlValidatorImpl(SqlOperatorTable opTab, SqlValidatorCatalogReader catalogReader,
|
||||
RelDataTypeFactory typeFactory, Config config) {
|
||||
super(opTab, catalogReader, typeFactory, config);
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.sql;
|
||||
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DataSource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -3,9 +3,9 @@ package com.tencent.supersonic.semantic.query.parser.calcite.sql.node;
|
||||
|
||||
import com.tencent.supersonic.semantic.api.query.request.MetricReq;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.Configuration;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SemanticSchema;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.node.extend.LateralViewExplodeNode;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.sql.node;
|
||||
|
||||
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Dimension;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.sql.node;
|
||||
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Identify;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Identify.Type;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Identify;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Identify.Type;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.sql.node;
|
||||
|
||||
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Measure;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Measure;
|
||||
import org.apache.calcite.sql.SqlNode;
|
||||
import org.apache.calcite.sql.validate.SqlValidatorScope;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.sql.node;
|
||||
|
||||
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Metric;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import lombok.Data;
|
||||
|
||||
@@ -6,9 +6,9 @@ import com.tencent.supersonic.semantic.query.parser.calcite.sql.Renderer;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.node.FilterNode;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.node.MetricNode;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.TableView;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SemanticSchema;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.node.SemanticNode;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package com.tencent.supersonic.semantic.query.parser.calcite.sql.render;
|
||||
|
||||
import com.tencent.supersonic.semantic.api.query.request.MetricReq;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Identify;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Identify;
|
||||
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Identify.Type;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Materialization.TimePartType;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Identify.Type;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Materialization.TimePartType;
|
||||
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SemanticSchema;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.Renderer;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.TableView;
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.tencent.supersonic.semantic.api.query.request.MetricReq;
|
||||
import com.tencent.supersonic.common.pojo.ColumnOrder;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.Renderer;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.TableView;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SemanticSchema;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.node.SemanticNode;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -2,12 +2,12 @@ package com.tencent.supersonic.semantic.query.parser.calcite.sql.render;
|
||||
|
||||
|
||||
import com.tencent.supersonic.semantic.api.query.request.MetricReq;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Identify;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Measure;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2ql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Constants;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.DataSource;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Dimension;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Identify;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Measure;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.s2sql.Metric;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.schema.SemanticSchema;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.Renderer;
|
||||
import com.tencent.supersonic.semantic.query.parser.calcite.sql.TableView;
|
||||
|
||||
@@ -15,7 +15,7 @@ import com.tencent.supersonic.semantic.api.model.response.ModelSchemaResp;
|
||||
import com.tencent.supersonic.semantic.api.query.enums.AggOption;
|
||||
import com.tencent.supersonic.semantic.api.query.pojo.MetricTable;
|
||||
import com.tencent.supersonic.semantic.api.query.request.ParseSqlReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2QLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2SQLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryStructReq;
|
||||
import com.tencent.supersonic.semantic.model.domain.Catalog;
|
||||
import com.tencent.supersonic.semantic.model.domain.ModelService;
|
||||
@@ -56,7 +56,7 @@ public class QueryReqConverter {
|
||||
@Autowired
|
||||
private Catalog catalog;
|
||||
|
||||
public QueryStatement convert(QueryS2QLReq databaseReq, ModelSchemaResp modelSchemaResp) throws Exception {
|
||||
public QueryStatement convert(QueryS2SQLReq databaseReq, ModelSchemaResp modelSchemaResp) throws Exception {
|
||||
|
||||
if (Objects.isNull(modelSchemaResp)) {
|
||||
return new QueryStatement();
|
||||
@@ -119,9 +119,9 @@ public class QueryReqConverter {
|
||||
return queryStatement;
|
||||
}
|
||||
|
||||
private AggOption getAggOption(QueryS2QLReq databaseReq) {
|
||||
// if there is no group by in S2QL,set MetricTable's aggOption to "NATIVE"
|
||||
// if there is count() in S2QL,set MetricTable's aggOption to "NATIVE"
|
||||
private AggOption getAggOption(QueryS2SQLReq databaseReq) {
|
||||
// if there is no group by in S2SQL,set MetricTable's aggOption to "NATIVE"
|
||||
// if there is count() in S2SQL,set MetricTable's aggOption to "NATIVE"
|
||||
String sql = databaseReq.getSql();
|
||||
if (!SqlParserSelectHelper.hasGroupBy(sql)
|
||||
|| SqlParserSelectFunctionHelper.hasFunction(sql, "count")
|
||||
@@ -131,7 +131,7 @@ public class QueryReqConverter {
|
||||
return AggOption.DEFAULT;
|
||||
}
|
||||
|
||||
private void convertNameToBizName(QueryS2QLReq databaseReq, ModelSchemaResp modelSchemaResp) {
|
||||
private void convertNameToBizName(QueryS2SQLReq databaseReq, ModelSchemaResp modelSchemaResp) {
|
||||
Map<String, String> fieldNameToBizNameMap = getFieldNameToBizNameMap(modelSchemaResp);
|
||||
String sql = databaseReq.getSql();
|
||||
log.info("convert name to bizName before:{}", sql);
|
||||
@@ -158,7 +158,7 @@ public class QueryReqConverter {
|
||||
return metrics;
|
||||
}
|
||||
|
||||
private void functionNameCorrector(QueryS2QLReq databaseReq) {
|
||||
private void functionNameCorrector(QueryS2SQLReq databaseReq) {
|
||||
DatabaseResp database = catalog.getDatabaseByModelId(databaseReq.getModelId());
|
||||
if (Objects.isNull(database) || Objects.isNull(database.getType())) {
|
||||
return;
|
||||
@@ -208,7 +208,7 @@ public class QueryReqConverter {
|
||||
return elements.stream();
|
||||
}
|
||||
|
||||
public void correctTableName(QueryS2QLReq databaseReq) {
|
||||
public void correctTableName(QueryS2SQLReq databaseReq) {
|
||||
String sql = SqlParserReplaceHelper.replaceTable(databaseReq.getSql(),
|
||||
Constants.TABLE_PREFIX + databaseReq.getModelId());
|
||||
databaseReq.setSql(sql);
|
||||
|
||||
@@ -11,7 +11,7 @@ import com.tencent.supersonic.semantic.api.query.request.ExplainSqlReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.ItemUseReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.ParseSqlReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryDimValueReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2QLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2SQLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryMultiStructReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryStructReq;
|
||||
import com.tencent.supersonic.semantic.api.query.response.ItemUseResp;
|
||||
@@ -42,11 +42,11 @@ public class QueryController {
|
||||
|
||||
|
||||
@PostMapping("/sql")
|
||||
public Object queryBySql(@RequestBody QueryS2QLReq queryS2QLReq,
|
||||
public Object queryBySql(@RequestBody QueryS2SQLReq queryS2SQLReq,
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response) throws Exception {
|
||||
User user = UserHolder.findUser(request, response);
|
||||
Object queryBySql = queryService.queryBySql(queryS2QLReq, user);
|
||||
Object queryBySql = queryService.queryBySql(queryS2SQLReq, user);
|
||||
log.info("queryBySql:{},queryBySql");
|
||||
return queryBySql;
|
||||
}
|
||||
@@ -124,9 +124,9 @@ public class QueryController {
|
||||
QueryTypeEnum queryTypeEnum = explainSqlReq.getQueryTypeEnum();
|
||||
|
||||
if (QueryTypeEnum.SQL.equals(queryTypeEnum)) {
|
||||
QueryS2QLReq queryS2QLReq = JsonUtil.toObject(queryReqJson, QueryS2QLReq.class);
|
||||
ExplainSqlReq<QueryS2QLReq> explainSqlReqNew = ExplainSqlReq.<QueryS2QLReq>builder()
|
||||
.queryReq(queryS2QLReq)
|
||||
QueryS2SQLReq queryS2SQLReq = JsonUtil.toObject(queryReqJson, QueryS2SQLReq.class);
|
||||
ExplainSqlReq<QueryS2SQLReq> explainSqlReqNew = ExplainSqlReq.<QueryS2SQLReq>builder()
|
||||
.queryReq(queryS2SQLReq)
|
||||
.queryTypeEnum(queryTypeEnum).build();
|
||||
return queryService.explain(explainSqlReqNew, user);
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import com.tencent.supersonic.semantic.api.query.request.ExplainSqlReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.ItemUseReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.MetricReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryDimValueReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2QLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2SQLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryMultiStructReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryStructReq;
|
||||
import com.tencent.supersonic.semantic.api.query.response.ItemUseResp;
|
||||
@@ -18,7 +18,7 @@ import java.util.List;
|
||||
|
||||
public interface QueryService {
|
||||
|
||||
Object queryBySql(QueryS2QLReq querySqlCmd, User user) throws Exception;
|
||||
Object queryBySql(QueryS2SQLReq querySqlCmd, User user) throws Exception;
|
||||
|
||||
QueryResultWithSchemaResp queryByStruct(QueryStructReq queryStructCmd, User user) throws Exception;
|
||||
|
||||
|
||||
@@ -24,11 +24,11 @@ import com.tencent.supersonic.semantic.api.query.request.ExplainSqlReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.ItemUseReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.MetricReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryDimValueReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2QLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2SQLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryMultiStructReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryStructReq;
|
||||
import com.tencent.supersonic.semantic.api.query.response.ItemUseResp;
|
||||
import com.tencent.supersonic.semantic.query.utils.S2QLPermissionAnnotation;
|
||||
import com.tencent.supersonic.semantic.query.utils.S2SQLPermissionAnnotation;
|
||||
import com.tencent.supersonic.semantic.query.executor.QueryExecutor;
|
||||
import com.tencent.supersonic.semantic.query.parser.convert.QueryReqConverter;
|
||||
import com.tencent.supersonic.semantic.query.persistence.pojo.QueryStatement;
|
||||
@@ -89,9 +89,9 @@ public class QueryServiceImpl implements QueryService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@S2QLPermissionAnnotation
|
||||
@S2SQLPermissionAnnotation
|
||||
@SneakyThrows
|
||||
public Object queryBySql(QueryS2QLReq querySqlCmd, User user) {
|
||||
public Object queryBySql(QueryS2SQLReq querySqlCmd, User user) {
|
||||
statUtils.initStatInfo(querySqlCmd, user);
|
||||
QueryStatement queryStatement = new QueryStatement();
|
||||
try {
|
||||
@@ -109,7 +109,7 @@ public class QueryServiceImpl implements QueryService {
|
||||
return semanticQueryEngine.execute(queryStatement);
|
||||
}
|
||||
|
||||
private QueryStatement convertToQueryStatement(QueryS2QLReq querySqlCmd, User user) throws Exception {
|
||||
private QueryStatement convertToQueryStatement(QueryS2SQLReq querySqlCmd, User user) throws Exception {
|
||||
ModelSchemaFilterReq filter = new ModelSchemaFilterReq();
|
||||
List<Long> modelIds = new ArrayList<>();
|
||||
modelIds.add(querySqlCmd.getModelId());
|
||||
@@ -294,8 +294,8 @@ public class QueryServiceImpl implements QueryService {
|
||||
QueryTypeEnum queryTypeEnum = explainSqlReq.getQueryTypeEnum();
|
||||
T queryReq = explainSqlReq.getQueryReq();
|
||||
|
||||
if (QueryTypeEnum.SQL.equals(queryTypeEnum) && queryReq instanceof QueryS2QLReq) {
|
||||
QueryStatement queryStatement = convertToQueryStatement((QueryS2QLReq) queryReq, user);
|
||||
if (QueryTypeEnum.SQL.equals(queryTypeEnum) && queryReq instanceof QueryS2SQLReq) {
|
||||
QueryStatement queryStatement = convertToQueryStatement((QueryS2SQLReq) queryReq, user);
|
||||
return getExplainResp(queryStatement);
|
||||
}
|
||||
if (QueryTypeEnum.STRUCT.equals(queryTypeEnum) && queryReq instanceof QueryStructReq) {
|
||||
|
||||
@@ -11,7 +11,7 @@ import com.tencent.supersonic.semantic.api.model.response.DimensionResp;
|
||||
import com.tencent.supersonic.semantic.api.model.response.QueryResultWithSchemaResp;
|
||||
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
||||
import com.tencent.supersonic.common.pojo.Filter;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2QLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2SQLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryStructReq;
|
||||
import com.tencent.supersonic.semantic.model.domain.DimensionService;
|
||||
import java.util.ArrayList;
|
||||
@@ -55,9 +55,9 @@ public class DimValueAspect {
|
||||
return queryResultWithColumns;
|
||||
}
|
||||
Object[] args = joinPoint.getArgs();
|
||||
QueryS2QLReq queryS2QLReq = (QueryS2QLReq) args[0];
|
||||
MetaFilter metaFilter = new MetaFilter(Lists.newArrayList(queryS2QLReq.getModelId()));
|
||||
String sql = queryS2QLReq.getSql();
|
||||
QueryS2SQLReq queryS2SQLReq = (QueryS2SQLReq) args[0];
|
||||
MetaFilter metaFilter = new MetaFilter(Lists.newArrayList(queryS2SQLReq.getModelId()));
|
||||
String sql = queryS2SQLReq.getSql();
|
||||
log.info("correctorSql before replacing:{}", sql);
|
||||
// if dimensionvalue is alias,consider the true dimensionvalue.
|
||||
List<FilterExpression> filterExpressionList = SqlParserSelectHelper.getWhereExpressions(sql);
|
||||
@@ -88,7 +88,7 @@ public class DimValueAspect {
|
||||
log.info("filedNameToValueMap:{}", filedNameToValueMap);
|
||||
sql = SqlParserReplaceHelper.replaceValue(sql, filedNameToValueMap);
|
||||
log.info("correctorSql after replacing:{}", sql);
|
||||
queryS2QLReq.setSql(sql);
|
||||
queryS2SQLReq.setSql(sql);
|
||||
Map<String, Map<String, String>> techNameToBizName = getTechNameToBizName(dimensions);
|
||||
|
||||
QueryResultWithSchemaResp queryResultWithColumns = (QueryResultWithSchemaResp) joinPoint.proceed();
|
||||
|
||||
@@ -27,7 +27,7 @@ import com.tencent.supersonic.common.pojo.ItemDateResp;
|
||||
import com.tencent.supersonic.semantic.api.model.response.MetricResp;
|
||||
import com.tencent.supersonic.semantic.api.model.response.MetricSchemaResp;
|
||||
import com.tencent.supersonic.semantic.api.model.response.ModelSchemaResp;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2QLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2SQLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryStructReq;
|
||||
import com.tencent.supersonic.semantic.model.domain.Catalog;
|
||||
import com.tencent.supersonic.semantic.model.domain.pojo.EngineTypeEnum;
|
||||
@@ -199,8 +199,8 @@ public class QueryStructUtils {
|
||||
return resNameEnSet;
|
||||
}
|
||||
|
||||
public Set<String> getResName(QueryS2QLReq queryS2QLReq) {
|
||||
Set<String> resNameSet = SqlParserSelectHelper.getAllFields(queryS2QLReq.getSql())
|
||||
public Set<String> getResName(QueryS2SQLReq queryS2SQLReq) {
|
||||
Set<String> resNameSet = SqlParserSelectHelper.getAllFields(queryS2SQLReq.getSql())
|
||||
.stream().collect(Collectors.toSet());
|
||||
return resNameSet;
|
||||
}
|
||||
@@ -210,11 +210,11 @@ public class QueryStructUtils {
|
||||
return resNameEnSet.stream().filter(res -> !internalCols.contains(res)).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
public Set<String> getResNameEnExceptInternalCol(QueryS2QLReq queryS2QLReq, User user) {
|
||||
Set<String> resNameSet = getResName(queryS2QLReq);
|
||||
public Set<String> getResNameEnExceptInternalCol(QueryS2SQLReq queryS2SQLReq, User user) {
|
||||
Set<String> resNameSet = getResName(queryS2SQLReq);
|
||||
Set<String> resNameEnSet = new HashSet<>();
|
||||
ModelSchemaFilterReq filter = new ModelSchemaFilterReq();
|
||||
List<Long> modelIds = Lists.newArrayList(queryS2QLReq.getModelId());
|
||||
List<Long> modelIds = Lists.newArrayList(queryS2SQLReq.getModelId());
|
||||
filter.setModelIds(modelIds);
|
||||
List<ModelSchemaResp> modelSchemaRespList = schemaService.fetchModelSchema(filter, user);
|
||||
if (!CollectionUtils.isEmpty(modelSchemaRespList)) {
|
||||
@@ -245,8 +245,8 @@ public class QueryStructUtils {
|
||||
return resNameEnSet.stream().filter(res -> !internalCols.contains(res)).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
public Set<String> getFilterResNameEnExceptInternalCol(QueryS2QLReq queryS2QLReq) {
|
||||
String sql = queryS2QLReq.getSql();
|
||||
public Set<String> getFilterResNameEnExceptInternalCol(QueryS2SQLReq queryS2SQLReq) {
|
||||
String sql = queryS2SQLReq.getSql();
|
||||
Set<String> resNameEnSet = SqlParserSelectHelper.getWhereFields(sql).stream().collect(Collectors.toSet());
|
||||
return resNameEnSet.stream().filter(res -> !internalCols.contains(res)).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import com.tencent.supersonic.common.util.jsqlparser.SqlParserAddHelper;
|
||||
import com.tencent.supersonic.semantic.api.model.response.DimensionResp;
|
||||
import com.tencent.supersonic.semantic.api.model.response.ModelResp;
|
||||
import com.tencent.supersonic.semantic.api.model.response.QueryResultWithSchemaResp;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2QLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2SQLReq;
|
||||
import com.tencent.supersonic.semantic.model.domain.DimensionService;
|
||||
import com.tencent.supersonic.semantic.model.domain.ModelService;
|
||||
import com.tencent.supersonic.semantic.model.domain.pojo.MetaFilter;
|
||||
@@ -42,7 +42,7 @@ import org.springframework.util.CollectionUtils;
|
||||
@Aspect
|
||||
@Order(1)
|
||||
@Slf4j
|
||||
public class S2QLDataAspect {
|
||||
public class S2SQLDataAspect {
|
||||
|
||||
@Autowired
|
||||
private QueryStructUtils queryStructUtils;
|
||||
@@ -55,24 +55,24 @@ public class S2QLDataAspect {
|
||||
@Value("${permission.data.enable:true}")
|
||||
private Boolean permissionDataEnable;
|
||||
|
||||
@Pointcut("@annotation(com.tencent.supersonic.semantic.query.utils.S2QLPermissionAnnotation)")
|
||||
private void s2QLPermissionCheck() {
|
||||
@Pointcut("@annotation(com.tencent.supersonic.semantic.query.utils.S2SQLPermissionAnnotation)")
|
||||
private void s2SQLPermissionCheck() {
|
||||
}
|
||||
|
||||
@Around("s2QLPermissionCheck()")
|
||||
@Around("s2SQLPermissionCheck()")
|
||||
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
|
||||
log.info("s2ql permission check!");
|
||||
log.info("s2SQL permission check!");
|
||||
Object[] objects = joinPoint.getArgs();
|
||||
QueryS2QLReq queryS2QLReq = (QueryS2QLReq) objects[0];
|
||||
QueryS2SQLReq queryS2SQLReq = (QueryS2SQLReq) objects[0];
|
||||
User user = (User) objects[1];
|
||||
if (!permissionDataEnable) {
|
||||
log.info("not to check s2QL permission!");
|
||||
log.info("not to check s2SQL permission!");
|
||||
return joinPoint.proceed();
|
||||
}
|
||||
if (Objects.isNull(user) || Strings.isNullOrEmpty(user.getName())) {
|
||||
throw new RuntimeException("please provide user information");
|
||||
}
|
||||
Long modelId = queryS2QLReq.getModelId();
|
||||
Long modelId = queryS2SQLReq.getModelId();
|
||||
|
||||
//1. determine whether admin of the model
|
||||
if (authCommonService.doModelAdmin(user, modelId)) {
|
||||
@@ -82,7 +82,7 @@ public class S2QLDataAspect {
|
||||
// 2. determine whether the subject field is visible
|
||||
authCommonService.doModelVisible(user, modelId);
|
||||
// 3. fetch data permission meta information
|
||||
Set<String> res4Privilege = queryStructUtils.getResNameEnExceptInternalCol(queryS2QLReq, user);
|
||||
Set<String> res4Privilege = queryStructUtils.getResNameEnExceptInternalCol(queryS2SQLReq, user);
|
||||
log.info("modelId:{}, res4Privilege:{}", modelId, res4Privilege);
|
||||
|
||||
Set<String> sensitiveResByModel = authCommonService.getHighSensitiveColsByModelId(modelId);
|
||||
@@ -97,10 +97,10 @@ public class S2QLDataAspect {
|
||||
Set<String> resAuthSet = authCommonService.getAuthResNameSet(authorizedResource, modelId);
|
||||
|
||||
// 4.if sensitive fields without permission are involved in filter, thrown an exception
|
||||
doFilterCheckLogic(queryS2QLReq, resAuthSet, sensitiveResReq);
|
||||
doFilterCheckLogic(queryS2SQLReq, resAuthSet, sensitiveResReq);
|
||||
|
||||
// 5.row permission pre-filter
|
||||
doRowPermission(queryS2QLReq, authorizedResource);
|
||||
doRowPermission(queryS2SQLReq, authorizedResource);
|
||||
|
||||
// 6.proceed
|
||||
QueryResultWithSchemaResp queryResultWithColumns = (QueryResultWithSchemaResp) joinPoint.proceed();
|
||||
@@ -123,7 +123,7 @@ public class S2QLDataAspect {
|
||||
return queryResultAfterDesensitization;
|
||||
}
|
||||
|
||||
private void doRowPermission(QueryS2QLReq queryS2QLReq, AuthorizedResourceResp authorizedResource) {
|
||||
private void doRowPermission(QueryS2SQLReq queryS2SQLReq, AuthorizedResourceResp authorizedResource) {
|
||||
log.debug("start doRowPermission logic");
|
||||
StringJoiner joiner = new StringJoiner(" OR ");
|
||||
List<String> dimensionFilters = new ArrayList<>();
|
||||
@@ -145,10 +145,10 @@ public class S2QLDataAspect {
|
||||
try {
|
||||
Expression expression = CCJSqlParserUtil.parseCondExpression(" ( " + joiner + " ) ");
|
||||
if (StringUtils.isNotEmpty(joiner.toString())) {
|
||||
String sql = SqlParserAddHelper.addWhere(queryS2QLReq.getSql(), expression);
|
||||
log.info("before doRowPermission, queryS2QLReq:{}", queryS2QLReq.getSql());
|
||||
queryS2QLReq.setSql(sql);
|
||||
log.info("after doRowPermission, queryS2QLReq:{}", queryS2QLReq.getSql());
|
||||
String sql = SqlParserAddHelper.addWhere(queryS2SQLReq.getSql(), expression);
|
||||
log.info("before doRowPermission, queryS2SQLReq:{}", queryS2SQLReq.getSql());
|
||||
queryS2SQLReq.setSql(sql);
|
||||
log.info("after doRowPermission, queryS2SQLReq:{}", queryS2SQLReq.getSql());
|
||||
}
|
||||
} catch (JSQLParserException jsqlParserException) {
|
||||
log.info("jsqlParser has an exception:{}", jsqlParserException.toString());
|
||||
@@ -156,15 +156,15 @@ public class S2QLDataAspect {
|
||||
|
||||
}
|
||||
|
||||
private void doFilterCheckLogic(QueryS2QLReq queryS2QLReq, Set<String> resAuthName,
|
||||
private void doFilterCheckLogic(QueryS2SQLReq queryS2SQLReq, Set<String> resAuthName,
|
||||
Set<String> sensitiveResReq) {
|
||||
Set<String> resFilterSet = queryStructUtils.getFilterResNameEnExceptInternalCol(queryS2QLReq);
|
||||
Set<String> resFilterSet = queryStructUtils.getFilterResNameEnExceptInternalCol(queryS2SQLReq);
|
||||
Set<String> need2Apply = resFilterSet.stream()
|
||||
.filter(res -> !resAuthName.contains(res) && sensitiveResReq.contains(res)).collect(Collectors.toSet());
|
||||
Set<String> nameCnSet = new HashSet<>();
|
||||
|
||||
List<Long> modelIds = new ArrayList<>();
|
||||
modelIds.add(queryS2QLReq.getModelId());
|
||||
modelIds.add(queryS2SQLReq.getModelId());
|
||||
List<ModelResp> modelInfos = modelService.getModelList(modelIds);
|
||||
String modelNameCn = Constants.EMPTY;
|
||||
if (!CollectionUtils.isEmpty(modelInfos)) {
|
||||
@@ -9,6 +9,6 @@ import java.lang.annotation.Documented;
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface S2QLPermissionAnnotation {
|
||||
public @interface S2SQLPermissionAnnotation {
|
||||
|
||||
}
|
||||
@@ -13,7 +13,7 @@ import com.tencent.supersonic.semantic.api.model.pojo.QueryStat;
|
||||
import com.tencent.supersonic.semantic.api.model.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.semantic.api.model.response.ModelSchemaResp;
|
||||
import com.tencent.supersonic.semantic.api.query.request.ItemUseReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2QLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryS2SQLReq;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryStructReq;
|
||||
import com.tencent.supersonic.semantic.api.query.response.ItemUseResp;
|
||||
import com.tencent.supersonic.semantic.model.domain.ModelService;
|
||||
@@ -88,11 +88,11 @@ public class StatUtils {
|
||||
}
|
||||
|
||||
|
||||
public void initStatInfo(QueryS2QLReq queryS2QLReq, User facadeUser) {
|
||||
public void initStatInfo(QueryS2SQLReq queryS2SQLReq, User facadeUser) {
|
||||
QueryStat queryStatInfo = new QueryStat();
|
||||
List<String> allFields = SqlParserSelectHelper.getAllFields(queryS2QLReq.getSql());
|
||||
queryStatInfo.setModelId(queryS2QLReq.getModelId());
|
||||
ModelSchemaResp modelSchemaResp = modelService.fetchSingleModelSchema(queryS2QLReq.getModelId());
|
||||
List<String> allFields = SqlParserSelectHelper.getAllFields(queryS2SQLReq.getSql());
|
||||
queryStatInfo.setModelId(queryS2SQLReq.getModelId());
|
||||
ModelSchemaResp modelSchemaResp = modelService.fetchSingleModelSchema(queryS2SQLReq.getModelId());
|
||||
|
||||
List<String> dimensions = new ArrayList<>();
|
||||
if (Objects.nonNull(modelSchemaResp)) {
|
||||
@@ -107,12 +107,12 @@ public class StatUtils {
|
||||
String userName = getUserName(facadeUser);
|
||||
try {
|
||||
queryStatInfo.setTraceId("")
|
||||
.setModelId(queryS2QLReq.getModelId())
|
||||
.setModelId(queryS2SQLReq.getModelId())
|
||||
.setUser(userName)
|
||||
.setQueryType(QueryTypeEnum.SQL.getValue())
|
||||
.setQueryTypeBack(QueryTypeBackEnum.NORMAL.getState())
|
||||
.setQuerySqlCmd(queryS2QLReq.toString())
|
||||
.setQuerySqlCmdMd5(DigestUtils.md5Hex(queryS2QLReq.toString()))
|
||||
.setQuerySqlCmd(queryS2SQLReq.toString())
|
||||
.setQuerySqlCmdMd5(DigestUtils.md5Hex(queryS2SQLReq.toString()))
|
||||
.setStartTime(System.currentTimeMillis())
|
||||
.setUseResultCache(true)
|
||||
.setUseSqlCache(true)
|
||||
|
||||
Reference in New Issue
Block a user