This is an automated email from the ASF dual-hosted git repository.
lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git
The following commit(s) were added to refs/heads/main by this push:
new 639ca71 fix(java/driver/jdbc): check for existence when getting table
schema (#567)
639ca71 is described below
commit 639ca716801c995c7532a924a4809e0acd00ad85
Author: David Li <[email protected]>
AuthorDate: Fri Mar 31 12:55:29 2023 -0400
fix(java/driver/jdbc): check for existence when getting table schema (#567)
Fixes #565.
---
.../apache/arrow/adbc/driver/jdbc/JdbcConnection.java | 16 ++++++++++++++++
.../driver/testsuite/AbstractConnectionMetadataTest.java | 12 ++++++++++++
2 files changed, 28 insertions(+)
diff --git
a/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcConnection.java
b/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcConnection.java
index 205f193..6582716 100644
---
a/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcConnection.java
+++
b/java/driver/jdbc/src/main/java/org/apache/arrow/adbc/driver/jdbc/JdbcConnection.java
@@ -27,6 +27,7 @@ import org.apache.arrow.adapter.jdbc.JdbcToArrowUtils;
import org.apache.arrow.adbc.core.AdbcConnection;
import org.apache.arrow.adbc.core.AdbcException;
import org.apache.arrow.adbc.core.AdbcStatement;
+import org.apache.arrow.adbc.core.AdbcStatusCode;
import org.apache.arrow.adbc.core.BulkIngestMode;
import org.apache.arrow.adbc.core.IsolationLevel;
import org.apache.arrow.adbc.core.StandardSchemas;
@@ -121,6 +122,21 @@ public class JdbcConnection implements AdbcConnection {
@Override
public Schema getTableSchema(String catalog, String dbSchema, String
tableName)
throws AdbcException {
+ // Check for existence
+ try (final ResultSet rs =
+ connection.getMetaData().getTables(catalog, dbSchema, tableName,
/*tableTypes*/ null)) {
+ if (!rs.next()) {
+ throw new AdbcException(
+ JdbcDriverUtil.prefixExceptionMessage("Table not found: " +
tableName), /*cause*/
+ null,
+ AdbcStatusCode.NOT_FOUND, /*sqlState*/
+ null, /*vendorCode*/
+ 0);
+ }
+ } catch (SQLException e) {
+ throw JdbcDriverUtil.fromSqlException(e);
+ }
+
// Reconstruct the schema from the metadata
// XXX: this may be inconsistent with reading the table
final List<Field> fields = new ArrayList<>();
diff --git
a/java/driver/validation/src/main/java/org/apache/arrow/adbc/driver/testsuite/AbstractConnectionMetadataTest.java
b/java/driver/validation/src/main/java/org/apache/arrow/adbc/driver/testsuite/AbstractConnectionMetadataTest.java
index 5d14339..e2b377b 100644
---
a/java/driver/validation/src/main/java/org/apache/arrow/adbc/driver/testsuite/AbstractConnectionMetadataTest.java
+++
b/java/driver/validation/src/main/java/org/apache/arrow/adbc/driver/testsuite/AbstractConnectionMetadataTest.java
@@ -18,6 +18,7 @@
package org.apache.arrow.adbc.driver.testsuite;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import java.util.ArrayList;
import java.util.Arrays;
@@ -28,8 +29,10 @@ import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.apache.arrow.adbc.core.AdbcConnection;
import org.apache.arrow.adbc.core.AdbcDatabase;
+import org.apache.arrow.adbc.core.AdbcException;
import org.apache.arrow.adbc.core.AdbcInfoCode;
import org.apache.arrow.adbc.core.AdbcStatement;
+import org.apache.arrow.adbc.core.AdbcStatusCode;
import org.apache.arrow.adbc.core.BulkIngestMode;
import org.apache.arrow.adbc.core.StandardSchemas;
import org.apache.arrow.memory.BufferAllocator;
@@ -306,6 +309,15 @@ public abstract class AbstractConnectionMetadataTest {
.isEqualTo(schema);
}
+ @Test
+ public void getTableSchemaDoesNotExist() throws Exception {
+ final AdbcException thrown =
+ assertThrows(
+ AdbcException.class,
+ () -> connection.getTableSchema(/*catalog*/ null, /*dbSchema*/
null, "DOESNOTEXIST"));
+ assertThat(thrown.getStatus()).isEqualTo(AdbcStatusCode.NOT_FOUND);
+ }
+
@Test
public void getTableTypes() throws Exception {
try (final ArrowReader reader = connection.getTableTypes()) {