From 74130c497deb500ec5bfd5cba4ad638b5e322414 Mon Sep 17 00:00:00 2001
From: maninhill <41712985+maninhill@users.noreply.github.com>
Date: Fri, 1 Dec 2023 17:34:28 +0800
Subject: [PATCH 1/9] Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 5e854a1256..5e3704ea22 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@
|说明|
|------------------|
-|此分支为 DataEase v1.18 版本的开发分支。[DataEase v2.0.0](https://github.com/dataease/dataease/releases/tag/v2.0.0) 也已经正式发布,v2 版本的开发分支为 [dev-v2](https://github.com/dataease/dataease/tree/dev-v2)。v2 版本正在快速迭代中,如是在生产环境部署 DataEase,建议继续使用 v1.18.* 的最新稳定版本。|
+|此分支为 DataEase v1.18 版本的开发分支。|
From 435f05ffe8e4985ee2be9f1554c6c2f7d7181ada Mon Sep 17 00:00:00 2001
From: maninhill <41712985+maninhill@users.noreply.github.com>
Date: Fri, 1 Dec 2023 17:35:19 +0800
Subject: [PATCH 2/9] Update README.md
---
README.md | 4 ----
1 file changed, 4 deletions(-)
diff --git a/README.md b/README.md
index 5e3704ea22..d5a0aa813c 100644
--- a/README.md
+++ b/README.md
@@ -8,10 +8,6 @@
-|说明|
-|------------------|
-|此分支为 DataEase v1.18 版本的开发分支。|
-
## 什么是 DataEase?
From 9764929eade90038473ab8a3c0df374a3ccddeb2 Mon Sep 17 00:00:00 2001
From: ulleo
Date: Mon, 4 Dec 2023 17:59:26 +0800
Subject: [PATCH 3/9] =?UTF-8?q?feat:=20AntV=E7=BB=84=E5=90=88=E5=9B=BE?=
=?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9A=E6=8C=87=E6=A0=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
#6853
---
.../src/views/antv/chartmix/data.vue | 198 +++++++------
.../src/views/antv/chartmix/index.vue | 260 ++++++++++--------
2 files changed, 259 insertions(+), 199 deletions(-)
diff --git a/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/data.vue b/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/data.vue
index d4ec306f10..116b222248 100644
--- a/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/data.vue
+++ b/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/data.vue
@@ -6,30 +6,30 @@
{{ $t('plugin_view_chartmix.source') }}/{{ $t('chart.dimension') }}
@@ -43,28 +43,28 @@
{{ $t('plugin_view_chartmix.mark_size') }}/{{ $t('chart.quota') }}
@@ -78,28 +78,28 @@
{{ $t('plugin_view_chartmix.mark_size') }}/{{ $t('chart.quota') }}
@@ -114,27 +114,27 @@
{{ $t('chart.result_filter') }}
@@ -230,7 +230,7 @@ export default {
this.$emit('on-add-languages', messages)
},
watch: {
- listenLists: function(val) {
+ /*listenLists: function(val) {
if (this.listenLists[0] <= 1 && this.listenLists[1] <= 1) {
return
}
@@ -243,7 +243,7 @@ export default {
this.view.yaxisExt = [this.view.yaxisExt[0]]
}
this.calcData(true)
- }
+ }*/
},
methods: {
executeAxios(url, type, data, callBack) {
@@ -284,20 +284,41 @@ export default {
this.multiAdd(e, this.view.yaxis)
this.dragMoveDuplicate(this.view.yaxis, e)
this.dragCheckType(this.view.yaxis, 'q')
- if (this.view.yaxis.length <= 1) {
- this.calcData(true)
+
+ if (this.view.yaxis.length > 1) {
+ for (let i = 0; i < this.view.yaxis.length; i++) {
+ if (i === e.newDraggableIndex) {
+ continue
+ }
+ this.view.yaxis[e.newDraggableIndex].chartType = this.view.yaxis[i].chartType;
+ break
+ }
}
+
+ //if (this.view.yaxis.length <= 1) {
+ this.calcData(true)
+ //}
},
addYaxisExt(e) {
this.multiAdd(e, this.view.yaxisExt)
this.dragMoveDuplicate(this.view.yaxisExt, e)
this.dragCheckType(this.view.yaxisExt, 'q')
- if (this.view.yaxisExt.length <= 1) {
- this.calcData(true)
+
+ if (this.view.yaxisExt.length > 1) {
+ for (let i = 0; i < this.view.yaxisExt.length; i++) {
+ if (i === e.newDraggableIndex) {
+ continue
+ }
+ this.view.yaxisExt[e.newDraggableIndex].chartType = this.view.yaxisExt[i].chartType;
+ break
+ }
}
+
+ //if (this.view.yaxisExt.length <= 1) {
+ this.calcData(true)
+ //}
},
calcData(cache) {
- console.log(cache)
//this.view.xaxis = [...this.source, ...this.target]
this.$emit('plugin-call-back', {
@@ -339,6 +360,15 @@ export default {
},
quotaItemChange(item) {
+ for (let i = 0; i < this.view.yaxis.length; i++) {
+ this.view.yaxis[i].chartType = item.chartType
+ }
+ this.calcData(true)
+ },
+ quotaExtItemChange(item) {
+ for (let i = 0; i < this.view.yaxisExt.length; i++) {
+ this.view.yaxisExt[i].chartType = item.chartType
+ }
this.calcData(true)
},
quotaItemRemove(item) {
diff --git a/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/index.vue b/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/index.vue
index f058656ee9..07aba04106 100644
--- a/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/index.vue
+++ b/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/index.vue
@@ -6,23 +6,23 @@
@trackClick="trackClick"/>
@@ -310,135 +310,54 @@ export default {
const names = [];
- let _data = this.chart.data && this.chart.data.data && this.chart.data.data.length > 0 ? _.map(_.filter(this.chart.data.data, (c, _index) => {
- return _index < yaxisCount;
- }), (t, _index) => {
+ const yChartData = this.chart.data && this.chart.data.data && this.chart.data.data.length > 0 ? _.map(_.filter(this.chart.data.data, (c, _index) => {
+ return _index < yaxisCount;
+ }), (t, _index) => {
+ names.push(t.name);
- const _labelSetting = _.cloneDeep(labelSetting);
- if (_labelSetting && yaxisList[_index].formatterCfg) {
- _labelSetting.formatter = function (x) {
- return valueFormatter(x.value, yaxisList[_index].formatterCfg);
- }
- }
-
- names.push(t.name);
-
- const _chartType = this.getChartType(yaxisList[_index].chartType);
-
- if (_labelSetting) {
- if (_chartType === "column") {
- _labelSetting.position = labelPosition;
- } else {
- _labelSetting.position = undefined;
- }
- }
-
- let color = colors && _index < colors.length ? hexColorToRGBA(colors[_index], alpha) : undefined;
- if (color && gradient) {
- color = setGradientColor(color, true, 270)
- }
-
- const setting = {
- type: _chartType,
- name: t.name,
- options: {
- data: _.map(t.data, (v) => {
+ return _.map(t.data, (v) => {
return {
quotaList: v.quotaList,
dimensionList: v.dimensionList,
key: _.join(_.map(v.dimensionList, (d) => d.value), "\n"),
value: v.value,
+ name: t.name,
i: _index,
t: 'yaxis'
}
- }),
- xField: 'key',
- yField: 'value',
- meta: {
- key: {
- sync: true,
- },
- value: {
- alias: t.name,
- },
- },
- color: color,
- label: _labelSetting,
- xAxis: xAxis,
- yAxis: yAxis,
+ });
}
- }
- return this.setSizeSetting(setting);
- }) : [];
+ ) : [];
- let _dataExt = this.chart.data && this.chart.data.data && this.chart.data.data.length > 0 ? _.map(_.filter(this.chart.data.data, (c, _index) => {
- return _index >= yaxisCount;
- }), (t, _index) => {
+ const yData = [this.getYData(_.flatten(yChartData), labelSetting, labelPosition, yaxisList, colors, gradient, alpha, xAxis, yAxis, yaxisExtList.length)];
- const _labelSetting = _.cloneDeep(labelSetting);
- if (_labelSetting && yaxisExtList[_index].formatterCfg) {
- _labelSetting.formatter = function (x) {
- return valueFormatter(x.value, yaxisExtList[_index].formatterCfg);
- }
- }
+ const yExtChartData = this.chart.data && this.chart.data.data && this.chart.data.data.length > 0 ? _.map(_.filter(this.chart.data.data, (c, _index) => {
+ return _index >= yaxisCount;
+ }), (t, _index) => {
+ names.push(t.name);
- names.push(t.name);
-
- const _chartType = this.getChartType(yaxisExtList[_index].chartType);
-
- if (_labelSetting) {
- if (_chartType === "column") {
- _labelSetting.position = labelPosition;
- } else {
- _labelSetting.position = undefined;
- }
- }
-
- let color = colors && (yaxisCount + _index) < colors.length ? hexColorToRGBA(colors[yaxisCount + _index], alpha) : undefined;
- if (color && gradient) {
- color = setGradientColor(color, true, 270)
- }
-
- const setting = {
- type: _chartType,
- name: t.name,
- options: {
- data: _.map(t.data, (v) => {
+ return _.map(t.data, (v) => {
return {
quotaList: v.quotaList,
dimensionList: v.dimensionList,
key: _.join(_.map(v.dimensionList, (d) => d.value), "\n"),
value: v.value,
+ name: t.name,
i: _index,
t: 'yaxisExt'
}
- }),
- xField: 'key',
- yField: 'value',
- meta: {
- key: {
- sync: true,
- },
- value: {
- alias: t.name,
- },
- },
- color: color,
- label: _labelSetting,
- xAxis: false,
- yAxis: yAxisExt,
+ })
}
- }
- return this.setSizeSetting(setting);
- }) : [];
+ ) : [];
+ const yExtData = [this.getYExtData(_.flatten(yExtChartData), labelSetting, labelPosition, yaxisExtList, colors, gradient, alpha, xAxis, yAxisExt, yaxisCount)];
const params = {
tooltip: false,
syncViewPadding: true,
plots: [
- ..._data,
- ..._dataExt
+ ...yData,
+ ...yExtData
]
};
@@ -489,7 +408,8 @@ export default {
params.annotations = this.getAnalyse(this.chart);
- params.legend = this.getLegend(this.chart);
+ //两个轴只能展示一个轴的图例,所以隐藏
+ //params.legend = this.getLegend(this.chart);
return params;
},
@@ -755,6 +675,116 @@ export default {
return axis
},
+ getYData(data, labelSetting, labelPosition, yaxisList, colors, gradient, alpha, xAxis, yAxis, yaxisExtCount) {
+
+ const _labelSetting = _.cloneDeep(labelSetting);
+ if (_labelSetting) {
+ _labelSetting.formatter = function (x) {
+ for (let i = 0; i < yaxisList.length; i++) {
+ if (i === x.i && yaxisList[i].formatterCfg) {
+ return valueFormatter(x.value, yaxisList[i].formatterCfg);
+ }
+ }
+ return x.value;
+ }
+ }
+
+ const _chartType = this.getChartType(yaxisList && yaxisList.length > 0 ? yaxisList[0].chartType : undefined);
+
+ if (_labelSetting) {
+ if (_chartType === "column") {
+ _labelSetting.position = labelPosition;
+ } else {
+ _labelSetting.position = undefined;
+ }
+ }
+
+ const color = [];
+ for (let i = 0; i < yaxisList.length; i++) {
+ if (gradient) {
+ color.push(setGradientColor(hexColorToRGBA(colors[i % colors.length], alpha), true, 270))
+ } else {
+ color.push(hexColorToRGBA(colors[i % colors.length], alpha))
+ }
+ }
+
+ const setting = {
+ type: _chartType,
+ options: {
+ data: data,
+ xField: 'key',
+ yField: 'value',
+ seriesField: 'name',
+ colorField: 'name',
+ isGroup: true,
+ meta: {
+ key: {
+ sync: true,
+ },
+ },
+ color: color,
+ label: _labelSetting,
+ xAxis: yaxisList.length > 0 || yaxisExtCount === 0 ? xAxis : false,
+ yAxis: yAxis,
+ }
+ }
+ return this.setSizeSetting(setting);
+ },
+
+ getYExtData(data, labelSetting, labelPosition, yaxisExtList, colors, gradient, alpha, xAxis, yAxisExt, yaxisCount) {
+ const _labelSetting = _.cloneDeep(labelSetting);
+ if (_labelSetting) {
+ _labelSetting.formatter = function (x) {
+ for (let i = 0; i < yaxisExtList.length; i++) {
+ if (i === x.i && yaxisExtList[i].formatterCfg) {
+ return valueFormatter(x.value, yaxisExtList[i].formatterCfg);
+ }
+ }
+ return x.value;
+ }
+ }
+
+ const _chartType = this.getChartType(yaxisExtList && yaxisExtList.length > 0 ? yaxisExtList[0].chartType : undefined);
+
+ if (_labelSetting) {
+ if (_chartType === "column") {
+ _labelSetting.position = labelPosition;
+ } else {
+ _labelSetting.position = undefined;
+ }
+ }
+
+ const color = [];
+ for (let i = yaxisCount; i < yaxisExtList.length + yaxisCount; i++) {
+ if (gradient) {
+ color.push(setGradientColor(hexColorToRGBA(colors[i % colors.length], alpha), true, 270))
+ } else {
+ color.push(hexColorToRGBA(colors[i % colors.length], alpha))
+ }
+ }
+
+ const setting = {
+ type: _chartType,
+ options: {
+ data: data,
+ xField: 'key',
+ yField: 'value',
+ seriesField: 'name',
+ isGroup: true,
+ meta: {
+ key: {
+ sync: true,
+ },
+ },
+ color: color,
+ label: _labelSetting,
+ xAxis: yaxisCount > 0 || yaxisExtList.length === 0 ? false : xAxis,
+ yAxis: yAxisExt,
+ }
+ }
+ return this.setSizeSetting(setting);
+ },
+
setSizeSetting(setting) {
let customAttr = undefined;
if (this.chart.customAttr) {
@@ -1044,7 +1074,7 @@ export default {
},
checkSelected(param) {
return (this.linkageActiveParam.name === param.name || (this.linkageActiveParam.name === 'NO_DATA' && !param.name)) &&
- (this.linkageActiveParam.category === param.category)
+ (this.linkageActiveParam.category === param.category)
},
trackClick(trackAction) {
From 0c8a50ae410797c5cea7c6a8d2315bffcfd58218 Mon Sep 17 00:00:00 2001
From: junjun
Date: Tue, 5 Dec 2023 10:45:56 +0800
Subject: [PATCH 4/9] =?UTF-8?q?feat:=20=E8=AE=A1=E7=AE=97=E5=AD=97?=
=?UTF-8?q?=E6=AE=B5=E6=94=AF=E6=8C=81=E4=BA=8C=E6=AC=A1=E5=BC=95=E7=94=A8?=
=?UTF-8?q?=20#5996?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../engine/doris/DorisQueryProvider.java | 67 +++++++++++++-----
.../engine/mysql/MysqlQueryProvider.java | 67 +++++++++++++-----
.../provider/query/ck/CKQueryProvider.java | 67 +++++++++++++-----
.../provider/query/db2/Db2QueryProvider.java | 67 +++++++++++++-----
.../provider/query/es/EsQueryProvider.java | 65 ++++++++++++-----
.../query/hive/HiveQueryProvider.java | 67 +++++++++++++-----
.../query/impala/ImpalaQueryProvider.java | 66 +++++++++++++-----
.../query/mongodb/MongoQueryProvider.java | 67 +++++++++++++-----
.../query/mysql/MysqlQueryProvider.java | 67 +++++++++++++-----
.../query/oracle/OracleQueryProvider.java | 67 +++++++++++++-----
.../provider/query/pg/PgQueryProvider.java | 67 +++++++++++++-----
.../query/redshift/RedshiftQueryProvider.java | 65 ++++++++++++-----
.../sqlserver/SqlserverQueryProvider.java | 69 +++++++++++++------
.../resources/i18n/messages_en_US.properties | 4 +-
.../resources/i18n/messages_zh_CN.properties | 3 +-
.../resources/i18n/messages_zh_TW.properties | 4 +-
.../views/chart/view/CalcChartFieldEdit.vue | 16 ++---
.../src/views/dataset/data/CalcFieldEdit.vue | 16 ++---
18 files changed, 646 insertions(+), 265 deletions(-)
diff --git a/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java
index 7d7fd45691..726d8e16dc 100644
--- a/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java
+++ b/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java
@@ -1,6 +1,8 @@
package io.dataease.provider.engine.doris;
import com.alibaba.fastjson.JSONArray;
+import io.dataease.commons.exception.DEException;
+import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.DatasetTableFieldExample;
@@ -197,7 +199,7 @@ public class DorisQueryProvider extends QueryProvider {
if (customWheres != null) wheres.add(customWheres);
if (whereTrees != null) wheres.add(whereTrees);
if (StringUtils.isNotBlank(keyword)) {
- String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
+ String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
wheres.add(keyWhere);
}
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
@@ -1418,27 +1420,54 @@ public class DorisQueryProvider extends QueryProvider {
}
private String calcFieldRegex(String originField, SQLObj tableObj) {
- originField = originField.replaceAll("[\\t\\n\\r]]", "");
- // 正则提取[xxx]
- String regex = "\\[(.*?)]";
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(originField);
- Set ids = new HashSet<>();
- while (matcher.find()) {
- String id = matcher.group(1);
- ids.add(id);
+ try {
+ int i = 0;
+ return buildCalcField(originField, tableObj, i);
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_ref"));
}
- if (CollectionUtils.isEmpty(ids)) {
+ return null;
+ }
+
+ private String buildCalcField(String originField, SQLObj tableObj, int i) throws Exception {
+ try {
+ i++;
+ if (i > 100) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
+ }
+ originField = originField.replaceAll("[\\t\\n\\r]]", "");
+ // 正则提取[xxx]
+ String regex = "\\[(.*?)]";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(originField);
+ Set ids = new HashSet<>();
+ while (matcher.find()) {
+ String id = matcher.group(1);
+ ids.add(id);
+ }
+ if (CollectionUtils.isEmpty(ids)) {
+ return originField;
+ }
+ DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
+ datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
+ List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
+ for (DatasetTableField ele : calcFields) {
+ if (StringUtils.containsIgnoreCase(originField, ele.getId() + "")) {
+ // 计算字段允许二次引用,这里递归查询完整引用链
+ if (Objects.equals(ele.getExtField(), 0)) {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]",
+ String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getDataeaseName()));
+ } else {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]", ele.getOriginName());
+ originField = buildCalcField(originField, tableObj, i);
+ }
+ }
+ }
return originField;
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
}
- DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
- datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
- List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
- for (DatasetTableField ele : calcFields) {
- originField = originField.replaceAll("\\[" + ele.getId() + "]",
- String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getDataeaseName()));
- }
- return originField;
+ return null;
}
private String sqlLimit(String sql, ChartViewWithBLOBs view) {
diff --git a/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java
index 2b79c4571b..82fb97afb6 100644
--- a/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java
+++ b/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java
@@ -1,6 +1,8 @@
package io.dataease.provider.engine.mysql;
import com.alibaba.fastjson.JSONArray;
+import io.dataease.commons.exception.DEException;
+import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.DatasetTableFieldExample;
@@ -167,7 +169,7 @@ public class MysqlQueryProvider extends QueryProvider {
if (customWheres != null) wheres.add(customWheres);
if (whereTrees != null) wheres.add(whereTrees);
if (StringUtils.isNotBlank(keyword)) {
- String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
+ String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
wheres.add(keyWhere);
}
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
@@ -1366,27 +1368,54 @@ public class MysqlQueryProvider extends QueryProvider {
}
private String calcFieldRegex(String originField, SQLObj tableObj) {
- originField = originField.replaceAll("[\\t\\n\\r]]", "");
- // 正则提取[xxx]
- String regex = "\\[(.*?)]";
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(originField);
- Set ids = new HashSet<>();
- while (matcher.find()) {
- String id = matcher.group(1);
- ids.add(id);
+ try {
+ int i = 0;
+ return buildCalcField(originField, tableObj, i);
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_ref"));
}
- if (CollectionUtils.isEmpty(ids)) {
+ return null;
+ }
+
+ private String buildCalcField(String originField, SQLObj tableObj, int i) throws Exception {
+ try {
+ i++;
+ if (i > 100) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
+ }
+ originField = originField.replaceAll("[\\t\\n\\r]]", "");
+ // 正则提取[xxx]
+ String regex = "\\[(.*?)]";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(originField);
+ Set ids = new HashSet<>();
+ while (matcher.find()) {
+ String id = matcher.group(1);
+ ids.add(id);
+ }
+ if (CollectionUtils.isEmpty(ids)) {
+ return originField;
+ }
+ DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
+ datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
+ List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
+ for (DatasetTableField ele : calcFields) {
+ if (StringUtils.containsIgnoreCase(originField, ele.getId() + "")) {
+ // 计算字段允许二次引用,这里递归查询完整引用链
+ if (Objects.equals(ele.getExtField(), 0)) {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]",
+ String.format(MysqlConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getDataeaseName()));
+ } else {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]", ele.getOriginName());
+ originField = buildCalcField(originField, tableObj, i);
+ }
+ }
+ }
return originField;
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
}
- DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
- datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
- List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
- for (DatasetTableField ele : calcFields) {
- originField = originField.replaceAll("\\[" + ele.getId() + "]",
- String.format(MysqlConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getDataeaseName()));
- }
- return originField;
+ return null;
}
private String sqlLimit(String sql, ChartViewWithBLOBs view) {
diff --git a/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java
index 521d1c7a7a..5b582ef804 100644
--- a/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java
+++ b/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java
@@ -1,7 +1,9 @@
package io.dataease.provider.query.ck;
import com.alibaba.fastjson.JSONArray;
+import io.dataease.commons.exception.DEException;
import io.dataease.commons.utils.BeanUtils;
+import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.DatasetTableFieldExample;
@@ -196,7 +198,7 @@ public class CKQueryProvider extends QueryProvider {
if (customWheres != null) wheres.add(customWheres);
if (whereTrees != null) wheres.add(whereTrees);
if (StringUtils.isNotBlank(keyword)) {
- String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
+ String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
wheres.add(keyWhere);
}
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
@@ -1416,27 +1418,54 @@ public class CKQueryProvider extends QueryProvider {
}
private String calcFieldRegex(String originField, SQLObj tableObj) {
- originField = originField.replaceAll("[\\t\\n\\r]]", "");
- // 正则提取[xxx]
- String regex = "\\[(.*?)]";
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(originField);
- Set ids = new HashSet<>();
- while (matcher.find()) {
- String id = matcher.group(1);
- ids.add(id);
+ try {
+ int i = 0;
+ return buildCalcField(originField, tableObj, i);
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_ref"));
}
- if (CollectionUtils.isEmpty(ids)) {
+ return null;
+ }
+
+ private String buildCalcField(String originField, SQLObj tableObj, int i) throws Exception {
+ try {
+ i++;
+ if (i > 100) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
+ }
+ originField = originField.replaceAll("[\\t\\n\\r]]", "");
+ // 正则提取[xxx]
+ String regex = "\\[(.*?)]";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(originField);
+ Set ids = new HashSet<>();
+ while (matcher.find()) {
+ String id = matcher.group(1);
+ ids.add(id);
+ }
+ if (CollectionUtils.isEmpty(ids)) {
+ return originField;
+ }
+ DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
+ datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
+ List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
+ for (DatasetTableField ele : calcFields) {
+ if (StringUtils.containsIgnoreCase(originField, ele.getId() + "")) {
+ // 计算字段允许二次引用,这里递归查询完整引用链
+ if (Objects.equals(ele.getExtField(), 0)) {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]",
+ String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
+ } else {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]", ele.getOriginName());
+ originField = buildCalcField(originField, tableObj, i);
+ }
+ }
+ }
return originField;
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
}
- DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
- datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
- List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
- for (DatasetTableField ele : calcFields) {
- originField = originField.replaceAll("\\[" + ele.getId() + "]",
- String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
- }
- return originField;
+ return null;
}
private String sqlLimit(String sql, ChartViewWithBLOBs view) {
diff --git a/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java
index 545806915d..3e401f1476 100644
--- a/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java
+++ b/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java
@@ -2,7 +2,9 @@ package io.dataease.provider.query.db2;
import com.alibaba.fastjson.JSONArray;
import com.google.gson.Gson;
+import io.dataease.commons.exception.DEException;
import io.dataease.dto.datasource.Db2Configuration;
+import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.DatasetTableFieldExample;
@@ -172,7 +174,7 @@ public class Db2QueryProvider extends QueryProvider {
if (customWheres != null) wheres.add(customWheres);
if (whereTrees != null) wheres.add(whereTrees);
if (StringUtils.isNotBlank(keyword)) {
- String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
+ String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
wheres.add(keyWhere);
}
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
@@ -1404,27 +1406,54 @@ public class Db2QueryProvider extends QueryProvider {
}
private String calcFieldRegex(String originField, SQLObj tableObj) {
- originField = originField.replaceAll("[\\t\\n\\r]]", "");
- // 正则提取[xxx]
- String regex = "\\[(.*?)]";
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(originField);
- Set ids = new HashSet<>();
- while (matcher.find()) {
- String id = matcher.group(1);
- ids.add(id);
+ try {
+ int i = 0;
+ return buildCalcField(originField, tableObj, i);
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_ref"));
}
- if (CollectionUtils.isEmpty(ids)) {
+ return null;
+ }
+
+ private String buildCalcField(String originField, SQLObj tableObj, int i) throws Exception {
+ try {
+ i++;
+ if (i > 100) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
+ }
+ originField = originField.replaceAll("[\\t\\n\\r]]", "");
+ // 正则提取[xxx]
+ String regex = "\\[(.*?)]";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(originField);
+ Set ids = new HashSet<>();
+ while (matcher.find()) {
+ String id = matcher.group(1);
+ ids.add(id);
+ }
+ if (CollectionUtils.isEmpty(ids)) {
+ return originField;
+ }
+ DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
+ datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
+ List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
+ for (DatasetTableField ele : calcFields) {
+ if (StringUtils.containsIgnoreCase(originField, ele.getId() + "")) {
+ // 计算字段允许二次引用,这里递归查询完整引用链
+ if (Objects.equals(ele.getExtField(), 0)) {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]",
+ String.format(Db2Constants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
+ } else {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]", ele.getOriginName());
+ originField = buildCalcField(originField, tableObj, i);
+ }
+ }
+ }
return originField;
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
}
- DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
- datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
- List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
- for (DatasetTableField ele : calcFields) {
- originField = originField.replaceAll("\\[" + ele.getId() + "]",
- String.format(Db2Constants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
- }
- return originField;
+ return null;
}
private String sqlLimit(String sql, ChartViewWithBLOBs view) {
diff --git a/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java
index 062eaaa131..b72cd5348a 100644
--- a/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java
+++ b/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java
@@ -1,6 +1,8 @@
package io.dataease.provider.query.es;
import com.alibaba.fastjson.JSONArray;
+import io.dataease.commons.exception.DEException;
+import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.DatasetTableFieldExample;
@@ -1322,27 +1324,54 @@ public class EsQueryProvider extends QueryProvider {
}
private String calcFieldRegex(String originField, SQLObj tableObj) {
- originField = originField.replaceAll("[\\t\\n\\r]]", "");
- // 正则提取[xxx]
- String regex = "\\[(.*?)]";
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(originField);
- Set ids = new HashSet<>();
- while (matcher.find()) {
- String id = matcher.group(1);
- ids.add(id);
+ try {
+ int i = 0;
+ return buildCalcField(originField, tableObj, i);
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_ref"));
}
- if (CollectionUtils.isEmpty(ids)) {
+ return null;
+ }
+
+ private String buildCalcField(String originField, SQLObj tableObj, int i) throws Exception {
+ try {
+ i++;
+ if (i > 100) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
+ }
+ originField = originField.replaceAll("[\\t\\n\\r]]", "");
+ // 正则提取[xxx]
+ String regex = "\\[(.*?)]";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(originField);
+ Set ids = new HashSet<>();
+ while (matcher.find()) {
+ String id = matcher.group(1);
+ ids.add(id);
+ }
+ if (CollectionUtils.isEmpty(ids)) {
+ return originField;
+ }
+ DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
+ datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
+ List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
+ for (DatasetTableField ele : calcFields) {
+ if (StringUtils.containsIgnoreCase(originField, ele.getId() + "")) {
+ // 计算字段允许二次引用,这里递归查询完整引用链
+ if (Objects.equals(ele.getExtField(), 0)) {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]",
+ String.format(EsSqlLConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
+ } else {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]", ele.getOriginName());
+ originField = buildCalcField(originField, tableObj, i);
+ }
+ }
+ }
return originField;
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
}
- DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
- datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
- List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
- for (DatasetTableField ele : calcFields) {
- originField = originField.replaceAll("\\[" + ele.getId() + "]",
- String.format(EsSqlLConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
- }
- return originField;
+ return null;
}
private String sqlLimit(String sql, ChartViewWithBLOBs view) {
diff --git a/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java
index 8b0cb477d3..2e1510f271 100644
--- a/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java
+++ b/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java
@@ -1,6 +1,8 @@
package io.dataease.provider.query.hive;
import com.alibaba.fastjson.JSONArray;
+import io.dataease.commons.exception.DEException;
+import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.DatasetTableFieldExample;
@@ -153,7 +155,7 @@ public class HiveQueryProvider extends QueryProvider {
if (customWheres != null) wheres.add(customWheres);
if (whereTrees != null) wheres.add(whereTrees);
if (StringUtils.isNotBlank(keyword)) {
- String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
+ String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
wheres.add(keyWhere);
}
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
@@ -1334,27 +1336,54 @@ public class HiveQueryProvider extends QueryProvider {
}
private String calcFieldRegex(String originField, SQLObj tableObj) {
- originField = originField.replaceAll("[\\t\\n\\r]]", "");
- // 正则提取[xxx]
- String regex = "\\[(.*?)]";
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(originField);
- Set ids = new HashSet<>();
- while (matcher.find()) {
- String id = matcher.group(1);
- ids.add(id);
+ try {
+ int i = 0;
+ return buildCalcField(originField, tableObj, i);
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_ref"));
}
- if (CollectionUtils.isEmpty(ids)) {
+ return null;
+ }
+
+ private String buildCalcField(String originField, SQLObj tableObj, int i) throws Exception {
+ try {
+ i++;
+ if (i > 100) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
+ }
+ originField = originField.replaceAll("[\\t\\n\\r]]", "");
+ // 正则提取[xxx]
+ String regex = "\\[(.*?)]";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(originField);
+ Set ids = new HashSet<>();
+ while (matcher.find()) {
+ String id = matcher.group(1);
+ ids.add(id);
+ }
+ if (CollectionUtils.isEmpty(ids)) {
+ return originField;
+ }
+ DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
+ datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
+ List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
+ for (DatasetTableField ele : calcFields) {
+ if (StringUtils.containsIgnoreCase(originField, ele.getId() + "")) {
+ // 计算字段允许二次引用,这里递归查询完整引用链
+ if (Objects.equals(ele.getExtField(), 0)) {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]",
+ String.format(HiveConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
+ } else {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]", ele.getOriginName());
+ originField = buildCalcField(originField, tableObj, i);
+ }
+ }
+ }
return originField;
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
}
- DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
- datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
- List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
- for (DatasetTableField ele : calcFields) {
- originField = originField.replaceAll("\\[" + ele.getId() + "]",
- String.format(HiveConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
- }
- return originField;
+ return null;
}
private String sqlLimit(String sql, ChartViewWithBLOBs view) {
diff --git a/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java
index 39b1a3097a..a008acb38b 100644
--- a/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java
+++ b/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java
@@ -1,6 +1,8 @@
package io.dataease.provider.query.impala;
import com.alibaba.fastjson.JSONArray;
+import io.dataease.commons.exception.DEException;
+import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.DatasetTableFieldExample;
@@ -18,7 +20,6 @@ import io.dataease.plugins.common.request.chart.ChartExtFilterRequest;
import io.dataease.plugins.common.request.permission.DataSetRowPermissionsTreeDTO;
import io.dataease.plugins.common.request.permission.DatasetRowPermissionsTreeItem;
import io.dataease.plugins.datasource.entity.Dateformat;
-import io.dataease.plugins.datasource.entity.PageInfo;
import io.dataease.plugins.datasource.query.QueryProvider;
import io.dataease.plugins.datasource.query.Utils;
import org.apache.commons.collections4.CollectionUtils;
@@ -1306,27 +1307,54 @@ public class ImpalaQueryProvider extends QueryProvider {
}
private String calcFieldRegex(String originField, SQLObj tableObj) {
- originField = originField.replaceAll("[\\t\\n\\r]]", "");
- // 正则提取[xxx]
- String regex = "\\[(.*?)]";
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(originField);
- Set ids = new HashSet<>();
- while (matcher.find()) {
- String id = matcher.group(1);
- ids.add(id);
+ try {
+ int i = 0;
+ return buildCalcField(originField, tableObj, i);
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_ref"));
}
- if (CollectionUtils.isEmpty(ids)) {
+ return null;
+ }
+
+ private String buildCalcField(String originField, SQLObj tableObj, int i) throws Exception {
+ try {
+ i++;
+ if (i > 100) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
+ }
+ originField = originField.replaceAll("[\\t\\n\\r]]", "");
+ // 正则提取[xxx]
+ String regex = "\\[(.*?)]";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(originField);
+ Set ids = new HashSet<>();
+ while (matcher.find()) {
+ String id = matcher.group(1);
+ ids.add(id);
+ }
+ if (CollectionUtils.isEmpty(ids)) {
+ return originField;
+ }
+ DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
+ datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
+ List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
+ for (DatasetTableField ele : calcFields) {
+ if (StringUtils.containsIgnoreCase(originField, ele.getId() + "")) {
+ // 计算字段允许二次引用,这里递归查询完整引用链
+ if (Objects.equals(ele.getExtField(), 0)) {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]",
+ String.format(ImpalaConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
+ } else {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]", ele.getOriginName());
+ originField = buildCalcField(originField, tableObj, i);
+ }
+ }
+ }
return originField;
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
}
- DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
- datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
- List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
- for (DatasetTableField ele : calcFields) {
- originField = originField.replaceAll("\\[" + ele.getId() + "]",
- String.format(ImpalaConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
- }
- return originField;
+ return null;
}
private String sqlLimit(String sql, ChartViewWithBLOBs view) {
diff --git a/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java
index 7743e4d1fa..fd4bb88916 100644
--- a/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java
+++ b/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java
@@ -1,6 +1,8 @@
package io.dataease.provider.query.mongodb;
import com.alibaba.fastjson.JSONArray;
+import io.dataease.commons.exception.DEException;
+import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.DatasetTableFieldExample;
@@ -139,7 +141,7 @@ public class MongoQueryProvider extends QueryProvider {
List wheres = new ArrayList<>();
if (customWheres != null) wheres.add(customWheres);
if (StringUtils.isNotBlank(keyword)) {
- String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
+ String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
wheres.add(keyWhere);
}
if (whereTrees != null) wheres.add(whereTrees);
@@ -1159,27 +1161,54 @@ public class MongoQueryProvider extends QueryProvider {
}
private String calcFieldRegex(String originField, SQLObj tableObj) {
- originField = originField.replaceAll("[\\t\\n\\r]]", "");
- // 正则提取[xxx]
- String regex = "\\[(.*?)]";
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(originField);
- Set ids = new HashSet<>();
- while (matcher.find()) {
- String id = matcher.group(1);
- ids.add(id);
+ try {
+ int i = 0;
+ return buildCalcField(originField, tableObj, i);
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_ref"));
}
- if (CollectionUtils.isEmpty(ids)) {
+ return null;
+ }
+
+ private String buildCalcField(String originField, SQLObj tableObj, int i) throws Exception {
+ try {
+ i++;
+ if (i > 100) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
+ }
+ originField = originField.replaceAll("[\\t\\n\\r]]", "");
+ // 正则提取[xxx]
+ String regex = "\\[(.*?)]";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(originField);
+ Set ids = new HashSet<>();
+ while (matcher.find()) {
+ String id = matcher.group(1);
+ ids.add(id);
+ }
+ if (CollectionUtils.isEmpty(ids)) {
+ return originField;
+ }
+ DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
+ datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
+ List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
+ for (DatasetTableField ele : calcFields) {
+ if (StringUtils.containsIgnoreCase(originField, ele.getId() + "")) {
+ // 计算字段允许二次引用,这里递归查询完整引用链
+ if (Objects.equals(ele.getExtField(), 0)) {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]",
+ String.format(MongoConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
+ } else {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]", ele.getOriginName());
+ originField = buildCalcField(originField, tableObj, i);
+ }
+ }
+ }
return originField;
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
}
- DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
- datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
- List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
- for (DatasetTableField ele : calcFields) {
- originField = originField.replaceAll("\\[" + ele.getId() + "]",
- String.format(MongoConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
- }
- return originField;
+ return null;
}
private String sqlLimit(String sql, ChartViewWithBLOBs view) {
diff --git a/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java
index 6d19c6b574..3b5c414b6d 100644
--- a/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java
+++ b/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java
@@ -1,6 +1,8 @@
package io.dataease.provider.query.mysql;
import com.alibaba.fastjson.JSONArray;
+import io.dataease.commons.exception.DEException;
+import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.DatasetTableFieldExample;
@@ -251,7 +253,7 @@ public class MysqlQueryProvider extends QueryProvider {
if (whereTrees != null) wheres.add(whereTrees);
if (StringUtils.isNotBlank(keyword)) {
- String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
+ String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
wheres.add(keyWhere);
}
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
@@ -1426,27 +1428,54 @@ public class MysqlQueryProvider extends QueryProvider {
}
private String calcFieldRegex(String originField, SQLObj tableObj) {
- originField = originField.replaceAll("[\\t\\n\\r]]", "");
- // 正则提取[xxx]
- String regex = "\\[(.*?)]";
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(originField);
- Set ids = new HashSet<>();
- while (matcher.find()) {
- String id = matcher.group(1);
- ids.add(id);
+ try {
+ int i = 0;
+ return buildCalcField(originField, tableObj, i);
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_ref"));
}
- if (CollectionUtils.isEmpty(ids)) {
+ return null;
+ }
+
+ private String buildCalcField(String originField, SQLObj tableObj, int i) throws Exception {
+ try {
+ i++;
+ if (i > 100) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
+ }
+ originField = originField.replaceAll("[\\t\\n\\r]]", "");
+ // 正则提取[xxx]
+ String regex = "\\[(.*?)]";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(originField);
+ Set ids = new HashSet<>();
+ while (matcher.find()) {
+ String id = matcher.group(1);
+ ids.add(id);
+ }
+ if (CollectionUtils.isEmpty(ids)) {
+ return originField;
+ }
+ DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
+ datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
+ List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
+ for (DatasetTableField ele : calcFields) {
+ if (StringUtils.containsIgnoreCase(originField, ele.getId() + "")) {
+ // 计算字段允许二次引用,这里递归查询完整引用链
+ if (Objects.equals(ele.getExtField(), 0)) {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]",
+ String.format(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
+ } else {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]", ele.getOriginName());
+ originField = buildCalcField(originField, tableObj, i);
+ }
+ }
+ }
return originField;
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
}
- DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
- datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
- List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
- for (DatasetTableField ele : calcFields) {
- originField = originField.replaceAll("\\[" + ele.getId() + "]",
- String.format(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
- }
- return originField;
+ return null;
}
private String sqlLimit(String sql, ChartViewWithBLOBs view) {
diff --git a/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java
index 3fd78c57f7..419cb087fb 100644
--- a/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java
+++ b/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java
@@ -2,7 +2,9 @@ package io.dataease.provider.query.oracle;
import com.alibaba.fastjson.JSONArray;
import com.google.gson.Gson;
+import io.dataease.commons.exception.DEException;
import io.dataease.dto.datasource.OracleConfiguration;
+import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.DatasetTableFieldExample;
@@ -127,7 +129,7 @@ public class OracleQueryProvider extends QueryProvider {
if (customWheres != null) wheres.add(customWheres);
if (whereTrees != null) wheres.add(whereTrees);
if (StringUtils.isNotBlank(keyword)) {
- String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
+ String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
wheres.add(keyWhere);
}
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
@@ -1516,27 +1518,54 @@ public class OracleQueryProvider extends QueryProvider {
}
private String calcFieldRegex(String originField, SQLObj tableObj) {
- originField = originField.replaceAll("[\\t\\n\\r]]", "");
- // 正则提取[xxx]
- String regex = "\\[(.*?)]";
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(originField);
- Set ids = new HashSet<>();
- while (matcher.find()) {
- String id = matcher.group(1);
- ids.add(id);
+ try {
+ int i = 0;
+ return buildCalcField(originField, tableObj, i);
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_ref"));
}
- if (CollectionUtils.isEmpty(ids)) {
+ return null;
+ }
+
+ private String buildCalcField(String originField, SQLObj tableObj, int i) throws Exception {
+ try {
+ i++;
+ if (i > 100) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
+ }
+ originField = originField.replaceAll("[\\t\\n\\r]]", "");
+ // 正则提取[xxx]
+ String regex = "\\[(.*?)]";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(originField);
+ Set ids = new HashSet<>();
+ while (matcher.find()) {
+ String id = matcher.group(1);
+ ids.add(id);
+ }
+ if (CollectionUtils.isEmpty(ids)) {
+ return originField;
+ }
+ DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
+ datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
+ List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
+ for (DatasetTableField ele : calcFields) {
+ if (StringUtils.containsIgnoreCase(originField, ele.getId() + "")) {
+ // 计算字段允许二次引用,这里递归查询完整引用链
+ if (Objects.equals(ele.getExtField(), 0)) {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]",
+ String.format(OracleConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
+ } else {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]", ele.getOriginName());
+ originField = buildCalcField(originField, tableObj, i);
+ }
+ }
+ }
return originField;
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
}
- DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
- datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
- List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
- for (DatasetTableField ele : calcFields) {
- originField = originField.replaceAll("\\[" + ele.getId() + "]",
- String.format(OracleConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
- }
- return originField;
+ return null;
}
private String sqlLimit(String sql, ChartViewWithBLOBs view) {
diff --git a/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java
index f0e0b053c4..1f362cef65 100644
--- a/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java
+++ b/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java
@@ -2,6 +2,8 @@ package io.dataease.provider.query.pg;
import com.alibaba.fastjson.JSONArray;
import com.google.gson.Gson;
+import io.dataease.commons.exception.DEException;
+import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.DatasetTableFieldExample;
@@ -180,7 +182,7 @@ public class PgQueryProvider extends QueryProvider {
List wheres = new ArrayList<>();
if (customWheres != null) wheres.add(customWheres);
if (StringUtils.isNotBlank(keyword)) {
- String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
+ String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
wheres.add(keyWhere);
}
if (whereTrees != null) wheres.add(whereTrees);
@@ -1332,27 +1334,54 @@ public class PgQueryProvider extends QueryProvider {
}
private String calcFieldRegex(String originField, SQLObj tableObj) {
- originField = originField.replaceAll("[\\t\\n\\r]]", "");
- // 正则提取[xxx]
- String regex = "\\[(.*?)]";
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(originField);
- Set ids = new HashSet<>();
- while (matcher.find()) {
- String id = matcher.group(1);
- ids.add(id);
+ try {
+ int i = 0;
+ return buildCalcField(originField, tableObj, i);
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_ref"));
}
- if (CollectionUtils.isEmpty(ids)) {
+ return null;
+ }
+
+ private String buildCalcField(String originField, SQLObj tableObj, int i) throws Exception {
+ try {
+ i++;
+ if (i > 100) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
+ }
+ originField = originField.replaceAll("[\\t\\n\\r]]", "");
+ // 正则提取[xxx]
+ String regex = "\\[(.*?)]";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(originField);
+ Set ids = new HashSet<>();
+ while (matcher.find()) {
+ String id = matcher.group(1);
+ ids.add(id);
+ }
+ if (CollectionUtils.isEmpty(ids)) {
+ return originField;
+ }
+ DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
+ datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
+ List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
+ for (DatasetTableField ele : calcFields) {
+ if (StringUtils.containsIgnoreCase(originField, ele.getId() + "")) {
+ // 计算字段允许二次引用,这里递归查询完整引用链
+ if (Objects.equals(ele.getExtField(), 0)) {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]",
+ String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
+ } else {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]", ele.getOriginName());
+ originField = buildCalcField(originField, tableObj, i);
+ }
+ }
+ }
return originField;
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
}
- DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
- datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
- List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
- for (DatasetTableField ele : calcFields) {
- originField = originField.replaceAll("\\[" + ele.getId() + "]",
- String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
- }
- return originField;
+ return null;
}
private String sqlLimit(String sql, ChartViewWithBLOBs view) {
diff --git a/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java
index 8c4a0c348f..07bab6ddfd 100644
--- a/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java
+++ b/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java
@@ -2,6 +2,8 @@ package io.dataease.provider.query.redshift;
import com.alibaba.fastjson.JSONArray;
import com.google.gson.Gson;
+import io.dataease.commons.exception.DEException;
+import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.DatasetTableFieldExample;
@@ -1313,27 +1315,54 @@ public class RedshiftQueryProvider extends QueryProvider {
}
private String calcFieldRegex(String originField, SQLObj tableObj) {
- originField = originField.replaceAll("[\\t\\n\\r]]", "");
- // 正则提取[xxx]
- String regex = "\\[(.*?)]";
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(originField);
- Set ids = new HashSet<>();
- while (matcher.find()) {
- String id = matcher.group(1);
- ids.add(id);
+ try {
+ int i = 0;
+ return buildCalcField(originField, tableObj, i);
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_ref"));
}
- if (CollectionUtils.isEmpty(ids)) {
+ return null;
+ }
+
+ private String buildCalcField(String originField, SQLObj tableObj, int i) throws Exception {
+ try {
+ i++;
+ if (i > 100) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
+ }
+ originField = originField.replaceAll("[\\t\\n\\r]]", "");
+ // 正则提取[xxx]
+ String regex = "\\[(.*?)]";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(originField);
+ Set ids = new HashSet<>();
+ while (matcher.find()) {
+ String id = matcher.group(1);
+ ids.add(id);
+ }
+ if (CollectionUtils.isEmpty(ids)) {
+ return originField;
+ }
+ DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
+ datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
+ List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
+ for (DatasetTableField ele : calcFields) {
+ if (StringUtils.containsIgnoreCase(originField, ele.getId() + "")) {
+ // 计算字段允许二次引用,这里递归查询完整引用链
+ if (Objects.equals(ele.getExtField(), 0)) {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]",
+ String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
+ } else {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]", ele.getOriginName());
+ originField = buildCalcField(originField, tableObj, i);
+ }
+ }
+ }
return originField;
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
}
- DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
- datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
- List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
- for (DatasetTableField ele : calcFields) {
- originField = originField.replaceAll("\\[" + ele.getId() + "]",
- String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
- }
- return originField;
+ return null;
}
private String sqlLimit(String sql, ChartViewWithBLOBs view) {
diff --git a/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java
index 3d98e2c9cb..12573c2e33 100644
--- a/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java
+++ b/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java
@@ -2,6 +2,8 @@ package io.dataease.provider.query.sqlserver;
import com.alibaba.fastjson.JSONArray;
import com.google.gson.Gson;
+import io.dataease.commons.exception.DEException;
+import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs;
import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.plugins.common.base.domain.DatasetTableFieldExample;
@@ -269,7 +271,7 @@ public class SqlserverQueryProvider extends QueryProvider {
if (customWheres != null) wheres.add(customWheres);
if (whereTrees != null) wheres.add(whereTrees);
if (StringUtils.isNotBlank(keyword)) {
- String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")";
+ String keyWhere = "(" + transKeywordFilterList(tableObj, xFields, keyword) + ")";
wheres.add(keyWhere);
}
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
@@ -282,7 +284,7 @@ public class SqlserverQueryProvider extends QueryProvider {
xOrders.add(order);
}
}
- if(ObjectUtils.isNotEmpty(limit)){
+ if (ObjectUtils.isNotEmpty(limit)) {
SQLObj limitFiled = SQLObj.builder().limitFiled(" top " + limit + " ").build();
st_sql.add("limitFiled", limitFiled);
}
@@ -1488,27 +1490,54 @@ public class SqlserverQueryProvider extends QueryProvider {
}
private String calcFieldRegex(String originField, SQLObj tableObj) {
- originField = originField.replaceAll("[\\t\\n\\r]]", "");
- // 正则提取[xxx]
- String regex = "\\[(.*?)]";
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(originField);
- Set ids = new HashSet<>();
- while (matcher.find()) {
- String id = matcher.group(1);
- ids.add(id);
+ try {
+ int i = 0;
+ return buildCalcField(originField, tableObj, i);
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_ref"));
}
- if (CollectionUtils.isEmpty(ids)) {
+ return null;
+ }
+
+ private String buildCalcField(String originField, SQLObj tableObj, int i) throws Exception {
+ try {
+ i++;
+ if (i > 100) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
+ }
+ originField = originField.replaceAll("[\\t\\n\\r]]", "");
+ // 正则提取[xxx]
+ String regex = "\\[(.*?)]";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(originField);
+ Set ids = new HashSet<>();
+ while (matcher.find()) {
+ String id = matcher.group(1);
+ ids.add(id);
+ }
+ if (CollectionUtils.isEmpty(ids)) {
+ return originField;
+ }
+ DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
+ datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
+ List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
+ for (DatasetTableField ele : calcFields) {
+ if (StringUtils.containsIgnoreCase(originField, ele.getId() + "")) {
+ // 计算字段允许二次引用,这里递归查询完整引用链
+ if (Objects.equals(ele.getExtField(), 0)) {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]",
+ String.format(SqlServerSQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
+ } else {
+ originField = originField.replaceAll("\\[" + ele.getId() + "]", ele.getOriginName());
+ originField = buildCalcField(originField, tableObj, i);
+ }
+ }
+ }
return originField;
+ } catch (Exception e) {
+ DEException.throwException(Translator.get("i18n_field_circular_error"));
}
- DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
- datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
- List calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
- for (DatasetTableField ele : calcFields) {
- originField = originField.replaceAll("\\[" + ele.getId() + "]",
- String.format(SqlServerSQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
- }
- return originField;
+ return null;
}
@Override
diff --git a/core/backend/src/main/resources/i18n/messages_en_US.properties b/core/backend/src/main/resources/i18n/messages_en_US.properties
index 48c85b8c64..2fee75cb4d 100644
--- a/core/backend/src/main/resources/i18n/messages_en_US.properties
+++ b/core/backend/src/main/resources/i18n/messages_en_US.properties
@@ -277,4 +277,6 @@ I18N_PANEL_PDF_TEMPLATE_ONLY_PIC=Default template only screenshot
\u8FB9\u684610=Border 10
I18n_name_cant_empty=Name can not be empty!
I18n_del_admin_tips=Forbidden to delete the admin account
-I18N_NO_DRIVER_PERMISSION=Do not have permissions!
\ No newline at end of file
+I18N_NO_DRIVER_PERMISSION=Do not have permissions!
+i18n_field_circular_error=Field error
+i18n_field_circular_ref=Field has Circular Reference
diff --git a/core/backend/src/main/resources/i18n/messages_zh_CN.properties b/core/backend/src/main/resources/i18n/messages_zh_CN.properties
index ff5de5ab72..7a5e436e86 100644
--- a/core/backend/src/main/resources/i18n/messages_zh_CN.properties
+++ b/core/backend/src/main/resources/i18n/messages_zh_CN.properties
@@ -268,4 +268,5 @@ I18N_PANEL_PDF_TEMPLATE_ONLY_PIC=\u9ED8\u8BA4\u6A21\u677F(\u53EA\u622A\u56FE)
I18n_name_cant_empty=\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\uFF01
I18n_del_admin_tips=\u7981\u6B62\u5220\u9664admin\u8D26\u53F7
I18N_NO_DRIVER_PERMISSION=\u6ca1\u6709\u6743\u9650\uff01
-
+i18n_field_circular_error=\u5B57\u6BB5\u89E3\u6790\u9519\u8BEF\uFF0C\u53EF\u80FD\u539F\u56E0\uFF1A\u5B57\u6BB5\u5DF2\u5220\u9664\u3001\u8BA1\u7B97\u5B57\u6BB5\u5F15\u7528\u5C42\u7EA7\u8FC7\u6DF1\u3001\u5B58\u5728\u5FAA\u73AF\u5F15\u7528\u7B49\uFF0C\u8BF7\u68C0\u67E5\u8868\u8282\u70B9\u548C\u5B57\u6BB5\u5E76\u91CD\u65B0\u7F16\u8F91\u3002
+i18n_field_circular_ref=\u5B57\u6BB5\u5B58\u5728\u5FAA\u73AF\u5F15\u7528
diff --git a/core/backend/src/main/resources/i18n/messages_zh_TW.properties b/core/backend/src/main/resources/i18n/messages_zh_TW.properties
index 9898eb0b13..1489026291 100644
--- a/core/backend/src/main/resources/i18n/messages_zh_TW.properties
+++ b/core/backend/src/main/resources/i18n/messages_zh_TW.properties
@@ -273,4 +273,6 @@ I18N_PANEL_PDF_TEMPLATE_ONLY_PIC=\u9ED8\u8A8D\u6A21\u677F(\u53EA\u622A\u5716)
\u8FB9\u684610=\u908A\u6846 10
I18n_name_cant_empty=\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A\uFF01
I18n_del_admin_tips=\u7981\u6B62\u522A\u9664admin\u8CEC\u865F
-I18N_NO_DRIVER_PERMISSION=\u6c92\u6709\u8a31\u53ef\u6b0a\uff01
\ No newline at end of file
+I18N_NO_DRIVER_PERMISSION=\u6c92\u6709\u8a31\u53ef\u6b0a\uff01
+i18n_field_circular_error=\u5B57\u6BB5\u89E3\u6790\u932F\u8AA4\uFF0C\u53EF\u80FD\u539F\u56E0\uFF1A\u5B57\u6BB5\u5DF2\u522A\u9664\u3001\u8A08\u7B97\u5B57\u6BB5\u5F15\u7528\u5C64\u7D1A\u904E\u6DF1\u3001\u5B58\u5728\u5FAA\u74B0\u5F15\u7528\u7B49\uFF0C\u8ACB\u6AA2\u67E5\u8868\u7BC0\u9EDE\u548C\u5B57\u6BB5\u4E26\u91CD\u65B0\u7DE8\u8F2F\u3002
+i18n_field_circular_ref=\u5B57\u6BB5\u5B58\u5728\u5FAA\u74B0\u5F15\u7528
diff --git a/core/frontend/src/views/chart/view/CalcChartFieldEdit.vue b/core/frontend/src/views/chart/view/CalcChartFieldEdit.vue
index 0fdd7df17a..d70b83ac56 100644
--- a/core/frontend/src/views/chart/view/CalcChartFieldEdit.vue
+++ b/core/frontend/src/views/chart/view/CalcChartFieldEdit.vue
@@ -415,16 +415,16 @@ export default {
deep: true
},
'tableFields': function() {
- this.dimensionData = JSON.parse(JSON.stringify(this.tableFields.dimensionList)).filter(ele => ele.extField === 0)
- this.quotaData = JSON.parse(JSON.stringify(this.tableFields.quotaList)).filter(ele => ele.extField === 0)
+ this.dimensionData = JSON.parse(JSON.stringify(this.tableFields.dimensionList))
+ this.quotaData = JSON.parse(JSON.stringify(this.tableFields.quotaList))
},
'searchField': function(val) {
if (val && val !== '') {
- this.dimensionData = JSON.parse(JSON.stringify(this.tableFields.dimensionList.filter(ele => ele.name.toLocaleLowerCase().includes(val.toLocaleLowerCase()) && ele.extField === 0)))
- this.quotaData = JSON.parse(JSON.stringify(this.tableFields.quotaList.filter(ele => ele.name.toLocaleLowerCase().includes(val.toLocaleLowerCase()) && ele.extField === 0)))
+ this.dimensionData = JSON.parse(JSON.stringify(this.tableFields.dimensionList.filter(ele => ele.name.toLocaleLowerCase().includes(val.toLocaleLowerCase()))))
+ this.quotaData = JSON.parse(JSON.stringify(this.tableFields.quotaList.filter(ele => ele.name.toLocaleLowerCase().includes(val.toLocaleLowerCase()))))
} else {
- this.dimensionData = JSON.parse(JSON.stringify(this.tableFields.dimensionList)).filter(ele => ele.extField === 0)
- this.quotaData = JSON.parse(JSON.stringify(this.tableFields.quotaList)).filter(ele => ele.extField === 0)
+ this.dimensionData = JSON.parse(JSON.stringify(this.tableFields.dimensionList))
+ this.quotaData = JSON.parse(JSON.stringify(this.tableFields.quotaList))
}
},
'searchFunction': function(val) {
@@ -572,8 +572,8 @@ export default {
this.tableFields.dimensionListData = JSON.parse(JSON.stringify(this.tableFields.dimensionList))
this.tableFields.quotaListData = JSON.parse(JSON.stringify(this.tableFields.quotaList))
- this.dimensionData = JSON.parse(JSON.stringify(this.tableFields.dimensionList)).filter(ele => ele.extField === 0)
- this.quotaData = JSON.parse(JSON.stringify(this.tableFields.quotaList)).filter(ele => ele.extField === 0)
+ this.dimensionData = JSON.parse(JSON.stringify(this.tableFields.dimensionList))
+ this.quotaData = JSON.parse(JSON.stringify(this.tableFields.quotaList))
this.initField()
})
diff --git a/core/frontend/src/views/dataset/data/CalcFieldEdit.vue b/core/frontend/src/views/dataset/data/CalcFieldEdit.vue
index c741f4a719..bc2219e963 100644
--- a/core/frontend/src/views/dataset/data/CalcFieldEdit.vue
+++ b/core/frontend/src/views/dataset/data/CalcFieldEdit.vue
@@ -392,10 +392,10 @@ export default {
tableFields: function() {
this.dimensionData = JSON.parse(
JSON.stringify(this.tableFields.dimensionList)
- ).filter((ele) => ele.extField === 0)
+ )
this.quotaData = JSON.parse(
JSON.stringify(this.tableFields.quotaList)
- ).filter((ele) => ele.extField === 0)
+ )
},
searchField: function(val) {
if (val && val !== '') {
@@ -405,7 +405,7 @@ export default {
(ele) =>
ele.name
.toLocaleLowerCase()
- .includes(val.toLocaleLowerCase()) && ele.extField === 0
+ .includes(val.toLocaleLowerCase())
)
)
)
@@ -415,17 +415,17 @@ export default {
(ele) =>
ele.name
.toLocaleLowerCase()
- .includes(val.toLocaleLowerCase()) && ele.extField === 0
+ .includes(val.toLocaleLowerCase())
)
)
)
} else {
this.dimensionData = JSON.parse(
JSON.stringify(this.tableFields.dimensionList)
- ).filter((ele) => ele.extField === 0)
+ )
this.quotaData = JSON.parse(
JSON.stringify(this.tableFields.quotaList)
- ).filter((ele) => ele.extField === 0)
+ )
}
},
searchFunction: function(val) {
@@ -452,10 +452,10 @@ export default {
this.initFunctions()
this.dimensionData = JSON.parse(
JSON.stringify(this.tableFields.dimensionList)
- ).filter((ele) => ele.extField === 0)
+ )
this.quotaData = JSON.parse(
JSON.stringify(this.tableFields.quotaList)
- ).filter((ele) => ele.extField === 0)
+ )
this.initField()
},
methods: {
From cebad4d908708fb48ebbeaa9776f76ed656007dd Mon Sep 17 00:00:00 2001
From: wangjiahao <1522128093@qq.com>
Date: Tue, 5 Dec 2023 11:17:56 +0800
Subject: [PATCH 5/9] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=A6=96=E9=A1=B5?=
=?UTF-8?q?=E6=9C=80=E6=96=B0=E5=8A=A8=E6=80=81=E8=B7=B3=E8=BD=AC=E9=93=BE?=
=?UTF-8?q?=E6=8E=A5=E4=B8=8D=E6=AD=A3=E7=A1=AE=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/io/dataease/service/wizard/ReptileService.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/core/backend/src/main/java/io/dataease/service/wizard/ReptileService.java b/core/backend/src/main/java/io/dataease/service/wizard/ReptileService.java
index bc2b86bb5b..9cc8e59a49 100644
--- a/core/backend/src/main/java/io/dataease/service/wizard/ReptileService.java
+++ b/core/backend/src/main/java/io/dataease/service/wizard/ReptileService.java
@@ -18,6 +18,8 @@ import java.util.*;
@Service
public class ReptileService {
String blogUrl = "https://blog.fit2cloud.com/categories/dataease";
+
+ String blogBaseUrl = "https://blog.fit2cloud.com";
//获取最新的前几条数据
private static int infoCount=5;
@@ -33,7 +35,7 @@ public class ReptileService {
Element info = elementsContent.get(i).children().get(0);
Map infoMap = new HashMap();
infoMap.put("title",info.attr("title"));
- infoMap.put("href",info.attr("href"));
+ infoMap.put("href",blogBaseUrl + info.attr("href"));
result.add(infoMap);
}
} catch (Exception e) {
From 3cf950cb84108efc29df1df7db721083369e2e7b Mon Sep 17 00:00:00 2001
From: fit2cloud-chenyw
Date: Tue, 5 Dec 2023 11:43:10 +0800
Subject: [PATCH 6/9] =?UTF-8?q?fix:=20=E7=AC=A6=E5=8F=B7=E5=9C=B0=E5=9B=BE?=
=?UTF-8?q?=E6=A0=87=E7=AD=BE=E6=8F=90=E7=A4=BA=E6=9C=AA=E5=8E=BB=E9=87=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../official/handler/SymbolMapRSHandler.java | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/extensions/dataease-extensions-view/view-symbolmap/view-symbolmap-backend/src/main/java/io/dataease/plugins/view/official/handler/SymbolMapRSHandler.java b/extensions/dataease-extensions-view/view-symbolmap/view-symbolmap-backend/src/main/java/io/dataease/plugins/view/official/handler/SymbolMapRSHandler.java
index 3c83a67450..018efca7a9 100644
--- a/extensions/dataease-extensions-view/view-symbolmap/view-symbolmap-backend/src/main/java/io/dataease/plugins/view/official/handler/SymbolMapRSHandler.java
+++ b/extensions/dataease-extensions-view/view-symbolmap/view-symbolmap-backend/src/main/java/io/dataease/plugins/view/official/handler/SymbolMapRSHandler.java
@@ -11,10 +11,8 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
@@ -124,7 +122,7 @@ public class SymbolMapRSHandler implements PluginViewRSHandler