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); } +