You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by kx...@apache.org on 2023/06/26 12:35:58 UTC
[doris] 05/09: [bug](jdbc catalog) fix getPrimaryKeys fun bug (#21137)
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 <zh...@gmail.com>
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: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org