Copilot commented on code in PR #4361:
URL: https://github.com/apache/arrow-adbc/pull/4361#discussion_r3353373298


##########
java/driver/jni-validation/src/test/java/org/apache/arrow/adbc/driver/jni/PostgresIntegrationTest.java:
##########
@@ -23,6 +23,7 @@
 
 import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
+import java.util.HashSet;

Review Comment:
   If you switch the new statistics assertions to use StandardStatistics 
(recommended to avoid magic numbers), you'll need to import it here in the 
imports block.



##########
java/driver/jni-validation/src/test/java/org/apache/arrow/adbc/driver/jni/PostgresIntegrationTest.java:
##########
@@ -201,6 +203,59 @@ void connectionReadOnly() {
     assertThat(e.getStatus()).isEqualTo(AdbcStatusCode.NOT_IMPLEMENTED);
   }
 
+  @Test
+  void connectionStatisticNames() throws Exception {
+    try (final var reader = conn.getStatisticNames()) {
+      assertThat(reader.loadNextBatch()).isFalse();
+    }
+  }
+
+  @Test
+  void connectionStatistics() throws Exception {
+    try (final var stmt = conn.createStatement()) {
+      stmt.setSqlQuery("DROP TABLE IF EXISTS statstable");
+      stmt.executeUpdate();
+      stmt.setSqlQuery("CREATE TABLE statstable (a INT, b TEXT)");
+      stmt.executeUpdate();
+      stmt.setSqlQuery("INSERT INTO statstable VALUES (1, 'foo'), (2, 'spam 
and eggs'), (3, NULL)");
+      stmt.executeUpdate();
+      stmt.setSqlQuery("ANALYZE statstable");
+      stmt.executeUpdate();
+    }
+
+    try (final var reader = conn.getStatistics(null, "public", "statstable", 
true)) {
+      assertThat(reader.loadNextBatch()).isTrue();
+      var catalogDbSchemas = (ListVector) 
reader.getVectorSchemaRoot().getVector(1);
+      var schemas = catalogDbSchemas.getObject(0);
+      @SuppressWarnings("unchecked")
+      var schema = (Map<String, ?>) schemas.get(0);
+      @SuppressWarnings("unchecked")
+      var stats = (List<Map<String, ?>>) schema.get("db_schema_statistics");
+      var seen = new HashSet<Integer>();
+      for (var stat : stats) {
+        assertThat(stat.get("table_name").toString()).isEqualTo("statstable");
+        short key = (Short) stat.get("statistic_key");
+        seen.add((int) key);
+        if (key == 5) { // null count
+          var columnName = stat.get("column_name").toString();
+          double statisticValue = (Double) stat.get("statistic_value");
+          if (columnName.equals("a")) {
+            assertThat(statisticValue).isEqualTo(0.0d);
+          } else if (columnName.equals("b")) {
+            assertThat(statisticValue).isGreaterThan(0.0d);
+          } else {
+            throw new AssertionError("Unexpected column name: " + columnName);
+          }
+        } else if (key == 6) { // row count

Review Comment:
   Use StandardStatistics.ROW_COUNT.getKey() instead of the literal 6 so the 
test documents what statistic is being asserted.



##########
java/driver/jni-validation/src/test/java/org/apache/arrow/adbc/driver/jni/PostgresIntegrationTest.java:
##########
@@ -201,6 +203,59 @@ void connectionReadOnly() {
     assertThat(e.getStatus()).isEqualTo(AdbcStatusCode.NOT_IMPLEMENTED);
   }
 
+  @Test
+  void connectionStatisticNames() throws Exception {
+    try (final var reader = conn.getStatisticNames()) {
+      assertThat(reader.loadNextBatch()).isFalse();
+    }
+  }
+
+  @Test
+  void connectionStatistics() throws Exception {
+    try (final var stmt = conn.createStatement()) {
+      stmt.setSqlQuery("DROP TABLE IF EXISTS statstable");
+      stmt.executeUpdate();
+      stmt.setSqlQuery("CREATE TABLE statstable (a INT, b TEXT)");
+      stmt.executeUpdate();
+      stmt.setSqlQuery("INSERT INTO statstable VALUES (1, 'foo'), (2, 'spam 
and eggs'), (3, NULL)");
+      stmt.executeUpdate();
+      stmt.setSqlQuery("ANALYZE statstable");
+      stmt.executeUpdate();
+    }
+
+    try (final var reader = conn.getStatistics(null, "public", "statstable", 
true)) {
+      assertThat(reader.loadNextBatch()).isTrue();
+      var catalogDbSchemas = (ListVector) 
reader.getVectorSchemaRoot().getVector(1);
+      var schemas = catalogDbSchemas.getObject(0);
+      @SuppressWarnings("unchecked")
+      var schema = (Map<String, ?>) schemas.get(0);
+      @SuppressWarnings("unchecked")
+      var stats = (List<Map<String, ?>>) schema.get("db_schema_statistics");
+      var seen = new HashSet<Integer>();
+      for (var stat : stats) {
+        assertThat(stat.get("table_name").toString()).isEqualTo("statstable");
+        short key = (Short) stat.get("statistic_key");
+        seen.add((int) key);
+        if (key == 5) { // null count
+          var columnName = stat.get("column_name").toString();
+          double statisticValue = (Double) stat.get("statistic_value");
+          if (columnName.equals("a")) {
+            assertThat(statisticValue).isEqualTo(0.0d);
+          } else if (columnName.equals("b")) {
+            assertThat(statisticValue).isGreaterThan(0.0d);
+          } else {
+            throw new AssertionError("Unexpected column name: " + columnName);
+          }
+        } else if (key == 6) { // row count
+          assertThat((Double) stat.get("statistic_value")).isGreaterThan(1.0d);
+        }
+        assertThat((Boolean) stat.get("statistic_is_approximate")).isTrue();
+      }
+      assertThat(reader.loadNextBatch()).isFalse();
+      assertThat(seen).contains(0, 1, 5, 6);

Review Comment:
   Use StandardStatistics constants instead of numeric literals in this 
assertion so it is self-documenting and stays aligned with the ADBC key 
definitions.



##########
java/driver/jni-validation/src/test/java/org/apache/arrow/adbc/driver/jni/PostgresIntegrationTest.java:
##########
@@ -201,6 +203,59 @@ void connectionReadOnly() {
     assertThat(e.getStatus()).isEqualTo(AdbcStatusCode.NOT_IMPLEMENTED);
   }
 
+  @Test
+  void connectionStatisticNames() throws Exception {
+    try (final var reader = conn.getStatisticNames()) {
+      assertThat(reader.loadNextBatch()).isFalse();
+    }
+  }
+
+  @Test
+  void connectionStatistics() throws Exception {
+    try (final var stmt = conn.createStatement()) {
+      stmt.setSqlQuery("DROP TABLE IF EXISTS statstable");
+      stmt.executeUpdate();
+      stmt.setSqlQuery("CREATE TABLE statstable (a INT, b TEXT)");
+      stmt.executeUpdate();
+      stmt.setSqlQuery("INSERT INTO statstable VALUES (1, 'foo'), (2, 'spam 
and eggs'), (3, NULL)");
+      stmt.executeUpdate();
+      stmt.setSqlQuery("ANALYZE statstable");
+      stmt.executeUpdate();
+    }
+
+    try (final var reader = conn.getStatistics(null, "public", "statstable", 
true)) {
+      assertThat(reader.loadNextBatch()).isTrue();
+      var catalogDbSchemas = (ListVector) 
reader.getVectorSchemaRoot().getVector(1);
+      var schemas = catalogDbSchemas.getObject(0);
+      @SuppressWarnings("unchecked")
+      var schema = (Map<String, ?>) schemas.get(0);
+      @SuppressWarnings("unchecked")
+      var stats = (List<Map<String, ?>>) schema.get("db_schema_statistics");
+      var seen = new HashSet<Integer>();
+      for (var stat : stats) {
+        assertThat(stat.get("table_name").toString()).isEqualTo("statstable");
+        short key = (Short) stat.get("statistic_key");
+        seen.add((int) key);
+        if (key == 5) { // null count

Review Comment:
   Avoid hard-coding statistic key values in the test. The project already 
defines StandardStatistics keys, which makes the assertions clearer and 
resilient if the enum values ever change.



-- 
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