amoeba commented on code in PR #4203:
URL: https://github.com/apache/arrow-adbc/pull/4203#discussion_r3080761387


##########
java/driver/jni/src/test/java/org/apache/arrow/adbc/driver/jni/JniDriverTest.java:
##########
@@ -398,4 +398,135 @@ void bulkIngest() throws Exception {
       }
     }
   }
+
+  @Test
+  void getSetOption() throws Exception {
+    TypedKey<Integer> batchRowsInt = new 
TypedKey<>("adbc.sqlite.query.batch_rows", Integer.class);
+    TypedKey<Long> batchRowsLong = new 
TypedKey<>("adbc.sqlite.query.batch_rows", Long.class);
+    TypedKey<Boolean> bindByName = new 
TypedKey<>("adbc.statement.bind_by_name", Boolean.class);
+    TypedKey<String> bindByNameString = new 
TypedKey<>("adbc.statement.bind_by_name", String.class);
+    try (final BufferAllocator allocator = new RootAllocator()) {
+      JniDriver driver = new JniDriver(allocator);
+      Map<String, Object> parameters = new HashMap<>();
+      JniDriver.PARAM_DRIVER.set(parameters, "adbc_driver_sqlite");
+      try (final AdbcDatabase db = driver.open(parameters)) {
+        assertThat(db.getOption(batchRowsInt)).isEqualTo(1024);
+        assertThat(db.getOption(batchRowsLong)).isEqualTo(1024L);
+        assertThat(db.getOption(AdbcDriver.PARAM_URI))
+            .isEqualTo("file:adbc_driver_sqlite?mode=memory&cache=shared");
+
+        try (final AdbcConnection conn = db.connect();
+            final AdbcStatement stmt = conn.createStatement()) {
+          assertThat(conn.getOption(batchRowsInt)).isEqualTo(1024);
+          assertThat(conn.getOption(batchRowsLong)).isEqualTo(1024L);
+
+          assertThat(stmt.getOption(batchRowsInt)).isEqualTo(1024);
+          assertThat(stmt.getOption(batchRowsLong)).isEqualTo(1024L);
+          stmt.setOption(batchRowsLong, 42L);
+          assertThat(stmt.getOption(batchRowsLong)).isEqualTo(42L);
+          assertThat(stmt.getOption(bindByName)).isFalse();
+          assertThat(stmt.getOption(bindByNameString)).isEqualTo("false");
+          stmt.setOption(bindByName, true);
+          assertThat(stmt.getOption(bindByName)).isTrue();
+          assertThat(stmt.getOption(bindByNameString)).isEqualTo("true");
+        }
+      }
+    }
+  }
+
+  static class GetSetOptionFailCase {
+    @SuppressWarnings("rawtypes")
+    final TypedKey key;
+
+    final Object value;
+    final String message;
+
+    GetSetOptionFailCase(TypedKey<?> key, Object value, String message) {
+      this.key = key;
+      this.value = value;
+      this.message = message;
+    }
+
+    @Override
+    public String toString() {
+      String v;
+      if (value == null) {
+        v = "(NULL)";
+      } else if (value instanceof byte[]) {
+        v = Arrays.toString((byte[]) value);
+      } else {
+        v = value.toString();
+      }
+      return "key=" + key.getKey() + ", value=" + v;
+    }
+  }
+
+  @ParameterizedTest
+  @MethodSource("getSetOptionFailProvider")
+  void getSetOptionFailDatabase(GetSetOptionFailCase testCase) throws 
Exception {
+    // These will fail; we don't have a driver that supports an example of 
every type
+    try (final BufferAllocator allocator = new RootAllocator()) {
+      JniDriver driver = new JniDriver(allocator);
+      Map<String, Object> parameters = new HashMap<>();
+      JniDriver.PARAM_DRIVER.set(parameters, "adbc_driver_sqlite");
+      try (final AdbcDatabase db = driver.open(parameters)) {
+        AdbcException e;
+        //noinspection unchecked

Review Comment:
   My LSP wants to see these annotations for the yellow squigglies to go away,
   
   ```patch
   diff --git 
a/java/driver/jni/src/test/java/org/apache/arrow/adbc/driver/jni/JniDriverTest.java
 
b/java/driver/jni/src/test/java/org/apache/arrow/adbc/driver/jni/JniDriverTest.java
   index c9a092221..8513d0de7 100644
   --- 
a/java/driver/jni/src/test/java/org/apache/arrow/adbc/driver/jni/JniDriverTest.java
   +++ 
b/java/driver/jni/src/test/java/org/apache/arrow/adbc/driver/jni/JniDriverTest.java
   @@ -461,6 +461,7 @@ class JniDriverTest {
        }
      }
    
   +  @SuppressWarnings("unchecked")
      @ParameterizedTest
      @MethodSource("getSetOptionFailProvider")
      void getSetOptionFailDatabase(GetSetOptionFailCase testCase) throws 
Exception {
   @@ -478,6 +479,7 @@ class JniDriverTest {
        }
      }
    
   +  @SuppressWarnings("unchecked")
      @ParameterizedTest
      @MethodSource("getSetOptionFailProvider")
      void getSetOptionFailConnection(GetSetOptionFailCase testCase) throws 
Exception {
   @@ -495,6 +497,7 @@ class JniDriverTest {
        }
      }
    
   +  @SuppressWarnings("unchecked")
      @ParameterizedTest
      @MethodSource("getSetOptionFailProvider")
      void getSetOptionFailStatement(GetSetOptionFailCase testCase) throws 
Exception {
   ```



##########
java/driver/jni/src/main/cpp/jni_wrapper.cc:
##########
@@ -456,15 +456,163 @@ 
Java_org_apache_arrow_adbc_driver_jni_impl_NativeAdbc_statementExecuteSchema(
   return nullptr;
 }
 
+JNIEXPORT jbyteArray JNICALL
+Java_org_apache_arrow_adbc_driver_jni_impl_NativeAdbc_statementGetOptionBytes(
+    JNIEnv* env, [[maybe_unused]] jclass self, jlong handle, jstring key) {
+  struct AdbcError error = ADBC_ERROR_INIT;
+  auto* db = reinterpret_cast<struct 
AdbcStatement*>(static_cast<uintptr_t>(handle));

Review Comment:
   nit: maybe rename these variables `stmt` and `conn` throughout this file as 
appropriate?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to