From 12e009ece8fdf8b181cd784deaafead8890db2c0 Mon Sep 17 00:00:00 2001 From: junjun Date: Mon, 18 Mar 2024 14:14:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE):=20ClickHouse,=20Oracl?= =?UTF-8?q?e=E6=94=AF=E6=8C=81=E5=B9=B4=E5=AD=A3=E5=BA=A6=E3=80=81?= =?UTF-8?q?=E5=B9=B4=E5=91=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../provider/query/ck/CKQueryProvider.java | 52 +++++++++++++++++-- .../query/oracle/OracleQueryProvider.java | 4 ++ .../components/dragItem/DimensionExtItem.vue | 2 + .../components/dragItem/DimensionItem.vue | 2 + .../constants/datasource/CKConstants.java | 5 ++ 5 files changed, 61 insertions(+), 4 deletions(-) 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 6efd58a26a..6be04e0b09 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 @@ -1427,7 +1427,17 @@ public class CKQueryProvider extends QueryProvider { if (field.getDeType() == DeTypeConstants.DE_TIME) { String format = transDateFormat(request.getDateStyle(), request.getDatePattern()); if (field.getDeExtractType() == DeTypeConstants.DE_STRING || field.getDeExtractType() == 5) { - whereName = String.format(CKConstants.formatDateTime, String.format(CKConstants.toDateTime, originName), format); + if (StringUtils.equalsIgnoreCase(request.getDateStyle(), "y_Q")) { + whereName = String.format(format, + String.format(CKConstants.toYear, "toDate(" + originName + ")"), + String.format(CKConstants.toQuarter, "toDate(" + originName + ")")); + } else if (StringUtils.equalsIgnoreCase(request.getDateStyle(), "y_W")) { + whereName = String.format(format, + String.format(CKConstants.toYear, "toDate(" + originName + ")"), + String.format(CKConstants.toWeek, "toDate(" + originName + ")")); + } else { + whereName = String.format(CKConstants.formatDateTime, String.format(CKConstants.toDateTime, originName), format); + } } if (field.getDeExtractType() == DeTypeConstants.DE_FLOAT || field.getDeExtractType() == DeTypeConstants.DE_FLOAT || field.getDeExtractType() == 4) { String cast = String.format(CKConstants.toFloat64, originName); @@ -1540,8 +1550,12 @@ public class CKQueryProvider extends QueryProvider { switch (dateStyle) { case "y": return "%Y"; + case "y_Q": + return "CONCAT(%s,'" + split + "','Q',%s)"; case "y_M": return "%Y" + split + "%m"; + case "y_W": + return "CONCAT(%s,'" + split + "','W',%s)"; case "y_M_d": return "%Y" + split + "%m" + split + "%d"; case "H_m_s": @@ -1568,7 +1582,17 @@ public class CKQueryProvider extends QueryProvider { } } else if (x.getDeType() == DeTypeConstants.DE_TIME) { String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); - fieldName = String.format(CKConstants.formatDateTime, originField, format); + if (StringUtils.equalsIgnoreCase(x.getDateStyle(), "y_Q")) { + fieldName = String.format(format, + String.format(CKConstants.toYear, "toDate(" + originField + ")"), + String.format(CKConstants.toQuarter, "toDate(" + originField + ")")); + } else if (StringUtils.equalsIgnoreCase(x.getDateStyle(), "y_W")) { + fieldName = String.format(format, + String.format(CKConstants.toYear, "toDate(" + originField + ")"), + String.format(CKConstants.toWeek, "toDate(" + originField + ")")); + } else { + fieldName = String.format(CKConstants.formatDateTime, originField, format); + } } else { fieldName = originField; } @@ -1576,9 +1600,29 @@ public class CKQueryProvider extends QueryProvider { if (x.getDeType() == DeTypeConstants.DE_TIME) { String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); if (x.getDeExtractType() == DeTypeConstants.DE_STRING) { - fieldName = String.format(CKConstants.formatDateTime, String.format(CKConstants.toDateTime, originField), format); + if (StringUtils.equalsIgnoreCase(x.getDateStyle(), "y_Q")) { + fieldName = String.format(format, + String.format(CKConstants.toYear, "toDate(" + originField + ")"), + String.format(CKConstants.toQuarter, "toDate(" + originField + ")")); + } else if (StringUtils.equalsIgnoreCase(x.getDateStyle(), "y_W")) { + fieldName = String.format(format, + String.format(CKConstants.toYear, "toDate(" + originField + ")"), + String.format(CKConstants.toWeek, "toDate(" + originField + ")")); + } else { + fieldName = String.format(CKConstants.formatDateTime, String.format(CKConstants.toDateTime, originField), format); + } } else { - fieldName = String.format(CKConstants.formatDateTime, String.format(CKConstants.toDateTime, String.format(CKConstants.toFloat64, originField)), format); + if (StringUtils.equalsIgnoreCase(x.getDateStyle(), "y_Q")) { + fieldName = String.format(format, + String.format(CKConstants.toYear, "toDate(" + originField + ")"), + String.format(CKConstants.toQuarter, "toDate(" + originField + ")")); + } else if (StringUtils.equalsIgnoreCase(x.getDateStyle(), "y_W")) { + fieldName = String.format(format, + String.format(CKConstants.toYear, "toDate(" + originField + ")"), + String.format(CKConstants.toWeek, "toDate(" + originField + ")")); + } else { + fieldName = String.format(CKConstants.formatDateTime, String.format(CKConstants.toDateTime, String.format(CKConstants.toFloat64, originField)), format); + } } } else { if (x.getDeType() == DeTypeConstants.DE_INT) { 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 4e3a129a92..5e6e02dbf4 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 @@ -1604,8 +1604,12 @@ public class OracleQueryProvider extends QueryProvider { switch (dateStyle) { case "y": return "YYYY"; + case "y_Q": + return "YYYY" + split + "\"Q\"Q"; case "y_M": return "YYYY" + split + "MM"; + case "y_W": + return "YYYY" + split + "\"W\"IW"; case "y_M_d": return "YYYY" + split + "MM" + split + "DD"; case "H_m_s": diff --git a/core/frontend/src/views/chart/components/dragItem/DimensionExtItem.vue b/core/frontend/src/views/chart/components/dragItem/DimensionExtItem.vue index 2f79ebbd9b..ddbb7ad1ee 100644 --- a/core/frontend/src/views/chart/components/dragItem/DimensionExtItem.vue +++ b/core/frontend/src/views/chart/components/dragItem/DimensionExtItem.vue @@ -335,6 +335,8 @@ export default { this.showDateExt = (this.chart.datasourceType === 'mysql' || this.chart.datasourceType === 'ds_doris' || this.chart.datasourceType === 'StarRocks' || + this.chart.datasourceType === 'ck' || + this.chart.datasourceType === 'oracle' || this.chart.datasetMode === 1) && this.chart.type !== 'bar-time-range' } else { this.showDateExt = false diff --git a/core/frontend/src/views/chart/components/dragItem/DimensionItem.vue b/core/frontend/src/views/chart/components/dragItem/DimensionItem.vue index 85219b95fe..5e675efb28 100644 --- a/core/frontend/src/views/chart/components/dragItem/DimensionItem.vue +++ b/core/frontend/src/views/chart/components/dragItem/DimensionItem.vue @@ -356,6 +356,8 @@ export default { this.showDateExt = this.chart.datasourceType === 'mysql' || this.chart.datasourceType === 'ds_doris' || this.chart.datasourceType === 'StarRocks' || + this.chart.datasourceType === 'ck' || + this.chart.datasourceType === 'oracle' || this.chart.datasetMode === 1 } else { this.showDateExt = false diff --git a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/constants/datasource/CKConstants.java b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/constants/datasource/CKConstants.java index eb9fc6ae5e..420c273802 100644 --- a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/constants/datasource/CKConstants.java +++ b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/constants/datasource/CKConstants.java @@ -40,5 +40,10 @@ public class CKConstants extends SQLConstants { public static final String GROUP_CONCAT = "arrayStringConcat(groupArray(%s), ',')"; + public static final String toYear = "toYear(%s)"; + + public static final String toWeek = "toWeek(%s, 5)"; + + public static final String toQuarter = "toQuarter(%s)"; }