Hi,

>     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);

The data is GBytes * not const char *. You need to get raw
data from GBytes *:

  GBytes *data = garrow_buffer_get_data(GARROW_BUFFER(buffer));

  gsize data_size;
  gconstpointer data_raw = g_bytes_get_data(data, &data_size);
  GArrowBuffer *receivingBuffer = garrow_buffer_new(data_raw, data_size);

And you need to call g_bytes_unref() against the data when
no longer needed:

  g_bytes_unref(data);


Thanks,
-- 
kou

In <[email protected]>
  "Re: [C/GLib] Trying (and failing) to send RecordBatches between Client and 
Server in C" on Fri, 8 Jul 2022 15:05:52 +0200,
  Joel Ziegler <[email protected]> wrote:

> 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,

Reply via email to