This is an automated email from the ASF dual-hosted git repository. kxiao pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 5e8aa0aaab433d0dc4758f5e5d4c6ee40ab0b917 Author: zy-kkk <[email protected]> AuthorDate: Mon Jun 26 17:13:50 2023 +0800 [bug](jdbc catalog) fix getPrimaryKeys fun bug (#21137) --- .../org/apache/doris/external/jdbc/JdbcClient.java | 20 ++++------------ .../doris/external/jdbc/JdbcMySQLClient.java | 28 +++++++++------------- 2 files changed, 16 insertions(+), 32 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java b/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java index 505686da7e..4abe061d57 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcClient.java @@ -292,7 +292,6 @@ public abstract class JdbcClient { String catalogName = getCatalogName(conn); tableName = modifyTableNameIfNecessary(tableName); rs = getColumns(databaseMetaData, catalogName, dbName, tableName); - List<String> primaryKeys = getPrimaryKeys(dbName, tableName); while (rs.next()) { if (isTableModified(tableName, rs.getString("TABLE_NAME"))) { continue; @@ -301,7 +300,11 @@ public abstract class JdbcClient { field.setColumnName(rs.getString("COLUMN_NAME")); field.setDataType(rs.getInt("DATA_TYPE")); field.setDataTypeName(rs.getString("TYPE_NAME")); - field.setKey(primaryKeys.contains(field.getColumnName())); + /* + We used this method to retrieve the key column of the JDBC table, but since we only tested mysql, + we kept the default key behavior in the parent class and only overwrite it in the mysql subclass + */ + field.setKey(true); field.setColumnSize(rs.getInt("COLUMN_SIZE")); field.setDecimalDigits(rs.getInt("DECIMAL_DIGITS")); field.setNumPrecRadix(rs.getInt("NUM_PREC_RADIX")); @@ -389,19 +392,6 @@ public abstract class JdbcClient { return databaseMetaData.getColumns(catalogName, schemaName, tableName, null); } - /** - * We used this method to retrieve the key column of the JDBC table, but since we only tested mysql, - * we kept the default key behavior in the parent class and only overwrite it in the mysql subclass - */ - protected List<String> getPrimaryKeys(String dbName, String tableName) { - List<String> primaryKeys = Lists.newArrayList(); - List<JdbcFieldSchema> columns = getJdbcColumnsInfo(dbName, tableName); - for (JdbcFieldSchema column : columns) { - primaryKeys.add(column.getColumnName()); - } - return primaryKeys; - } - @Data protected static class JdbcFieldSchema { protected String columnName; diff --git a/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcMySQLClient.java b/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcMySQLClient.java index 9863bcc1c2..c5ceefb89d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcMySQLClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/external/jdbc/JdbcMySQLClient.java @@ -136,7 +136,7 @@ public class JdbcMySQLClient extends JdbcClient { String catalogName = getCatalogName(conn); tableName = modifyTableNameIfNecessary(tableName); rs = getColumns(databaseMetaData, catalogName, dbName, tableName); - List<String> primaryKeys = getPrimaryKeys(dbName, tableName); + List<String> primaryKeys = getPrimaryKeys(databaseMetaData, catalogName, dbName, tableName); boolean needGetDorisColumns = true; Map<String, String> mapFieldtoType = null; while (rs.next()) { @@ -201,24 +201,18 @@ public class JdbcMySQLClient extends JdbcClient { return dorisTableSchema; } - @Override - protected List<String> getPrimaryKeys(String dbName, String tableName) { - List<String> primaryKeys = Lists.newArrayList(); - Connection conn = null; + protected List<String> getPrimaryKeys(DatabaseMetaData databaseMetaData, String catalogName, + String dbName, String tableName) throws SQLException { ResultSet rs = null; - try { - conn = getConnection(); - DatabaseMetaData databaseMetaData = conn.getMetaData(); - rs = databaseMetaData.getPrimaryKeys(dbName, null, tableName); - while (rs.next()) { - String columnName = rs.getString("COLUMN_NAME"); - primaryKeys.add(columnName); - } - } catch (SQLException e) { - throw new JdbcClientException("Failed to get primary keys for table", e); - } finally { - close(rs, conn); + List<String> primaryKeys = Lists.newArrayList(); + + rs = databaseMetaData.getPrimaryKeys(dbName, null, tableName); + while (rs.next()) { + String columnName = rs.getString("COLUMN_NAME"); + primaryKeys.add(columnName); } + rs.close(); + return primaryKeys; } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
