This is an automated email from the ASF dual-hosted git repository. arshad pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/seatunnel-web.git
The following commit(s) were added to refs/heads/main by this push: new a3bec06d [Bug][Seatunnel-web][Oracle] Fix fetch table fields for Oracle Jdbc (#236) a3bec06d is described below commit a3bec06d0f41b4016d22deb5c979a85bf2bbe6d4 Author: Shashwat Tiwari <shati...@visa.com> AuthorDate: Wed Nov 6 15:54:42 2024 +0530 [Bug][Seatunnel-web][Oracle] Fix fetch table fields for Oracle Jdbc (#236) Signed-off-by: Mohammad Arshad <ars...@apache.org> --- .../oracle/jdbc/OracleDataSourceChannel.java | 24 ++++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/seatunnel-datasource/seatunnel-datasource-plugins/datasource-jdbc-oracle/src/main/java/org/apache/seatunnel/datasource/plugin/oracle/jdbc/OracleDataSourceChannel.java b/seatunnel-datasource/seatunnel-datasource-plugins/datasource-jdbc-oracle/src/main/java/org/apache/seatunnel/datasource/plugin/oracle/jdbc/OracleDataSourceChannel.java index 775decb1..baa408ab 100644 --- a/seatunnel-datasource/seatunnel-datasource-plugins/datasource-jdbc-oracle/src/main/java/org/apache/seatunnel/datasource/plugin/oracle/jdbc/OracleDataSourceChannel.java +++ b/seatunnel-datasource/seatunnel-datasource-plugins/datasource-jdbc-oracle/src/main/java/org/apache/seatunnel/datasource/plugin/oracle/jdbc/OracleDataSourceChannel.java @@ -18,10 +18,10 @@ package org.apache.seatunnel.datasource.plugin.oracle.jdbc; import org.apache.seatunnel.api.configuration.util.OptionRule; +import org.apache.seatunnel.common.utils.SeaTunnelException; import org.apache.seatunnel.datasource.plugin.api.DataSourceChannel; import org.apache.seatunnel.datasource.plugin.api.DataSourcePluginException; import org.apache.seatunnel.datasource.plugin.api.model.TableField; -import org.apache.seatunnel.datasource.plugin.api.utils.JdbcUtils; import org.apache.commons.lang3.StringUtils; @@ -170,10 +170,19 @@ public class OracleDataSourceChannel implements DataSourceChannel { @NonNull String database, @NonNull String table) { List<TableField> tableFields = new ArrayList<>(); - try (Connection connection = getConnection(requestParams, database)) { + try (Connection connection = getConnection(requestParams)) { DatabaseMetaData metaData = connection.getMetaData(); String primaryKey = getPrimaryKey(metaData, database, table); - try (ResultSet resultSet = metaData.getColumns(database, null, table, null)) { + String[] split = table.split("\\."); + if (split.length != 2) { + throw new SeaTunnelException( + "The tableName for oracle must be schemaName.tableName, but tableName is " + + table); + } + + String schemaName = split[0]; + String tableName = split[1]; + try (ResultSet resultSet = metaData.getColumns(database, schemaName, tableName, null)) { while (resultSet.next()) { TableField tableField = new TableField(); String columnName = resultSet.getString("COLUMN_NAME"); @@ -215,16 +224,9 @@ public class OracleDataSourceChannel implements DataSourceChannel { private Connection getConnection(Map<String, String> requestParams) throws SQLException, ClassNotFoundException { - return getConnection(requestParams, null); - } - - private Connection getConnection(Map<String, String> requestParams, String databaseName) - throws SQLException, ClassNotFoundException { checkNotNull(requestParams.get(OracleOptionRule.DRIVER.key())); checkNotNull(requestParams.get(OracleOptionRule.URL.key()), "Jdbc url cannot be null"); - String url = - JdbcUtils.replaceDatabase( - requestParams.get(OracleOptionRule.URL.key()), databaseName); + String url = requestParams.get(OracleOptionRule.URL.key()); if (requestParams.containsKey(OracleOptionRule.USER.key())) { String username = requestParams.get(OracleOptionRule.USER.key()); String password = requestParams.get(OracleOptionRule.PASSWORD.key());