diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:54:28 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:54:28 +0000 |
commit | e6918187568dbd01842d8d1d2c808ce16a894239 (patch) | |
tree | 64f88b554b444a49f656b6c656111a145cbbaa28 /src/arrow/c_glib/example/read-batch.c | |
parent | Initial commit. (diff) | |
download | ceph-e6918187568dbd01842d8d1d2c808ce16a894239.tar.xz ceph-e6918187568dbd01842d8d1d2c808ce16a894239.zip |
Adding upstream version 18.2.2.upstream/18.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/arrow/c_glib/example/read-batch.c')
-rw-r--r-- | src/arrow/c_glib/example/read-batch.c | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/src/arrow/c_glib/example/read-batch.c b/src/arrow/c_glib/example/read-batch.c new file mode 100644 index 000000000..273dc70ff --- /dev/null +++ b/src/arrow/c_glib/example/read-batch.c @@ -0,0 +1,145 @@ +/* + * 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/batch.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; + } + + { + GArrowRecordBatchFileReader *reader; + + reader = + garrow_record_batch_file_reader_new(GARROW_SEEKABLE_INPUT_STREAM(input), + &error); + if (!reader) { + g_print("failed to open file reader: %s\n", error->message); + g_error_free(error); + g_object_unref(input); + return EXIT_FAILURE; + } + + { + guint i, n; + + n = garrow_record_batch_file_reader_get_n_record_batches(reader); + for (i = 0; i < n; i++) { + GArrowRecordBatch *record_batch; + + record_batch = + garrow_record_batch_file_reader_read_record_batch(reader, i, &error); + if (!record_batch) { + g_print("failed to open file reader: %s\n", error->message); + g_error_free(error); + g_object_unref(reader); + g_object_unref(input); + return EXIT_FAILURE; + } + + print_record_batch(record_batch); + g_object_unref(record_batch); + } + } + + g_object_unref(reader); + } + + g_object_unref(input); + + return EXIT_SUCCESS; +} |