Hi Sutou Kouhei,
closing the writer before requesting the data does not solve the problem
at my side. Any other error i made? The error happens at the creation of
the RecordBatchStreamReader.
void testRecordbatchStream(GArrowRecordBatch *rb){
GError *error = NULL;
GArrowResizableBuffer *buffer = garrow_resizable_buffer_new(300,
&error);
if(buffer == NULL){
fprintf(stderr, "Failed to initialize resizable buffer! Error
message: %s\n", error->message);
g_error_free(error);
}
GArrowBufferOutputStream *bufferStream =
garrow_buffer_output_stream_new(buffer);
GArrowSchema *schema = garrow_record_batch_get_schema(rb);
GArrowRecordBatchStreamWriter *sw =
garrow_record_batch_stream_writer_new(GARROW_OUTPUT_STREAM(bufferStream),
schema, &error);
if(sw == NULL){
fprintf(stderr, "Failed to create Record batch writer! Error
message: %s\n", error->message);
g_error_free(error);
}
g_object_unref(bufferStream);
g_object_unref(schema);
gboolean test =
garrow_record_batch_writer_write_record_batch(GARROW_RECORD_BATCH_WRITER(sw),
rb, &error);
if(!test){
fprintf(stderr, "Failed to write Record batch! Error message:
%s\n", error->message);
g_error_free(error);
}
g_object_unref(sw);
GBytes *data = garrow_buffer_get_data(GARROW_BUFFER(buffer));
gint64 length = garrow_buffer_get_size(GARROW_BUFFER(buffer));
GArrowBuffer *receivingBuffer = garrow_buffer_new(data, length);
GArrowBufferInputStream *inputStream =
garrow_buffer_input_stream_new(GARROW_BUFFER(receivingBuffer)); // using
inital buffer here, without the intermediate data pointer, works!
GArrowRecordBatchStreamReader *sr =
garrow_record_batch_stream_reader_new(GARROW_INPUT_STREAM(inputStream),
&error);
if(sr == NULL){
fprintf(stderr, "Failed to create stream reader! Error message:
%s\n", error->message);
g_error_free(error);
}
GArrowRecordBatch *rb2 =
garrow_record_batch_reader_read_next(GARROW_RECORD_BATCH_READER(sr),
&error);
if(rb == NULL){
printf("Failed to create record batch from stream... Error
message: %s\n", error->message);
g_error_free(error);
}else {
printf("Recordbatch:\n%s\n",
garrow_record_batch_to_string(rb2, &error));
}
g_object_unref(inputStream);
g_object_unref(rb2);
g_object_unref(sr);
g_object_unref(buffer);
}
On 07.07.22 22:30, Sutou Kouhei wrote:
Hi,
gboolean test = garrow_record_batch_writer_write_record_batch(
GARROW_RECORD_BATCH_WRITER(sw), rb, &error);
GBytes *data = garrow_buffer_get_data(GARROW_BUFFER(buffer));
gint64 length = garrow_buffer_get_size(GARROW_BUFFER(buffer));
g_object_unref(sw);
You need to "close" the writer before you get data from
buffer. g_object_unref(sw) closes the writer implicitly:
gboolean test = garrow_record_batch_writer_write_record_batch(
GARROW_RECORD_BATCH_WRITER(sw), rb, &error);
g_object_unref(sw);
GBytes *data = garrow_buffer_get_data(GARROW_BUFFER(buffer));
gint64 length = garrow_buffer_get_size(GARROW_BUFFER(buffer));
Thanks,