blob: 133418faa900f443949ed9ceb5eba5f8957e7886 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#include <stdlib.h>
#include <arrow-glib/arrow-glib.h>
static void
print_array(GArrowArray *array)
{
GArrowType value_type;
gint64 i, n;
value_type = garrow_array_get_value_type(array);
g_print("[");
n = garrow_array_get_length(array);
#define ARRAY_CASE(type, Type, TYPE, format) \
case GARROW_TYPE_ ## TYPE: \
{ \
GArrow ## Type ## Array *real_array; \
real_array = GARROW_ ## TYPE ## _ARRAY(array); \
for (i = 0; i < n; i++) { \
if (i > 0) { \
g_print(", "); \
} \
g_print(format, \
garrow_ ## type ## _array_get_value(real_array, i)); \
} \
} \
break
switch (value_type) {
ARRAY_CASE(uint8, UInt8, UINT8, "%hhu");
ARRAY_CASE(uint16, UInt16, UINT16, "%" G_GUINT16_FORMAT);
ARRAY_CASE(uint32, UInt32, UINT32, "%" G_GUINT32_FORMAT);
ARRAY_CASE(uint64, UInt64, UINT64, "%" G_GUINT64_FORMAT);
ARRAY_CASE( int8, Int8, INT8, "%hhd");
ARRAY_CASE( int16, Int16, INT16, "%" G_GINT16_FORMAT);
ARRAY_CASE( int32, Int32, INT32, "%" G_GINT32_FORMAT);
ARRAY_CASE( int64, Int64, INT64, "%" G_GINT64_FORMAT);
ARRAY_CASE( float, Float, FLOAT, "%g");
ARRAY_CASE(double, Double, DOUBLE, "%g");
default:
break;
}
#undef ARRAY_CASE
g_print("]\n");
}
static void
print_record_batch(GArrowRecordBatch *record_batch)
{
guint nth_column, n_columns;
n_columns = garrow_record_batch_get_n_columns(record_batch);
for (nth_column = 0; nth_column < n_columns; nth_column++) {
GArrowArray *array;
g_print("columns[%u](%s): ",
nth_column,
garrow_record_batch_get_column_name(record_batch, nth_column));
array = garrow_record_batch_get_column_data(record_batch, nth_column);
print_array(array);
g_object_unref(array);
}
}
int
main(int argc, char **argv)
{
const char *input_path = "/tmp/stream.arrow";
GArrowMemoryMappedInputStream *input;
GError *error = NULL;
if (argc > 1)
input_path = argv[1];
input = garrow_memory_mapped_input_stream_new(input_path, &error);
if (!input) {
g_print("failed to open file: %s\n", error->message);
g_error_free(error);
return EXIT_FAILURE;
}
{
GArrowRecordBatchReader *reader;
GArrowRecordBatchStreamReader *stream_reader;
stream_reader =
garrow_record_batch_stream_reader_new(GARROW_INPUT_STREAM(input),
&error);
if (!stream_reader) {
g_print("failed to open stream reader: %s\n", error->message);
g_error_free(error);
g_object_unref(input);
return EXIT_FAILURE;
}
reader = GARROW_RECORD_BATCH_READER(stream_reader);
while (TRUE) {
GArrowRecordBatch *record_batch;
record_batch = garrow_record_batch_reader_read_next(reader, &error);
if (error) {
g_print("failed to read the next record batch: %s\n", error->message);
g_error_free(error);
g_object_unref(reader);
g_object_unref(input);
return EXIT_FAILURE;
}
if (!record_batch) {
break;
}
print_record_batch(record_batch);
g_object_unref(record_batch);
}
g_object_unref(reader);
}
g_object_unref(input);
return EXIT_SUCCESS;
}