From d281f067ed80570529f9fd2adc01b7eb1f3c2019 Mon Sep 17 00:00:00 2001 From: ulleo Date: Tue, 11 Mar 2025 17:20:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(X-Pack):=20[=E6=95=B0=E6=8D=AE=E5=A1=AB?= =?UTF-8?q?=E6=8A=A5]=E6=96=B0=E5=BB=BA=E8=A1=A8=E5=8D=95=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=BB=91=E5=AE=9A=E5=B7=B2=E6=9C=89=E8=A1=A8=20(#1528?= =?UTF-8?q?3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #12788 --- .../datasource/provider/CalciteProvider.java | 44 +++++++++++++++++-- .../extensions/datasource/dto/TableField.java | 1 + 2 files changed, 42 insertions(+), 3 deletions(-) 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 8edc9e96c2..724b267f6e 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 @@ -2,6 +2,7 @@ package io.dataease.datasource.provider; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.jcraft.jsch.Session; +import io.dataease.constant.SQLConstants; import io.dataease.dataset.utils.FieldUtils; import io.dataease.datasource.dao.auto.entity.CoreDatasource; import io.dataease.datasource.dao.auto.entity.CoreDriver; @@ -9,7 +10,6 @@ import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper; import io.dataease.datasource.manage.EngineManage; import io.dataease.datasource.request.EngineRequest; import io.dataease.datasource.type.*; -import io.dataease.constant.SQLConstants; import io.dataease.exception.DEException; import io.dataease.extensions.datasource.dto.*; import io.dataease.extensions.datasource.provider.DriverShim; @@ -31,6 +31,7 @@ import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.parser.SqlParser; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.dbcp2.BasicDataSource; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -240,6 +241,36 @@ public class CalciteProvider extends Provider { return fieldList; } + private Map getTableTypeMap(DatasourceRequest datasourceRequest, DatasourceConfiguration datasourceConfiguration, String tableName) throws DEException { + Map map = new HashMap<>(); + String schemaTable = (ObjectUtils.isNotEmpty(datasourceConfiguration.getSchema()) ? (datasourceConfiguration.getSchema() + "`.`") : "") + tableName; + String sql = "SELECT * FROM `$TABLE_NAME$` LIMIT 0 OFFSET 0".replace("$TABLE_NAME$", schemaTable); + sql = transSqlDialect(sql, datasourceRequest.getDsList()); + ResultSet resultSet = null; + try (Connection con = getConnectionFromPool(datasourceRequest.getDatasource().getId()); Statement statement = getStatement(con, 30)) { + resultSet = statement.executeQuery(sql); + + ResultSetMetaData metaData = resultSet.getMetaData(); + int columnCount = metaData.getColumnCount(); + for (int j = 0; j < columnCount; j++) { + String name = StringUtils.lowerCase(metaData.getColumnName(j + 1)); + Integer type = metaData.getColumnType(j + 1); + map.put(name, type); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (resultSet != null) { + try { + resultSet.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + return map; + } + @Override public List fetchTableField(DatasourceRequest datasourceRequest) throws DEException { List datasetTableFields = new ArrayList<>(); @@ -281,8 +312,11 @@ public class CalciteProvider extends Provider { } else { resultSet = statement.executeQuery(getTableFiledSql(datasourceRequest)); } + + Map tableTypeMap = getTableTypeMap(datasourceRequest, datasourceConfiguration, table); + while (resultSet.next()) { - TableField tableFieldDesc = getTableFieldDesc(datasourceRequest, resultSet, 3); + TableField tableFieldDesc = getTableFieldDesc(datasourceRequest, resultSet, 3, tableTypeMap); boolean repeat = false; for (TableField ele : datasetTableFields) { if (StringUtils.equalsIgnoreCase(ele.getOriginName(), tableFieldDesc.getOriginName())) { @@ -705,7 +739,7 @@ public class CalciteProvider extends Provider { } } - private TableField getTableFieldDesc(DatasourceRequest datasourceRequest, ResultSet resultSet, int commentIndex) throws SQLException { + private TableField getTableFieldDesc(DatasourceRequest datasourceRequest, ResultSet resultSet, int commentIndex, Map tableTypeMap) throws SQLException { TableField tableField = new TableField(); tableField.setOriginName(resultSet.getString(1)); tableField.setType(resultSet.getString(2).toUpperCase()); @@ -718,6 +752,10 @@ public class CalciteProvider extends Provider { tableField.setPrimary(resultSet.getInt(4) > 0); } catch (Exception e) { } + try { + tableField.setTypeNumber(tableTypeMap.get(StringUtils.lowerCase(tableField.getOriginName()))); + } catch (Exception e) { + } return tableField; } diff --git a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/TableField.java b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/TableField.java index 9e4b9a8e48..152017365f 100644 --- a/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/TableField.java +++ b/sdk/extensions/extensions-datasource/src/main/java/io/dataease/extensions/datasource/dto/TableField.java @@ -27,5 +27,6 @@ public class TableField implements Serializable { private int inCount; private String term = "eq"; + private Integer typeNumber; }