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