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,