This is an automated email from the ASF dual-hosted git repository.
kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/main by this push:
new c30bb6a845 GH-41056: [GLib][FlightRPC] Add gaflight_client_do_put()
and related APIs (#43813)
c30bb6a845 is described below
commit c30bb6a84536d66bc1179e2a051915d5c34b2616
Author: Sutou Kouhei <[email protected]>
AuthorDate: Tue Aug 27 14:49:45 2024 +0900
GH-41056: [GLib][FlightRPC] Add gaflight_client_do_put() and related APIs
(#43813)
### Rationale for this change
DoPut is needed to upload data.
### What changes are included in this PR?
* Add `gaflight_client_do_put()`
* Add `GAFlightStreamWriter`
* Add `GAFlightMetadataReader`
* Add `GAFlightDoPutResult`
* Fix `GAFlightRecordBatchWriter` API
### Are these changes tested?
No. They aren't tested yet. We will add tests when we implement server side
DoPut.
### Are there any user-facing changes?
Yes.
* GitHub Issue: #41056
Authored-by: Sutou Kouhei <[email protected]>
Signed-off-by: Sutou Kouhei <[email protected]>
---
c_glib/arrow-flight-glib/client.cpp | 337 +++++++++++++++++++++++++++++++++++-
c_glib/arrow-flight-glib/client.h | 46 +++++
c_glib/arrow-flight-glib/client.hpp | 16 ++
c_glib/arrow-flight-glib/common.cpp | 102 ++---------
c_glib/arrow-flight-glib/common.h | 8 +-
c_glib/arrow-glib/writer.hpp | 4 +
6 files changed, 421 insertions(+), 92 deletions(-)
diff --git a/c_glib/arrow-flight-glib/client.cpp
b/c_glib/arrow-flight-glib/client.cpp
index 80c47e336f..23f59c9da6 100644
--- a/c_glib/arrow-flight-glib/client.cpp
+++ b/c_glib/arrow-flight-glib/client.cpp
@@ -33,10 +33,19 @@ G_BEGIN_DECLS
* #GAFlightStreamReader is a class for reading record batches from a
* server.
*
+ * #GAFlightStreamWriter is a class for writing record batches to a
+ * server.
+ *
+ * #GAFlightMetadataReader is a class for reading metadata from a
+ * server.
+ *
* #GAFlightCallOptions is a class for options of each call.
*
* #GAFlightClientOptions is a class for options of each client.
*
+ * #GAFlightDoPutResult is a class that has gaflight_client_do_put()
+ * result.
+ *
* #GAFlightClient is a class for Apache Arrow Flight client.
*
* Since: 5.0.0
@@ -56,6 +65,128 @@ gaflight_stream_reader_class_init(GAFlightStreamReaderClass
*klass)
{
}
+G_DEFINE_TYPE(GAFlightStreamWriter,
+ gaflight_stream_writer,
+ GAFLIGHT_TYPE_RECORD_BATCH_WRITER)
+
+static void
+gaflight_stream_writer_init(GAFlightStreamWriter *object)
+{
+}
+
+static void
+gaflight_stream_writer_class_init(GAFlightStreamWriterClass *klass)
+{
+}
+
+/**
+ * gaflight_stream_writer_done_writing:
+ * @writer: A #GAFlightStreamWriter.
+ * @error: (nullable): Return location for a #GError or %NULL.
+ *
+ * Returns: %TRUE on success, %FALSE on error.
+ *
+ * Since: 18.0.0
+ */
+gboolean
+gaflight_stream_writer_done_writing(GAFlightStreamWriter *writer, GError
**error)
+{
+ auto flight_writer =
std::static_pointer_cast<arrow::flight::FlightStreamWriter>(
+ garrow_record_batch_writer_get_raw(GARROW_RECORD_BATCH_WRITER(writer)));
+ return garrow::check(error,
+ flight_writer->DoneWriting(),
+ "[flight-stream-writer][done-writing]");
+}
+
+struct GAFlightMetadataReaderPrivate
+{
+ arrow::flight::FlightMetadataReader *reader;
+};
+
+enum {
+ PROP_METADATA_READER_READER = 1,
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(GAFlightMetadataReader,
+ gaflight_metadata_reader,
+ G_TYPE_OBJECT)
+
+#define GAFLIGHT_METADATA_READER_GET_PRIVATE(object)
\
+ static_cast<GAFlightMetadataReaderPrivate *>(
\
+
gaflight_metadata_reader_get_instance_private(GAFLIGHT_METADATA_READER(object)))
+
+static void
+gaflight_metadata_reader_finalize(GObject *object)
+{
+ auto priv = GAFLIGHT_METADATA_READER_GET_PRIVATE(object);
+ delete priv->reader;
+ G_OBJECT_CLASS(gaflight_metadata_reader_parent_class)->finalize(object);
+}
+
+static void
+gaflight_metadata_reader_set_property(GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ auto priv = GAFLIGHT_METADATA_READER_GET_PRIVATE(object);
+
+ switch (prop_id) {
+ case PROP_METADATA_READER_READER:
+ priv->reader =
+ static_cast<arrow::flight::FlightMetadataReader
*>(g_value_get_pointer(value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gaflight_metadata_reader_init(GAFlightMetadataReader *object)
+{
+}
+
+static void
+gaflight_metadata_reader_class_init(GAFlightMetadataReaderClass *klass)
+{
+ auto gobject_class = G_OBJECT_CLASS(klass);
+
+ gobject_class->finalize = gaflight_metadata_reader_finalize;
+ gobject_class->set_property = gaflight_metadata_reader_set_property;
+
+ GParamSpec *spec;
+ spec = g_param_spec_pointer(
+ "reader",
+ nullptr,
+ nullptr,
+ static_cast<GParamFlags>(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property(gobject_class, PROP_METADATA_READER_READER,
spec);
+}
+
+/**
+ * gaflight_metadata_reader_read:
+ * @reader: A #GAFlightMetadataReader.
+ * @error: (nullable): Return location for a #GError or %NULL.
+ *
+ * Returns: (transfer full): The metadata on success, %NULL on error.
+ *
+ * Since: 18.0.0
+ */
+GArrowBuffer *
+gaflight_metadata_reader_read(GAFlightMetadataReader *reader, GError **error)
+{
+ auto flight_reader = gaflight_metadata_reader_get_raw(reader);
+ std::shared_ptr<arrow::Buffer> metadata;
+ if (garrow::check(error,
+ flight_reader->ReadMetadata(&metadata),
+ "[flight-metadata-reader][read]")) {
+ return garrow_buffer_new_raw(&metadata);
+ } else {
+ return nullptr;
+ }
+}
+
typedef struct GAFlightCallOptionsPrivate_
{
arrow::flight::FlightCallOptions options;
@@ -385,6 +516,137 @@ gaflight_client_options_new(void)
g_object_new(GAFLIGHT_TYPE_CLIENT_OPTIONS, NULL));
}
+struct GAFlightDoPutResultPrivate
+{
+ GAFlightStreamWriter *writer;
+ GAFlightMetadataReader *reader;
+};
+
+enum {
+ PROP_DO_PUT_RESULT_RESULT = 1,
+ PROP_DO_PUT_RESULT_WRITER,
+ PROP_DO_PUT_RESULT_READER,
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(GAFlightDoPutResult, gaflight_do_put_result,
G_TYPE_OBJECT)
+
+#define GAFLIGHT_DO_PUT_RESULT_GET_PRIVATE(object)
\
+ static_cast<GAFlightDoPutResultPrivate *>(
\
+
gaflight_do_put_result_get_instance_private(GAFLIGHT_DO_PUT_RESULT(object)))
+
+static void
+gaflight_do_put_result_dispose(GObject *object)
+{
+ auto priv = GAFLIGHT_DO_PUT_RESULT_GET_PRIVATE(object);
+
+ if (priv->writer) {
+ g_object_unref(priv->writer);
+ priv->writer = nullptr;
+ }
+
+ if (priv->reader) {
+ g_object_unref(priv->reader);
+ priv->reader = nullptr;
+ }
+
+ G_OBJECT_CLASS(gaflight_do_put_result_parent_class)->dispose(object);
+}
+
+static void
+gaflight_do_put_result_init(GAFlightDoPutResult *object)
+{
+}
+
+static void
+gaflight_do_put_result_set_property(GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ auto priv = GAFLIGHT_DO_PUT_RESULT_GET_PRIVATE(object);
+
+ switch (prop_id) {
+ case PROP_DO_PUT_RESULT_RESULT:
+ {
+ auto result = static_cast<arrow::flight::FlightClient::DoPutResult *>(
+ g_value_get_pointer(value));
+ priv->writer = gaflight_stream_writer_new_raw(result->writer.release());
+ priv->reader =
gaflight_metadata_reader_new_raw(result->reader.release());
+ break;
+ }
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gaflight_do_put_result_get_property(GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ auto priv = GAFLIGHT_DO_PUT_RESULT_GET_PRIVATE(object);
+
+ switch (prop_id) {
+ case PROP_DO_PUT_RESULT_WRITER:
+ g_value_set_object(value, priv->writer);
+ break;
+ case PROP_DO_PUT_RESULT_READER:
+ g_value_set_object(value, priv->reader);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gaflight_do_put_result_class_init(GAFlightDoPutResultClass *klass)
+{
+ auto gobject_class = G_OBJECT_CLASS(klass);
+
+ gobject_class->dispose = gaflight_do_put_result_dispose;
+ gobject_class->set_property = gaflight_do_put_result_set_property;
+ gobject_class->get_property = gaflight_do_put_result_get_property;
+
+ GParamSpec *spec;
+ spec = g_param_spec_pointer(
+ "result",
+ nullptr,
+ nullptr,
+ static_cast<GParamFlags>(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property(gobject_class, PROP_DO_PUT_RESULT_RESULT,
spec);
+
+ /**
+ * GAFlightDoPutResult:writer:
+ *
+ * A writer to write record batches to.
+ *
+ * Since: 18.0.0
+ */
+ spec = g_param_spec_object("writer",
+ nullptr,
+ nullptr,
+ GAFLIGHT_TYPE_STREAM_WRITER,
+ static_cast<GParamFlags>(G_PARAM_READABLE));
+ g_object_class_install_property(gobject_class, PROP_DO_PUT_RESULT_WRITER,
spec);
+
+ /**
+ * GAFlightDoPutResult:reader:
+ *
+ * A reader for application metadata from the server.
+ *
+ * Since: 18.0.0
+ */
+ spec = g_param_spec_object("reader",
+ nullptr,
+ nullptr,
+ GAFLIGHT_TYPE_METADATA_READER,
+ static_cast<GParamFlags>(G_PARAM_READABLE));
+ g_object_class_install_property(gobject_class, PROP_DO_PUT_RESULT_READER,
spec);
+}
+
struct GAFlightClientPrivate
{
std::shared_ptr<arrow::flight::FlightClient> client;
@@ -661,6 +923,51 @@ gaflight_client_do_get(GAFlightClient *client,
return gaflight_stream_reader_new_raw(flight_reader.release(), TRUE);
}
+/**
+ * gaflight_client_do_put:
+ * @client: A #GAFlightClient.
+ * @descriptor: A #GAFlightDescriptor.
+ * @schema: A #GArrowSchema.
+ * @options: (nullable): A #GAFlightCallOptions.
+ * @error: (nullable): Return location for a #GError or %NULL.
+ *
+ * Upload data to a Flight described by the given descriptor. The
+ * caller must call garrow_record_batch_writer_close() on the
+ * returned stream once they are done writing.
+ *
+ * The reader and writer are linked; closing the writer will also
+ * close the reader. Use garrow_flight_stream_writer_done_writing() to
+ * only close the write side of the channel.
+ *
+ * Returns: (nullable) (transfer full):
+ * The #GAFlighDoPutResult holding a reader and a writer on success,
+ * %NULL on error.
+ *
+ * Since: 18.0.0
+ */
+GAFlightDoPutResult *
+gaflight_client_do_put(GAFlightClient *client,
+ GAFlightDescriptor *descriptor,
+ GArrowSchema *schema,
+ GAFlightCallOptions *options,
+ GError **error)
+{
+ auto flight_client = gaflight_client_get_raw(client);
+ auto flight_descriptor = gaflight_descriptor_get_raw(descriptor);
+ auto arrow_schema = garrow_schema_get_raw(schema);
+ arrow::flight::FlightCallOptions flight_default_options;
+ auto flight_options = &flight_default_options;
+ if (options) {
+ flight_options = gaflight_call_options_get_raw(options);
+ }
+ auto result = flight_client->DoPut(*flight_options, *flight_descriptor,
arrow_schema);
+ if (!garrow::check(error, result, "[flight-client][do-put]")) {
+ return nullptr;
+ }
+ auto flight_result = std::move(*result);
+ return gaflight_do_put_result_new_raw(&flight_result);
+}
+
G_END_DECLS
GAFlightStreamReader *
@@ -672,7 +979,28 @@
gaflight_stream_reader_new_raw(arrow::flight::FlightStreamReader *flight_reader,
flight_reader,
"is-owner",
is_owner,
- NULL));
+ nullptr));
+}
+
+GAFlightStreamWriter *
+gaflight_stream_writer_new_raw(arrow::flight::FlightStreamWriter
*flight_writer)
+{
+ return GAFLIGHT_STREAM_WRITER(
+ g_object_new(GAFLIGHT_TYPE_STREAM_WRITER, "writer", flight_writer,
nullptr));
+}
+
+GAFlightMetadataReader *
+gaflight_metadata_reader_new_raw(arrow::flight::FlightMetadataReader
*flight_reader)
+{
+ return GAFLIGHT_METADATA_READER(
+ g_object_new(GAFLIGHT_TYPE_METADATA_READER, "reader", flight_reader,
nullptr));
+}
+
+arrow::flight::FlightMetadataReader *
+gaflight_metadata_reader_get_raw(GAFlightMetadataReader *reader)
+{
+ auto priv = GAFLIGHT_METADATA_READER_GET_PRIVATE(reader);
+ return priv->reader;
}
arrow::flight::FlightCallOptions *
@@ -689,6 +1017,13 @@ gaflight_client_options_get_raw(GAFlightClientOptions
*options)
return &(priv->options);
}
+GAFlightDoPutResult *
+gaflight_do_put_result_new_raw(arrow::flight::FlightClient::DoPutResult
*flight_result)
+{
+ return GAFLIGHT_DO_PUT_RESULT(
+ g_object_new(GAFLIGHT_TYPE_DO_PUT_RESULT, "result", flight_result,
nullptr));
+}
+
std::shared_ptr<arrow::flight::FlightClient>
gaflight_client_get_raw(GAFlightClient *client)
{
diff --git a/c_glib/arrow-flight-glib/client.h
b/c_glib/arrow-flight-glib/client.h
index a91bbe55e3..12c5a06b81 100644
--- a/c_glib/arrow-flight-glib/client.h
+++ b/c_glib/arrow-flight-glib/client.h
@@ -35,6 +35,35 @@ struct _GAFlightStreamReaderClass
GAFlightRecordBatchReaderClass parent_class;
};
+#define GAFLIGHT_TYPE_STREAM_WRITER (gaflight_stream_writer_get_type())
+GAFLIGHT_AVAILABLE_IN_18_0
+G_DECLARE_DERIVABLE_TYPE(GAFlightStreamWriter,
+ gaflight_stream_writer,
+ GAFLIGHT,
+ STREAM_WRITER,
+ GAFlightRecordBatchWriter)
+struct _GAFlightStreamWriterClass
+{
+ GAFlightRecordBatchWriterClass parent_class;
+};
+
+GAFLIGHT_AVAILABLE_IN_18_0
+gboolean
+gaflight_stream_writer_done_writing(GAFlightStreamWriter *writer, GError
**error);
+
+#define GAFLIGHT_TYPE_METADATA_READER (gaflight_metadata_reader_get_type())
+GAFLIGHT_AVAILABLE_IN_18_0
+G_DECLARE_DERIVABLE_TYPE(
+ GAFlightMetadataReader, gaflight_metadata_reader, GAFLIGHT, METADATA_READER,
GObject)
+struct _GAFlightMetadataReaderClass
+{
+ GObjectClass parent_class;
+};
+
+GAFLIGHT_AVAILABLE_IN_18_0
+GArrowBuffer *
+gaflight_metadata_reader_read(GAFlightMetadataReader *reader, GError **error);
+
#define GAFLIGHT_TYPE_CALL_OPTIONS (gaflight_call_options_get_type())
GAFLIGHT_AVAILABLE_IN_5_0
G_DECLARE_DERIVABLE_TYPE(
@@ -75,6 +104,15 @@ GAFLIGHT_AVAILABLE_IN_5_0
GAFlightClientOptions *
gaflight_client_options_new(void);
+#define GAFLIGHT_TYPE_DO_PUT_RESULT (gaflight_do_put_result_get_type())
+GAFLIGHT_AVAILABLE_IN_18_0
+G_DECLARE_DERIVABLE_TYPE(
+ GAFlightDoPutResult, gaflight_do_put_result, GAFLIGHT, DO_PUT_RESULT,
GObject)
+struct _GAFlightDoPutResultClass
+{
+ GObjectClass parent_class;
+};
+
#define GAFLIGHT_TYPE_CLIENT (gaflight_client_get_type())
GAFLIGHT_AVAILABLE_IN_5_0
G_DECLARE_DERIVABLE_TYPE(GAFlightClient, gaflight_client, GAFLIGHT, CLIENT,
GObject)
@@ -124,4 +162,12 @@ gaflight_client_do_get(GAFlightClient *client,
GAFlightCallOptions *options,
GError **error);
+GAFLIGHT_AVAILABLE_IN_18_0
+GAFlightDoPutResult *
+gaflight_client_do_put(GAFlightClient *client,
+ GAFlightDescriptor *descriptor,
+ GArrowSchema *schema,
+ GAFlightCallOptions *options,
+ GError **error);
+
G_END_DECLS
diff --git a/c_glib/arrow-flight-glib/client.hpp
b/c_glib/arrow-flight-glib/client.hpp
index 185a28e6dc..888f87ecb5 100644
--- a/c_glib/arrow-flight-glib/client.hpp
+++ b/c_glib/arrow-flight-glib/client.hpp
@@ -28,6 +28,18 @@ GAFlightStreamReader *
gaflight_stream_reader_new_raw(arrow::flight::FlightStreamReader
*flight_reader,
gboolean is_owner);
+GAFLIGHT_EXTERN
+GAFlightStreamWriter *
+gaflight_stream_writer_new_raw(arrow::flight::FlightStreamWriter
*flight_writer);
+
+GAFLIGHT_EXTERN
+GAFlightMetadataReader *
+gaflight_metadata_reader_new_raw(arrow::flight::FlightMetadataReader
*flight_reader);
+
+GAFLIGHT_EXTERN
+arrow::flight::FlightMetadataReader *
+gaflight_metadata_reader_get_raw(GAFlightMetadataReader *reader);
+
GAFLIGHT_EXTERN
arrow::flight::FlightCallOptions *
gaflight_call_options_get_raw(GAFlightCallOptions *options);
@@ -36,6 +48,10 @@ GAFLIGHT_EXTERN
arrow::flight::FlightClientOptions *
gaflight_client_options_get_raw(GAFlightClientOptions *options);
+GAFLIGHT_EXTERN
+GAFlightDoPutResult *
+gaflight_do_put_result_new_raw(arrow::flight::FlightClient::DoPutResult
*flight_result);
+
GAFLIGHT_EXTERN
std::shared_ptr<arrow::flight::FlightClient>
gaflight_client_get_raw(GAFlightClient *client);
diff --git a/c_glib/arrow-flight-glib/common.cpp
b/c_glib/arrow-flight-glib/common.cpp
index f7eea08c26..3deaf67cc1 100644
--- a/c_glib/arrow-flight-glib/common.cpp
+++ b/c_glib/arrow-flight-glib/common.cpp
@@ -1196,7 +1196,7 @@ gaflight_record_batch_reader_finalize(GObject *object)
if (priv->is_owner) {
delete priv->reader;
}
- G_OBJECT_CLASS(gaflight_info_parent_class)->finalize(object);
+ G_OBJECT_CLASS(gaflight_record_batch_reader_parent_class)->finalize(object);
}
static void
@@ -1300,57 +1300,9 @@
gaflight_record_batch_reader_read_all(GAFlightRecordBatchReader *reader, GError
}
}
-typedef struct GAFlightRecordBatchWriterPrivate_
-{
- arrow::flight::MetadataRecordBatchWriter *writer;
- bool is_owner;
-} GAFlightRecordBatchWriterPrivate;
-
-enum {
- PROP_RECORD_BATCH_WRITER_WRITER = 1,
- PROP_RECORD_BATCH_WRITER_IS_OWNER,
-};
-
-G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GAFlightRecordBatchWriter,
- gaflight_record_batch_writer,
- GARROW_TYPE_RECORD_BATCH_WRITER)
-
-#define GAFLIGHT_RECORD_BATCH_WRITER_GET_PRIVATE(object)
\
- static_cast<GAFlightRecordBatchWriterPrivate *>(
\
- gaflight_record_batch_writer_get_instance_private(
\
- GAFLIGHT_RECORD_BATCH_WRITER(object)))
-
-static void
-gaflight_record_batch_writer_finalize(GObject *object)
-{
- auto priv = GAFLIGHT_RECORD_BATCH_WRITER_GET_PRIVATE(object);
- if (priv->is_owner) {
- delete priv->writer;
- }
- G_OBJECT_CLASS(gaflight_info_parent_class)->finalize(object);
-}
-
-static void
-gaflight_record_batch_writer_set_property(GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- auto priv = GAFLIGHT_RECORD_BATCH_WRITER_GET_PRIVATE(object);
-
- switch (prop_id) {
- case PROP_RECORD_BATCH_WRITER_WRITER:
- priv->writer =
- static_cast<arrow::flight::MetadataRecordBatchWriter
*>(g_value_get_pointer(value));
- break;
- case PROP_RECORD_BATCH_WRITER_IS_OWNER:
- priv->is_owner = g_value_get_boolean(value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
- break;
- }
-}
+G_DEFINE_ABSTRACT_TYPE(GAFlightRecordBatchWriter,
+ gaflight_record_batch_writer,
+ GARROW_TYPE_RECORD_BATCH_WRITER)
static void
gaflight_record_batch_writer_init(GAFlightRecordBatchWriter *object)
@@ -1360,26 +1312,6 @@
gaflight_record_batch_writer_init(GAFlightRecordBatchWriter *object)
static void
gaflight_record_batch_writer_class_init(GAFlightRecordBatchWriterClass *klass)
{
- auto gobject_class = G_OBJECT_CLASS(klass);
-
- gobject_class->finalize = gaflight_record_batch_writer_finalize;
- gobject_class->set_property = gaflight_record_batch_writer_set_property;
-
- GParamSpec *spec;
- spec = g_param_spec_pointer(
- "writer",
- nullptr,
- nullptr,
- static_cast<GParamFlags>(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property(gobject_class,
PROP_RECORD_BATCH_WRITER_WRITER, spec);
-
- spec = g_param_spec_boolean(
- "is-owner",
- nullptr,
- nullptr,
- TRUE,
- static_cast<GParamFlags>(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property(gobject_class,
PROP_RECORD_BATCH_WRITER_IS_OWNER, spec);
}
/**
@@ -1402,7 +1334,8 @@
gaflight_record_batch_writer_begin(GAFlightRecordBatchWriter *writer,
GArrowWriteOptions *options,
GError **error)
{
- auto flight_writer = gaflight_record_batch_writer_get_raw(writer);
+ auto flight_writer =
std::static_pointer_cast<arrow::flight::MetadataRecordBatchWriter>(
+ garrow_record_batch_writer_get_raw(GARROW_RECORD_BATCH_WRITER(writer)));
auto arrow_schema = garrow_schema_get_raw(schema);
arrow::ipc::IpcWriteOptions arrow_write_options;
if (options) {
@@ -1432,7 +1365,8 @@
gaflight_record_batch_writer_write_metadata(GAFlightRecordBatchWriter *writer,
GArrowBuffer *metadata,
GError **error)
{
- auto flight_writer = gaflight_record_batch_writer_get_raw(writer);
+ auto flight_writer =
std::static_pointer_cast<arrow::flight::MetadataRecordBatchWriter>(
+ garrow_record_batch_writer_get_raw(GARROW_RECORD_BATCH_WRITER(writer)));
auto arrow_metadata = garrow_buffer_get_raw(metadata);
return garrow::check(error,
flight_writer->WriteMetadata(arrow_metadata),
@@ -1440,7 +1374,7 @@
gaflight_record_batch_writer_write_metadata(GAFlightRecordBatchWriter *writer,
}
/**
- * gaflight_record_batch_writer_write:
+ * gaflight_record_batch_writer_write_record_batch:
* @writer: A #GAFlightRecordBatchWriter.
* @record_batch: A #GArrowRecordBatch.
* @metadata: (nullable): A #GArrowBuffer.
@@ -1453,12 +1387,13 @@
gaflight_record_batch_writer_write_metadata(GAFlightRecordBatchWriter *writer,
* Since: 18.0.0
*/
gboolean
-gaflight_record_batch_writer_write(GAFlightRecordBatchWriter *writer,
- GArrowRecordBatch *record_batch,
- GArrowBuffer *metadata,
- GError **error)
+gaflight_record_batch_writer_write_record_batch(GAFlightRecordBatchWriter
*writer,
+ GArrowRecordBatch
*record_batch,
+ GArrowBuffer *metadata,
+ GError **error)
{
- auto flight_writer = gaflight_record_batch_writer_get_raw(writer);
+ auto flight_writer =
std::static_pointer_cast<arrow::flight::MetadataRecordBatchWriter>(
+ garrow_record_batch_writer_get_raw(GARROW_RECORD_BATCH_WRITER(writer)));
auto arrow_record_batch = garrow_record_batch_get_raw(record_batch);
auto arrow_metadata = garrow_buffer_get_raw(metadata);
return garrow::check(
@@ -1599,10 +1534,3 @@
gaflight_record_batch_reader_get_raw(GAFlightRecordBatchReader *reader)
auto priv = GAFLIGHT_RECORD_BATCH_READER_GET_PRIVATE(reader);
return priv->reader;
}
-
-arrow::flight::MetadataRecordBatchWriter *
-gaflight_record_batch_writer_get_raw(GAFlightRecordBatchWriter *writer)
-{
- auto priv = GAFLIGHT_RECORD_BATCH_WRITER_GET_PRIVATE(writer);
- return priv->writer;
-}
diff --git a/c_glib/arrow-flight-glib/common.h
b/c_glib/arrow-flight-glib/common.h
index 91c828caab..726132fe49 100644
--- a/c_glib/arrow-flight-glib/common.h
+++ b/c_glib/arrow-flight-glib/common.h
@@ -259,9 +259,9 @@
gaflight_record_batch_writer_write_metadata(GAFlightRecordBatchWriter *writer,
GAFLIGHT_AVAILABLE_IN_18_0
gboolean
-gaflight_record_batch_writer_write(GAFlightRecordBatchWriter *writer,
- GArrowRecordBatch *record_batch,
- GArrowBuffer *metadata,
- GError **error);
+gaflight_record_batch_writer_write_record_batch(GAFlightRecordBatchWriter
*writer,
+ GArrowRecordBatch
*record_batch,
+ GArrowBuffer *metadata,
+ GError **error);
G_END_DECLS
diff --git a/c_glib/arrow-glib/writer.hpp b/c_glib/arrow-glib/writer.hpp
index aa87ffe77d..1d85ac52f8 100644
--- a/c_glib/arrow-glib/writer.hpp
+++ b/c_glib/arrow-glib/writer.hpp
@@ -25,16 +25,20 @@
#include <arrow-glib/writer.h>
+GARROW_AVAILABLE_IN_ALL
GArrowRecordBatchWriter *
garrow_record_batch_writer_new_raw(
std::shared_ptr<arrow::ipc::RecordBatchWriter> *arrow_writer);
+GARROW_AVAILABLE_IN_ALL
std::shared_ptr<arrow::ipc::RecordBatchWriter>
garrow_record_batch_writer_get_raw(GArrowRecordBatchWriter *writer);
+GARROW_AVAILABLE_IN_ALL
GArrowRecordBatchStreamWriter *
garrow_record_batch_stream_writer_new_raw(
std::shared_ptr<arrow::ipc::RecordBatchWriter> *arrow_writer);
+GARROW_AVAILABLE_IN_ALL
GArrowRecordBatchFileWriter *
garrow_record_batch_file_writer_new_raw(
std::shared_ptr<arrow::ipc::RecordBatchWriter> *arrow_writer);