You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by li...@apache.org on 2023/05/22 17:48:35 UTC

[arrow-adbc] branch main updated: refactor(c): Use ArrowArrayViewListChildOffset from nanoarrow (#696)

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 ecf172e  refactor(c): Use ArrowArrayViewListChildOffset from nanoarrow (#696)
ecf172e is described below

commit ecf172e42dd08f9327b5050ffaeda263dbb0cf81
Author: William Ayd <wi...@icloud.com>
AuthorDate: Mon May 22 10:48:29 2023 -0700

    refactor(c): Use ArrowArrayViewListChildOffset from nanoarrow (#696)
    
    Related to
    https://github.com/apache/arrow-adbc/pull/679#discussion_r1195786712
    this pulls down the nanoarrow change
    https://github.com/apache/arrow-nanoarrow/pull/197
---
 c/validation/adbc_validation.cc      | 36 ++++++++++++++++++------------------
 c/validation/adbc_validation_util.cc | 14 --------------
 c/validation/adbc_validation_util.h  |  6 ------
 c/vendor/nanoarrow/nanoarrow.h       | 17 +++++++++++++++++
 4 files changed, 35 insertions(+), 38 deletions(-)

diff --git a/c/validation/adbc_validation.cc b/c/validation/adbc_validation.cc
index 5579d15..b99f469 100644
--- a/c/validation/adbc_validation.cc
+++ b/c/validation/adbc_validation.cc
@@ -515,9 +515,9 @@ void ConnectionTest::TestMetadataGetObjectsDbSchemas() {
             ArrowArrayViewGetStringUnsafe(reader.array_view->children[0], row);
 
         const int64_t start_offset =
-            ArrowArrayViewGetOffsetUnsafe(catalog_db_schemas_list, row);
+            ArrowArrayViewListChildOffset(catalog_db_schemas_list, row);
         const int64_t end_offset =
-            ArrowArrayViewGetOffsetUnsafe(catalog_db_schemas_list, row + 1);
+            ArrowArrayViewListChildOffset(catalog_db_schemas_list, row + 1);
         ASSERT_GE(end_offset, start_offset)
             << "Row " << row << " (Catalog "
             << std::string(catalog_name.data, catalog_name.size_bytes)
@@ -551,9 +551,9 @@ void ConnectionTest::TestMetadataGetObjectsDbSchemas() {
             << "Row " << row << " should have non-null catalog_db_schemas";
 
         const int64_t start_offset =
-            ArrowArrayViewGetOffsetUnsafe(catalog_db_schemas_list, row);
+            ArrowArrayViewListChildOffset(catalog_db_schemas_list, row);
         const int64_t end_offset =
-            ArrowArrayViewGetOffsetUnsafe(catalog_db_schemas_list, row + 1);
+            ArrowArrayViewListChildOffset(catalog_db_schemas_list, row + 1);
         ASSERT_EQ(start_offset, end_offset);
       }
       ASSERT_NO_FATAL_FAILURE(reader.Next());
@@ -606,17 +606,17 @@ void ConnectionTest::TestMetadataGetObjectsTables() {
             << "Row " << row << " should have non-null catalog_db_schemas";
 
         for (int64_t db_schemas_index =
-                 ArrowArrayViewGetOffsetUnsafe(catalog_db_schemas_list, row);
+                 ArrowArrayViewListChildOffset(catalog_db_schemas_list, row);
              db_schemas_index <
-             ArrowArrayViewGetOffsetUnsafe(catalog_db_schemas_list, row + 1);
+             ArrowArrayViewListChildOffset(catalog_db_schemas_list, row + 1);
              db_schemas_index++) {
           ASSERT_FALSE(ArrowArrayViewIsNull(db_schema_tables_list, db_schemas_index))
               << "Row " << row << " should have non-null db_schema_tables";
 
           for (int64_t tables_index =
-                   ArrowArrayViewGetOffsetUnsafe(db_schema_tables_list, db_schemas_index);
+                   ArrowArrayViewListChildOffset(db_schema_tables_list, db_schemas_index);
                tables_index <
-               ArrowArrayViewGetOffsetUnsafe(db_schema_tables_list, db_schemas_index + 1);
+               ArrowArrayViewListChildOffset(db_schema_tables_list, db_schemas_index + 1);
                tables_index++) {
             ArrowStringView table_name = ArrowArrayViewGetStringUnsafe(
                 db_schema_tables->children[0], tables_index);
@@ -680,17 +680,17 @@ void ConnectionTest::TestMetadataGetObjectsTablesTypes() {
             << "Row " << row << " should have non-null catalog_db_schemas";
 
         for (int64_t db_schemas_index =
-                 ArrowArrayViewGetOffsetUnsafe(catalog_db_schemas_list, row);
+                 ArrowArrayViewListChildOffset(catalog_db_schemas_list, row);
              db_schemas_index <
-             ArrowArrayViewGetOffsetUnsafe(catalog_db_schemas_list, row + 1);
+             ArrowArrayViewListChildOffset(catalog_db_schemas_list, row + 1);
              db_schemas_index++) {
           ASSERT_FALSE(ArrowArrayViewIsNull(db_schema_tables_list, db_schemas_index))
               << "Row " << row << " should have non-null db_schema_tables";
 
           for (int64_t tables_index =
-                   ArrowArrayViewGetOffsetUnsafe(db_schema_tables_list, db_schemas_index);
+                   ArrowArrayViewListChildOffset(db_schema_tables_list, db_schemas_index);
                tables_index <
-               ArrowArrayViewGetOffsetUnsafe(db_schema_tables_list, db_schemas_index + 1);
+               ArrowArrayViewListChildOffset(db_schema_tables_list, db_schemas_index + 1);
                tables_index++) {
             ArrowStringView table_name = ArrowArrayViewGetStringUnsafe(
                 db_schema_tables->children[0], tables_index);
@@ -777,9 +777,9 @@ void ConnectionTest::TestMetadataGetObjectsColumns() {
             << "Row " << row << " should have non-null catalog_db_schemas";
 
         for (int64_t db_schemas_index =
-                 ArrowArrayViewGetOffsetUnsafe(catalog_db_schemas_list, row);
+                 ArrowArrayViewListChildOffset(catalog_db_schemas_list, row);
              db_schemas_index <
-             ArrowArrayViewGetOffsetUnsafe(catalog_db_schemas_list, row + 1);
+             ArrowArrayViewListChildOffset(catalog_db_schemas_list, row + 1);
              db_schemas_index++) {
           ASSERT_FALSE(ArrowArrayViewIsNull(db_schema_tables_list, db_schemas_index))
               << "Row " << row << " should have non-null db_schema_tables";
@@ -788,9 +788,9 @@ void ConnectionTest::TestMetadataGetObjectsColumns() {
               catalog_db_schemas->children[0], db_schemas_index);
 
           for (int64_t tables_index =
-                   ArrowArrayViewGetOffsetUnsafe(db_schema_tables_list, db_schemas_index);
+                   ArrowArrayViewListChildOffset(db_schema_tables_list, db_schemas_index);
                tables_index <
-               ArrowArrayViewGetOffsetUnsafe(db_schema_tables_list, db_schemas_index + 1);
+               ArrowArrayViewListChildOffset(db_schema_tables_list, db_schemas_index + 1);
                tables_index++) {
             ArrowStringView table_name = ArrowArrayViewGetStringUnsafe(
                 db_schema_tables->children[0], tables_index);
@@ -807,9 +807,9 @@ void ConnectionTest::TestMetadataGetObjectsColumns() {
               found_expected_table = true;
 
               for (int64_t columns_index =
-                       ArrowArrayViewGetOffsetUnsafe(table_columns_list, tables_index);
+                       ArrowArrayViewListChildOffset(table_columns_list, tables_index);
                    columns_index <
-                   ArrowArrayViewGetOffsetUnsafe(table_columns_list, tables_index + 1);
+                   ArrowArrayViewListChildOffset(table_columns_list, tables_index + 1);
                    columns_index++) {
                 ArrowStringView name = ArrowArrayViewGetStringUnsafe(
                     table_columns->children[0], columns_index);
diff --git a/c/validation/adbc_validation_util.cc b/c/validation/adbc_validation_util.cc
index 17cb312..7978947 100644
--- a/c/validation/adbc_validation_util.cc
+++ b/c/validation/adbc_validation_util.cc
@@ -64,20 +64,6 @@ std::string ToString(struct ArrowArrayStream* stream) {
   return "";
 }
 
-int64_t ArrowArrayViewGetOffsetUnsafe(struct ArrowArrayView* array_view, int64_t i) {
-  struct ArrowBufferView* data_view = &array_view->buffer_views[1];
-  i += array_view->array->offset;
-  switch (array_view->storage_type) {
-    case NANOARROW_TYPE_LIST:
-    case NANOARROW_TYPE_MAP:
-      return data_view->data.as_int32[i];
-    case NANOARROW_TYPE_LARGE_LIST:
-      return data_view->data.as_int64[i];
-    default:
-      return INT64_MAX;
-  }
-}
-
 IsErrno::IsErrno(int expected, struct ArrowArrayStream* stream, struct ArrowError* error)
     : expected_(expected), stream_(stream), error_(error) {}
 
diff --git a/c/validation/adbc_validation_util.h b/c/validation/adbc_validation_util.h
index f64f64b..fa0544d 100644
--- a/c/validation/adbc_validation_util.h
+++ b/c/validation/adbc_validation_util.h
@@ -42,12 +42,6 @@ std::string ToString(struct AdbcError* error);
 std::string ToString(struct ArrowError* error);
 std::string ToString(struct ArrowArrayStream* stream);
 
-// ------------------------------------------------------------
-// Nanoarrow helpers
-
-/// \brief Get the array offset for a particular index
-int64_t ArrowArrayViewGetOffsetUnsafe(struct ArrowArrayView* array_view, int64_t i);
-
 // ------------------------------------------------------------
 // Helper to manage C Data Interface/Nanoarrow resources with RAII
 
diff --git a/c/vendor/nanoarrow/nanoarrow.h b/c/vendor/nanoarrow/nanoarrow.h
index f337795..6bd71f0 100644
--- a/c/vendor/nanoarrow/nanoarrow.h
+++ b/c/vendor/nanoarrow/nanoarrow.h
@@ -1625,6 +1625,10 @@ static inline int8_t ArrowArrayViewUnionChildIndex(struct ArrowArrayView* array_
 static inline int64_t ArrowArrayViewUnionChildOffset(struct ArrowArrayView* array_view,
                                                      int64_t i);
 
+/// \brief Get the index to use into the relevant list child array
+static inline int64_t ArrowArrayViewListChildOffset(struct ArrowArrayView* array_view,
+                                                    int64_t i);
+
 /// \brief Get an element in an ArrowArrayView as an integer
 ///
 /// This function does not check for null values, that values are actually integers, or
@@ -2910,6 +2914,19 @@ static inline int64_t ArrowArrayViewUnionChildOffset(struct ArrowArrayView* arra
   }
 }
 
+
+static inline int64_t ArrowArrayViewListChildOffset(struct ArrowArrayView* array_view,
+                                                    int64_t i) {
+  switch (array_view->storage_type) {
+    case NANOARROW_TYPE_LIST:
+      return array_view->buffer_views[1].data.as_int32[i];
+    case NANOARROW_TYPE_LARGE_LIST:
+      return array_view->buffer_views[1].data.as_int64[i];
+    default:
+      return -1;
+  }
+}
+
 static inline int64_t ArrowArrayViewGetIntUnsafe(struct ArrowArrayView* array_view,
                                                  int64_t i) {
   struct ArrowBufferView* data_view = &array_view->buffer_views[1];