diff --git a/core/core-backend/pom.xml b/core/core-backend/pom.xml
index f648cd5038..0c2596d5a1 100644
--- a/core/core-backend/pom.xml
+++ b/core/core-backend/pom.xml
@@ -38,23 +38,6 @@
com.mysql
mysql-connector-j
-
-
- org.apache.calcite
- calcite-core
- ${calcite-core.version}
-
-
- com.google.guava
- guava
-
-
- commons-io
- commons-io
-
-
- de
-
org.apache.commons
commons-dbcp2
diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/DefaultChartHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/DefaultChartHandler.java
index a648b96ef9..3cbfb42dd9 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/DefaultChartHandler.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/DefaultChartHandler.java
@@ -15,9 +15,9 @@ import io.dataease.engine.utils.Utils;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasourceRequest;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.*;
-import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.plugin.AbstractChartPlugin;
import io.dataease.extensions.view.util.ChartDataUtil;
import io.dataease.extensions.view.util.FieldUtil;
diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/YoyChartHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/YoyChartHandler.java
index f1be3aa2ba..73b4c61f39 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/YoyChartHandler.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/YoyChartHandler.java
@@ -8,9 +8,9 @@ import io.dataease.engine.trans.ExtWhere2Str;
import io.dataease.engine.utils.Utils;
import io.dataease.extensions.datasource.dto.DatasourceRequest;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.*;
-import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.util.FieldUtil;
import io.dataease.utils.JsonUtil;
import org.apache.commons.lang3.StringUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/bar/BarHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/bar/BarHandler.java
index fc2af950ed..985c85307a 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/bar/BarHandler.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/bar/BarHandler.java
@@ -4,9 +4,9 @@ import io.dataease.chart.charts.impl.YoyChartHandler;
import io.dataease.engine.utils.Utils;
import io.dataease.extensions.datasource.dto.DatasourceRequest;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.*;
-import io.dataease.extensions.view.model.SQLMeta;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Component;
diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/bar/RangeBarHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/bar/RangeBarHandler.java
index f972390cb9..8ebe6be1d6 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/bar/RangeBarHandler.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/bar/RangeBarHandler.java
@@ -2,9 +2,9 @@ package io.dataease.chart.charts.impl.bar;
import io.dataease.chart.charts.impl.YoyChartHandler;
import io.dataease.chart.utils.ChartDataBuild;
+import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.*;
-import io.dataease.extensions.view.model.SQLMeta;
import lombok.Getter;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/line/LineHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/line/LineHandler.java
index 567100aedf..4d6e814c2c 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/line/LineHandler.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/line/LineHandler.java
@@ -4,9 +4,9 @@ import io.dataease.chart.charts.impl.YoyChartHandler;
import io.dataease.chart.utils.ChartDataBuild;
import io.dataease.extensions.datasource.dto.DatasourceRequest;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.*;
-import io.dataease.extensions.view.model.SQLMeta;
import lombok.Getter;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Component;
diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/line/StackAreaHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/line/StackAreaHandler.java
index 1c3cfae753..d7f4c8ed69 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/line/StackAreaHandler.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/line/StackAreaHandler.java
@@ -5,9 +5,9 @@ import io.dataease.chart.utils.ChartDataBuild;
import io.dataease.engine.utils.Utils;
import io.dataease.extensions.datasource.dto.DatasourceRequest;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.*;
-import io.dataease.extensions.view.model.SQLMeta;
import lombok.Getter;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/map/SymbolicMapHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/map/SymbolicMapHandler.java
index 1ed5cf5a2c..467b05148c 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/map/SymbolicMapHandler.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/map/SymbolicMapHandler.java
@@ -9,9 +9,9 @@ import io.dataease.engine.trans.Quota2SQLObj;
import io.dataease.engine.utils.Utils;
import io.dataease.extensions.datasource.dto.DatasourceRequest;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.*;
-import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.util.ChartDataUtil;
import io.dataease.extensions.view.util.FieldUtil;
import io.dataease.utils.BeanUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/MixHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/MixHandler.java
index f04cc6fd52..98a292e318 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/MixHandler.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/mix/MixHandler.java
@@ -5,9 +5,9 @@ import io.dataease.chart.utils.ChartDataBuild;
import io.dataease.engine.utils.Utils;
import io.dataease.extensions.datasource.dto.DatasourceRequest;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.*;
-import io.dataease.extensions.view.model.SQLMeta;
import lombok.Getter;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/NumericalChartHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/NumericalChartHandler.java
index 0da1d30170..59cf7a4928 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/NumericalChartHandler.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/NumericalChartHandler.java
@@ -10,9 +10,9 @@ import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasourceRequest;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.*;
-import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.util.FieldUtil;
import io.dataease.i18n.Translator;
import io.dataease.utils.BeanUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java
index 291e2ad6c3..b0d9feecbd 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/table/TableInfoHandler.java
@@ -8,9 +8,9 @@ import io.dataease.engine.trans.Dimension2SQLObj;
import io.dataease.engine.utils.Utils;
import io.dataease.extensions.datasource.dto.DatasourceRequest;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.*;
-import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.util.ChartDataUtil;
import io.dataease.extensions.view.util.FieldUtil;
import lombok.Getter;
diff --git a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java
index e55f69e960..c44f99c4b3 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java
@@ -20,10 +20,10 @@ import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasourceRequest;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.factory.PluginsChartFactory;
import io.dataease.extensions.view.filter.FilterTreeObj;
-import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.extensions.view.plugin.AbstractChartPlugin;
import io.dataease.extensions.view.util.FieldUtil;
import io.dataease.i18n.Translator;
diff --git a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewManege.java b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewManege.java
index 0b6aac79a8..8938200d42 100644
--- a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewManege.java
+++ b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartViewManege.java
@@ -4,10 +4,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
+import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.view.dto.*;
import io.dataease.extensions.view.filter.FilterTreeObj;
import io.dataease.api.chart.vo.ViewSelectorVO;
-import io.dataease.extensions.view.model.SQLObj;
import io.dataease.chart.dao.auto.entity.CoreChartView;
import io.dataease.chart.dao.auto.mapper.CoreChartViewMapper;
import io.dataease.chart.dao.ext.mapper.ExtChartViewMapper;
diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java
index a42abb6e7e..c1f096ab6e 100644
--- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java
+++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java
@@ -22,20 +22,20 @@ import io.dataease.datasource.manage.EngineManage;
import io.dataease.datasource.utils.DatasourceUtils;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;
-import io.dataease.engine.constant.SqlPlaceholderConstants;
import io.dataease.engine.sql.SQLProvider;
import io.dataease.engine.trans.*;
import io.dataease.engine.utils.SQLUtils;
import io.dataease.engine.utils.Utils;
import io.dataease.exception.DEException;
+import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants;
import io.dataease.extensions.datasource.dto.*;
import io.dataease.extensions.datasource.factory.ProviderFactory;
+import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.ChartExtFilterDTO;
import io.dataease.extensions.view.dto.ChartExtRequest;
import io.dataease.extensions.view.dto.ColumnPermissionItem;
import io.dataease.extensions.view.dto.SqlVariableDetails;
-import io.dataease.extensions.view.model.SQLMeta;
import io.dataease.i18n.Translator;
import io.dataease.utils.AuthUtils;
import io.dataease.utils.BeanUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java
index d3e5ed3b55..ee315bfbe0 100644
--- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java
+++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java
@@ -3,12 +3,12 @@ package io.dataease.dataset.manage;
import io.dataease.extensions.datasource.dto.DatasetTableDTO;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
import io.dataease.extensions.view.dto.ChartExtFilterDTO;
import io.dataease.extensions.view.dto.ChartExtRequest;
import io.dataease.extensions.view.dto.SqlVariableDetails;
import io.dataease.api.dataset.union.*;
-import io.dataease.extensions.view.model.SQLObj;
import io.dataease.api.permissions.auth.dto.BusiPerCheckDTO;
import io.dataease.commons.utils.SqlparserUtils;
import io.dataease.constant.AuthEnum;
diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetTableFieldManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetTableFieldManage.java
index 4be21d5759..96a66e7ce6 100644
--- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetTableFieldManage.java
+++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetTableFieldManage.java
@@ -11,8 +11,8 @@ import io.dataease.engine.func.FunctionConstant;
import io.dataease.engine.utils.Utils;
import io.dataease.exception.DEException;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
+import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.view.dto.ColumnPermissionItem;
-import io.dataease.extensions.view.model.SQLObj;
import io.dataease.i18n.Translator;
import io.dataease.utils.AuthUtils;
import io.dataease.utils.BeanUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/dataset/utils/SqlUtils.java b/core/core-backend/src/main/java/io/dataease/dataset/utils/SqlUtils.java
index 8fa2908066..7da5902fb7 100644
--- a/core/core-backend/src/main/java/io/dataease/dataset/utils/SqlUtils.java
+++ b/core/core-backend/src/main/java/io/dataease/dataset/utils/SqlUtils.java
@@ -1,11 +1,11 @@
package io.dataease.dataset.utils;
import com.google.common.collect.ImmutableList;
-import io.dataease.engine.constant.SqlPlaceholderConstants;
import io.dataease.exception.DEException;
+import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
-import io.dataease.extensions.view.model.SQLMeta;
import org.apache.calcite.config.Lex;
import org.apache.calcite.sql.*;
import org.apache.calcite.sql.dialect.*;
diff --git a/core/core-backend/src/main/java/io/dataease/dataset/utils/TableUtils.java b/core/core-backend/src/main/java/io/dataease/dataset/utils/TableUtils.java
index 35c080208c..d1723c8818 100644
--- a/core/core-backend/src/main/java/io/dataease/dataset/utils/TableUtils.java
+++ b/core/core-backend/src/main/java/io/dataease/dataset/utils/TableUtils.java
@@ -1,8 +1,8 @@
package io.dataease.dataset.utils;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
-import io.dataease.extensions.view.model.SQLObj;
import io.dataease.utils.Md5Utils;
import org.apache.calcite.avatica.util.Quoting;
import org.apache.commons.lang3.StringUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java b/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java
index b490103f14..5918b5d88a 100644
--- a/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java
+++ b/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java
@@ -24,6 +24,7 @@ import org.apache.calcite.adapter.jdbc.JdbcSchema;
import org.apache.calcite.jdbc.CalciteConnection;
import org.apache.calcite.schema.Schema;
import org.apache.calcite.schema.SchemaPlus;
+import org.apache.calcite.sql.SqlDialect;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
@@ -110,26 +111,6 @@ public class CalciteProvider extends Provider {
return tables;
}
- private DatasetTableDTO getTableDesc(DatasourceRequest datasourceRequest, ResultSet resultSet) throws SQLException {
- DatasetTableDTO tableDesc = new DatasetTableDTO();
- tableDesc.setDatasourceId(datasourceRequest.getDatasource().getId());
- tableDesc.setType("db");
- tableDesc.setTableName(resultSet.getString(1));
- if (resultSet.getMetaData().getColumnCount() > 1) {
- tableDesc.setName(resultSet.getString(2));
- } else {
- tableDesc.setName(resultSet.getString(1));
- }
- return tableDesc;
- }
-
- private List getDriver() {
- List drivers = new ArrayList<>();
- Map beansOfType = CommonBeanFactory.getApplicationContext().getBeansOfType((DatasourceConfiguration.class));
- beansOfType.keySet().forEach(key -> drivers.add(beansOfType.get(key).getDriver()));
- return drivers;
- }
-
@Override
public String checkStatus(DatasourceRequest datasourceRequest) throws Exception {
DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(datasourceRequest.getDatasource().getType());
@@ -203,6 +184,151 @@ public class CalciteProvider extends Provider {
return map;
}
+ @Override
+ public List fetchTableField(DatasourceRequest datasourceRequest) throws DEException {
+ List datasetTableFields = new ArrayList<>();
+ DatasourceSchemaDTO datasourceSchemaDTO = datasourceRequest.getDsList().entrySet().iterator().next().getValue();
+ datasourceRequest.setDatasource(datasourceSchemaDTO);
+
+ DatasourceConfiguration datasourceConfiguration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), DatasourceConfiguration.class);
+
+ String table = datasourceRequest.getTable();
+ if (StringUtils.isEmpty(table)) {
+ ResultSet resultSet = null;
+ try (Connection con = getConnection(datasourceRequest.getDatasource());
+ Statement statement = getStatement(con, 30)) {
+ if (DatasourceConfiguration.DatasourceType.valueOf(datasourceSchemaDTO.getType()) == DatasourceConfiguration.DatasourceType.oracle) {
+ statement.executeUpdate("ALTER SESSION SET CURRENT_SCHEMA = " + datasourceConfiguration.getSchema());
+ }
+ resultSet = statement.executeQuery(datasourceRequest.getQuery());
+ datasetTableFields.addAll(getField(resultSet, datasourceRequest));
+ } catch (Exception e) {
+ DEException.throwException(e.getMessage());
+ } finally {
+ if (resultSet != null) {
+ try {
+ resultSet.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ } else {
+ ResultSet resultSet = null;
+ try (Connection con = getConnection(datasourceRequest.getDatasource());
+ Statement statement = getStatement(con, 30)) {
+ if (DatasourceConfiguration.DatasourceType.valueOf(datasourceSchemaDTO.getType()) == DatasourceConfiguration.DatasourceType.oracle) {
+ statement.executeUpdate("ALTER SESSION SET CURRENT_SCHEMA = " + datasourceConfiguration.getSchema());
+ }
+ resultSet = statement.executeQuery(getTableFiledSql(datasourceRequest));
+ while (resultSet.next()) {
+ TableField tableFieldDesc = getTableFieldDesc(datasourceRequest, resultSet);
+ boolean repeat = false;
+ for (TableField ele : datasetTableFields) {
+ if (StringUtils.equalsIgnoreCase(ele.getOriginName(), tableFieldDesc.getOriginName())) {
+ repeat = true;
+ break;
+ }
+ }
+ if (!repeat) {
+ datasetTableFields.add(tableFieldDesc);
+ }
+ }
+ } catch (Exception e) {
+ DEException.throwException(e.getMessage());
+ } finally {
+ if (resultSet != null) {
+ try {
+ resultSet.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ return datasetTableFields;
+ }
+
+ @Override
+ public Connection getConnection(DatasourceDTO coreDatasource) throws DEException {
+ DatasourceConfiguration configuration = null;
+ DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(coreDatasource.getType());
+ switch (datasourceType) {
+ case mysql:
+ case mongo:
+ case StarRocks:
+ case doris:
+ case TiDB:
+ case mariadb:
+ configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Mysql.class);
+ break;
+ case impala:
+ configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Impala.class);
+ break;
+ case sqlServer:
+ configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Sqlserver.class);
+ break;
+ case oracle:
+ configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Oracle.class);
+ break;
+ case db2:
+ configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Db2.class);
+ break;
+ case pg:
+ configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Pg.class);
+ break;
+ case redshift:
+ configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Redshift.class);
+ break;
+ case ck:
+ configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), CK.class);
+ break;
+ case h2:
+ configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), H2.class);
+ break;
+ default:
+ configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Mysql.class);
+ }
+ Properties props = new Properties();
+ if (StringUtils.isNotBlank(configuration.getUsername())) {
+ props.setProperty("user", configuration.getUsername());
+ }
+ if (StringUtils.isNotBlank(configuration.getPassword())) {
+ props.setProperty("password", configuration.getPassword());
+ }
+ String driverClassName = configuration.getDriver();
+ ExtendedJdbcClassLoader jdbcClassLoader = extendedJdbcClassLoader;
+ Connection conn = null;
+ try {
+ Driver driverClass = (Driver) jdbcClassLoader.loadClass(driverClassName).newInstance();
+ conn = driverClass.connect(configuration.getJdbc(), props);
+ } catch (Exception e) {
+ DEException.throwException(e.getMessage());
+ }
+ return conn;
+ }
+
+ private DatasetTableDTO getTableDesc(DatasourceRequest datasourceRequest, ResultSet resultSet) throws SQLException {
+ DatasetTableDTO tableDesc = new DatasetTableDTO();
+ tableDesc.setDatasourceId(datasourceRequest.getDatasource().getId());
+ tableDesc.setType("db");
+ tableDesc.setTableName(resultSet.getString(1));
+ if (resultSet.getMetaData().getColumnCount() > 1) {
+ tableDesc.setName(resultSet.getString(2));
+ } else {
+ tableDesc.setName(resultSet.getString(1));
+ }
+ return tableDesc;
+ }
+
+ private List getDriver() {
+ List drivers = new ArrayList<>();
+ Map beansOfType = CommonBeanFactory.getApplicationContext().getBeansOfType((DatasourceConfiguration.class));
+ beansOfType.keySet().forEach(key -> drivers.add(beansOfType.get(key).getDriver()));
+ return drivers;
+ }
+
public Map jdbcFetchResultField(DatasourceRequest datasourceRequest) throws DEException {
DatasourceSchemaDTO value = datasourceRequest.getDsList().entrySet().iterator().next().getValue();
datasourceRequest.setDatasource(value);
@@ -549,73 +675,6 @@ public class CalciteProvider extends Provider {
return tableField;
}
- @Override
- public List fetchTableField(DatasourceRequest datasourceRequest) throws DEException {
- List datasetTableFields = new ArrayList<>();
- DatasourceSchemaDTO datasourceSchemaDTO = datasourceRequest.getDsList().entrySet().iterator().next().getValue();
- datasourceRequest.setDatasource(datasourceSchemaDTO);
-
- DatasourceConfiguration datasourceConfiguration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), DatasourceConfiguration.class);
-
- String table = datasourceRequest.getTable();
- if (StringUtils.isEmpty(table)) {
- ResultSet resultSet = null;
- try (Connection con = getConnection(datasourceRequest.getDatasource());
- Statement statement = getStatement(con, 30)) {
- if (DatasourceConfiguration.DatasourceType.valueOf(datasourceSchemaDTO.getType()) == DatasourceConfiguration.DatasourceType.oracle) {
- statement.executeUpdate("ALTER SESSION SET CURRENT_SCHEMA = " + datasourceConfiguration.getSchema());
- }
- resultSet = statement.executeQuery(datasourceRequest.getQuery());
- datasetTableFields.addAll(getField(resultSet, datasourceRequest));
- } catch (Exception e) {
- DEException.throwException(e.getMessage());
- } finally {
- if (resultSet != null) {
- try {
- resultSet.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- } else {
- ResultSet resultSet = null;
- try (Connection con = getConnection(datasourceRequest.getDatasource());
- Statement statement = getStatement(con, 30)) {
- if (DatasourceConfiguration.DatasourceType.valueOf(datasourceSchemaDTO.getType()) == DatasourceConfiguration.DatasourceType.oracle) {
- statement.executeUpdate("ALTER SESSION SET CURRENT_SCHEMA = " + datasourceConfiguration.getSchema());
- }
- resultSet = statement.executeQuery(getTableFiledSql(datasourceRequest));
- while (resultSet.next()) {
- TableField tableFieldDesc = getTableFieldDesc(datasourceRequest, resultSet);
- boolean repeat = false;
- for (TableField ele : datasetTableFields) {
- if (StringUtils.equalsIgnoreCase(ele.getOriginName(), tableFieldDesc.getOriginName())) {
- repeat = true;
- break;
- }
- }
- if (!repeat) {
- datasetTableFields.add(tableFieldDesc);
- }
- }
- } catch (Exception e) {
- DEException.throwException(e.getMessage());
- } finally {
- if (resultSet != null) {
- try {
- resultSet.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
-
- return datasetTableFields;
- }
-
-
public Connection initConnection(Map dsMap) {
Connection connection = getCalciteConnection();
CalciteConnection calciteConnection = null;
@@ -988,65 +1047,6 @@ public class CalciteProvider extends Provider {
}
}
- @Override
- public Connection getConnection(DatasourceDTO coreDatasource) throws DEException {
- DatasourceConfiguration configuration = null;
- DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(coreDatasource.getType());
- switch (datasourceType) {
- case mysql:
- case mongo:
- case StarRocks:
- case doris:
- case TiDB:
- case mariadb:
- configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Mysql.class);
- break;
- case impala:
- configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Impala.class);
- break;
- case sqlServer:
- configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Sqlserver.class);
- break;
- case oracle:
- configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Oracle.class);
- break;
- case db2:
- configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Db2.class);
- break;
- case pg:
- configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Pg.class);
- break;
- case redshift:
- configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Redshift.class);
- break;
- case ck:
- configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), CK.class);
- break;
- case h2:
- configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), H2.class);
- break;
- default:
- configuration = JsonUtil.parseObject(coreDatasource.getConfiguration(), Mysql.class);
- }
- Properties props = new Properties();
- if (StringUtils.isNotBlank(configuration.getUsername())) {
- props.setProperty("user", configuration.getUsername());
- }
- if (StringUtils.isNotBlank(configuration.getPassword())) {
- props.setProperty("password", configuration.getPassword());
- }
- String driverClassName = configuration.getDriver();
- ExtendedJdbcClassLoader jdbcClassLoader = extendedJdbcClassLoader;
- Connection conn = null;
- try {
- Driver driverClass = (Driver) jdbcClassLoader.loadClass(driverClassName).newInstance();
- conn = driverClass.connect(configuration.getJdbc(), props);
- } catch (Exception e) {
- DEException.throwException(e.getMessage());
- }
- return conn;
- }
-
public Statement getStatement(Connection connection, int queryTimeout) {
if (connection == null) {
DEException.throwException("Failed to get connection!");
diff --git a/core/core-backend/src/main/java/io/dataease/engine/sql/SQLProvider.java b/core/core-backend/src/main/java/io/dataease/engine/sql/SQLProvider.java
index 2ce93e853c..3ac52442fb 100644
--- a/core/core-backend/src/main/java/io/dataease/engine/sql/SQLProvider.java
+++ b/core/core-backend/src/main/java/io/dataease/engine/sql/SQLProvider.java
@@ -1,8 +1,8 @@
package io.dataease.engine.sql;
+import io.dataease.extensions.datasource.model.SQLMeta;
+import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.view.dto.ChartViewDTO;
-import io.dataease.extensions.view.model.SQLMeta;
-import io.dataease.extensions.view.model.SQLObj;
import io.dataease.engine.constant.SQLConstants;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/CustomWhere2Str.java b/core/core-backend/src/main/java/io/dataease/engine/trans/CustomWhere2Str.java
index 93deca75d4..67c825e8c6 100644
--- a/core/core-backend/src/main/java/io/dataease/engine/trans/CustomWhere2Str.java
+++ b/core/core-backend/src/main/java/io/dataease/engine/trans/CustomWhere2Str.java
@@ -1,13 +1,13 @@
package io.dataease.engine.trans;
+import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
+import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.view.filter.FilterTreeItem;
import io.dataease.extensions.view.filter.FilterTreeObj;
-import io.dataease.extensions.view.model.SQLMeta;
-import io.dataease.extensions.view.model.SQLObj;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.SQLConstants;
-import io.dataease.engine.constant.SqlPlaceholderConstants;
import io.dataease.engine.utils.Utils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java
index 78e0228d48..e52d29d48f 100644
--- a/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java
+++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Dimension2SQLObj.java
@@ -1,14 +1,14 @@
package io.dataease.engine.trans;
+import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
+import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.view.dto.ChartViewFieldDTO;
-import io.dataease.extensions.view.model.SQLMeta;
-import io.dataease.extensions.view.model.SQLObj;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.DeTypeConstants;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;
-import io.dataease.engine.constant.SqlPlaceholderConstants;
import io.dataease.engine.utils.Utils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java b/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java
index 0e9b96d1b9..080f96cee1 100644
--- a/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java
+++ b/core/core-backend/src/main/java/io/dataease/engine/trans/ExtWhere2Str.java
@@ -1,12 +1,12 @@
package io.dataease.engine.trans;
+import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
+import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.view.dto.ChartExtFilterDTO;
-import io.dataease.extensions.view.model.SQLMeta;
-import io.dataease.extensions.view.model.SQLObj;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.SQLConstants;
-import io.dataease.engine.constant.SqlPlaceholderConstants;
import io.dataease.engine.utils.Utils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java
index 0ce210f0fb..f7e5b148f0 100644
--- a/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java
+++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Field2SQLObj.java
@@ -1,15 +1,15 @@
package io.dataease.engine.trans;
+import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
-import io.dataease.extensions.view.model.SQLMeta;
-import io.dataease.extensions.view.model.SQLObj;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.DeTypeConstants;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;
-import io.dataease.engine.constant.SqlPlaceholderConstants;
import io.dataease.engine.func.FunctionConstant;
import io.dataease.engine.utils.Utils;
+import io.dataease.extensions.datasource.model.SQLMeta;
+import io.dataease.extensions.datasource.model.SQLObj;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java
index 7e99ab4ce5..1186bd15a6 100644
--- a/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java
+++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Order2SQLObj.java
@@ -2,13 +2,13 @@ package io.dataease.engine.trans;
import io.dataease.api.chart.dto.DeSortField;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
-import io.dataease.extensions.view.model.SQLMeta;
-import io.dataease.extensions.view.model.SQLObj;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.DeTypeConstants;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;
import io.dataease.engine.utils.Utils;
+import io.dataease.extensions.datasource.model.SQLMeta;
+import io.dataease.extensions.datasource.model.SQLObj;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java
index fbeb62179b..2a8c50e0a7 100644
--- a/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java
+++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Quota2SQLObj.java
@@ -1,14 +1,14 @@
package io.dataease.engine.trans;
+import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
+import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.view.dto.ChartViewFieldDTO;
-import io.dataease.extensions.view.model.SQLMeta;
-import io.dataease.extensions.view.model.SQLObj;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.DeTypeConstants;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;
-import io.dataease.engine.constant.SqlPlaceholderConstants;
import io.dataease.engine.utils.Utils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/Table2SQLObj.java b/core/core-backend/src/main/java/io/dataease/engine/trans/Table2SQLObj.java
index 7be3b75600..504d2c5b91 100644
--- a/core/core-backend/src/main/java/io/dataease/engine/trans/Table2SQLObj.java
+++ b/core/core-backend/src/main/java/io/dataease/engine/trans/Table2SQLObj.java
@@ -1,9 +1,9 @@
package io.dataease.engine.trans;
-import io.dataease.extensions.view.model.SQLMeta;
-import io.dataease.extensions.view.model.SQLObj;
import io.dataease.engine.constant.SQLConstants;
-import io.dataease.engine.constant.SqlPlaceholderConstants;
+import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants;
+import io.dataease.extensions.datasource.model.SQLMeta;
+import io.dataease.extensions.datasource.model.SQLObj;
/**
* @Author Junjun
diff --git a/core/core-backend/src/main/java/io/dataease/engine/trans/WhereTree2Str.java b/core/core-backend/src/main/java/io/dataease/engine/trans/WhereTree2Str.java
index 4ad2424618..21c65a0be0 100644
--- a/core/core-backend/src/main/java/io/dataease/engine/trans/WhereTree2Str.java
+++ b/core/core-backend/src/main/java/io/dataease/engine/trans/WhereTree2Str.java
@@ -1,15 +1,15 @@
package io.dataease.engine.trans;
+import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
-import io.dataease.extensions.view.model.SQLMeta;
-import io.dataease.extensions.view.model.SQLObj;
import io.dataease.api.permissions.dataset.dto.DataSetRowPermissionsTreeDTO;
+import io.dataease.extensions.datasource.model.SQLMeta;
+import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.view.dto.DatasetRowPermissionsTreeItem;
import io.dataease.extensions.view.dto.DatasetRowPermissionsTreeObj;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;
-import io.dataease.engine.constant.SqlPlaceholderConstants;
import io.dataease.engine.utils.Utils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
diff --git a/core/core-backend/src/main/java/io/dataease/engine/utils/Utils.java b/core/core-backend/src/main/java/io/dataease/engine/utils/Utils.java
index a1d4d12005..c4e06cbff5 100644
--- a/core/core-backend/src/main/java/io/dataease/engine/utils/Utils.java
+++ b/core/core-backend/src/main/java/io/dataease/engine/utils/Utils.java
@@ -2,12 +2,12 @@ package io.dataease.engine.utils;
import io.dataease.engine.constant.ExtFieldConstant;
import io.dataease.engine.constant.SQLConstants;
-import io.dataease.engine.constant.SqlPlaceholderConstants;
import io.dataease.exception.DEException;
+import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants;
import io.dataease.extensions.datasource.dto.DatasetTableFieldDTO;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
+import io.dataease.extensions.datasource.model.SQLObj;
import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
-import io.dataease.extensions.view.model.SQLObj;
import io.dataease.i18n.Translator;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/dataset/union/UnionParamDTO.java b/sdk/api/api-base/src/main/java/io/dataease/api/dataset/union/UnionParamDTO.java
index 689c5a5b32..3f9266c6ac 100644
--- a/sdk/api/api-base/src/main/java/io/dataease/api/dataset/union/UnionParamDTO.java
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/dataset/union/UnionParamDTO.java
@@ -1,7 +1,7 @@
package io.dataease.api.dataset.union;
import io.dataease.extensions.datasource.dto.DatasetTableDTO;
-import io.dataease.extensions.view.model.SQLObj;
+import io.dataease.extensions.datasource.model.SQLObj;
import lombok.Data;
import java.io.Serializable;
diff --git a/sdk/extensions/extensions-datasource/pom.xml b/sdk/extensions/extensions-datasource/pom.xml
index 7e2bfc71d4..50a60d5921 100644
--- a/sdk/extensions/extensions-datasource/pom.xml
+++ b/sdk/extensions/extensions-datasource/pom.xml
@@ -11,6 +11,26 @@
extensions-datasource
+
+
+
+ org.apache.calcite
+ calcite-core
+ ${calcite-core.version}
+
+
+ com.google.guava
+ guava
+
+
+ commons-io
+ commons-io
+
+
+ de
+
+
+
21
21
diff --git a/core/core-backend/src/main/java/io/dataease/engine/constant/SqlPlaceholderConstants.java b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/constant/SqlPlaceholderConstants.java
similarity index 91%
rename from core/core-backend/src/main/java/io/dataease/engine/constant/SqlPlaceholderConstants.java
rename to sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/constant/SqlPlaceholderConstants.java
index 9911d22245..9cfac78f2b 100644
--- a/core/core-backend/src/main/java/io/dataease/engine/constant/SqlPlaceholderConstants.java
+++ b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/constant/SqlPlaceholderConstants.java
@@ -1,16 +1,16 @@
-package io.dataease.engine.constant;
-
-/**
- * @Author Junjun
- */
-public class SqlPlaceholderConstants {
- public static final String TABLE_PLACEHOLDER = "SELECT * FROM DE_PLACEHOLDER_TABLE_0";
-
- public static final String KEYWORD_PREFIX_REGEX = "[`'\"\\[]?";
-
- public static final String KEYWORD_SUFFIX_REGEX = "[`'\"\\]]?";
-
- public static final String TABLE_PLACEHOLDER_REGEX = "SELECT \\* FROM " + KEYWORD_PREFIX_REGEX + "DE_PLACEHOLDER_TABLE_0" + KEYWORD_SUFFIX_REGEX;
-
- public static final String CALC_FIELD_PLACEHOLDER = "DE_CALC_FIELD_PLACEHOLDER_%s";
-}
+package io.dataease.extensions.datasource.constant;
+
+/**
+ * @Author Junjun
+ */
+public class SqlPlaceholderConstants {
+ public static final String TABLE_PLACEHOLDER = "SELECT * FROM DE_PLACEHOLDER_TABLE_0";
+
+ public static final String KEYWORD_PREFIX_REGEX = "[`'\"\\[]?";
+
+ public static final String KEYWORD_SUFFIX_REGEX = "[`'\"\\]]?";
+
+ public static final String TABLE_PLACEHOLDER_REGEX = "SELECT \\* FROM " + KEYWORD_PREFIX_REGEX + "DE_PLACEHOLDER_TABLE_0" + KEYWORD_SUFFIX_REGEX;
+
+ public static final String CALC_FIELD_PLACEHOLDER = "DE_CALC_FIELD_PLACEHOLDER_%s";
+}
diff --git a/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/model/SQLMeta.java b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/model/SQLMeta.java
similarity index 95%
rename from sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/model/SQLMeta.java
rename to sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/model/SQLMeta.java
index 7bd2b33f0a..7f297a7b90 100644
--- a/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/model/SQLMeta.java
+++ b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/model/SQLMeta.java
@@ -1,4 +1,4 @@
-package io.dataease.extensions.view.model;
+package io.dataease.extensions.datasource.model;
import lombok.Data;
diff --git a/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/model/SQLObj.java b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/model/SQLObj.java
similarity index 93%
rename from sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/model/SQLObj.java
rename to sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/model/SQLObj.java
index 18e9efe965..97cd14d5bc 100644
--- a/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/model/SQLObj.java
+++ b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/model/SQLObj.java
@@ -1,4 +1,4 @@
-package io.dataease.extensions.view.model;
+package io.dataease.extensions.datasource.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/provider/Provider.java b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/provider/Provider.java
index b15f372ef2..b0381e5ba0 100644
--- a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/provider/Provider.java
+++ b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/provider/Provider.java
@@ -1,19 +1,31 @@
package io.dataease.extensions.datasource.provider;
import io.dataease.exception.DEException;
-import io.dataease.extensions.datasource.dto.DatasetTableDTO;
-import io.dataease.extensions.datasource.dto.DatasourceDTO;
-import io.dataease.extensions.datasource.dto.DatasourceRequest;
-import io.dataease.extensions.datasource.dto.TableField;
+import io.dataease.extensions.datasource.constant.SqlPlaceholderConstants;
+import io.dataease.extensions.datasource.dto.*;
+import io.dataease.extensions.datasource.model.SQLMeta;
+import io.dataease.extensions.datasource.vo.DatasourceConfiguration;
+import org.apache.calcite.config.Lex;
+import org.apache.calcite.sql.SqlDialect;
+import org.apache.calcite.sql.SqlNode;
+import org.apache.calcite.sql.dialect.*;
+import org.apache.calcite.sql.parser.SqlParser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.sql.Connection;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.regex.Matcher;
/**
* @Author Junjun
*/
public abstract class Provider {
+
+ public static Logger logger = LoggerFactory.getLogger(Provider.class);
+
public abstract List getSchema(DatasourceRequest datasourceRequest);
public abstract List getTables(DatasourceRequest datasourceRequest);
@@ -25,4 +37,108 @@ public abstract class Provider {
public abstract Map fetchResultField(DatasourceRequest datasourceRequest) throws DEException;
public abstract List fetchTableField(DatasourceRequest datasourceRequest) throws DEException;
+
+ public String rebuildSQL(String sql, SQLMeta sqlMeta, boolean crossDs, Map dsMap) {
+ logger.info("calcite sql: " + sql);
+ if (crossDs) {
+ return sql;
+ }
+
+ String s = transSqlDialect(sql, dsMap);
+ String tableDialect = sqlMeta.getTableDialect();
+ s = replaceTablePlaceHolder(s, tableDialect);
+ return replaceCalcFieldPlaceHolder(s, sqlMeta);
+ }
+
+ public String transSqlDialect(String sql, Map dsMap) throws DEException {
+ try {
+ DatasourceSchemaDTO value = dsMap.entrySet().iterator().next().getValue();
+
+ SqlParser parser = SqlParser.create(sql, SqlParser.Config.DEFAULT.withLex(Lex.JAVA));
+ SqlNode sqlNode = parser.parseStmt();
+ return sqlNode.toSqlString(getDialect(value)).toString();
+ } catch (Exception e) {
+ DEException.throwException(e.getMessage());
+ }
+ return null;
+ }
+
+ public String replaceTablePlaceHolder(String s, String placeholder) {
+ s = s.replaceAll("\r\n", " ")
+ .replaceAll("\n", " ")
+ .replaceAll(SqlPlaceholderConstants.TABLE_PLACEHOLDER_REGEX, Matcher.quoteReplacement(placeholder))
+ .replaceAll("ASYMMETRIC", "")
+ .replaceAll("SYMMETRIC", "");
+ return s;
+ }
+
+ public String replaceCalcFieldPlaceHolder(String s, SQLMeta sqlMeta) {
+ Map fieldsDialect = new HashMap<>();
+ if (sqlMeta.getXFieldsDialect() != null && !sqlMeta.getXFieldsDialect().isEmpty()) {
+ fieldsDialect.putAll(sqlMeta.getXFieldsDialect());
+ }
+ if (sqlMeta.getYFieldsDialect() != null && !sqlMeta.getYFieldsDialect().isEmpty()) {
+ fieldsDialect.putAll(sqlMeta.getYFieldsDialect());
+ }
+ if (sqlMeta.getCustomWheresDialect() != null && !sqlMeta.getCustomWheresDialect().isEmpty()) {
+ fieldsDialect.putAll(sqlMeta.getCustomWheresDialect());
+ }
+ if (sqlMeta.getExtWheresDialect() != null && !sqlMeta.getExtWheresDialect().isEmpty()) {
+ fieldsDialect.putAll(sqlMeta.getExtWheresDialect());
+ }
+ if (sqlMeta.getWhereTreesDialect() != null && !sqlMeta.getWhereTreesDialect().isEmpty()) {
+ fieldsDialect.putAll(sqlMeta.getWhereTreesDialect());
+ }
+
+ if (!fieldsDialect.isEmpty()) {
+ for (Map.Entry ele : fieldsDialect.entrySet()) {
+ s = s.replaceAll(SqlPlaceholderConstants.KEYWORD_PREFIX_REGEX + ele.getKey() + SqlPlaceholderConstants.KEYWORD_SUFFIX_REGEX, Matcher.quoteReplacement(ele.getValue()));
+ }
+ }
+ return s;
+ }
+
+ public SqlDialect getDialect(DatasourceSchemaDTO coreDatasource) {
+ SqlDialect sqlDialect = null;
+ DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(coreDatasource.getType());
+ switch (datasourceType) {
+ case mysql:
+ case mongo:
+ case StarRocks:
+ case TiDB:
+ case mariadb:
+ sqlDialect = MysqlSqlDialect.DEFAULT;
+ break;
+ case doris:
+ sqlDialect = DorisSqlDialect.DEFAULT;
+ break;
+ case impala:
+ sqlDialect = ImpalaSqlDialect.DEFAULT;
+ break;
+ case sqlServer:
+ sqlDialect = MssqlSqlDialect.DEFAULT;
+ break;
+ case oracle:
+ sqlDialect = OracleSqlDialect.DEFAULT;
+ break;
+ case db2:
+ sqlDialect = Db2SqlDialect.DEFAULT;
+ break;
+ case pg:
+ sqlDialect = PostgresqlSqlDialect.DEFAULT;
+ break;
+ case redshift:
+ sqlDialect = RedshiftSqlDialect.DEFAULT;
+ break;
+ case ck:
+ sqlDialect = ClickHouseSqlDialect.DEFAULT;
+ break;
+ case h2:
+ sqlDialect = H2SqlDialect.DEFAULT;
+ break;
+ default:
+ sqlDialect = MysqlSqlDialect.DEFAULT;
+ }
+ return sqlDialect;
+ }
}
diff --git a/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/plugin/AbstractChartPlugin.java b/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/plugin/AbstractChartPlugin.java
index ff79521fe4..90af33f3a9 100644
--- a/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/plugin/AbstractChartPlugin.java
+++ b/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/plugin/AbstractChartPlugin.java
@@ -1,12 +1,13 @@
package io.dataease.extensions.view.plugin;
+import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.*;
-import io.dataease.extensions.view.model.SQLMeta;
import java.util.List;
import java.util.Map;
+
public abstract class AbstractChartPlugin {
/**
@@ -49,9 +50,12 @@ public abstract class AbstractChartPlugin {
*
* @param view 原视图对象
* @param calcResult 计算结果
+ * @param view 原视图对象
+ * @param calcResult 计算结果
* @param formatResult 轴字段处理结果
* @param filterResult 过滤条件处理结果
* @return 返回前端的视图,建议数据放在 data 中,过滤条件放在 filter 中,其他字段可自行添加,可参考主工程。
*/
public abstract ChartViewDTO buildChart(ChartViewDTO view, ChartCalcDataResult calcResult, AxisFormatResult formatResult, CustomFilterResult filterResult);
}
+