From fc99fca8ec8d77960f34616eb83a69bba704934b Mon Sep 17 00:00:00 2001 From: taojinlong Date: Fri, 19 Jul 2024 18:27:19 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix(=E6=95=B0=E6=8D=AE=E6=BA=90):=20mongo?= =?UTF-8?q?=20=E5=AF=B9=E6=8E=A5=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datasource/provider/CalciteProvider.java | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 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 e8b68039e3..a9931bcfee 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 @@ -1,6 +1,7 @@ package io.dataease.datasource.provider; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.google.gson.Gson; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import io.dataease.commons.utils.CommonThreadPool; @@ -188,6 +189,28 @@ public class CalciteProvider extends Provider { return map; } + + private List fetchResultField(ResultSet rs ) throws Exception { + List fieldList = new ArrayList<>(); + ResultSetMetaData metaData = rs.getMetaData(); + int columnCount = metaData.getColumnCount(); + System.out.println(columnCount); + for (int j = 0; j < columnCount; j++) { + String columnName = metaData.getColumnName(j + 1); + String label = StringUtils.isNotEmpty(metaData.getColumnLabel(j + 1)) ? metaData.getColumnLabel(j + 1) : columnName; + TableField tableField = new TableField(); + tableField.setOriginName(columnName); + tableField.setName(label); + tableField.setType(metaData.getColumnTypeName(j + 1)); + tableField.setFieldType(tableField.getType()); + int deType = FieldUtils.transType2DeType(tableField.getType()); + tableField.setDeExtractType(deType); + tableField.setDeType(deType); + fieldList.add(tableField); + } + return fieldList; + } + @Override public List fetchTableField(DatasourceRequest datasourceRequest) throws DEException { List datasetTableFields = new ArrayList<>(); @@ -219,8 +242,9 @@ public class CalciteProvider extends Provider { ResultSet resultSet = null; try (ConnectionObj con = getConnection(datasourceRequest.getDatasource()); Statement statement = getStatement(con.getConnection(), 30)) { - if (DatasourceConfiguration.DatasourceType.valueOf(datasourceSchemaDTO.getType()) == DatasourceConfiguration.DatasourceType.oracle) { - statement.executeUpdate("ALTER SESSION SET CURRENT_SCHEMA = " + datasourceConfiguration.getSchema()); + if (datasourceRequest.getDatasource().getType().equalsIgnoreCase("mongo") || datasourceRequest.getDatasource().getType().equalsIgnoreCase("doris")) { + resultSet = statement.executeQuery("select * from " + table + " limit 0 offset 0 "); + return fetchResultField(resultSet); } resultSet = statement.executeQuery(getTableFiledSql(datasourceRequest)); while (resultSet.next()) { @@ -341,7 +365,7 @@ public class CalciteProvider extends Provider { } } - private Session initSession(DatasourceConfiguration configuration) throws Exception{ + private Session initSession(DatasourceConfiguration configuration) throws Exception { JSch jsch = new JSch(); Session session = jsch.getSession(configuration.getSshUserName(), configuration.getSshHost(), configuration.getSshPort()); if (!configuration.getSshType().equalsIgnoreCase("password")) { @@ -359,7 +383,6 @@ public class CalciteProvider extends Provider { } - private DatasetTableDTO getTableDesc(DatasourceRequest datasourceRequest, ResultSet resultSet) throws SQLException { DatasetTableDTO tableDesc = new DatasetTableDTO(); tableDesc.setDatasourceId(datasourceRequest.getDatasource().getId()); @@ -979,10 +1002,10 @@ public class CalciteProvider extends Provider { switch (datasourceType) { case StarRocks: case doris: + case mongo: tableSqls.add("show tables"); break; case mysql: - case mongo: case mariadb: case TiDB: configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Mysql.class); From f4e1dc83972bc6b90642bbf52daf7aea7669b16e Mon Sep 17 00:00:00 2001 From: taojinlong Date: Fri, 19 Jul 2024 18:29:25 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix(=E6=95=B0=E6=8D=AE=E6=BA=90):=20mongo?= =?UTF-8?q?=20=E5=AF=B9=E6=8E=A5=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/dataease/datasource/provider/CalciteProvider.java | 1 - 1 file changed, 1 deletion(-) 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 a9931bcfee..1034a7d203 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 @@ -194,7 +194,6 @@ public class CalciteProvider extends Provider { List fieldList = new ArrayList<>(); ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); - System.out.println(columnCount); for (int j = 0; j < columnCount; j++) { String columnName = metaData.getColumnName(j + 1); String label = StringUtils.isNotEmpty(metaData.getColumnLabel(j + 1)) ? metaData.getColumnLabel(j + 1) : columnName;