forked from github/dataease
refactor: 单一数据源的数据集、图表使用对应数据库语法和函数
This commit is contained in:
parent
736d6c81f3
commit
2c78e6c1c6
@ -500,29 +500,29 @@ public class ChartDataManage {
|
||||
|
||||
SQLMeta sqlMeta = new SQLMeta();
|
||||
Table2SQLObj.table2sqlobj(sqlMeta, null, "(" + sql + ")", crossDs);
|
||||
CustomWhere2Str.customWhere2sqlObj(sqlMeta, fieldCustomFilter, transFields(allFields));
|
||||
ExtWhere2Str.extWhere2sqlOjb(sqlMeta, extFilterList, transFields(allFields));
|
||||
WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, transFields(allFields));
|
||||
CustomWhere2Str.customWhere2sqlObj(sqlMeta, fieldCustomFilter, transFields(allFields), crossDs, dsMap);
|
||||
ExtWhere2Str.extWhere2sqlOjb(sqlMeta, extFilterList, transFields(allFields), crossDs, dsMap);
|
||||
WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, transFields(allFields), crossDs, dsMap);
|
||||
|
||||
if (StringUtils.equalsAnyIgnoreCase(view.getType(), "indicator", "gauge", "liquid")) {
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields));
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields), crossDs, dsMap);
|
||||
querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view);
|
||||
} else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) {
|
||||
List<ChartViewFieldDTO> xFields = new ArrayList<>();
|
||||
xFields.addAll(xAxis);
|
||||
xFields.addAll(extStack);
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xFields, transFields(allFields));
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields));
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xFields, transFields(allFields), crossDs, dsMap);
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields), crossDs, dsMap);
|
||||
querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view);
|
||||
} else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) {
|
||||
List<ChartViewFieldDTO> yFields = new ArrayList<>();
|
||||
yFields.addAll(yAxis);
|
||||
yFields.addAll(extBubble);
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields));
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yFields, transFields(allFields));
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields), crossDs, dsMap);
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yFields, transFields(allFields), crossDs, dsMap);
|
||||
querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view);
|
||||
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields));
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields), crossDs, dsMap);
|
||||
String originSql = SQLProvider.createQuerySQL(sqlMeta, false, true, view);// 明细表强制加排序
|
||||
String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + pageInfo.getPageSize() + " OFFSET " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() : "");
|
||||
querySql = originSql + limit;
|
||||
@ -536,14 +536,14 @@ public class ChartDataManage {
|
||||
detailFieldList.addAll(xAxis);
|
||||
detailFieldList.addAll(viewFields);
|
||||
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, detailFieldList, transFields(allFields));
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, detailFieldList, transFields(allFields), crossDs, dsMap);
|
||||
String originSql = SQLProvider.createQuerySQL(sqlMeta, false, needOrder, view);
|
||||
String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + pageInfo.getPageSize() + " OFFSET " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() : "");
|
||||
detailFieldSql = originSql + limit;
|
||||
}
|
||||
} else {
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields));
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields));
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields), crossDs, dsMap);
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields), crossDs, dsMap);
|
||||
querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view);
|
||||
if (containDetailField(view) && ObjectUtils.isNotEmpty(viewFields)) {
|
||||
detailFieldList.addAll(xAxis);
|
||||
@ -1315,31 +1315,31 @@ public class ChartDataManage {
|
||||
|
||||
SQLMeta sqlMeta = new SQLMeta();
|
||||
Table2SQLObj.table2sqlobj(sqlMeta, null, "(" + sql + ")", crossDs);
|
||||
WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, transFields(allFields));
|
||||
WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, transFields(allFields), crossDs, dsMap);
|
||||
|
||||
if (StringUtils.equalsAnyIgnoreCase(view.getType(), "indicator", "gauge", "liquid")) {
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields));
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields), crossDs, dsMap);
|
||||
querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view);
|
||||
} else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) {
|
||||
List<ChartViewFieldDTO> xFields = new ArrayList<>();
|
||||
xFields.addAll(xAxis);
|
||||
xFields.addAll(extStack);
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xFields, transFields(allFields));
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields));
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xFields, transFields(allFields), crossDs, dsMap);
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields), crossDs, dsMap);
|
||||
querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view);
|
||||
} else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) {
|
||||
List<ChartViewFieldDTO> yFields = new ArrayList<>();
|
||||
yFields.addAll(yAxis);
|
||||
yFields.addAll(extBubble);
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields));
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yFields, transFields(allFields));
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields), crossDs, dsMap);
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yFields, transFields(allFields), crossDs, dsMap);
|
||||
querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view);
|
||||
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields));
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields), crossDs, dsMap);
|
||||
querySql = SQLProvider.createQuerySQL(sqlMeta, false, true, view);
|
||||
} else {
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields));
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields));
|
||||
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, transFields(allFields), crossDs, dsMap);
|
||||
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, transFields(allFields), crossDs, dsMap);
|
||||
querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view);
|
||||
}
|
||||
|
||||
|
@ -147,7 +147,7 @@ public class ChartViewManege {
|
||||
String originField = Utils.calcFieldRegex(ele.getOriginName(), tableObj, list.stream().peek(e -> {
|
||||
DatasetTableFieldDTO dto = new DatasetTableFieldDTO();
|
||||
BeanUtils.copyBean(dto, e);
|
||||
}).collect(Collectors.toList()));
|
||||
}).collect(Collectors.toList()), true, null);
|
||||
for (String func : FunctionConstant.AGG_FUNC) {
|
||||
if (Utils.matchFunction(func, originField)) {
|
||||
ele.setSummary("");
|
||||
|
@ -199,9 +199,9 @@ public class DatasetDataManage {
|
||||
// build query sql
|
||||
SQLMeta sqlMeta = new SQLMeta();
|
||||
Table2SQLObj.table2sqlobj(sqlMeta, null, "(" + sql + ")", crossDs);
|
||||
Field2SQLObj.field2sqlObj(sqlMeta, fields);
|
||||
WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, fields);
|
||||
Order2SQLObj.getOrders(sqlMeta, fields, datasetGroupInfoDTO.getSortFields());
|
||||
Field2SQLObj.field2sqlObj(sqlMeta, fields, crossDs, dsMap);
|
||||
WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, fields, crossDs, dsMap);
|
||||
Order2SQLObj.getOrders(sqlMeta, fields, datasetGroupInfoDTO.getSortFields(), crossDs, dsMap);
|
||||
String querySQL;
|
||||
if (start == null || count == null) {
|
||||
querySQL = SQLProvider.createQuerySQL(sqlMeta, false, false, needOrder);
|
||||
@ -438,7 +438,7 @@ public class DatasetDataManage {
|
||||
Table2SQLObj.table2sqlobj(sqlMeta, null, "(" + sql + ")", crossDs);
|
||||
// 计算字段先完成内容替换
|
||||
if (Objects.equals(field.getExtField(), ExtFieldConstant.EXT_CALC)) {
|
||||
String originField = Utils.calcFieldRegex(field.getOriginName(), sqlMeta.getTable(), allFields);
|
||||
String originField = Utils.calcFieldRegex(field.getOriginName(), sqlMeta.getTable(), allFields, crossDs, dsMap);
|
||||
// 此处是数据集预览,获取数据库原始字段枚举值等操作使用,如果遇到聚合函数则将originField设置为null
|
||||
for (String func : FunctionConstant.AGG_FUNC) {
|
||||
if (Utils.matchFunction(func, originField)) {
|
||||
@ -470,9 +470,9 @@ public class DatasetDataManage {
|
||||
rowPermissionsTree = permissionManage.getRowPermissionsTree(datasetGroupInfoDTO.getId(), user.getUserId());
|
||||
}
|
||||
|
||||
Field2SQLObj.field2sqlObj(sqlMeta, fields);
|
||||
WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, fields);
|
||||
Order2SQLObj.getOrders(sqlMeta, fields, datasetGroupInfoDTO.getSortFields());
|
||||
Field2SQLObj.field2sqlObj(sqlMeta, fields, crossDs, dsMap);
|
||||
WhereTree2Str.transFilterTrees(sqlMeta, rowPermissionsTree, fields, crossDs, dsMap);
|
||||
Order2SQLObj.getOrders(sqlMeta, fields, datasetGroupInfoDTO.getSortFields(), crossDs, dsMap);
|
||||
String querySQL = SQLProvider.createQuerySQLWithLimit(sqlMeta, false, needOrder, true, 0, 1000);
|
||||
querySQL = SqlUtils.rebuildSQL(querySQL, sqlMeta, crossDs, dsMap);
|
||||
|
||||
|
@ -4,6 +4,7 @@ import io.dataease.api.chart.dto.ChartCustomFilterItemDTO;
|
||||
import io.dataease.api.chart.dto.ChartFieldCustomFilterDTO;
|
||||
import io.dataease.api.dataset.union.model.SQLMeta;
|
||||
import io.dataease.api.dataset.union.model.SQLObj;
|
||||
import io.dataease.dataset.dto.DatasourceSchemaDTO;
|
||||
import io.dataease.dto.dataset.DatasetTableFieldDTO;
|
||||
import io.dataease.engine.constant.SQLConstants;
|
||||
import io.dataease.engine.constant.SqlPlaceholderConstants;
|
||||
@ -21,7 +22,7 @@ import java.util.Map;
|
||||
*/
|
||||
public class CustomWhere2Str {
|
||||
|
||||
public static void customWhere2sqlObj(SQLMeta meta, List<ChartFieldCustomFilterDTO> fields, List<DatasetTableFieldDTO> originFields) {
|
||||
public static void customWhere2sqlObj(SQLMeta meta, List<ChartFieldCustomFilterDTO> fields, List<DatasetTableFieldDTO> originFields, boolean isCross, Map<Long, DatasourceSchemaDTO> dsMap) {
|
||||
SQLObj tableObj = meta.getTable();
|
||||
if (ObjectUtils.isEmpty(tableObj)) {
|
||||
return;
|
||||
@ -40,7 +41,7 @@ public class CustomWhere2Str {
|
||||
String originName;
|
||||
if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) {
|
||||
// 解析origin name中有关联的字段生成sql表达式
|
||||
String calcFieldExp = Utils.calcFieldRegex(field.getOriginName(), tableObj, originFields);
|
||||
String calcFieldExp = Utils.calcFieldRegex(field.getOriginName(), tableObj, originFields, isCross, dsMap);
|
||||
// 给计算字段处加一个占位符,后续SQL方言转换后再替换
|
||||
originName = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, field.getId());
|
||||
fieldsDialect.put(originName, calcFieldExp);
|
||||
|
@ -3,6 +3,7 @@ package io.dataease.engine.trans;
|
||||
import io.dataease.api.chart.dto.ChartViewFieldDTO;
|
||||
import io.dataease.api.dataset.union.model.SQLMeta;
|
||||
import io.dataease.api.dataset.union.model.SQLObj;
|
||||
import io.dataease.dataset.dto.DatasourceSchemaDTO;
|
||||
import io.dataease.dto.dataset.DatasetTableFieldDTO;
|
||||
import io.dataease.engine.constant.DeTypeConstants;
|
||||
import io.dataease.engine.constant.ExtFieldConstant;
|
||||
@ -20,7 +21,7 @@ import java.util.*;
|
||||
*/
|
||||
public class Dimension2SQLObj {
|
||||
|
||||
public static void dimension2sqlObj(SQLMeta meta, List<ChartViewFieldDTO> fields, List<DatasetTableFieldDTO> originFields) {
|
||||
public static void dimension2sqlObj(SQLMeta meta, List<ChartViewFieldDTO> fields, List<DatasetTableFieldDTO> originFields, boolean isCross, Map<Long, DatasourceSchemaDTO> dsMap) {
|
||||
SQLObj tableObj = meta.getTable();
|
||||
if (ObjectUtils.isEmpty(tableObj)) {
|
||||
return;
|
||||
@ -34,7 +35,7 @@ public class Dimension2SQLObj {
|
||||
String originField;
|
||||
if (ObjectUtils.isNotEmpty(x.getExtField()) && Objects.equals(x.getExtField(), ExtFieldConstant.EXT_CALC)) {
|
||||
// 解析origin name中有关联的字段生成sql表达式
|
||||
String calcFieldExp = Utils.calcFieldRegex(x.getOriginName(), tableObj, originFields);
|
||||
String calcFieldExp = Utils.calcFieldRegex(x.getOriginName(), tableObj, originFields, isCross, dsMap);
|
||||
// 给计算字段处加一个占位符,后续SQL方言转换后再替换
|
||||
originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, x.getId());
|
||||
fieldsDialect.put(originField, calcFieldExp);
|
||||
|
@ -3,6 +3,7 @@ package io.dataease.engine.trans;
|
||||
import io.dataease.api.chart.dto.ChartExtFilterDTO;
|
||||
import io.dataease.api.dataset.union.model.SQLMeta;
|
||||
import io.dataease.api.dataset.union.model.SQLObj;
|
||||
import io.dataease.dataset.dto.DatasourceSchemaDTO;
|
||||
import io.dataease.dto.dataset.DatasetTableFieldDTO;
|
||||
import io.dataease.engine.constant.SQLConstants;
|
||||
import io.dataease.engine.constant.SqlPlaceholderConstants;
|
||||
@ -20,7 +21,7 @@ import java.util.Map;
|
||||
*/
|
||||
public class ExtWhere2Str {
|
||||
|
||||
public static void extWhere2sqlOjb(SQLMeta meta, List<ChartExtFilterDTO> fields, List<DatasetTableFieldDTO> originFields) {
|
||||
public static void extWhere2sqlOjb(SQLMeta meta, List<ChartExtFilterDTO> fields, List<DatasetTableFieldDTO> originFields, boolean isCross, Map<Long, DatasourceSchemaDTO> dsMap) {
|
||||
SQLObj tableObj = meta.getTable();
|
||||
if (ObjectUtils.isEmpty(tableObj)) {
|
||||
return;
|
||||
@ -48,7 +49,7 @@ public class ExtWhere2Str {
|
||||
String originName;
|
||||
if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) {
|
||||
// 解析origin name中有关联的字段生成sql表达式
|
||||
String calcFieldExp = Utils.calcFieldRegex(field.getOriginName(), tableObj, originFields);
|
||||
String calcFieldExp = Utils.calcFieldRegex(field.getOriginName(), tableObj, originFields, isCross, dsMap);
|
||||
// 给计算字段处加一个占位符,后续SQL方言转换后再替换
|
||||
originName = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, field.getId());
|
||||
fieldsDialect.put(originName, calcFieldExp);
|
||||
|
@ -2,6 +2,7 @@ package io.dataease.engine.trans;
|
||||
|
||||
import io.dataease.api.dataset.union.model.SQLMeta;
|
||||
import io.dataease.api.dataset.union.model.SQLObj;
|
||||
import io.dataease.dataset.dto.DatasourceSchemaDTO;
|
||||
import io.dataease.dto.dataset.DatasetTableFieldDTO;
|
||||
import io.dataease.engine.constant.DeTypeConstants;
|
||||
import io.dataease.engine.constant.ExtFieldConstant;
|
||||
@ -19,7 +20,7 @@ import java.util.*;
|
||||
*/
|
||||
public class Field2SQLObj {
|
||||
|
||||
public static void field2sqlObj(SQLMeta meta, List<DatasetTableFieldDTO> fields) {
|
||||
public static void field2sqlObj(SQLMeta meta, List<DatasetTableFieldDTO> fields, boolean isCross, Map<Long, DatasourceSchemaDTO> dsMap) {
|
||||
SQLObj tableObj = meta.getTable();
|
||||
if (ObjectUtils.isEmpty(tableObj)) {
|
||||
return;
|
||||
@ -32,13 +33,13 @@ public class Field2SQLObj {
|
||||
String originField;
|
||||
if (ObjectUtils.isNotEmpty(x.getExtField()) && Objects.equals(x.getExtField(), ExtFieldConstant.EXT_CALC)) {
|
||||
// 解析origin name中有关联的字段生成sql表达式
|
||||
String calcFieldExp = Utils.calcFieldRegex(x.getOriginName(), tableObj, fields);
|
||||
String calcFieldExp = Utils.calcFieldRegex(x.getOriginName(), tableObj, fields, isCross, dsMap);
|
||||
// 给计算字段处加一个占位符,后续SQL方言转换后再替换
|
||||
originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, x.getId());
|
||||
fieldsDialect.put(originField, calcFieldExp);
|
||||
// 此处是数据集预览,获取数据库原始字段枚举值等操作使用,如果遇到聚合函数则将originField设置为null
|
||||
for (String func : FunctionConstant.AGG_FUNC) {
|
||||
if (Utils.matchFunction(func, originField)) {
|
||||
if (Utils.matchFunction(func, calcFieldExp)) {
|
||||
originField = null;
|
||||
break;
|
||||
}
|
||||
|
@ -1,9 +1,10 @@
|
||||
package io.dataease.engine.trans;
|
||||
|
||||
import io.dataease.api.chart.dto.DeSortField;
|
||||
import io.dataease.dto.dataset.DatasetTableFieldDTO;
|
||||
import io.dataease.api.dataset.union.model.SQLMeta;
|
||||
import io.dataease.api.dataset.union.model.SQLObj;
|
||||
import io.dataease.dataset.dto.DatasourceSchemaDTO;
|
||||
import io.dataease.dto.dataset.DatasetTableFieldDTO;
|
||||
import io.dataease.engine.constant.DeTypeConstants;
|
||||
import io.dataease.engine.constant.ExtFieldConstant;
|
||||
import io.dataease.engine.constant.SQLConstants;
|
||||
@ -13,6 +14,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@ -20,7 +22,7 @@ import java.util.Objects;
|
||||
*/
|
||||
public class Order2SQLObj {
|
||||
|
||||
public static void getOrders(SQLMeta meta, List<DatasetTableFieldDTO> fields, List<DeSortField> sortFields) {
|
||||
public static void getOrders(SQLMeta meta, List<DatasetTableFieldDTO> fields, List<DeSortField> sortFields, boolean isCross, Map<Long, DatasourceSchemaDTO> dsMap) {
|
||||
SQLObj tableObj = meta.getTable();
|
||||
List<SQLObj> xOrders = meta.getXOrders();
|
||||
if (ObjectUtils.isEmpty(tableObj) || CollectionUtils.isEmpty(xOrders)) {
|
||||
@ -30,17 +32,17 @@ public class Order2SQLObj {
|
||||
int step = fields.size();
|
||||
for (int i = step; i < (step + sortFields.size()); i++) {
|
||||
DeSortField deSortField = sortFields.get(i - step);
|
||||
SQLObj order = buildSortField(deSortField, tableObj, i, fields);
|
||||
SQLObj order = buildSortField(deSortField, tableObj, i, fields, isCross, dsMap);
|
||||
xOrders.add(order);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static SQLObj buildSortField(DeSortField f, SQLObj tableObj, int i, List<DatasetTableFieldDTO> originFields) {
|
||||
private static SQLObj buildSortField(DeSortField f, SQLObj tableObj, int i, List<DatasetTableFieldDTO> originFields, boolean isCross, Map<Long, DatasourceSchemaDTO> dsMap) {
|
||||
String originField;
|
||||
if (ObjectUtils.isNotEmpty(f.getExtField()) && Objects.equals(f.getExtField(), ExtFieldConstant.EXT_CALC)) {
|
||||
// 解析origin name中有关联的字段生成sql表达式
|
||||
originField = Utils.calcFieldRegex(f.getOriginName(), tableObj, originFields);
|
||||
originField = Utils.calcFieldRegex(f.getOriginName(), tableObj, originFields, isCross, dsMap);
|
||||
} else if (ObjectUtils.isNotEmpty(f.getExtField()) && Objects.equals(f.getExtField(), ExtFieldConstant.EXT_COPY)) {
|
||||
originField = String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), f.getDataeaseName());
|
||||
} else {
|
||||
|
@ -1,9 +1,10 @@
|
||||
package io.dataease.engine.trans;
|
||||
|
||||
import io.dataease.api.chart.dto.ChartViewFieldDTO;
|
||||
import io.dataease.dto.dataset.DatasetTableFieldDTO;
|
||||
import io.dataease.api.dataset.union.model.SQLMeta;
|
||||
import io.dataease.api.dataset.union.model.SQLObj;
|
||||
import io.dataease.dataset.dto.DatasourceSchemaDTO;
|
||||
import io.dataease.dto.dataset.DatasetTableFieldDTO;
|
||||
import io.dataease.engine.constant.DeTypeConstants;
|
||||
import io.dataease.engine.constant.ExtFieldConstant;
|
||||
import io.dataease.engine.constant.SQLConstants;
|
||||
@ -20,7 +21,7 @@ import java.util.*;
|
||||
*/
|
||||
public class Quota2SQLObj {
|
||||
|
||||
public static void quota2sqlObj(SQLMeta meta, List<ChartViewFieldDTO> fields, List<DatasetTableFieldDTO> originFields) {
|
||||
public static void quota2sqlObj(SQLMeta meta, List<ChartViewFieldDTO> fields, List<DatasetTableFieldDTO> originFields, boolean isCross, Map<Long, DatasourceSchemaDTO> dsMap) {
|
||||
SQLObj tableObj = meta.getTable();
|
||||
if (ObjectUtils.isEmpty(tableObj)) {
|
||||
return;
|
||||
@ -35,7 +36,7 @@ public class Quota2SQLObj {
|
||||
String originField;
|
||||
if (ObjectUtils.isNotEmpty(y.getExtField()) && Objects.equals(y.getExtField(), ExtFieldConstant.EXT_CALC)) {
|
||||
// 解析origin name中有关联的字段生成sql表达式
|
||||
String calcFieldExp = Utils.calcFieldRegex(y.getOriginName(), tableObj, originFields);
|
||||
String calcFieldExp = Utils.calcFieldRegex(y.getOriginName(), tableObj, originFields, isCross, dsMap);
|
||||
// 给计算字段处加一个占位符,后续SQL方言转换后再替换
|
||||
originField = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, y.getId());
|
||||
fieldsDialect.put(originField, calcFieldExp);
|
||||
|
@ -5,6 +5,7 @@ import io.dataease.api.dataset.union.model.SQLObj;
|
||||
import io.dataease.api.permissions.dataset.dto.DataSetRowPermissionsTreeDTO;
|
||||
import io.dataease.api.permissions.dataset.dto.DatasetRowPermissionsTreeItem;
|
||||
import io.dataease.api.permissions.dataset.dto.DatasetRowPermissionsTreeObj;
|
||||
import io.dataease.dataset.dto.DatasourceSchemaDTO;
|
||||
import io.dataease.dto.dataset.DatasetTableFieldDTO;
|
||||
import io.dataease.engine.constant.ExtFieldConstant;
|
||||
import io.dataease.engine.constant.SQLConstants;
|
||||
@ -20,7 +21,7 @@ import java.util.*;
|
||||
* @Author Junjun
|
||||
*/
|
||||
public class WhereTree2Str {
|
||||
public static void transFilterTrees(SQLMeta meta, List<DataSetRowPermissionsTreeDTO> requestList, List<DatasetTableFieldDTO> originFields) {
|
||||
public static void transFilterTrees(SQLMeta meta, List<DataSetRowPermissionsTreeDTO> requestList, List<DatasetTableFieldDTO> originFields, boolean isCross, Map<Long, DatasourceSchemaDTO> dsMap) {
|
||||
SQLObj tableObj = meta.getTable();
|
||||
if (ObjectUtils.isEmpty(tableObj)) {
|
||||
return;
|
||||
@ -38,7 +39,7 @@ public class WhereTree2Str {
|
||||
if (ObjectUtils.isEmpty(tree)) {
|
||||
continue;
|
||||
}
|
||||
String treeExp = transTreeToWhere(tableObj, tree, originFields, fieldsDialect);
|
||||
String treeExp = transTreeToWhere(tableObj, tree, originFields, fieldsDialect, isCross, dsMap);
|
||||
if (StringUtils.isNotEmpty(treeExp)) {
|
||||
res.add(treeExp);
|
||||
}
|
||||
@ -47,7 +48,7 @@ public class WhereTree2Str {
|
||||
meta.setWhereTreesDialect(fieldsDialect);
|
||||
}
|
||||
|
||||
private static String transTreeToWhere(SQLObj tableObj, DatasetRowPermissionsTreeObj tree, List<DatasetTableFieldDTO> originFields, Map<String, String> fieldsDialect) {
|
||||
private static String transTreeToWhere(SQLObj tableObj, DatasetRowPermissionsTreeObj tree, List<DatasetTableFieldDTO> originFields, Map<String, String> fieldsDialect, boolean isCross, Map<Long, DatasourceSchemaDTO> dsMap) {
|
||||
if (ObjectUtils.isEmpty(tree)) {
|
||||
return null;
|
||||
}
|
||||
@ -60,10 +61,10 @@ public class WhereTree2Str {
|
||||
String exp = null;
|
||||
if (StringUtils.equalsIgnoreCase(item.getType(), "item")) {
|
||||
// 单个item拼接SQL,最后根据logic汇总
|
||||
exp = transTreeItem(tableObj, item, originFields, fieldsDialect);
|
||||
exp = transTreeItem(tableObj, item, originFields, fieldsDialect, isCross, dsMap);
|
||||
} else if (StringUtils.equalsIgnoreCase(item.getType(), "tree")) {
|
||||
// 递归tree
|
||||
exp = transTreeToWhere(tableObj, item.getSubTree(), originFields, fieldsDialect);
|
||||
exp = transTreeToWhere(tableObj, item.getSubTree(), originFields, fieldsDialect, isCross, dsMap);
|
||||
}
|
||||
if (StringUtils.isNotEmpty(exp)) {
|
||||
list.add(exp);
|
||||
@ -73,7 +74,7 @@ public class WhereTree2Str {
|
||||
return CollectionUtils.isNotEmpty(list) ? "(" + String.join(" " + logic + " ", list) + ")" : null;
|
||||
}
|
||||
|
||||
public static String transTreeItem(SQLObj tableObj, DatasetRowPermissionsTreeItem item, List<DatasetTableFieldDTO> originFields, Map<String, String> fieldsDialect) {
|
||||
public static String transTreeItem(SQLObj tableObj, DatasetRowPermissionsTreeItem item, List<DatasetTableFieldDTO> originFields, Map<String, String> fieldsDialect, boolean isCross, Map<Long, DatasourceSchemaDTO> dsMap) {
|
||||
String res = null;
|
||||
DatasetTableFieldDTO field = item.getField();
|
||||
if (ObjectUtils.isEmpty(field)) {
|
||||
@ -83,7 +84,7 @@ public class WhereTree2Str {
|
||||
String originName;
|
||||
if (ObjectUtils.isNotEmpty(field.getExtField()) && Objects.equals(field.getExtField(), ExtFieldConstant.EXT_CALC)) {
|
||||
// 解析origin name中有关联的字段生成sql表达式
|
||||
String calcFieldExp = Utils.calcFieldRegex(field.getOriginName(), tableObj, originFields);
|
||||
String calcFieldExp = Utils.calcFieldRegex(field.getOriginName(), tableObj, originFields, isCross, dsMap);
|
||||
// 给计算字段处加一个占位符,后续SQL方言转换后再替换
|
||||
originName = String.format(SqlPlaceholderConstants.CALC_FIELD_PLACEHOLDER, field.getId());
|
||||
fieldsDialect.put(originName, calcFieldExp);
|
||||
|
@ -1,6 +1,7 @@
|
||||
package io.dataease.engine.utils;
|
||||
|
||||
import io.dataease.api.dataset.union.model.SQLObj;
|
||||
import io.dataease.api.ds.vo.DatasourceConfiguration;
|
||||
import io.dataease.dataset.dto.DatasourceSchemaDTO;
|
||||
import io.dataease.dto.dataset.DatasetTableFieldDTO;
|
||||
import io.dataease.engine.constant.ExtFieldConstant;
|
||||
@ -24,17 +25,22 @@ public class Utils {
|
||||
}
|
||||
|
||||
// 解析计算字段
|
||||
public static String calcFieldRegex(String originField, SQLObj tableObj, List<DatasetTableFieldDTO> originFields) {
|
||||
public static String calcFieldRegex(String originField, SQLObj tableObj, List<DatasetTableFieldDTO> originFields, boolean isCross, Map<Long, DatasourceSchemaDTO> dsMap) {
|
||||
try {
|
||||
int i = 0;
|
||||
return buildCalcField(originField, tableObj, originFields, i);
|
||||
DatasourceConfiguration.DatasourceType datasourceType = null;
|
||||
if (dsMap != null && dsMap.entrySet().iterator().hasNext()) {
|
||||
Map.Entry<Long, DatasourceSchemaDTO> next = dsMap.entrySet().iterator().next();
|
||||
datasourceType = DatasourceConfiguration.DatasourceType.valueOf(next.getValue().getType());
|
||||
}
|
||||
return buildCalcField(originField, tableObj, originFields, i, isCross, datasourceType);
|
||||
} catch (Exception e) {
|
||||
DEException.throwException(Translator.get("i18n_field_circular_ref"));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String buildCalcField(String originField, SQLObj tableObj, List<DatasetTableFieldDTO> originFields, int i) throws Exception {
|
||||
public static String buildCalcField(String originField, SQLObj tableObj, List<DatasetTableFieldDTO> originFields, int i, boolean isCross, DatasourceConfiguration.DatasourceType datasourceType) throws Exception {
|
||||
try {
|
||||
i++;
|
||||
if (i > 100) {
|
||||
@ -57,11 +63,16 @@ public class Utils {
|
||||
if (StringUtils.containsIgnoreCase(originField, ele.getId() + "")) {
|
||||
// 计算字段允许二次引用,这里递归查询完整引用链
|
||||
if (Objects.equals(ele.getExtField(), ExtFieldConstant.EXT_NORMAL)) {
|
||||
originField = originField.replaceAll("\\[" + ele.getId() + "]",
|
||||
String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), ele.getDataeaseName()));
|
||||
if (isCross) {
|
||||
originField = originField.replaceAll("\\[" + ele.getId() + "]",
|
||||
String.format(SQLConstants.FIELD_NAME, tableObj.getTableAlias(), ele.getDataeaseName()));
|
||||
} else {
|
||||
originField = originField.replaceAll("\\[" + ele.getId() + "]",
|
||||
tableObj.getTableAlias() + "." + datasourceType.getPrefix() + ele.getDataeaseName() + datasourceType.getSuffix());
|
||||
}
|
||||
} else {
|
||||
originField = originField.replaceAll("\\[" + ele.getId() + "]", "(" + ele.getOriginName() + ")");
|
||||
originField = buildCalcField(originField, tableObj, originFields, i);
|
||||
originField = buildCalcField(originField, tableObj, originFields, i, isCross, datasourceType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user