Merge branch 'dev' into pr@dev_one_dot_x
This commit is contained in:
commit
bbb597ad4d
@ -1,6 +1,7 @@
|
|||||||
package io.dataease.controller.panel;
|
package io.dataease.controller.panel;
|
||||||
|
|
||||||
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
|
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
|
||||||
|
import io.dataease.dto.panel.PanelComponentDTO;
|
||||||
import io.dataease.dto.panel.PanelViewTableDTO;
|
import io.dataease.dto.panel.PanelViewTableDTO;
|
||||||
import io.dataease.service.panel.PanelViewService;
|
import io.dataease.service.panel.PanelViewService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
@ -29,4 +30,10 @@ public class PanelViewController {
|
|||||||
public List<PanelViewTableDTO> detailList(@PathVariable String panelId) throws Exception {
|
public List<PanelViewTableDTO> detailList(@PathVariable String panelId) throws Exception {
|
||||||
return panelViewService.detailList(panelId);
|
return panelViewService.detailList(panelId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("组件信息")
|
||||||
|
@GetMapping("/getComponentInfo/{panelId}")
|
||||||
|
public PanelComponentDTO getComponentInfo(@PathVariable String panelId) throws Exception {
|
||||||
|
return panelViewService.getComponentInfo(panelId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,26 @@
|
|||||||
|
package io.dataease.dto.panel;
|
||||||
|
|
||||||
|
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
|
||||||
|
import io.dataease.plugins.common.base.domain.DatasetTableField;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Author: wangjiahao
|
||||||
|
* Date: 2021-03-05
|
||||||
|
* Description:
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class PanelComponentDTO {
|
||||||
|
|
||||||
|
private String bashComponentData;
|
||||||
|
|
||||||
|
private List<PanelViewTableDTO> panelViewTables;
|
||||||
|
|
||||||
|
public PanelComponentDTO(String bashComponentData, List<PanelViewTableDTO> panelViewTables) {
|
||||||
|
this.bashComponentData = bashComponentData;
|
||||||
|
this.panelViewTables = panelViewTables;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -17,6 +17,9 @@ public class PanelViewTableDTO extends ChartViewWithBLOBs {
|
|||||||
@ApiModelProperty("仪表板ID")
|
@ApiModelProperty("仪表板ID")
|
||||||
private String panelId;
|
private String panelId;
|
||||||
|
|
||||||
|
@ApiModelProperty("仪表板数据")
|
||||||
|
private String basePanelData;
|
||||||
|
|
||||||
private List<DatasetTableField> tableFields;
|
private List<DatasetTableField> tableFields;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -804,7 +804,7 @@ public class JdbcProvider extends DefaultJdbcProvider {
|
|||||||
case StarRocks:
|
case StarRocks:
|
||||||
MysqlConfiguration mysqlConfiguration = new Gson().fromJson(datasource.getConfiguration(), MysqlConfiguration.class);
|
MysqlConfiguration mysqlConfiguration = new Gson().fromJson(datasource.getConfiguration(), MysqlConfiguration.class);
|
||||||
mysqlConfiguration.getJdbc();
|
mysqlConfiguration.getJdbc();
|
||||||
if(!mysqlConfiguration.getDataBase().matches("^[0-9a-zA-Z_.-]{1,}$")){
|
if(!mysqlConfiguration.getDataBase().matches("^[ 0-9a-zA-Z_.-]{1,}$")){
|
||||||
throw new Exception("Invalid database name");
|
throw new Exception("Invalid database name");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -768,6 +768,112 @@ public class DorisQueryProvider extends QueryProvider {
|
|||||||
return getSQLScatter("(" + table + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
return getSQLScatter("(" + table + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(DorisConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getDataeaseName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getDataeaseName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(DorisConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(DorisConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) {
|
||||||
|
st_sql.add("useAliasForGroup", true);
|
||||||
|
st_sql.add("groups", xFields);
|
||||||
|
}
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(DorisConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String searchTable(String table) {
|
public String searchTable(String table) {
|
||||||
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
||||||
|
|||||||
@ -374,6 +374,110 @@ public class MysqlQueryProvider extends QueryProvider {
|
|||||||
return sqlLimit(st.render(), view);
|
return sqlLimit(st.render(), view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MysqlConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 计算字段和视图字段,规则为 函数([原始字段id]),这边把[原始字段id] 换成 表名.原始字段id
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(MysqlConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getDataeaseName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(MysqlConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getDataeaseName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(MysqlConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(MysqlConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(MysqlConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSQLWithPage(boolean isTable, String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) {
|
public String getSQLWithPage(boolean isTable, String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) {
|
||||||
String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize() : "");
|
String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize() : "");
|
||||||
|
|||||||
@ -120,6 +120,16 @@ public class ApiProvider extends QueryProvider {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String searchTable(String s) {
|
public String searchTable(String s) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@ -62,6 +62,9 @@ public class CKQueryProvider extends QueryProvider {
|
|||||||
if (field.indexOf("DATETIME64") > -1) {
|
if (field.indexOf("DATETIME64") > -1) {
|
||||||
field = "DATETIME64";
|
field = "DATETIME64";
|
||||||
}
|
}
|
||||||
|
if (field.indexOf("DECIMAL") > -1) {
|
||||||
|
field = "DECIMAL";
|
||||||
|
}
|
||||||
switch (field) {
|
switch (field) {
|
||||||
case "STRING":
|
case "STRING":
|
||||||
case "VARCHAR":
|
case "VARCHAR":
|
||||||
@ -758,6 +761,108 @@ public class CKQueryProvider extends QueryProvider {
|
|||||||
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CKConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(CKConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(CKConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(CKConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String searchTable(String table) {
|
public String searchTable(String table) {
|
||||||
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
||||||
|
|||||||
@ -747,6 +747,110 @@ public class Db2QueryProvider extends QueryProvider {
|
|||||||
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(Db2Constants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
setSchema(tableObj, ds);
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(Db2Constants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(Db2Constants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(Db2Constants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(Db2Constants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(Db2Constants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String searchTable(String table) {
|
public String searchTable(String table) {
|
||||||
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
||||||
|
|||||||
@ -194,7 +194,7 @@ public class EsQueryProvider extends QueryProvider {
|
|||||||
if (customWheres != null) wheres.add(customWheres);
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
if (whereTrees != null) wheres.add(whereTrees);
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
if (StringUtils.isNotBlank(keyword)) {
|
if (StringUtils.isNotBlank(keyword)) {
|
||||||
String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
|
String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
|
||||||
wheres.add(keyWhere);
|
wheres.add(keyWhere);
|
||||||
}
|
}
|
||||||
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
@ -762,6 +762,113 @@ public class EsQueryProvider extends QueryProvider {
|
|||||||
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(EsSqlLConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == DeTypeConstants.DE_INT) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == DeTypeConstants.DE_TIME) {
|
||||||
|
originField = String.format(EsSqlLConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
if (x.getDeType() == 2 || x.getDeType() == 3) {
|
||||||
|
originField = String.format(EsSqlLConstants.CAST, String.format(EsSqlLConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName()), "double");
|
||||||
|
} else {
|
||||||
|
originField = String.format(EsSqlLConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(EsSqlLConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(EsSqlLConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(EsSqlLConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String searchTable(String table) {
|
public String searchTable(String table) {
|
||||||
return "";
|
return "";
|
||||||
|
|||||||
@ -711,6 +711,108 @@ public class HiveQueryProvider extends QueryProvider {
|
|||||||
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(HiveConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(HiveConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(HiveConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(HiveConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(HiveConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(HiveConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String searchTable(String table) {
|
public String searchTable(String table) {
|
||||||
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
||||||
|
|||||||
@ -715,6 +715,108 @@ public class ImpalaQueryProvider extends QueryProvider {
|
|||||||
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(ImpalaConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(ImpalaConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(ImpalaConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(ImpalaConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(ImpalaConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(ImpalaConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String searchTable(String table) {
|
public String searchTable(String table) {
|
||||||
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
||||||
|
|||||||
@ -687,6 +687,121 @@ public class MongoQueryProvider extends QueryProvider {
|
|||||||
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MongoConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == DeTypeConstants.DE_INT) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == DeTypeConstants.DE_TIME) {
|
||||||
|
originField = String.format(MongoConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(MongoConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SQLObj> yFields = new ArrayList<>();
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
if (CollectionUtils.isNotEmpty(yAxis)) {
|
||||||
|
for (int i = 0; i < yAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO y = yAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(y.getExtField()) && y.getExtField() == DeTypeConstants.DE_INT) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(y.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(y.getExtField()) && y.getExtField() == DeTypeConstants.DE_TIME) {
|
||||||
|
originField = String.format(MongoConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(MongoConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(MongoConstants.ALIAS_FIX, String.format(SQLConstants.FIELD_ALIAS_Y_PREFIX, i));
|
||||||
|
// 处理纵轴字段
|
||||||
|
yFields.add(getYFields(y, originField, fieldAlias));
|
||||||
|
// 处理纵轴过滤
|
||||||
|
yWheres.add(getYWheres(y, originField, fieldAlias));
|
||||||
|
// 处理纵轴排序
|
||||||
|
if (StringUtils.isNotEmpty(y.getSort()) && Utils.joinSort(y.getSort())) {
|
||||||
|
yOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(y.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) {
|
||||||
|
st_sql.add("groups", xFields);
|
||||||
|
st_sql.add("notUseAs", true);
|
||||||
|
}
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) {
|
||||||
|
st_sql.add("aggregators", yFields);
|
||||||
|
}
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(MongoConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String searchTable(String table) {
|
public String searchTable(String table) {
|
||||||
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
||||||
|
|||||||
@ -409,6 +409,109 @@ public class MysqlQueryProvider extends QueryProvider {
|
|||||||
return sqlLimit(st.render(), view);
|
return sqlLimit(st.render(), view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MysqlConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 计算字段和视图字段,规则为 函数([原始字段id]),这边把[原始字段id] 换成 表名.原始字段id
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(MysqlConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getDataeaseName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(MysqlConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getDataeaseName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(MysqlConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(MysqlConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(MysqlConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSQLTableInfo(String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) {
|
public String getSQLTableInfo(String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
return sqlLimit(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, false), view);
|
return sqlLimit(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, false), view);
|
||||||
|
|||||||
@ -428,7 +428,6 @@ public class OracleQueryProvider extends QueryProvider {
|
|||||||
chartViewFieldDTO.setOriginName("ROWNUM");
|
chartViewFieldDTO.setOriginName("ROWNUM");
|
||||||
xAxis.add(chartViewFieldDTO);
|
xAxis.add(chartViewFieldDTO);
|
||||||
|
|
||||||
|
|
||||||
List<ChartFieldCustomFilterDTO> fieldCustomFilter = new ArrayList<>();
|
List<ChartFieldCustomFilterDTO> fieldCustomFilter = new ArrayList<>();
|
||||||
for (ChartFieldCustomFilterDTO chartFieldCustomFilterDTO : OrgFieldCustomFilter) {
|
for (ChartFieldCustomFilterDTO chartFieldCustomFilterDTO : OrgFieldCustomFilter) {
|
||||||
fieldCustomFilter.add(chartFieldCustomFilterDTO);
|
fieldCustomFilter.add(chartFieldCustomFilterDTO);
|
||||||
@ -440,17 +439,28 @@ public class OracleQueryProvider extends QueryProvider {
|
|||||||
chartFieldCustomFilterDTO.setField(datasetTableField);
|
chartFieldCustomFilterDTO.setField(datasetTableField);
|
||||||
|
|
||||||
List<ChartCustomFilterItemDTO> filterItemDTOS = new ArrayList<>();
|
List<ChartCustomFilterItemDTO> filterItemDTOS = new ArrayList<>();
|
||||||
ChartCustomFilterItemDTO itemDTO = new ChartCustomFilterItemDTO();
|
if (pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) {
|
||||||
itemDTO.setTerm("le");
|
ChartCustomFilterItemDTO itemDTO = new ChartCustomFilterItemDTO();
|
||||||
itemDTO.setValue(String.valueOf(pageInfo.getGoPage() * pageInfo.getPageSize()));
|
itemDTO.setTerm("le");
|
||||||
filterItemDTOS.add(itemDTO);
|
itemDTO.setValue(String.valueOf(pageInfo.getGoPage() * pageInfo.getPageSize()));
|
||||||
|
filterItemDTOS.add(itemDTO);
|
||||||
|
}
|
||||||
chartFieldCustomFilterDTO.setFilter(filterItemDTOS);
|
chartFieldCustomFilterDTO.setFilter(filterItemDTOS);
|
||||||
fieldCustomFilter.add(chartFieldCustomFilterDTO);
|
fieldCustomFilter.add(chartFieldCustomFilterDTO);
|
||||||
|
|
||||||
if (isTable) {
|
if (isTable) {
|
||||||
return "SELECT * FROM (" + sqlFix(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view)) + ") DE_RESULT_TMP " + " WHERE DE_ROWNUM > " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize();
|
if (pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) {
|
||||||
|
return "SELECT * FROM (" + sqlFix(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view)) + ") DE_RESULT_TMP " + " WHERE DE_ROWNUM > " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize();
|
||||||
|
} else {
|
||||||
|
return "SELECT * FROM (" + sqlFix(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view)) + ") DE_RESULT_TMP ";
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return "SELECT * FROM (" + sqlFix(originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view)) + ") DE_RESULT_TMP " + " WHERE DE_ROWNUM > " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize();
|
if (pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) {
|
||||||
|
return "SELECT * FROM (" + sqlFix(originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view)) + ") DE_RESULT_TMP " + " WHERE DE_ROWNUM > " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize();
|
||||||
|
} else {
|
||||||
|
return "SELECT * FROM (" + sqlFix(originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view)) + ") DE_RESULT_TMP ";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -800,6 +810,109 @@ public class OracleQueryProvider extends QueryProvider {
|
|||||||
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(OracleConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(OracleConstants.ALIAS_FIX, String.format(TABLE_ALIAS_PREFIX, 0)))
|
||||||
|
.build();
|
||||||
|
setSchema(tableObj, ds);
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(OracleConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(OracleConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(OracleConstants.ALIAS_FIX, String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i));
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(OracleConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(OracleConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(OracleConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String searchTable(String table) {
|
public String searchTable(String table) {
|
||||||
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
||||||
|
|||||||
@ -740,6 +740,109 @@ public class PgQueryProvider extends QueryProvider {
|
|||||||
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(PgConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
setSchema(tableObj, ds);
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(PgConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(PgConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(PgConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String searchTable(String table) {
|
public String searchTable(String table) {
|
||||||
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
||||||
|
|||||||
@ -746,6 +746,109 @@ public class RedshiftQueryProvider extends QueryProvider {
|
|||||||
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(PgConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
setSchema(tableObj, ds);
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(PgConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(PgConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(PgConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String searchTable(String table) {
|
public String searchTable(String table) {
|
||||||
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
||||||
|
|||||||
@ -824,6 +824,113 @@ public class SqlserverQueryProvider extends QueryProvider {
|
|||||||
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extBubble, extGroup, null, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(SqlServerSQLConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
setSchema(tableObj, ds);
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(SqlServerSQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(SqlServerSQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(SqlServerSQLConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(SqlServerSQLConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(SqlServerSQLConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
|
||||||
|
SQLObj limitFiled = SQLObj.builder().limitFiled("top " + view.getResultCount() + " ").build();
|
||||||
|
st.add("limitFiled", limitFiled);
|
||||||
|
}
|
||||||
|
return st.render();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String searchTable(String table) {
|
public String searchTable(String table) {
|
||||||
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
return "SELECT table_name FROM information_schema.TABLES WHERE table_name ='" + table + "'";
|
||||||
|
|||||||
@ -342,7 +342,7 @@ public class ChartViewService {
|
|||||||
}
|
}
|
||||||
List<ChartViewFieldDTO> xAxis = gson.fromJson(view.getXAxis(), new TypeToken<List<ChartViewFieldDTO>>() {
|
List<ChartViewFieldDTO> xAxis = gson.fromJson(view.getXAxis(), new TypeToken<List<ChartViewFieldDTO>>() {
|
||||||
}.getType());
|
}.getType());
|
||||||
if (StringUtils.equalsIgnoreCase(view.getType(), "table-pivot")) {
|
if (StringUtils.equalsIgnoreCase(view.getType(), "table-pivot") || StringUtils.equalsIgnoreCase(view.getType(), "bar-time-range")) {
|
||||||
List<ChartViewFieldDTO> xAxisExt = gson.fromJson(view.getXAxisExt(), new TypeToken<List<ChartViewFieldDTO>>() {
|
List<ChartViewFieldDTO> xAxisExt = gson.fromJson(view.getXAxisExt(), new TypeToken<List<ChartViewFieldDTO>>() {
|
||||||
}.getType());
|
}.getType());
|
||||||
xAxis.addAll(xAxisExt);
|
xAxis.addAll(xAxisExt);
|
||||||
@ -498,6 +498,11 @@ public class ChartViewService {
|
|||||||
datasourceRequest.setQuery(qp.getSQLScatter(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, ds, view));
|
datasourceRequest.setQuery(qp.getSQLScatter(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, ds, view));
|
||||||
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
||||||
datasourceRequest.setQuery(qp.getSQLTableInfo(dataTableInfoDTO.getTable(), xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
datasourceRequest.setQuery(qp.getSQLTableInfo(dataTableInfoDTO.getTable(), xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
||||||
|
} else if (StringUtils.equalsIgnoreCase("bar-time-range", view.getType())) {
|
||||||
|
List<ChartViewFieldDTO> xAxisBase = gson.fromJson(view.getXAxis(), new TypeToken<List<ChartViewFieldDTO>>() {
|
||||||
|
}.getType());
|
||||||
|
datasourceRequest.setQuery(qp.getSQLRangeBar(dataTableInfoDTO.getTable(), xAxisBase, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, ds, view));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
datasourceRequest.setQuery(qp.getSQL(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
datasourceRequest.setQuery(qp.getSQL(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
||||||
}
|
}
|
||||||
@ -512,6 +517,11 @@ public class ChartViewService {
|
|||||||
datasourceRequest.setQuery(qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, view));
|
datasourceRequest.setQuery(qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, view));
|
||||||
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
||||||
datasourceRequest.setQuery(qp.getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
datasourceRequest.setQuery(qp.getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
||||||
|
} else if (StringUtils.equalsIgnoreCase("bar-time-range", view.getType())) {
|
||||||
|
List<ChartViewFieldDTO> xAxisBase = gson.fromJson(view.getXAxis(), new TypeToken<List<ChartViewFieldDTO>>() {
|
||||||
|
}.getType());
|
||||||
|
datasourceRequest.setQuery(qp.getSQLAsTmpRangeBar(dataTableInfoDTO.getTable(), xAxisBase, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
datasourceRequest.setQuery(qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view));
|
datasourceRequest.setQuery(qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view));
|
||||||
}
|
}
|
||||||
@ -527,7 +537,12 @@ public class ChartViewService {
|
|||||||
datasourceRequest.setQuery(qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, view));
|
datasourceRequest.setQuery(qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, view));
|
||||||
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
||||||
datasourceRequest.setQuery(qp.getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
datasourceRequest.setQuery(qp.getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
||||||
} else {
|
}else if (StringUtils.equalsIgnoreCase("bar-time-range", view.getType())) {
|
||||||
|
List<ChartViewFieldDTO> xAxisBase = gson.fromJson(view.getXAxis(), new TypeToken<List<ChartViewFieldDTO>>() {
|
||||||
|
}.getType());
|
||||||
|
datasourceRequest.setQuery(qp.getSQLAsTmpRangeBar(dataTableInfoDTO.getTable(), xAxisBase, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view));
|
||||||
|
|
||||||
|
} else {
|
||||||
datasourceRequest.setQuery(qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view));
|
datasourceRequest.setQuery(qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view));
|
||||||
}
|
}
|
||||||
} else if (StringUtils.equalsIgnoreCase(table.getType(), DatasetType.UNION.name())) {
|
} else if (StringUtils.equalsIgnoreCase(table.getType(), DatasetType.UNION.name())) {
|
||||||
@ -543,6 +558,11 @@ public class ChartViewService {
|
|||||||
datasourceRequest.setQuery(qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, view));
|
datasourceRequest.setQuery(qp.getSQLAsTmpScatter(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, view));
|
||||||
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
||||||
datasourceRequest.setQuery(qp.getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
datasourceRequest.setQuery(qp.getSQLAsTmpTableInfo(sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
||||||
|
} else if (StringUtils.equalsIgnoreCase("bar-time-range", view.getType())) {
|
||||||
|
List<ChartViewFieldDTO> xAxisBase = gson.fromJson(view.getXAxis(), new TypeToken<List<ChartViewFieldDTO>>() {
|
||||||
|
}.getType());
|
||||||
|
datasourceRequest.setQuery(qp.getSQLAsTmpRangeBar(dataTableInfoDTO.getTable(), xAxisBase, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
datasourceRequest.setQuery(qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view));
|
datasourceRequest.setQuery(qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view));
|
||||||
}
|
}
|
||||||
@ -568,6 +588,11 @@ public class ChartViewService {
|
|||||||
datasourceRequest.setQuery(qp.getSQLScatter(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, ds, view));
|
datasourceRequest.setQuery(qp.getSQLScatter(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, ds, view));
|
||||||
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
||||||
datasourceRequest.setQuery(qp.getSQLTableInfo(tableName, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
datasourceRequest.setQuery(qp.getSQLTableInfo(tableName, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
||||||
|
} else if (StringUtils.equalsIgnoreCase("bar-time-range", view.getType())) {
|
||||||
|
List<ChartViewFieldDTO> xAxisBase = gson.fromJson(view.getXAxis(), new TypeToken<List<ChartViewFieldDTO>>() {
|
||||||
|
}.getType());
|
||||||
|
datasourceRequest.setQuery(qp.getSQLRangeBar(tableName, xAxisBase, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, ds, view));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
datasourceRequest.setQuery(qp.getSQL(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
datasourceRequest.setQuery(qp.getSQL(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
||||||
}
|
}
|
||||||
@ -1099,6 +1124,8 @@ public class ChartViewService {
|
|||||||
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
||||||
querySql = qp.getSQLWithPage(true, dataTableInfoDTO.getTable(), xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo);
|
querySql = qp.getSQLWithPage(true, dataTableInfoDTO.getTable(), xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo);
|
||||||
totalPageSql = qp.getResultCount(true, dataTableInfoDTO.getTable(), xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view);
|
totalPageSql = qp.getResultCount(true, dataTableInfoDTO.getTable(), xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view);
|
||||||
|
} else if (StringUtils.equalsIgnoreCase("bar-time-range", view.getType())) {
|
||||||
|
querySql = qp.getSQLRangeBar(dataTableInfoDTO.getTable(), xAxisBase, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, ds, view);
|
||||||
} else {
|
} else {
|
||||||
querySql = qp.getSQL(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view);
|
querySql = qp.getSQL(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view);
|
||||||
if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) {
|
if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) {
|
||||||
@ -1122,6 +1149,10 @@ public class ChartViewService {
|
|||||||
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
||||||
querySql = qp.getSQLWithPage(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo);
|
querySql = qp.getSQLWithPage(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo);
|
||||||
totalPageSql = qp.getResultCount(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view);
|
totalPageSql = qp.getResultCount(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view);
|
||||||
|
} else if (StringUtils.equalsIgnoreCase("bar-time-range", view.getType())) {
|
||||||
|
|
||||||
|
querySql = qp.getSQLAsTmpRangeBar(dataTableInfoDTO.getTable(), xAxisBase, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
querySql = qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view);
|
querySql = qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view);
|
||||||
if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) {
|
if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) {
|
||||||
@ -1146,6 +1177,9 @@ public class ChartViewService {
|
|||||||
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
||||||
querySql = qp.getSQLWithPage(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo);
|
querySql = qp.getSQLWithPage(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo);
|
||||||
totalPageSql = qp.getResultCount(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view);
|
totalPageSql = qp.getResultCount(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view);
|
||||||
|
} else if (StringUtils.equalsIgnoreCase("bar-time-range", view.getType())) {
|
||||||
|
querySql = qp.getSQLAsTmpRangeBar(dataTableInfoDTO.getTable(), xAxisBase, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
querySql = qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view);
|
querySql = qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view);
|
||||||
if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) {
|
if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) {
|
||||||
@ -1170,6 +1204,10 @@ public class ChartViewService {
|
|||||||
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
||||||
querySql = qp.getSQLWithPage(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo);
|
querySql = qp.getSQLWithPage(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view, pageInfo);
|
||||||
totalPageSql = qp.getResultCount(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view);
|
totalPageSql = qp.getResultCount(false, sql, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view);
|
||||||
|
} else if (StringUtils.equalsIgnoreCase("bar-time-range", view.getType())) {
|
||||||
|
|
||||||
|
querySql = qp.getSQLAsTmpRangeBar(dataTableInfoDTO.getTable(), xAxisBase, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
querySql = qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view);
|
querySql = qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view);
|
||||||
if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) {
|
if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) {
|
||||||
@ -1224,7 +1262,11 @@ public class ChartViewService {
|
|||||||
datasourceRequest.setQuery(qp.getSQLScatter(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, ds, view));
|
datasourceRequest.setQuery(qp.getSQLScatter(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extBubble, extStack, ds, view));
|
||||||
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
||||||
datasourceRequest.setQuery(qp.getSQLTableInfo(tableName, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
datasourceRequest.setQuery(qp.getSQLTableInfo(tableName, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
||||||
} else {
|
} else if (StringUtils.equalsIgnoreCase("bar-time-range", view.getType())) {
|
||||||
|
|
||||||
|
datasourceRequest.setQuery(qp.getSQLRangeBar(tableName, xAxisBase, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, ds, view));
|
||||||
|
|
||||||
|
}else {
|
||||||
datasourceRequest.setQuery(qp.getSQL(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
datasourceRequest.setQuery(qp.getSQL(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, ds, view));
|
||||||
if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) {
|
if (containDetailField(view) && CollectionUtils.isNotEmpty(viewFields)) {
|
||||||
detailFieldList.addAll(xAxis);
|
detailFieldList.addAll(xAxis);
|
||||||
|
|||||||
@ -1333,7 +1333,7 @@ public class ChartDataBuild {
|
|||||||
|
|
||||||
StringBuilder xField = new StringBuilder();
|
StringBuilder xField = new StringBuilder();
|
||||||
if (isDrill) {
|
if (isDrill) {
|
||||||
xField.append(row[xAxis.size() - 1]);
|
xField.append(row[xAxis.size() - 1 - 2]); // 由于起止时间字段是放到最后的yField里去查询的,所以要再减两个
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < xAxisBase.size(); i++) {
|
for (int i = 0; i < xAxisBase.size(); i++) {
|
||||||
if (i == xAxisBase.size() - 1) {
|
if (i == xAxisBase.size() - 1) {
|
||||||
@ -1360,24 +1360,25 @@ public class ChartDataBuild {
|
|||||||
|
|
||||||
List<String> values = new ArrayList<>();
|
List<String> values = new ArrayList<>();
|
||||||
|
|
||||||
if (row[xAxisBase.size()] == null || row[xAxisBase.size() + 1] == null) {
|
// 由于起止时间字段是放到最后的yField里去查询的,所以拿倒数两个
|
||||||
|
if (row[xAxis.size() - 1] == null || row[xAxis.size() - 2] == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
values.add(row[xAxisBase.size()]);
|
values.add(row[xAxis.size() - 2]);
|
||||||
values.add(row[xAxisBase.size() + 1]);
|
values.add(row[xAxis.size() - 1]);
|
||||||
obj.put("values", values);
|
obj.put("values", values);
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Date date = sdf.parse(row[xAxisBase.size()]);
|
Date date = sdf.parse(row[xAxis.size() - 2]);
|
||||||
if (date != null) {
|
if (date != null) {
|
||||||
dates.add(date);
|
dates.add(date);
|
||||||
}
|
}
|
||||||
} catch (Exception ignore) {
|
} catch (Exception ignore) {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
Date date = sdf.parse(row[xAxisBase.size() + 1]);
|
Date date = sdf.parse(row[xAxis.size() - 1]);
|
||||||
if (date != null) {
|
if (date != null) {
|
||||||
dates.add(date);
|
dates.add(date);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1274,7 +1274,7 @@ public class ExtractDataService {
|
|||||||
String excelCompletion = "";
|
String excelCompletion = "";
|
||||||
|
|
||||||
for (DatasetTableField datasetTableField : datasetTableFields) {
|
for (DatasetTableField datasetTableField : datasetTableFields) {
|
||||||
if (datasetTableField.getDeExtractType().equals(DeTypeConstants.DE_BINARY)) {
|
if (datasetTableField.getDeExtractType().equals(DeTypeConstants.DE_BINARY) || datasetTableField.getType().equalsIgnoreCase("blob")) {
|
||||||
handleBinaryTypeCode.append("\n").append(handleBinaryType.replace("FIELD", datasetTableField.getDataeaseName()));
|
handleBinaryTypeCode.append("\n").append(handleBinaryType.replace("FIELD", datasetTableField.getDataeaseName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package io.dataease.service.panel;
|
|||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
|
import io.dataease.dto.panel.PanelComponentDTO;
|
||||||
import io.dataease.ext.ExtChartViewMapper;
|
import io.dataease.ext.ExtChartViewMapper;
|
||||||
import io.dataease.ext.ExtPanelGroupMapper;
|
import io.dataease.ext.ExtPanelGroupMapper;
|
||||||
import io.dataease.ext.ExtPanelViewMapper;
|
import io.dataease.ext.ExtPanelViewMapper;
|
||||||
@ -15,6 +16,7 @@ import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
|
|||||||
import io.dataease.plugins.common.base.domain.PanelGroupWithBLOBs;
|
import io.dataease.plugins.common.base.domain.PanelGroupWithBLOBs;
|
||||||
import io.dataease.plugins.common.base.domain.PanelView;
|
import io.dataease.plugins.common.base.domain.PanelView;
|
||||||
import io.dataease.plugins.common.base.domain.PanelViewExample;
|
import io.dataease.plugins.common.base.domain.PanelViewExample;
|
||||||
|
import io.dataease.plugins.common.base.mapper.PanelGroupMapper;
|
||||||
import io.dataease.plugins.common.base.mapper.PanelViewMapper;
|
import io.dataease.plugins.common.base.mapper.PanelViewMapper;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
@ -45,6 +47,9 @@ public class PanelViewService {
|
|||||||
@Resource
|
@Resource
|
||||||
private ExtChartViewMapper extChartViewMapper;
|
private ExtChartViewMapper extChartViewMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private PanelGroupMapper panelGroupMapper;
|
||||||
|
|
||||||
private final static String SCENE_TYPE = "scene";
|
private final static String SCENE_TYPE = "scene";
|
||||||
|
|
||||||
public List<PanelViewDto> groups() {
|
public List<PanelViewDto> groups() {
|
||||||
@ -152,6 +157,11 @@ public class PanelViewService {
|
|||||||
return extPanelViewMapper.getPanelViewDetails(panelId);
|
return extPanelViewMapper.getPanelViewDetails(panelId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PanelComponentDTO getComponentInfo(String panelId){
|
||||||
|
PanelGroupWithBLOBs panelGroup = panelGroupMapper.selectByPrimaryKey(panelId);
|
||||||
|
return new PanelComponentDTO(panelGroup.getPanelData(),detailList(panelId));
|
||||||
|
}
|
||||||
|
|
||||||
public List<PanelView> findPanelViews(String copyId) {
|
public List<PanelView> findPanelViews(String copyId) {
|
||||||
PanelViewExample panelViewExample = new PanelViewExample();
|
PanelViewExample panelViewExample = new PanelViewExample();
|
||||||
panelViewExample.createCriteria().andCopyIdEqualTo(copyId);
|
panelViewExample.createCriteria().andCopyIdEqualTo(copyId);
|
||||||
|
|||||||
@ -15,4 +15,4 @@ ALTER TABLE `sys_task_email`
|
|||||||
ALTER TABLE `sys_task_email`
|
ALTER TABLE `sys_task_email`
|
||||||
MODIFY COLUMN `reci_users` longtext NULL COMMENT '接收人账号' AFTER `conditions`;
|
MODIFY COLUMN `reci_users` longtext NULL COMMENT '接收人账号' AFTER `conditions`;
|
||||||
|
|
||||||
ALTER TABLE de_driver` ADD COLUMN `surpport_versions` LONGTEXT NULL AFTER `desc`;
|
ALTER TABLE de_driver ADD COLUMN `surpport_versions` LONGTEXT NULL AFTER `desc`;
|
||||||
@ -26,7 +26,7 @@ export function queryTargetPanelJumpInfo(requestInfo) {
|
|||||||
url: '/linkJump/queryTargetPanelJumpInfo',
|
url: '/linkJump/queryTargetPanelJumpInfo',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: requestInfo,
|
data: requestInfo,
|
||||||
loading: true
|
loading: false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -20,6 +20,6 @@ export function getOuterParamsInfo(panelId) {
|
|||||||
return request({
|
return request({
|
||||||
url: '/outerParams/getOuterParamsInfo/' + panelId,
|
url: '/outerParams/getOuterParamsInfo/' + panelId,
|
||||||
method: 'get',
|
method: 'get',
|
||||||
loading: true
|
loading: false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,15 @@ import request from '@/utils/request'
|
|||||||
export function detailList(panelId) {
|
export function detailList(panelId) {
|
||||||
return request({
|
return request({
|
||||||
url: '/panel/view/detailList/' + panelId,
|
url: '/panel/view/detailList/' + panelId,
|
||||||
method: 'get'
|
method: 'get',
|
||||||
|
loading: false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getComponentInfo(panelId) {
|
||||||
|
return request({
|
||||||
|
url: '/panel/view/getComponentInfo/' + panelId,
|
||||||
|
method: 'get',
|
||||||
|
loading: false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,6 +24,7 @@
|
|||||||
<el-select
|
<el-select
|
||||||
v-model="itemLinkage.sourceField"
|
v-model="itemLinkage.sourceField"
|
||||||
size="mini"
|
size="mini"
|
||||||
|
filterable
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
@ -63,6 +64,7 @@
|
|||||||
<div class="select-filed">
|
<div class="select-filed">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="itemLinkage.targetField"
|
v-model="itemLinkage.targetField"
|
||||||
|
filterable
|
||||||
size="mini"
|
size="mini"
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -878,52 +878,59 @@ export default {
|
|||||||
this.element.filters = this.filters?.length ? JSON.parse(JSON.stringify(this.filters)) : []
|
this.element.filters = this.filters?.length ? JSON.parse(JSON.stringify(this.filters)) : []
|
||||||
}
|
}
|
||||||
method(id, this.panelInfo.id, requestInfo).then(response => {
|
method(id, this.panelInfo.id, requestInfo).then(response => {
|
||||||
// 将视图传入echart组件
|
try {
|
||||||
if (response.success) {
|
// 将视图传入echart组件
|
||||||
this.chart = response.data
|
if (response.success) {
|
||||||
this.view = response.data
|
this.chart = response.data
|
||||||
if (this.chart.type.includes('table')) {
|
this.view = response.data
|
||||||
this.$store.commit('setLastViewRequestInfo', { viewId: id, requestInfo: requestInfo })
|
if (this.chart.type.includes('table')) {
|
||||||
|
this.$store.commit('setLastViewRequestInfo', { viewId: id, requestInfo: requestInfo })
|
||||||
|
}
|
||||||
|
this.buildInnerRefreshTimer(this.chart.refreshViewEnable, this.chart.refreshUnit, this.chart.refreshTime)
|
||||||
|
this.$emit('fill-chart-2-parent', this.chart)
|
||||||
|
this.getDataOnly(response.data, dataBroadcast)
|
||||||
|
this.chart['position'] = this.inTab ? 'tab' : 'panel'
|
||||||
|
// 记录当前数据
|
||||||
|
this.panelViewDetailsInfo[id] = JSON.stringify(this.chart)
|
||||||
|
if (this.element.needAdaptor) {
|
||||||
|
const customStyleObj = JSON.parse(this.chart.customStyle)
|
||||||
|
const customAttrObj = JSON.parse(this.chart.customAttr)
|
||||||
|
adaptCurTheme(customStyleObj, customAttrObj)
|
||||||
|
this.chart.customStyle = JSON.stringify(customStyleObj)
|
||||||
|
this.chart.customAttr = JSON.stringify(customAttrObj)
|
||||||
|
viewEditSave(this.panelInfo.id, {
|
||||||
|
id: this.chart.id,
|
||||||
|
customStyle: this.chart.customStyle,
|
||||||
|
customAttr: this.chart.customAttr
|
||||||
|
})
|
||||||
|
this.$store.commit('adaptorStatusDisable', this.element.id)
|
||||||
|
}
|
||||||
|
this.sourceCustomAttrStr = this.chart.customAttr
|
||||||
|
this.sourceCustomStyleStr = this.chart.customStyle
|
||||||
|
this.chart.drillFields = this.chart.drillFields ? JSON.parse(this.chart.drillFields) : []
|
||||||
|
if (!response.data.drill) {
|
||||||
|
this.drillClickDimensionList.splice(this.drillClickDimensionList.length - 1, 1)
|
||||||
|
this.resetDrill()
|
||||||
|
}
|
||||||
|
this.drillFilters = JSON.parse(JSON.stringify(response.data.drillFilters ? response.data.drillFilters : []))
|
||||||
|
this.drillFields = JSON.parse(JSON.stringify(response.data.drillFields))
|
||||||
|
this.requestStatus = 'merging'
|
||||||
|
this.mergeScale()
|
||||||
|
this.initCurFields(this.chart)
|
||||||
|
this.requestStatus = 'success'
|
||||||
|
this.httpRequest.status = true
|
||||||
|
} else {
|
||||||
|
console.error('err3-' + JSON.stringify(response))
|
||||||
|
this.requestStatus = 'error'
|
||||||
|
this.message = response.message
|
||||||
}
|
}
|
||||||
this.buildInnerRefreshTimer(this.chart.refreshViewEnable, this.chart.refreshUnit, this.chart.refreshTime)
|
} catch (e) {
|
||||||
this.$emit('fill-chart-2-parent', this.chart)
|
|
||||||
this.getDataOnly(response.data, dataBroadcast)
|
|
||||||
this.chart['position'] = this.inTab ? 'tab' : 'panel'
|
|
||||||
// 记录当前数据
|
|
||||||
this.panelViewDetailsInfo[id] = JSON.stringify(this.chart)
|
|
||||||
if (this.element.needAdaptor) {
|
|
||||||
const customStyleObj = JSON.parse(this.chart.customStyle)
|
|
||||||
const customAttrObj = JSON.parse(this.chart.customAttr)
|
|
||||||
adaptCurTheme(customStyleObj, customAttrObj)
|
|
||||||
this.chart.customStyle = JSON.stringify(customStyleObj)
|
|
||||||
this.chart.customAttr = JSON.stringify(customAttrObj)
|
|
||||||
viewEditSave(this.panelInfo.id, {
|
|
||||||
id: this.chart.id,
|
|
||||||
customStyle: this.chart.customStyle,
|
|
||||||
customAttr: this.chart.customAttr
|
|
||||||
})
|
|
||||||
this.$store.commit('adaptorStatusDisable', this.element.id)
|
|
||||||
}
|
|
||||||
this.sourceCustomAttrStr = this.chart.customAttr
|
|
||||||
this.sourceCustomStyleStr = this.chart.customStyle
|
|
||||||
this.chart.drillFields = this.chart.drillFields ? JSON.parse(this.chart.drillFields) : []
|
|
||||||
if (!response.data.drill) {
|
|
||||||
this.drillClickDimensionList.splice(this.drillClickDimensionList.length - 1, 1)
|
|
||||||
this.resetDrill()
|
|
||||||
}
|
|
||||||
this.drillFilters = JSON.parse(JSON.stringify(response.data.drillFilters ? response.data.drillFilters : []))
|
|
||||||
this.drillFields = JSON.parse(JSON.stringify(response.data.drillFields))
|
|
||||||
this.requestStatus = 'merging'
|
|
||||||
this.mergeScale()
|
|
||||||
this.initCurFields(this.chart)
|
|
||||||
this.requestStatus = 'success'
|
|
||||||
this.httpRequest.status = true
|
|
||||||
} else {
|
|
||||||
console.error('err2-' + JSON.stringify(response))
|
console.error('err2-' + JSON.stringify(response))
|
||||||
this.requestStatus = 'error'
|
this.requestStatus = 'error'
|
||||||
this.message = response.message
|
this.message = e.message
|
||||||
}
|
}
|
||||||
this.isFirstLoad = false
|
this.isFirstLoad = false
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
console.error('err-' + err)
|
console.error('err-' + err)
|
||||||
@ -946,6 +953,7 @@ export default {
|
|||||||
this.isFirstLoad = false
|
this.isFirstLoad = false
|
||||||
return true
|
return true
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
|
console.log('finally')
|
||||||
this.getDataLoading = false
|
this.getDataLoading = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -422,7 +422,7 @@ const data = {
|
|||||||
}
|
}
|
||||||
state.componentData[index] = element
|
state.componentData[index] = element
|
||||||
}
|
}
|
||||||
if (!element.type || element.type !== 'view') continue
|
if (!element.type || (element.type !== 'view' && element.type !== 'custom')) continue
|
||||||
const currentFilters = element.linkageFilters || [] // 当前联动filter
|
const currentFilters = element.linkageFilters || [] // 当前联动filter
|
||||||
// 联动的视图情况历史条件
|
// 联动的视图情况历史条件
|
||||||
// const currentFilters = []
|
// const currentFilters = []
|
||||||
@ -434,7 +434,7 @@ const data = {
|
|||||||
targetInfoList.forEach(targetInfo => {
|
targetInfoList.forEach(targetInfo => {
|
||||||
const targetInfoArray = targetInfo.split('#')
|
const targetInfoArray = targetInfo.split('#')
|
||||||
const targetViewId = targetInfoArray[0] // 目标视图
|
const targetViewId = targetInfoArray[0] // 目标视图
|
||||||
if (element.propValue.viewId === targetViewId) { // 如果目标视图 和 当前循环组件id相等 则进行条件增减
|
if (element.type === 'view' && element.propValue.viewId === targetViewId) { // 如果目标视图 和 当前循环组件id相等 则进行条件增减
|
||||||
const targetFieldId = targetInfoArray[1] // 目标视图列ID
|
const targetFieldId = targetInfoArray[1] // 目标视图列ID
|
||||||
const condition = new Condition('', targetFieldId, 'eq', [dimension.value], [targetViewId])
|
const condition = new Condition('', targetFieldId, 'eq', [dimension.value], [targetViewId])
|
||||||
condition.sourceViewId = viewId
|
condition.sourceViewId = viewId
|
||||||
@ -450,10 +450,23 @@ const data = {
|
|||||||
// !filterExist && vValid && currentFilters.push(condition)
|
// !filterExist && vValid && currentFilters.push(condition)
|
||||||
currentFilters.push(condition)
|
currentFilters.push(condition)
|
||||||
}
|
}
|
||||||
|
if (element.type === 'custom' && element.id === targetViewId) { // 过滤组件处理
|
||||||
|
element.options.value = dimension.value
|
||||||
|
// 去掉动态时间
|
||||||
|
if (element.options.manualModify) {
|
||||||
|
element.options.manualModify = false
|
||||||
|
}
|
||||||
|
// 去掉首选项
|
||||||
|
if (element.options?.attrs?.selectFirst) {
|
||||||
|
element.options.attrs.selectFirst = false
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
element.linkageFilters = currentFilters
|
if (element.type === 'view') {
|
||||||
|
element.linkageFilters = currentFilters
|
||||||
|
}
|
||||||
state.componentData[index] = element
|
state.componentData[index] = element
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -3330,7 +3330,10 @@ export default {
|
|||||||
if (this.view.type === 'bar-time-range') {
|
if (this.view.type === 'bar-time-range') {
|
||||||
// 针对时间条形图,需要限定类型为时间类型
|
// 针对时间条形图,需要限定类型为时间类型
|
||||||
if (this.view.xaxisExt && this.view.xaxisExt.length > 0) {
|
if (this.view.xaxisExt && this.view.xaxisExt.length > 0) {
|
||||||
|
const baseXaxisExt = this.view.xaxisExt[0]
|
||||||
for (let i = this.view.xaxisExt.length - 1; i >= 0; i--) {
|
for (let i = this.view.xaxisExt.length - 1; i >= 0; i--) {
|
||||||
|
this.view.xaxisExt[i].dateStyle = baseXaxisExt.dateStyle
|
||||||
|
this.view.xaxisExt[i].datePattern = baseXaxisExt.datePattern
|
||||||
if (this.view.xaxisExt[i].deType !== 1) {
|
if (this.view.xaxisExt[i].deType !== 1) {
|
||||||
this.view.xaxisExt.splice(i, 1)
|
this.view.xaxisExt.splice(i, 1)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -134,6 +134,7 @@
|
|||||||
<div class="select-filed">
|
<div class="select-filed">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="targetViewInfo.targetViewId"
|
v-model="targetViewInfo.targetViewId"
|
||||||
|
filterable
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
size="mini"
|
size="mini"
|
||||||
:placeholder="$t('fu.search_bar.please_select')"
|
:placeholder="$t('fu.search_bar.please_select')"
|
||||||
@ -172,6 +173,8 @@
|
|||||||
<div class="select-filed">
|
<div class="select-filed">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="targetViewInfo.targetFieldId"
|
v-model="targetViewInfo.targetFieldId"
|
||||||
|
:disabled="targetViewInfo.targetFieldId === 'empty'"
|
||||||
|
filterable
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
size="mini"
|
size="mini"
|
||||||
:placeholder="$t('fu.search_bar.please_select')"
|
:placeholder="$t('fu.search_bar.please_select')"
|
||||||
@ -386,7 +389,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { queryPanelJumpInfo, queryWithViewId, updateJumpSet } from '@/api/panel/linkJump'
|
import { queryPanelJumpInfo, queryWithViewId, updateJumpSet } from '@/api/panel/linkJump'
|
||||||
import { groupTree } from '@/api/panel/panel'
|
import { groupTree } from '@/api/panel/panel'
|
||||||
import { detailList } from '@/api/panel/panelView'
|
import {detailList, getComponentInfo} from '@/api/panel/panelView'
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
|
|
||||||
import draggable from 'vuedraggable'
|
import draggable from 'vuedraggable'
|
||||||
@ -474,6 +477,19 @@ export default {
|
|||||||
hintOptions: { // 自定义提示选项
|
hintOptions: { // 自定义提示选项
|
||||||
completeSingle: false // 当匹配只有一项的时候是否自动补全
|
completeSingle: false // 当匹配只有一项的时候是否自动补全
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
widgetSubjectsTrans: {
|
||||||
|
timeYearWidget: '年份过滤组件',
|
||||||
|
timeMonthWidget: '年月过滤组件',
|
||||||
|
timeDateWidget: '日期过滤组件',
|
||||||
|
timeDateRangeWidget: '日期范围过滤组件',
|
||||||
|
textSelectWidget: '文本下拉过滤组件',
|
||||||
|
textSelectGridWidget: '文本列表过滤组件',
|
||||||
|
textInputWidget: '文本搜索过滤组件',
|
||||||
|
textSelectTreeWidget: '下拉树过滤组件',
|
||||||
|
numberSelectWidget: '数字下来过滤组件',
|
||||||
|
numberSelectGridWidget: '数字列表过滤组件',
|
||||||
|
numberRangeWidget: '数值区间过滤组件'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -611,14 +627,25 @@ export default {
|
|||||||
},
|
},
|
||||||
// 获取当前视图字段 关联仪表板的视图信息列表
|
// 获取当前视图字段 关联仪表板的视图信息列表
|
||||||
getPanelViewList(panelId) {
|
getPanelViewList(panelId) {
|
||||||
detailList(panelId).then(rsp => {
|
getComponentInfo(panelId).then(rsp => {
|
||||||
this.viewIdFieldArrayMap = {}
|
this.viewIdFieldArrayMap = {}
|
||||||
this.currentLinkPanelViewArray = rsp.data
|
this.currentLinkPanelViewArray = rsp.data.panelViewTables
|
||||||
if (this.currentLinkPanelViewArray) {
|
if (this.currentLinkPanelViewArray) {
|
||||||
this.currentLinkPanelViewArray.forEach(view => {
|
this.currentLinkPanelViewArray.forEach(view => {
|
||||||
this.viewIdFieldArrayMap[view.id] = view.tableFields
|
this.viewIdFieldArrayMap[view.id] = view.tableFields
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 增加过滤组件匹配
|
||||||
|
JSON.parse(rsp.data.bashComponentData).forEach(componentItem => {
|
||||||
|
if (componentItem.type === 'custom') {
|
||||||
|
this.currentLinkPanelViewArray.push({
|
||||||
|
id: componentItem.id,
|
||||||
|
type: 'filter',
|
||||||
|
name: componentItem.options.attrs.title ? componentItem.options.attrs.title : this.widgetSubjectsTrans[componentItem.serviceName]
|
||||||
|
})
|
||||||
|
this.viewIdFieldArrayMap[componentItem.id] = [{ id: 'empty', name: this.$t('panel.filter_no_select') }]
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
panelNodeClick(data, node) {
|
panelNodeClick(data, node) {
|
||||||
@ -649,7 +676,11 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
viewInfoOnChange(targetViewInfo) {
|
viewInfoOnChange(targetViewInfo) {
|
||||||
targetViewInfo.targetFieldId = null
|
if (this.viewIdFieldArrayMap[targetViewInfo.targetViewId] && this.viewIdFieldArrayMap[targetViewInfo.targetViewId].length === 1 && this.viewIdFieldArrayMap[targetViewInfo.targetViewId][0].id === 'empty') {
|
||||||
|
targetViewInfo.targetFieldId = 'empty'
|
||||||
|
} else {
|
||||||
|
targetViewInfo.targetFieldId = null
|
||||||
|
}
|
||||||
},
|
},
|
||||||
sourceFieldCheckedChange(data) {
|
sourceFieldCheckedChange(data) {
|
||||||
if (data.checked) {
|
if (data.checked) {
|
||||||
|
|||||||
@ -92,6 +92,7 @@
|
|||||||
<div class="select-filed">
|
<div class="select-filed">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="targetViewInfo.targetViewId"
|
v-model="targetViewInfo.targetViewId"
|
||||||
|
filterable
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
size="mini"
|
size="mini"
|
||||||
:placeholder="$t('fu.search_bar.please_select')"
|
:placeholder="$t('fu.search_bar.please_select')"
|
||||||
@ -130,6 +131,7 @@
|
|||||||
<div class="select-filed">
|
<div class="select-filed">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="targetViewInfo.targetFieldId"
|
v-model="targetViewInfo.targetFieldId"
|
||||||
|
filterable
|
||||||
:disabled="viewIdFieldArrayMap[targetViewInfo.targetViewId] && viewIdFieldArrayMap[targetViewInfo.targetViewId].length===1 && viewIdFieldArrayMap[targetViewInfo.targetViewId][0].id === 'empty'"
|
:disabled="viewIdFieldArrayMap[targetViewInfo.targetViewId] && viewIdFieldArrayMap[targetViewInfo.targetViewId].length===1 && viewIdFieldArrayMap[targetViewInfo.targetViewId][0].id === 'empty'"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
size="mini"
|
size="mini"
|
||||||
|
|||||||
@ -122,13 +122,6 @@
|
|||||||
src="@/assets/wizard_wechat-official.jpeg"
|
src="@/assets/wizard_wechat-official.jpeg"
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="contact_wechat_group">
|
|
||||||
<div class="contact_title_qr">{{ $t('wizard.technical_group') }}</div>
|
|
||||||
<img
|
|
||||||
class="contact_wechat_group_img"
|
|
||||||
src="../../assets/wizard_wechat-group.png"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
package io.dataease.plugins.datasource.dm.query;
|
package io.dataease.plugins.datasource.dm.query;
|
||||||
|
|
||||||
import cn.hutool.json.JSONArray;
|
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
@ -129,7 +128,7 @@ public class DmQueryProvider extends QueryProvider {
|
|||||||
if (whereTrees != null)
|
if (whereTrees != null)
|
||||||
wheres.add(whereTrees);
|
wheres.add(whereTrees);
|
||||||
if (StringUtils.isNotBlank(keyword)) {
|
if (StringUtils.isNotBlank(keyword)) {
|
||||||
String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
|
String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
|
||||||
wheres.add(keyWhere);
|
wheres.add(keyWhere);
|
||||||
}
|
}
|
||||||
if (CollectionUtils.isNotEmpty(wheres))
|
if (CollectionUtils.isNotEmpty(wheres))
|
||||||
@ -463,6 +462,122 @@ public class DmQueryProvider extends QueryProvider {
|
|||||||
return sqlLimit(st.render(), view);
|
return sqlLimit(st.render(), view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table
|
||||||
|
: String.format(OracleConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(OracleConstants.ALIAS_FIX, String.format(TABLE_ALIAS_PREFIX, 0)))
|
||||||
|
.build();
|
||||||
|
setSchema(tableObj, ds);
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(OracleConstants.KEYWORD_FIX, tableObj.getTableAlias(),
|
||||||
|
x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(OracleConstants.KEYWORD_FIX, tableObj.getTableAlias(),
|
||||||
|
x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(OracleConstants.ALIAS_FIX,
|
||||||
|
String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i));
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(OracleConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(OracleConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null)
|
||||||
|
wheres.add(customWheres);
|
||||||
|
if (extWheres != null)
|
||||||
|
wheres.add(extWheres);
|
||||||
|
if (whereTrees != null)
|
||||||
|
wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields))
|
||||||
|
st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields))
|
||||||
|
st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres))
|
||||||
|
st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj))
|
||||||
|
st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(OracleConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres))
|
||||||
|
st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders))
|
||||||
|
st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL))
|
||||||
|
st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
private String originalTableInfo(String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) {
|
private String originalTableInfo(String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
SQLObj tableObj = SQLObj.builder()
|
SQLObj tableObj = SQLObj.builder()
|
||||||
.tableName((table.startsWith("(") && table.endsWith(")")) ? table
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table
|
||||||
@ -551,7 +666,8 @@ public class DmQueryProvider extends QueryProvider {
|
|||||||
st.add("table", tableSQL);
|
st.add("table", tableSQL);
|
||||||
return st.render();
|
return st.render();
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
|
@Override
|
||||||
public String getSQLTableInfo(String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) {
|
public String getSQLTableInfo(String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
return sqlLimit(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view), view);
|
return sqlLimit(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view), view);
|
||||||
}
|
}
|
||||||
@ -713,7 +829,7 @@ public class DmQueryProvider extends QueryProvider {
|
|||||||
@Override
|
@Override
|
||||||
public String getSQLScatter(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis,
|
public String getSQLScatter(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis,
|
||||||
List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList,
|
List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList,
|
||||||
List<ChartViewFieldDTO> extBubble,List<ChartViewFieldDTO> extGroup, Datasource ds, ChartViewWithBLOBs view) {
|
List<ChartViewFieldDTO> extBubble, List<ChartViewFieldDTO> extGroup, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
SQLObj tableObj = SQLObj.builder()
|
SQLObj tableObj = SQLObj.builder()
|
||||||
.tableName((table.startsWith("(") && table.endsWith(")")) ? table
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table
|
||||||
: String.format(OracleConstants.KEYWORD_TABLE, table))
|
: String.format(OracleConstants.KEYWORD_TABLE, table))
|
||||||
@ -862,9 +978,9 @@ public class DmQueryProvider extends QueryProvider {
|
|||||||
@Override
|
@Override
|
||||||
public String getSQLAsTmpScatter(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis,
|
public String getSQLAsTmpScatter(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis,
|
||||||
List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList,
|
List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList,
|
||||||
List<ChartViewFieldDTO> extBubble, List<ChartViewFieldDTO> extGroup,ChartViewWithBLOBs view) {
|
List<ChartViewFieldDTO> extBubble, List<ChartViewFieldDTO> extGroup, ChartViewWithBLOBs view) {
|
||||||
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList,
|
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList,
|
||||||
extBubble, extGroup,null, view);
|
extBubble, extGroup, null, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1576,7 +1692,7 @@ public class DmQueryProvider extends QueryProvider {
|
|||||||
public List<Dateformat> dateformat() {
|
public List<Dateformat> dateformat() {
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
List<Dateformat> dateformats = new ArrayList<>();
|
List<Dateformat> dateformats = new ArrayList<>();
|
||||||
try{
|
try {
|
||||||
dateformats = objectMapper.readValue("[\n" +
|
dateformats = objectMapper.readValue("[\n" +
|
||||||
"{\"dateformat\": \"YYYY-MM-DD\"},\n" +
|
"{\"dateformat\": \"YYYY-MM-DD\"},\n" +
|
||||||
"{\"dateformat\": \"YYYY/MM/DD\"},\n" +
|
"{\"dateformat\": \"YYYY/MM/DD\"},\n" +
|
||||||
@ -1584,8 +1700,10 @@ public class DmQueryProvider extends QueryProvider {
|
|||||||
"{\"dateformat\": \"YYYY-MM-DD HH24:MI:SS\"},\n" +
|
"{\"dateformat\": \"YYYY-MM-DD HH24:MI:SS\"},\n" +
|
||||||
"{\"dateformat\": \"YYYY/MM/DD HH24:MI:SS\"},\n" +
|
"{\"dateformat\": \"YYYY/MM/DD HH24:MI:SS\"},\n" +
|
||||||
"{\"dateformat\": \"YYYYMMDD HH24:MI:SS\"}\n" +
|
"{\"dateformat\": \"YYYYMMDD HH24:MI:SS\"}\n" +
|
||||||
"]", new TypeReference<List<Dateformat>>() {} );
|
"]", new TypeReference<List<Dateformat>>() {
|
||||||
}catch (Exception e){}
|
});
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
return dateformats;
|
return dateformats;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -199,7 +199,7 @@ public class KingbaseQueryProvider extends QueryProvider {
|
|||||||
if (whereTrees != null)
|
if (whereTrees != null)
|
||||||
wheres.add(whereTrees);
|
wheres.add(whereTrees);
|
||||||
if (StringUtils.isNotBlank(keyword)) {
|
if (StringUtils.isNotBlank(keyword)) {
|
||||||
String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
|
String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
|
||||||
wheres.add(keyWhere);
|
wheres.add(keyWhere);
|
||||||
}
|
}
|
||||||
if (CollectionUtils.isNotEmpty(wheres))
|
if (CollectionUtils.isNotEmpty(wheres))
|
||||||
@ -449,6 +449,122 @@ public class KingbaseQueryProvider extends QueryProvider {
|
|||||||
return sqlLimit(st.render(), view);
|
return sqlLimit(st.render(), view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table
|
||||||
|
: String.format(KingbaseConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
setSchema(tableObj, ds);
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(KingbaseConstants.KEYWORD_FIX, tableObj.getTableAlias(),
|
||||||
|
x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(KingbaseConstants.KEYWORD_FIX, tableObj.getTableAlias(),
|
||||||
|
x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(KingbaseConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(KingbaseConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null)
|
||||||
|
wheres.add(customWheres);
|
||||||
|
if (extWheres != null)
|
||||||
|
wheres.add(extWheres);
|
||||||
|
if (whereTrees != null)
|
||||||
|
wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields))
|
||||||
|
st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields))
|
||||||
|
st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres))
|
||||||
|
st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj))
|
||||||
|
st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(KingbaseConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres))
|
||||||
|
st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders))
|
||||||
|
st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL))
|
||||||
|
st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSQLWithPage(boolean isTable, String table, List<ChartViewFieldDTO> xAxis,
|
public String getSQLWithPage(boolean isTable, String table, List<ChartViewFieldDTO> xAxis,
|
||||||
List<ChartFieldCustomFilterDTO> fieldCustomFilter,
|
List<ChartFieldCustomFilterDTO> fieldCustomFilter,
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
package io.dataease.plugins.datasource.kylin.query;
|
package io.dataease.plugins.datasource.kylin.query;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
|
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
|
||||||
import io.dataease.plugins.common.base.domain.DatasetTableField;
|
import io.dataease.plugins.common.base.domain.DatasetTableField;
|
||||||
@ -19,7 +17,6 @@ import io.dataease.plugins.common.dto.sqlObj.SQLObj;
|
|||||||
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
|
import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
|
||||||
import io.dataease.plugins.common.request.permission.DataSetRowPermissionsTreeDTO;
|
import io.dataease.plugins.common.request.permission.DataSetRowPermissionsTreeDTO;
|
||||||
import io.dataease.plugins.common.request.permission.DatasetRowPermissionsTreeItem;
|
import io.dataease.plugins.common.request.permission.DatasetRowPermissionsTreeItem;
|
||||||
import io.dataease.plugins.datasource.entity.Dateformat;
|
|
||||||
import io.dataease.plugins.datasource.entity.JdbcConfiguration;
|
import io.dataease.plugins.datasource.entity.JdbcConfiguration;
|
||||||
import io.dataease.plugins.datasource.query.QueryProvider;
|
import io.dataease.plugins.datasource.query.QueryProvider;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
@ -158,7 +155,7 @@ public class KylinQueryProvider extends QueryProvider {
|
|||||||
if (customWheres != null) wheres.add(customWheres);
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
if (whereTrees != null) wheres.add(whereTrees);
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
if (StringUtils.isNotBlank(keyword)) {
|
if (StringUtils.isNotBlank(keyword)) {
|
||||||
String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
|
String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
|
||||||
wheres.add(keyWhere);
|
wheres.add(keyWhere);
|
||||||
}
|
}
|
||||||
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
@ -362,6 +359,108 @@ public class KylinQueryProvider extends QueryProvider {
|
|||||||
return sqlLimit(st.render(), view);
|
return sqlLimit(st.render(), view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(KylinConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
setSchema(tableObj, ds);
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(KylinConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(KylinConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(KylinConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(KylinConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && !StringUtils.equalsIgnoreCase(x.getSort(), "none")) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(KylinConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSQLTableInfo(String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) {
|
public String getSQLTableInfo(String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
SQLObj tableObj = SQLObj.builder()
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
|||||||
@ -154,7 +154,7 @@ public class MaxcomputeQueryProvider extends QueryProvider {
|
|||||||
if (customWheres != null) wheres.add(customWheres);
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
if (whereTrees != null) wheres.add(whereTrees);
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
if (StringUtils.isNotBlank(keyword)) {
|
if (StringUtils.isNotBlank(keyword)) {
|
||||||
String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
|
String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
|
||||||
wheres.add(keyWhere);
|
wheres.add(keyWhere);
|
||||||
}
|
}
|
||||||
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
@ -364,6 +364,108 @@ public class MaxcomputeQueryProvider extends QueryProvider {
|
|||||||
return sqlLimit(st.render(), view);
|
return sqlLimit(st.render(), view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MaxConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(MaxConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(MaxConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(MaxConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(MaxConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && !StringUtils.equalsIgnoreCase(x.getSort(), "none")) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(MaxConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSQLWithPage(boolean isTable, String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) {
|
public String getSQLWithPage(boolean isTable, String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) {
|
||||||
String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + pageInfo.getPageSize() + " offset " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() : "");
|
String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + pageInfo.getPageSize() + " offset " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() : "");
|
||||||
|
|||||||
@ -210,7 +210,7 @@ public class MongobiQueryProvider extends QueryProvider {
|
|||||||
if (customWheres != null) wheres.add(customWheres);
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
if (whereTrees != null) wheres.add(whereTrees);
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
if (StringUtils.isNotBlank(keyword)) {
|
if (StringUtils.isNotBlank(keyword)) {
|
||||||
String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
|
String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
|
||||||
wheres.add(keyWhere);
|
wheres.add(keyWhere);
|
||||||
}
|
}
|
||||||
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
@ -366,6 +366,107 @@ public class MongobiQueryProvider extends QueryProvider {
|
|||||||
return sqlLimit(st.render(), view);
|
return sqlLimit(st.render(), view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MongoConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(MongoConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(MongoConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(MongoConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(MongoConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && Utils.joinSort(x.getSort())) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(MongoConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSQLWithPage(boolean isTable, String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) {
|
public String getSQLWithPage(boolean isTable, String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) {
|
||||||
String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize() : "");
|
String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize() : "");
|
||||||
|
|||||||
@ -22,7 +22,6 @@ import io.dataease.plugins.common.request.permission.DatasetRowPermissionsTreeIt
|
|||||||
import io.dataease.plugins.datasource.dm.provider.PrestoConfig;
|
import io.dataease.plugins.datasource.dm.provider.PrestoConfig;
|
||||||
import io.dataease.plugins.datasource.entity.Dateformat;
|
import io.dataease.plugins.datasource.entity.Dateformat;
|
||||||
import io.dataease.plugins.datasource.entity.JdbcConfiguration;
|
import io.dataease.plugins.datasource.entity.JdbcConfiguration;
|
||||||
import io.dataease.plugins.datasource.entity.PageInfo;
|
|
||||||
import io.dataease.plugins.datasource.query.QueryProvider;
|
import io.dataease.plugins.datasource.query.QueryProvider;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
@ -158,7 +157,7 @@ public class PrestoQueryProvider extends QueryProvider {
|
|||||||
if (customWheres != null) wheres.add(customWheres);
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
if (whereTrees != null) wheres.add(whereTrees);
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
if (StringUtils.isNotBlank(keyword)) {
|
if (StringUtils.isNotBlank(keyword)) {
|
||||||
String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
|
String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
|
||||||
wheres.add(keyWhere);
|
wheres.add(keyWhere);
|
||||||
}
|
}
|
||||||
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
@ -362,6 +361,109 @@ public class PrestoQueryProvider extends QueryProvider {
|
|||||||
return sqlLimit(st.render(), view);
|
return sqlLimit(st.render(), view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(PrestoConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
setSchema(tableObj, ds);
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
List<SQLObj> yFields = new ArrayList<>(); // 要把两个时间字段放进y里面
|
||||||
|
List<String> yWheres = new ArrayList<>();
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(PrestoConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(PrestoConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
|
||||||
|
if (i == baseXAxis.size()) {// 起止时间
|
||||||
|
String fieldName = String.format(PrestoConstants.AGG_FIELD, "min", originField);
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
|
||||||
|
} else if (i == baseXAxis.size() + 1) {
|
||||||
|
String fieldName = String.format(PrestoConstants.AGG_FIELD, "max", originField);
|
||||||
|
|
||||||
|
yFields.add(getXFields(x, fieldName, fieldAlias));
|
||||||
|
|
||||||
|
yWheres.add(getYWheres(x, originField, fieldAlias));
|
||||||
|
} else {
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && !StringUtils.equalsIgnoreCase(x.getSort(), "none")) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
String customWheres = transCustomFilterList(tableObj, fieldCustomFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
String extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// row permissions tree
|
||||||
|
String whereTrees = transFilterTrees(tableObj, rowPermissionsTree);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<String> wheres = new ArrayList<>();
|
||||||
|
if (customWheres != null) wheres.add(customWheres);
|
||||||
|
if (extWheres != null) wheres.add(extWheres);
|
||||||
|
if (whereTrees != null) wheres.add(whereTrees);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<String> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()));
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(PrestoConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return sqlLimit(st.render(), view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view) {
|
||||||
|
return getSQLRangeBar("(" + table + ")", baseXAxis, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, extStack, null, view);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private String originalTableInfo(String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) {
|
private String originalTableInfo(String table, List<ChartViewFieldDTO> xAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) {
|
||||||
SQLObj tableObj = SQLObj.builder()
|
SQLObj tableObj = SQLObj.builder()
|
||||||
@ -1109,7 +1211,7 @@ public class PrestoQueryProvider extends QueryProvider {
|
|||||||
String endTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(1))));
|
String endTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(1))));
|
||||||
startTime = String.format("CAST('%s' AS %s)", startTime, "timestamp");
|
startTime = String.format("CAST('%s' AS %s)", startTime, "timestamp");
|
||||||
endTime = String.format("CAST('%s' AS %s)", endTime, "timestamp");
|
endTime = String.format("CAST('%s' AS %s)", endTime, "timestamp");
|
||||||
whereValue = String.format("%s AND %s",startTime, endTime);
|
whereValue = String.format("%s AND %s", startTime, endTime);
|
||||||
} else {
|
} else {
|
||||||
whereValue = String.format(PrestoConstants.WHERE_BETWEEN, value.get(0), value.get(1));
|
whereValue = String.format(PrestoConstants.WHERE_BETWEEN, value.get(0), value.get(1));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,11 +13,11 @@ public enum DatasourceTypes {
|
|||||||
StarRocks("StarRocks", "StarRocks", "`", "`", "'", "'", "characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true", true, DatasourceCalculationMode.DIRECT_AND_SYNC, null, null, true, DatabaseClassification.OLAP, ""),
|
StarRocks("StarRocks", "StarRocks", "`", "`", "'", "'", "characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true", true, DatasourceCalculationMode.DIRECT_AND_SYNC, null, null, true, DatabaseClassification.OLAP, ""),
|
||||||
ds_doris("ds_doris", "Doris", "`", "`", "'", "'", "characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true", true, DatasourceCalculationMode.DIRECT_AND_SYNC, null, null, true, DatabaseClassification.OLAP, ""),
|
ds_doris("ds_doris", "Doris", "`", "`", "'", "'", "characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true", true, DatasourceCalculationMode.DIRECT_AND_SYNC, null, null, true, DatabaseClassification.OLAP, ""),
|
||||||
pg("pg", "PostgreSQL", "\"", "\"", "\"", "\"", "", true, DatasourceCalculationMode.DIRECT_AND_SYNC, null, null, true, DatabaseClassification.OLTP, "12,13,14,15,16"),
|
pg("pg", "PostgreSQL", "\"", "\"", "\"", "\"", "", true, DatasourceCalculationMode.DIRECT_AND_SYNC, null, null, true, DatabaseClassification.OLTP, "12,13,14,15,16"),
|
||||||
sqlServer("sqlServer", "SQL Server", "\"", "\"", "\"", "\"", "", true, DatasourceCalculationMode.DIRECT_AND_SYNC, null, null, true, DatabaseClassification.OLTP, "13,14,15,16"),
|
sqlServer("sqlServer", "SQL Server", "\"", "\"", "\"", "\"", "", true, DatasourceCalculationMode.DIRECT_AND_SYNC, null, null, true, DatabaseClassification.OLTP, "13,14,15,16"),
|
||||||
oracle("oracle", "Oracle", "\"", "\"", "\"", "\"", "", true, DatasourceCalculationMode.DIRECT_AND_SYNC, Arrays.asList("Default", "GBK", "BIG5", "ISO-8859-1", "UTF-8", "UTF-16", "CP850", "EUC_JP", "EUC_KR", "US7ASCII", "AL32UTF8"), Arrays.asList("Default", "GBK", "UTF-8"), true, DatabaseClassification.OLTP, "8,9,10,11,12"),
|
oracle("oracle", "Oracle", "\"", "\"", "\"", "\"", "", true, DatasourceCalculationMode.DIRECT_AND_SYNC, Arrays.asList("Default", "GBK", "BIG5", "ISO-8859-1", "UTF-8", "UTF-16", "CP850", "EUC_JP", "EUC_KR", "US7ASCII", "AL32UTF8"), Arrays.asList("Default", "GBK", "UTF-8"), true, DatabaseClassification.OLTP, "8,9,10,11,12"),
|
||||||
mongo("mongo", "MongoDB", "`", "`", "\"", "\"", "rebuildschema=true&authSource=admin", true, DatasourceCalculationMode.DIRECT, null, null, true, DatabaseClassification.OLTP, "3,4"),
|
mongo("mongo", "MongoDB", "`", "`", "\"", "\"", "rebuildschema=true&authSource=admin", true, DatasourceCalculationMode.DIRECT, null, null, true, DatabaseClassification.OLTP, "3,4"),
|
||||||
ck("ck", "ClickHouse", "`", "`", "", "", "", true, DatasourceCalculationMode.DIRECT, null, null, true, DatabaseClassification.OLAP, "18,19,20,21,22,23"),
|
ck("ck", "ClickHouse", "`", "`", "", "", "", true, DatasourceCalculationMode.DIRECT, null, null, true, DatabaseClassification.OLAP, "18,19,20,21,22,23"),
|
||||||
db2("db2", "Db2", "\"", "\"", "\"", "\"", "", true, DatasourceCalculationMode.DIRECT_AND_SYNC, null, null, true, DatabaseClassification.OLTP, "9,10,11,12"),
|
db2("db2", "Db2", "\"", "\"", "\"", "\"", "", true, DatasourceCalculationMode.DIRECT_AND_SYNC, null, null, true, DatabaseClassification.OLTP, "9,10,11,12"),
|
||||||
redshift("redshift", "AWS Redshift", "\"", "\"", "\"", "\"", "", true, DatasourceCalculationMode.DIRECT, null, null, true, DatabaseClassification.DL, ""),
|
redshift("redshift", "AWS Redshift", "\"", "\"", "\"", "\"", "", true, DatasourceCalculationMode.DIRECT, null, null, true, DatabaseClassification.DL, ""),
|
||||||
es("es", "Elasticsearch", "\"", "\"", "\"", "\"", "", true, DatasourceCalculationMode.DIRECT, null, null, false, DatabaseClassification.OLAP, ""),
|
es("es", "Elasticsearch", "\"", "\"", "\"", "\"", "", true, DatasourceCalculationMode.DIRECT, null, null, false, DatabaseClassification.OLAP, ""),
|
||||||
api("api", "API", "\"", "\"", "\"", "\"", "rebuildschema=true&authSource=admin", true, DatasourceCalculationMode.SYNC, null, null, false, DatabaseClassification.OTHER, ""),
|
api("api", "API", "\"", "\"", "\"", "\"", "rebuildschema=true&authSource=admin", true, DatasourceCalculationMode.SYNC, null, null, false, DatabaseClassification.OTHER, ""),
|
||||||
|
|||||||
@ -85,6 +85,10 @@ public abstract class QueryProvider {
|
|||||||
|
|
||||||
public abstract String getSQLAsTmpScatter(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extBubble, List<ChartViewFieldDTO> extGroup, ChartViewWithBLOBs view);
|
public abstract String getSQLAsTmpScatter(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extBubble, List<ChartViewFieldDTO> extGroup, ChartViewWithBLOBs view);
|
||||||
|
|
||||||
|
public abstract String getSQLRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, Datasource ds, ChartViewWithBLOBs view);
|
||||||
|
|
||||||
|
public abstract String getSQLAsTmpRangeBar(String table, List<ChartViewFieldDTO> baseXAxis, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extStack, ChartViewWithBLOBs view);
|
||||||
|
|
||||||
public abstract String searchTable(String table);
|
public abstract String searchTable(String table);
|
||||||
|
|
||||||
public abstract String getSQLSummary(String table, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, ChartViewWithBLOBs view, Datasource ds);
|
public abstract String getSQLSummary(String table, List<ChartViewFieldDTO> yAxis, List<ChartFieldCustomFilterDTO> fieldCustomFilter, List<DataSetRowPermissionsTreeDTO> rowPermissionsTree, List<ChartExtFilterRequest> extFilterRequestList, ChartViewWithBLOBs view, Datasource ds);
|
||||||
@ -167,7 +171,7 @@ public abstract class QueryProvider {
|
|||||||
String tableAlias = tableObj.getTableAlias();
|
String tableAlias = tableObj.getTableAlias();
|
||||||
return xFields.stream().map(xField -> {
|
return xFields.stream().map(xField -> {
|
||||||
String whereName = xField.getFieldOriginName();
|
String whereName = xField.getFieldOriginName();
|
||||||
return whereName + " LIKE '%"+keyword+"%'";
|
return whereName + " LIKE '%" + keyword + "%'";
|
||||||
}).collect(Collectors.joining(" or "));
|
}).collect(Collectors.joining(" or "));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user