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 d6694a2d refactor(c/driver/postgresql): No naked new in copy writer
(#1498)
d6694a2d is described below
commit d6694a2d072740637f22b4646ec18bd17f47ee34
Author: William Ayd <[email protected]>
AuthorDate: Wed Jan 31 12:55:07 2024 -0500
refactor(c/driver/postgresql): No naked new in copy writer (#1498)
---
c/driver/postgresql/copy/writer.h | 63 ++++++++++++++++++++++-----------------
1 file changed, 36 insertions(+), 27 deletions(-)
diff --git a/c/driver/postgresql/copy/writer.h
b/c/driver/postgresql/copy/writer.h
index 32c894b5..ad119ffe 100644
--- a/c/driver/postgresql/copy/writer.h
+++ b/c/driver/postgresql/copy/writer.h
@@ -490,90 +490,99 @@ class PostgresCopyTimestampFieldWriter : public
PostgresCopyFieldWriter {
}
};
-static inline ArrowErrorCode MakeCopyFieldWriter(struct ArrowSchema* schema,
- PostgresCopyFieldWriter** out,
- ArrowError* error) {
+static inline ArrowErrorCode MakeCopyFieldWriter(
+ struct ArrowSchema* schema, std::unique_ptr<PostgresCopyFieldWriter>* out,
+ ArrowError* error) {
struct ArrowSchemaView schema_view;
NANOARROW_RETURN_NOT_OK(ArrowSchemaViewInit(&schema_view, schema, error));
switch (schema_view.type) {
case NANOARROW_TYPE_BOOL:
- *out = new PostgresCopyBooleanFieldWriter();
+ *out = std::make_unique<PostgresCopyBooleanFieldWriter>();
return NANOARROW_OK;
case NANOARROW_TYPE_INT8:
case NANOARROW_TYPE_INT16:
- *out = new PostgresCopyNetworkEndianFieldWriter<int16_t>();
+ *out = std::make_unique<PostgresCopyNetworkEndianFieldWriter<int16_t>>();
return NANOARROW_OK;
case NANOARROW_TYPE_INT32:
- *out = new PostgresCopyNetworkEndianFieldWriter<int32_t>();
+ *out = std::make_unique<PostgresCopyNetworkEndianFieldWriter<int32_t>>();
return NANOARROW_OK;
case NANOARROW_TYPE_INT64:
- *out = new PostgresCopyNetworkEndianFieldWriter<int64_t>();
+ *out = std::make_unique<PostgresCopyNetworkEndianFieldWriter<int64_t>>();
return NANOARROW_OK;
case NANOARROW_TYPE_DATE32: {
constexpr int32_t kPostgresDateEpoch = 10957;
- *out = new PostgresCopyNetworkEndianFieldWriter<int32_t,
kPostgresDateEpoch>();
+ *out = std::make_unique<
+ PostgresCopyNetworkEndianFieldWriter<int32_t, kPostgresDateEpoch>>();
return NANOARROW_OK;
}
case NANOARROW_TYPE_FLOAT:
- *out = new PostgresCopyFloatFieldWriter();
+ *out = std::make_unique<PostgresCopyFloatFieldWriter>();
return NANOARROW_OK;
case NANOARROW_TYPE_DOUBLE:
- *out = new PostgresCopyDoubleFieldWriter();
+ *out = std::make_unique<PostgresCopyDoubleFieldWriter>();
return NANOARROW_OK;
case NANOARROW_TYPE_DECIMAL128: {
const auto precision = schema_view.decimal_precision;
const auto scale = schema_view.decimal_scale;
- *out =
- new
PostgresCopyNumericFieldWriter<NANOARROW_TYPE_DECIMAL128>(precision, scale);
+ *out =
std::make_unique<PostgresCopyNumericFieldWriter<NANOARROW_TYPE_DECIMAL128>>(
+ precision, scale);
return NANOARROW_OK;
}
case NANOARROW_TYPE_DECIMAL256: {
const auto precision = schema_view.decimal_precision;
const auto scale = schema_view.decimal_scale;
- *out =
- new
PostgresCopyNumericFieldWriter<NANOARROW_TYPE_DECIMAL256>(precision, scale);
+ *out =
std::make_unique<PostgresCopyNumericFieldWriter<NANOARROW_TYPE_DECIMAL256>>(
+ precision, scale);
return NANOARROW_OK;
}
case NANOARROW_TYPE_BINARY:
case NANOARROW_TYPE_STRING:
case NANOARROW_TYPE_LARGE_STRING:
- *out = new PostgresCopyBinaryFieldWriter();
+ *out = std::make_unique<PostgresCopyBinaryFieldWriter>();
return NANOARROW_OK;
case NANOARROW_TYPE_TIMESTAMP: {
switch (schema_view.time_unit) {
case NANOARROW_TIME_UNIT_NANO:
- *out = new
PostgresCopyTimestampFieldWriter<NANOARROW_TIME_UNIT_NANO>();
+ *out = std::make_unique<
+ PostgresCopyTimestampFieldWriter<NANOARROW_TIME_UNIT_NANO>>();
break;
case NANOARROW_TIME_UNIT_MILLI:
- *out = new
PostgresCopyTimestampFieldWriter<NANOARROW_TIME_UNIT_MILLI>();
+ *out = std::make_unique<
+ PostgresCopyTimestampFieldWriter<NANOARROW_TIME_UNIT_MILLI>>();
break;
case NANOARROW_TIME_UNIT_MICRO:
- *out = new
PostgresCopyTimestampFieldWriter<NANOARROW_TIME_UNIT_MICRO>();
+ *out = std::make_unique<
+ PostgresCopyTimestampFieldWriter<NANOARROW_TIME_UNIT_MICRO>>();
break;
case NANOARROW_TIME_UNIT_SECOND:
- *out = new
PostgresCopyTimestampFieldWriter<NANOARROW_TIME_UNIT_SECOND>();
+ *out = std::make_unique<
+ PostgresCopyTimestampFieldWriter<NANOARROW_TIME_UNIT_SECOND>>();
break;
}
return NANOARROW_OK;
}
case NANOARROW_TYPE_INTERVAL_MONTH_DAY_NANO:
- *out = new PostgresCopyIntervalFieldWriter();
+ *out = std::make_unique<PostgresCopyIntervalFieldWriter>();
return NANOARROW_OK;
case NANOARROW_TYPE_DURATION: {
switch (schema_view.time_unit) {
case NANOARROW_TIME_UNIT_SECOND:
- *out = new
PostgresCopyDurationFieldWriter<NANOARROW_TIME_UNIT_SECOND>();
+ *out = std::make_unique<
+ PostgresCopyDurationFieldWriter<NANOARROW_TIME_UNIT_SECOND>>();
break;
case NANOARROW_TIME_UNIT_MILLI:
- *out = new
PostgresCopyDurationFieldWriter<NANOARROW_TIME_UNIT_MILLI>();
+ *out = std::make_unique<
+ PostgresCopyDurationFieldWriter<NANOARROW_TIME_UNIT_MILLI>>();
break;
case NANOARROW_TIME_UNIT_MICRO:
- *out = new
PostgresCopyDurationFieldWriter<NANOARROW_TIME_UNIT_MICRO>();
+ *out = std::make_unique<
+ PostgresCopyDurationFieldWriter<NANOARROW_TIME_UNIT_MICRO>>();
break;
case NANOARROW_TIME_UNIT_NANO:
- *out = new
PostgresCopyDurationFieldWriter<NANOARROW_TIME_UNIT_NANO>();
+ *out = std::make_unique<
+ PostgresCopyDurationFieldWriter<NANOARROW_TIME_UNIT_NANO>>();
break;
}
return NANOARROW_OK;
@@ -587,7 +596,7 @@ static inline ArrowErrorCode MakeCopyFieldWriter(struct
ArrowSchema* schema,
case NANOARROW_TYPE_STRING:
case NANOARROW_TYPE_LARGE_BINARY:
case NANOARROW_TYPE_LARGE_STRING:
- *out = new PostgresCopyBinaryDictFieldWriter();
+ *out = std::make_unique<PostgresCopyBinaryDictFieldWriter>();
return NANOARROW_OK;
default:
break;
@@ -644,10 +653,10 @@ class PostgresCopyStreamWriter {
}
for (int64_t i = 0; i < schema_->n_children; i++) {
- PostgresCopyFieldWriter* child_writer = nullptr;
+ std::unique_ptr<PostgresCopyFieldWriter> child_writer;
NANOARROW_RETURN_NOT_OK(
MakeCopyFieldWriter(schema_->children[i], &child_writer, error));
-
root_writer_.AppendChild(std::unique_ptr<PostgresCopyFieldWriter>(child_writer));
+ root_writer_.AppendChild(std::move(child_writer));
}
return NANOARROW_OK;