From e3150250bffa2f317bd99ac72e66a5bec9fe4fd0 Mon Sep 17 00:00:00 2001 From: zy-kkk Date: Wed, 13 Mar 2024 23:04:56 +0800 Subject: [PATCH] [fix](jdbc catalog) fix get doris column info when lower case (#32190) --- .../doris/datasource/jdbc/client/JdbcClient.java | 10 +++++----- .../datasource/jdbc/client/JdbcMySQLClient.java | 16 ++++++++-------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java index 769c9541ec..98ed34204e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java @@ -252,7 +252,7 @@ public abstract class JdbcClient { remoteTablesNames.add(rs.getString("TABLE_NAME")); } } catch (SQLException e) { - throw new JdbcClientException("failed to get all tables for remote database %s", e, remoteDbName); + throw new JdbcClientException("failed to get all tables for remote database: `%s`", e, remoteDbName); } }); return filterTableNames(remoteDbName, remoteTablesNames); @@ -313,8 +313,8 @@ public abstract class JdbcClient { tableSchema.add(field); } } catch (SQLException e) { - throw new JdbcClientException("failed to get jdbc columns info for table %.%s: %s", - e, localDbName, localTableName, Util.getRootCauseMessage(e)); + throw new JdbcClientException("failed to get jdbc columns info for remote table `%s.%s`: %s", + remoteDbName, remoteTableName, Util.getRootCauseMessage(e)); } finally { close(rs, conn); } @@ -415,8 +415,8 @@ public abstract class JdbcClient { return jdbcLowerCaseMetaMatching.setDatabaseNameMapping(filteredDatabaseNames); } - protected List filterTableNames(String remoteDbName, List localTableNames) { - return jdbcLowerCaseMetaMatching.setTableNameMapping(remoteDbName, localTableNames); + protected List filterTableNames(String remoteDbName, List remoteTableNames) { + return jdbcLowerCaseMetaMatching.setTableNameMapping(remoteDbName, remoteTableNames); } protected List filterColumnName(String remoteDbName, String remoteTableName, List remoteColumns) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java index 4b88951094..0859f49a9d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java @@ -134,7 +134,7 @@ public class JdbcMySQLClient extends JdbcClient { // in mysql-jdbc-connector-5.1.*, TYPE_NAME of BITMAP column in doris will be "BITMAP" field.setDataTypeName(rs.getString("TYPE_NAME")); if (isDoris) { - mapFieldtoType = getColumnsDataTypeUseQuery(localDbName, localTableName); + mapFieldtoType = getColumnsDataTypeUseQuery(remoteDbName, remoteTableName); field.setDataTypeName(mapFieldtoType.get(rs.getString("COLUMN_NAME"))); } field.setColumnSize(rs.getInt("COLUMN_SIZE")); @@ -152,8 +152,8 @@ public class JdbcMySQLClient extends JdbcClient { tableSchema.add(field); } } catch (SQLException e) { - throw new JdbcClientException("failed to get jdbc columns info for table %.%s: %s", - e, localDbName, localTableName, Util.getRootCauseMessage(e)); + throw new JdbcClientException("failed to get jdbc columns info for remote table `%s.%s`: %s", + remoteDbName, remoteTableName, Util.getRootCauseMessage(e)); } finally { close(rs, conn); } @@ -282,15 +282,15 @@ public class JdbcMySQLClient extends JdbcClient { /** * get all columns like DatabaseMetaData.getColumns in mysql-jdbc-connector */ - private Map getColumnsDataTypeUseQuery(String dbName, String tableName) { + private Map getColumnsDataTypeUseQuery(String remoteDbName, String remoteTableName) { Connection conn = getConnection(); ResultSet resultSet = null; Map fieldtoType = Maps.newHashMap(); StringBuilder queryBuf = new StringBuilder("SHOW FULL COLUMNS FROM "); - queryBuf.append(tableName); + queryBuf.append(remoteTableName); queryBuf.append(" FROM "); - queryBuf.append(dbName); + queryBuf.append(remoteDbName); try (Statement stmt = conn.createStatement()) { resultSet = stmt.executeQuery(queryBuf.toString()); while (resultSet.next()) { @@ -301,8 +301,8 @@ public class JdbcMySQLClient extends JdbcClient { fieldtoType.put(fieldName, typeName); } } catch (SQLException e) { - throw new JdbcClientException("failed to get column list from jdbc for table %s:%s", tableName, - Util.getRootCauseMessage(e)); + throw new JdbcClientException("failed to get jdbc columns info for remote table `%s.%s`: %s", + remoteDbName, remoteTableName, Util.getRootCauseMessage(e)); } finally { close(resultSet, conn); }