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 eaf2972d refactor(c/driver/postgresql): refactor Handle class (#1132)
eaf2972d is described below

commit eaf2972d77e844ff7fe73b4d0875e1245f759513
Author: William Ayd <[email protected]>
AuthorDate: Fri Sep 29 10:46:31 2023 -0400

    refactor(c/driver/postgresql): refactor Handle class (#1132)
---
 c/driver/postgresql/postgres_copy_reader.h | 10 ++++-----
 c/driver/postgresql/postgres_util.h        | 33 ++++++++++++++++++++++++++++++
 c/driver/postgresql/statement.cc           | 31 ----------------------------
 3 files changed, 38 insertions(+), 36 deletions(-)

diff --git a/c/driver/postgresql/postgres_copy_reader.h 
b/c/driver/postgresql/postgres_copy_reader.h
index 98331087..430558a4 100644
--- a/c/driver/postgresql/postgres_copy_reader.h
+++ b/c/driver/postgresql/postgres_copy_reader.h
@@ -1209,14 +1209,14 @@ static inline ArrowErrorCode MakeCopyFieldWriter(const 
enum ArrowType arrow_type
 
 class PostgresCopyStreamWriter {
  public:
-  ~PostgresCopyStreamWriter() { ArrowArrayViewReset(array_view_.get()); }
+  ~PostgresCopyStreamWriter() { ArrowArrayViewReset(&array_view_.value); }
 
   ArrowErrorCode Init(struct ArrowSchema* schema, struct ArrowArray* array) {
     schema_ = schema;
     NANOARROW_RETURN_NOT_OK(
-        ArrowArrayViewInitFromSchema(array_view_.get(), schema, nullptr));
-    NANOARROW_RETURN_NOT_OK(ArrowArrayViewSetArray(array_view_.get(), array, 
nullptr));
-    root_writer_.Init(array_view_.get());
+        ArrowArrayViewInitFromSchema(&array_view_.value, schema, nullptr));
+    NANOARROW_RETURN_NOT_OK(ArrowArrayViewSetArray(&array_view_.value, array, 
nullptr));
+    root_writer_.Init(&array_view_.value);
     return NANOARROW_OK;
   }
 
@@ -1265,7 +1265,7 @@ class PostgresCopyStreamWriter {
  private:
   PostgresCopyFieldTupleWriter root_writer_;
   struct ArrowSchema* schema_;
-  std::unique_ptr<struct ArrowArrayView> array_view_{new struct 
ArrowArrayView};
+  Handle<struct ArrowArrayView> array_view_;
   int64_t records_written_ = 0;
 };
 
diff --git a/c/driver/postgresql/postgres_util.h 
b/c/driver/postgresql/postgres_util.h
index 0153c896..8d1af084 100644
--- a/c/driver/postgresql/postgres_util.h
+++ b/c/driver/postgresql/postgres_util.h
@@ -19,6 +19,8 @@
 
 #include <cstring>
 
+#include <nanoarrow/nanoarrow.hpp>
+
 #ifdef _WIN32
 #include <winsock2.h>
 #else
@@ -133,4 +135,35 @@ static inline uint64_t ToNetworkFloat8(double v) {
   return SwapHostToNetwork(vint);
 }
 
+/// Helper to manage resources with RAII
+
+template <typename T>
+struct Releaser {
+  static void Release(T* value) {
+    if (value->release) {
+      value->release(value);
+    }
+  }
+};
+
+template <>
+struct Releaser<struct ArrowArrayView> {
+  static void Release(struct ArrowArrayView* value) {
+    if (value->storage_type != NANOARROW_TYPE_UNINITIALIZED) {
+      ArrowArrayViewReset(value);
+    }
+  }
+};
+
+template <typename Resource>
+struct Handle {
+  Resource value;
+
+  Handle() { std::memset(&value, 0, sizeof(value)); }
+
+  ~Handle() { Releaser<Resource>::Release(&value); }
+
+  Resource* operator->() { return &value; }
+};
+
 }  // namespace adbcpq
diff --git a/c/driver/postgresql/statement.cc b/c/driver/postgresql/statement.cc
index 1fa03116..1daf7093 100644
--- a/c/driver/postgresql/statement.cc
+++ b/c/driver/postgresql/statement.cc
@@ -77,37 +77,6 @@ struct OneValueStream {
   }
 };
 
-/// Helper to manage resources with RAII
-
-template <typename T>
-struct Releaser {
-  static void Release(T* value) {
-    if (value->release) {
-      value->release(value);
-    }
-  }
-};
-
-template <>
-struct Releaser<struct ArrowArrayView> {
-  static void Release(struct ArrowArrayView* value) {
-    if (value->storage_type != NANOARROW_TYPE_UNINITIALIZED) {
-      ArrowArrayViewReset(value);
-    }
-  }
-};
-
-template <typename Resource>
-struct Handle {
-  Resource value;
-
-  Handle() { std::memset(&value, 0, sizeof(value)); }
-
-  ~Handle() { Releaser<Resource>::Release(&value); }
-
-  Resource* operator->() { return &value; }
-};
-
 /// Build an PostgresType object from a PGresult*
 AdbcStatusCode ResolvePostgresType(const PostgresTypeResolver& type_resolver,
                                    PGresult* result, PostgresType* out,

Reply via email to