This is an automated email from the ASF dual-hosted git repository.
wesm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new 8cb5cbf ARROW-3360: [GLib] Import Parquet GLib
8cb5cbf is described below
commit 8cb5cbfa40643d9e3e7250e51402e2ff2a9cf8ec
Author: Kouhei Sutou <[email protected]>
AuthorDate: Mon Oct 1 17:30:08 2018 -0400
ARROW-3360: [GLib] Import Parquet GLib
It's based on https://github.com/red-data-tools/parquet-glib at
32a2b2099f90c19d28322693dd853dc8643c55ec.
See also:
https://github.com/red-data-tools/parquet-glib/commit/32a2b2099f90c19d28322693dd853dc8643c55ec
Author: Kouhei Sutou <[email protected]>
Closes #2622 from kou/glib-import-parquet and squashes the following
commits:
43ae5c5fb <Kouhei Sutou> Import Parquet GLib
---
.travis.yml | 1 +
c_glib/Makefile.am | 1 +
c_glib/configure.ac | 28 ++-
c_glib/doc/Makefile.am | 5 +-
c_glib/doc/{reference => arrow-glib}/Makefile.am | 0
.../{reference => arrow-glib}/arrow-glib-docs.xml | 0
.../doc/{reference => arrow-glib}/entities.xml.in | 0
c_glib/doc/{reference => arrow-glib}/meson.build | 0
c_glib/doc/{reference => parquet-glib}/Makefile.am | 41 ++--
.../{reference => parquet-glib}/entities.xml.in | 0
c_glib/doc/{reference => parquet-glib}/meson.build | 46 ++--
c_glib/doc/parquet-glib/parquet-glib-docs.xml | 65 +++++
c_glib/meson.build | 13 +-
c_glib/parquet-glib/Makefile.am | 140 +++++++++++
c_glib/parquet-glib/arrow-file-reader.cpp | 263 ++++++++++++++++++++
c_glib/parquet-glib/arrow-file-reader.h | 55 +++++
c_glib/parquet-glib/arrow-file-reader.hpp | 29 +++
c_glib/parquet-glib/arrow-file-writer.cpp | 265 +++++++++++++++++++++
c_glib/parquet-glib/arrow-file-writer.h | 56 +++++
c_glib/parquet-glib/arrow-file-writer.hpp | 29 +++
c_glib/parquet-glib/meson.build | 81 +++++++
c_glib/parquet-glib/parquet-glib.h | 23 ++
c_glib/parquet-glib/parquet-glib.hpp | 25 ++
.../parquet-glib.pc.in} | 13 +-
c_glib/test/parquet/test-arrow.rb | 64 +++++
c_glib/test/run-test.rb | 5 +
c_glib/test/run-test.sh | 2 +-
27 files changed, 1189 insertions(+), 61 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index 79c6add..09487f9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -179,6 +179,7 @@ matrix:
os: linux
env:
- ARROW_TRAVIS_ORC=1
+ - ARROW_TRAVIS_PARQUET=1
- BUILD_TORCH_EXAMPLE=no
- CC="gcc-4.9"
- CXX="g++-4.9"
diff --git a/c_glib/Makefile.am b/c_glib/Makefile.am
index 92190e4..5fb65f0 100644
--- a/c_glib/Makefile.am
+++ b/c_glib/Makefile.am
@@ -20,6 +20,7 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
SUBDIRS = \
arrow-glib \
arrow-gpu-glib \
+ parquet-glib \
doc \
example \
tool
diff --git a/c_glib/configure.ac b/c_glib/configure.ac
index 1384e9b..7f1ee6a 100644
--- a/c_glib/configure.ac
+++ b/c_glib/configure.ac
@@ -134,6 +134,10 @@ if test "x$GARROW_ARROW_CPP_BUILD_DIR" = "x"; then
[arrow-gpu],
[HAVE_ARROW_GPU=yes],
[HAVE_ARROW_GPU=no])
+ PKG_CHECK_MODULES([PARQUET],
+ [parquet],
+ [HAVE_PARQUET=yes],
+ [HAVE_PARQUET=no])
else
USE_ARROW_BUILD_DIR=yes
@@ -166,6 +170,17 @@ else
fi
AC_SUBST(ARROW_GPU_CFLAGS)
AC_SUBST(ARROW_GPU_LIBS)
+
+ PARQUET_CFLAGS=""
+ if test -f "${GARROW_ARROW_CPP_BUILD_DIR}/src/parquet/parquet.pc"; then
+ HAVE_PARQUET=yes
+ PARQUET_LIBS="-lparquet"
+ else
+ HAVE_PARQUET=no
+ PARQUET_LIBS=""
+ fi
+ AC_SUBST(PARQUET_CFLAGS)
+ AC_SUBST(PARQUET_LIBS)
fi
AM_CONDITIONAL([USE_ARROW_BUILD_DIR],
@@ -181,6 +196,11 @@ if test "$HAVE_ARROW_GPU" = "yes"; then
AC_DEFINE(HAVE_ARROW_GPU, [1], [Define to 1 if Apache Arrow supports GPU.])
fi
+AM_CONDITIONAL([HAVE_PARQUET], [test "$HAVE_PARQUET" = "yes"])
+if test "$HAVE_PARQUET" = "yes"; then
+ AC_DEFINE(HAVE_PARQUET, [1], [Define to 1 if Apache Parquet exists.])
+fi
+
exampledir="\$(datadir)/arrow-glib/example"
AC_SUBST(exampledir)
@@ -192,9 +212,13 @@ AC_CONFIG_FILES([
arrow-glib/version.h
arrow-gpu-glib/Makefile
arrow-gpu-glib/arrow-gpu-glib.pc
+ parquet-glib/Makefile
+ parquet-glib/parquet-glib.pc
doc/Makefile
- doc/reference/Makefile
- doc/reference/entities.xml
+ doc/arrow-glib/Makefile
+ doc/arrow-glib/entities.xml
+ doc/parquet-glib/Makefile
+ doc/parquet-glib/entities.xml
example/Makefile
example/lua/Makefile
tool/Makefile
diff --git a/c_glib/doc/Makefile.am b/c_glib/doc/Makefile.am
index 1d491ab..549823b 100644
--- a/c_glib/doc/Makefile.am
+++ b/c_glib/doc/Makefile.am
@@ -15,5 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-SUBDIRS = \
- reference
+SUBDIRS = \
+ arrow-glib \
+ parquet-glib
diff --git a/c_glib/doc/reference/Makefile.am
b/c_glib/doc/arrow-glib/Makefile.am
similarity index 100%
copy from c_glib/doc/reference/Makefile.am
copy to c_glib/doc/arrow-glib/Makefile.am
diff --git a/c_glib/doc/reference/arrow-glib-docs.xml
b/c_glib/doc/arrow-glib/arrow-glib-docs.xml
similarity index 100%
rename from c_glib/doc/reference/arrow-glib-docs.xml
rename to c_glib/doc/arrow-glib/arrow-glib-docs.xml
diff --git a/c_glib/doc/reference/entities.xml.in
b/c_glib/doc/arrow-glib/entities.xml.in
similarity index 100%
copy from c_glib/doc/reference/entities.xml.in
copy to c_glib/doc/arrow-glib/entities.xml.in
diff --git a/c_glib/doc/reference/meson.build
b/c_glib/doc/arrow-glib/meson.build
similarity index 100%
copy from c_glib/doc/reference/meson.build
copy to c_glib/doc/arrow-glib/meson.build
diff --git a/c_glib/doc/reference/Makefile.am
b/c_glib/doc/parquet-glib/Makefile.am
similarity index 67%
rename from c_glib/doc/reference/Makefile.am
rename to c_glib/doc/parquet-glib/Makefile.am
index ad0c938..71459a8 100644
--- a/c_glib/doc/reference/Makefile.am
+++ b/c_glib/doc/parquet-glib/Makefile.am
@@ -15,34 +15,29 @@
# specific language governing permissions and limitations
# under the License.
-DOC_MODULE = arrow-glib
+if HAVE_PARQUET
+DOC_MODULE = parquet-glib
DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.xml
DOC_SOURCE_DIR = \
- $(top_srcdir)/arrow-glib \
- $(top_builddir)/arrow-glib
+ $(top_srcdir)/parquet-glib \
+ $(top_builddir)/parquet-glib
SCAN_OPTIONS = \
- --deprecated-guards="GARROW_DISABLE_DEPRECATED"
+ --deprecated-guards="GPARQUET_DISABLE_DEPRECATED"
MKDB_OPTIONS = \
- --name-space=garrow \
+ --name-space=gparquet \
--source-suffixes="c,cpp,h"
HFILE_GLOB = \
- $(top_srcdir)/arrow-glib/*.h \
- $(top_builddir)/arrow-glib/*.h
+ $(top_srcdir)/parquet-glib/*.h
IGNORE_HFILES =
-if !HAVE_ARROW_ORC
-IGNORE_HFILES += \
- $(top_srcdir)/arrow-glib/orc-file-reader.h
-endif
-
CFILE_GLOB = \
- $(top_srcdir)/arrow-glib/*.cpp
+ $(top_srcdir)/parquet-glib/*.cpp
AM_CPPFLAGS = \
-I$(top_builddir) \
@@ -50,21 +45,12 @@ AM_CPPFLAGS = \
AM_CFLAGS = \
$(GLIB_CFLAGS) \
- $(ARROW_CFLAGS)
+ $(ARROW_CFLAGS) \
+ $(PARQUET_CFLAGS)
GTKDOC_LIBS = \
- $(top_builddir)/arrow-glib/libarrow-glib.la
-
-if HAVE_ARROW_GPU
-DOC_SOURCE_DIR += \
- $(top_srcdir)/arrow-gpu-glib
-HFILE_GLOB += \
- $(top_srcdir)/arrow-gpu-glib/*.h
-CFILE_GLOB += \
- $(top_srcdir)/arrow-gpu-glib/*.cpp
-GTKDOC_LIBS += \
- $(top_builddir)/arrow-gpu-glib/libarrow-gpu-glib.la
-endif
+ $(top_builddir)/arrow-glib/libarrow-glib.la \
+ $(top_builddir)/parquet-glib/libparquet-glib.la
include $(top_srcdir)/gtk-doc.make
@@ -74,6 +60,9 @@ CLEANFILES += \
$(DOC_MODULE)-overrides.txt \
$(DOC_MODULE)-sections.txt \
$(DOC_MODULE).types
+else
+EXTRA_DIST =
+endif
EXTRA_DIST += \
entities.xml.in \
diff --git a/c_glib/doc/reference/entities.xml.in
b/c_glib/doc/parquet-glib/entities.xml.in
similarity index 100%
rename from c_glib/doc/reference/entities.xml.in
rename to c_glib/doc/parquet-glib/entities.xml.in
diff --git a/c_glib/doc/reference/meson.build
b/c_glib/doc/parquet-glib/meson.build
similarity index 66%
rename from c_glib/doc/reference/meson.build
rename to c_glib/doc/parquet-glib/meson.build
index 68050aa..7f6f8ab 100644
--- a/c_glib/doc/reference/meson.build
+++ b/c_glib/doc/parquet-glib/meson.build
@@ -17,13 +17,14 @@
# specific language governing permissions and limitations
# under the License.
+project_name = 'parquet-glib'
entities_conf = configuration_data()
-entities_conf.set('PACKAGE', meson.project_name())
+entities_conf.set('PACKAGE', project_name)
entities_conf.set('PACKAGE_BUGREPORT',
- 'https://issues.apache.org/jira/browse/ARROW')
-entities_conf.set('PACKAGE_NAME', meson.project_name())
+ 'https://issues.apache.org/jira/browse/PARQUET')
+entities_conf.set('PACKAGE_NAME', project_name)
entities_conf.set('PACKAGE_STRING',
- ' '.join([meson.project_name(), version]))
+ ' '.join([project_name, version]))
entities_conf.set('PACKAGE_URL', 'https://arrow.apache.org/')
entities_conf.set('PACKAGE_VERSION', version)
configure_file(input: 'entities.xml.in',
@@ -41,49 +42,40 @@ html_images = [
glib_prefix = dependency('glib-2.0').get_pkgconfig_variable('prefix')
glib_doc_path = join_paths(glib_prefix, 'share', 'gtk-doc', 'html')
-doc_path = join_paths(data_dir, meson.project_name(), 'gtk-doc', 'html')
+arrow_glib_doc_path = join_paths(data_dir,
+ 'gtk-doc',
+ 'html',
+ meson.project_name())
+doc_path = join_paths(data_dir, project_name, 'gtk-doc', 'html')
source_directories = [
- join_paths(meson.source_root(), 'arrow-glib'),
- join_paths(meson.build_root(), 'arrow-glib'),
+ join_paths(meson.source_root(), 'parquet-glib'),
+ join_paths(meson.build_root(), 'parquet-glib'),
]
dependencies = [
- arrow_glib,
+ parquet_glib,
]
-if arrow_gpu.found()
- source_directories += [
- join_paths(meson.source_root(), 'arrow-gpu-glib'),
- join_paths(meson.build_root(), 'arrow-gpu-glib'),
- ]
- dependencies += [
- arrow_gpu_glib,
- ]
-endif
ignore_headers = []
-if not have_arrow_orc
- ignore_headers += [
- join_paths(meson.source_root(), 'arrow-glib', 'orc-file-reader.h'),
- ]
-endif
-gnome.gtkdoc(meson.project_name(),
- main_xml: meson.project_name() + '-docs.xml',
+gnome.gtkdoc(project_name,
+ main_xml: project_name + '-docs.xml',
src_dir: source_directories,
dependencies: dependencies,
ignore_headers: ignore_headers,
- gobject_typesfile: meson.project_name() + '.types',
+ gobject_typesfile: project_name + '.types',
scan_args: [
'--rebuild-types',
- '--deprecated-guards=GARROW_DISABLE_DEPRECATED',
+ '--deprecated-guards=GPARQUET_DISABLE_DEPRECATED',
],
mkdb_args: [
'--output-format=xml',
- '--name-space=garrow',
+ '--name-space=gparquet',
'--source-suffixes=c,cpp,h',
],
fixxref_args: [
'--html-dir=' + doc_path,
'--extra-dir=' + join_paths(glib_doc_path, 'glib'),
'--extra-dir=' + join_paths(glib_doc_path, 'gobject'),
+ '--extra-dir=' + arrow_glib_doc_path,
],
html_assets: html_images,
install: true)
diff --git a/c_glib/doc/parquet-glib/parquet-glib-docs.xml
b/c_glib/doc/parquet-glib/parquet-glib-docs.xml
new file mode 100644
index 0000000..0f2c30b
--- /dev/null
+++ b/c_glib/doc/parquet-glib/parquet-glib-docs.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<!--
+ 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.
+-->
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+[
+ <!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED
'http://www.w3.org/2003/XInclude'">
+ <!ENTITY % gtkdocentities SYSTEM "entities.xml">
+ %gtkdocentities;
+]>
+<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
+ <bookinfo>
+ <title>&package_name; Reference Manual</title>
+ <releaseinfo>
+ for &package_string;.
+ <!--
+ The latest version of this documentation can be found on-line at
+ <ulink role="online-location"
url="http://[SERVER]/&package_name;/">http://[SERVER]/&package_name;/</ulink>.
+ -->
+ </releaseinfo>
+ </bookinfo>
+
+ <part id="arrow">
+ <title>Arrow</title>
+ <chapter id="io">
+ <title>IO</title>
+ <xi:include href="xml/arrow-file-reader.xml"/>
+ <xi:include href="xml/arrow-file-writer.xml"/>
+ </chapter>
+ </part>
+
+ <chapter id="object-tree">
+ <title>Object Hierarchy</title>
+ <xi:include href="xml/tree_index.sgml"/>
+ </chapter>
+ <index id="api-index-full">
+ <title>API Index</title>
+ <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
+ </index>
+ <index id="deprecated-api-index" role="deprecated">
+ <title>Index of deprecated API</title>
+ <xi:include href="xml/api-index-deprecated.xml"><xi:fallback
/></xi:include>
+ </index>
+ <index id="api-index-0-11-0" role="0.11.0">
+ <title>Index of new symbols in 0.11.0</title>
+ <xi:include href="xml/api-index-0.11.0.xml"><xi:fallback /></xi:include>
+ </index>
+ <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
+</book>
diff --git a/c_glib/meson.build b/c_glib/meson.build
index a83ab9c..066405e 100644
--- a/c_glib/meson.build
+++ b/c_glib/meson.build
@@ -64,6 +64,7 @@ if arrow_cpp_build_lib_dir == ''
arrow = dependency('arrow')
have_arrow_orc = dependency('arrow-orc', required: false).found()
arrow_gpu = dependency('arrow-gpu', required: false)
+ parquet = dependency('parquet', required: false)
else
base_include_directories += [
include_directories(join_paths(arrow_cpp_build_dir, 'src')),
@@ -88,16 +89,25 @@ main(void)
arrow_gpu = cpp_compiler.find_library('arrow_gpu',
dirs: [arrow_cpp_build_lib_dir],
required: false)
+ parquet = cpp_compiler.find_library('parquet',
+ dirs: [arrow_cpp_build_lib_dir],
+ required: false)
endif
subdir('arrow-glib')
if arrow_gpu.found()
subdir('arrow-gpu-glib')
endif
+if parquet.found()
+ subdir('parquet-glib')
+endif
subdir('example')
if get_option('gtk_doc')
- subdir('doc/reference')
+ subdir('doc/arrow-glib')
+ if parquet.found()
+ subdir('doc/parquet-glib')
+ endif
endif
run_test = find_program('test/run-test.sh')
@@ -106,4 +116,5 @@ test('unit test',
env: [
'ARROW_GLIB_TYPELIB_DIR=@0@/arrow-glib'.format(meson.build_root()),
'ARROW_GPU_GLIB_TYPELIB_DIR=@0@/arrow-gpu-glib'.format(meson.build_root()),
+ 'PARQUET_GLIB_TYPELIB_DIR=@0@/parquet-glib'.format(meson.build_root()),
])
diff --git a/c_glib/parquet-glib/Makefile.am b/c_glib/parquet-glib/Makefile.am
new file mode 100644
index 0000000..7ade780
--- /dev/null
+++ b/c_glib/parquet-glib/Makefile.am
@@ -0,0 +1,140 @@
+# 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.
+
+CLEANFILES =
+DISTCLEANFILES =
+
+EXTRA_DIST = \
+ meson.build
+
+AM_CPPFLAGS = \
+ -I$(top_builddir) \
+ -I$(top_srcdir)
+
+AM_CFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(GARROW_CFLAGS) \
+ $(GPARQUET_CFLAGS)
+
+if HAVE_PARQUET
+lib_LTLIBRARIES = \
+ libparquet-glib.la
+
+libparquet_glib_la_CXXFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(ARROW_CFLAGS) \
+ $(PARQUET_CFLAGS) \
+ $(GARROW_CFLAGS) \
+ $(GPARQUET_CXXFLAGS)
+
+libparquet_glib_la_LDFLAGS = \
+ -version-info $(LT_VERSION_INFO) \
+ -no-undefined
+
+libparquet_glib_la_LIBADD = \
+ $(GLIB_LIBS) \
+ $(ARROW_LIBS) \
+ $(PARQUET_LIBS) \
+ $(GARROW_LIBS)
+
+libparquet_glib_la_headers = \
+ arrow-file-reader.h \
+ arrow-file-writer.h \
+ parquet-glib.h
+
+libparquet_glib_la_sources = \
+ arrow-file-reader.cpp \
+ arrow-file-writer.cpp \
+ $(libparquet_glib_la_headers)
+
+libparquet_glib_la_cpp_headers = \
+ arrow-file-reader.hpp \
+ arrow-file-writer.hpp \
+ parquet-glib.hpp
+
+libparquet_glib_la_SOURCES = \
+ $(libparquet_glib_la_sources) \
+ $(libparquet_glib_la_cpp_headers)
+
+parquet_glib_includedir = $(includedir)/parquet-glib
+parquet_glib_include_HEADERS = \
+ $(libparquet_glib_la_headers) \
+ $(libparquet_glib_la_cpp_headers)
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = \
+ parquet-glib.pc
+
+# GObject Introspection
+if HAVE_INTROSPECTION
+-include $(INTROSPECTION_MAKEFILE)
+INTROSPECTION_GIRS =
+INTROSPECTION_SCANNER_ARGS =
+INTROSPECTION_SCANNER_ENV =
+if USE_ARROW_BUILD_DIR
+INTROSPECTION_SCANNER_ENV += \
+
PKG_CONFIG_PATH=${abs_top_builddir}/arrow-glib:$(ARROW_BUILD_DIR)/src/arrow:$${PKG_CONFIG_PATH}
+else
+INTROSPECTION_SCANNER_ENV += \
+ PKG_CONFIG_PATH=${abs_top_builddir}/arrow-glib:$${PKG_CONFIG_PATH}
+endif
+INTROSPECTION_COMPILER_ARGS = \
+ --includedir=$(abs_top_builddir)/arrow-glib
+
+Parquet-1.0.gir: libparquet-glib.la
+Parquet_1_0_gir_PACKAGES = \
+ arrow-glib
+Parquet_1_0_gir_EXPORT_PACKAGES = \
+ parquet-glib
+Parquet_1_0_gir_INCLUDES = \
+ Arrow-1.0
+Parquet_1_0_gir_CFLAGS = \
+ $(AM_CPPFLAGS)
+Parquet_1_0_gir_LIBS =
+Parquet_1_0_gir_FILES = $(libparquet_glib_la_sources)
+Parquet_1_0_gir_SCANNERFLAGS = \
+ --add-include-path=$(abs_top_builddir)/arrow-glib \
+ --library-path=$(ARROW_LIB_DIR) \
+ --warn-all \
+ --identifier-prefix=GParquet \
+ --symbol-prefix=gparquet
+if OS_MACOS
+Parquet_1_0_gir_LIBS += \
+ arrow-glib \
+ parquet-glib
+Parquet_1_0_gir_SCANNERFLAGS += \
+ --no-libtool \
+ --library-path=$(abs_top_builddir)/arrow-glib/.libs \
+ --library-path=$(abs_builddir)/.libs
+else
+Parquet_1_0_gir_LIBS += \
+ $(abs_top_builddir)/arrow-glib/libarrow-glib.la \
+ libparquet-glib.la
+endif
+INTROSPECTION_GIRS += Parquet-1.0.gir
+
+girdir = $(datadir)/gir-1.0
+gir_DATA = $(INTROSPECTION_GIRS)
+
+typelibdir = $(libdir)/girepository-1.0
+typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
+
+CLEANFILES += \
+ $(gir_DATA) \
+ $(typelib_DATA)
+endif
+endif
diff --git a/c_glib/parquet-glib/arrow-file-reader.cpp
b/c_glib/parquet-glib/arrow-file-reader.cpp
new file mode 100644
index 0000000..07aa829
--- /dev/null
+++ b/c_glib/parquet-glib/arrow-file-reader.cpp
@@ -0,0 +1,263 @@
+/*
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <arrow-glib/arrow-glib.hpp>
+
+#include <parquet-glib/arrow-file-reader.hpp>
+
+G_BEGIN_DECLS
+
+/**
+ * SECTION: arrow-file-reader
+ * @short_description: Arrow file reader class
+ * @include: parquet-glib/parquet-glib.h
+ *
+ * #GParquetArrowFileReader is a class for reading Apache Parquet data
+ * from file and returns them as Apache Arrow data.
+ */
+
+typedef struct GParquetArrowFileReaderPrivate_ {
+ parquet::arrow::FileReader *arrow_file_reader;
+} GParquetArrowFileReaderPrivate;
+
+enum {
+ PROP_0,
+ PROP_ARROW_FILE_READER
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(GParquetArrowFileReader,
+ gparquet_arrow_file_reader,
+ G_TYPE_OBJECT)
+
+#define GPARQUET_ARROW_FILE_READER_GET_PRIVATE(obj) \
+ static_cast<GParquetArrowFileReaderPrivate *>( \
+ gparquet_arrow_file_reader_get_instance_private( \
+ GPARQUET_ARROW_FILE_READER(obj)))
+
+static void
+gparquet_arrow_file_reader_finalize(GObject *object)
+{
+ auto priv = GPARQUET_ARROW_FILE_READER_GET_PRIVATE(object);
+
+ delete priv->arrow_file_reader;
+
+ G_OBJECT_CLASS(gparquet_arrow_file_reader_parent_class)->finalize(object);
+}
+
+static void
+gparquet_arrow_file_reader_set_property(GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ auto priv = GPARQUET_ARROW_FILE_READER_GET_PRIVATE(object);
+
+ switch (prop_id) {
+ case PROP_ARROW_FILE_READER:
+ priv->arrow_file_reader =
+ static_cast<parquet::arrow::FileReader *>(g_value_get_pointer(value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gparquet_arrow_file_reader_get_property(GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (prop_id) {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gparquet_arrow_file_reader_init(GParquetArrowFileReader *object)
+{
+}
+
+static void
+gparquet_arrow_file_reader_class_init(GParquetArrowFileReaderClass *klass)
+{
+ GParamSpec *spec;
+
+ auto gobject_class = G_OBJECT_CLASS(klass);
+
+ gobject_class->finalize = gparquet_arrow_file_reader_finalize;
+ gobject_class->set_property = gparquet_arrow_file_reader_set_property;
+ gobject_class->get_property = gparquet_arrow_file_reader_get_property;
+
+ spec = g_param_spec_pointer("arrow-file-reader",
+ "ArrowFileReader",
+ "The raw std::shared<parquet::arrow::FileReader>
*",
+ static_cast<GParamFlags>(G_PARAM_WRITABLE |
+
G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property(gobject_class, PROP_ARROW_FILE_READER, spec);
+}
+
+/**
+ * gparquet_arrow_file_reader_new_arrow:
+ * @source: Arrow source to be read.
+ * @error: (nullable): Return locatipcn for a #GError or %NULL.
+ *
+ * Returns: (nullable): A newly created #GParquetArrowFileReader.
+ *
+ * Since: 0.11.0
+ */
+GParquetArrowFileReader *
+gparquet_arrow_file_reader_new_arrow(GArrowSeekableInputStream *source,
+ GError **error)
+{
+ auto arrow_random_access_file =
+ garrow_seekable_input_stream_get_raw(source);
+ auto arrow_memory_pool = arrow::default_memory_pool();
+ std::unique_ptr<parquet::arrow::FileReader> parquet_arrow_file_reader;
+ auto status = parquet::arrow::OpenFile(arrow_random_access_file,
+ arrow_memory_pool,
+ &parquet_arrow_file_reader);
+ if (garrow_error_check(error,
+ status,
+ "[parquet][arrow][file-reader][new-arrow]")) {
+ return
gparquet_arrow_file_reader_new_raw(parquet_arrow_file_reader.release());
+ } else {
+ return NULL;
+ }
+}
+
+/**
+ * gparquet_arrow_file_reader_new_path:
+ * @path: Path to be read.
+ * @error: (nullable): Return locatipcn for a #GError or %NULL.
+ *
+ * Returns: (nullable): A newly created #GParquetArrowFileReader.
+ *
+ * Since: 0.11.0
+ */
+GParquetArrowFileReader *
+gparquet_arrow_file_reader_new_path(const gchar *path,
+ GError **error)
+{
+ std::shared_ptr<arrow::io::MemoryMappedFile> arrow_memory_mapped_file;
+ auto status = arrow::io::MemoryMappedFile::Open(path,
+ ::arrow::io::FileMode::READ,
+ &arrow_memory_mapped_file);
+ if (!garrow_error_check(error,
+ status,
+ "[parquet][arrow][file-reader][new-path]")) {
+ return NULL;
+ }
+
+ std::shared_ptr<arrow::io::RandomAccessFile> arrow_random_access_file =
+ arrow_memory_mapped_file;
+ auto arrow_memory_pool = arrow::default_memory_pool();
+ std::unique_ptr<parquet::arrow::FileReader> parquet_arrow_file_reader;
+ status = parquet::arrow::OpenFile(arrow_random_access_file,
+ arrow_memory_pool,
+ &parquet_arrow_file_reader);
+ if (garrow_error_check(error,
+ status,
+ "[parquet][arrow][file-reader][new-path]")) {
+ return
gparquet_arrow_file_reader_new_raw(parquet_arrow_file_reader.release());
+ } else {
+ return NULL;
+ }
+}
+
+/**
+ * gparquet_arrow_file_reader_read_table:
+ * @reader: A #GParquetArrowFileReader.
+ * @error: (nullable): Return locatipcn for a #GError or %NULL.
+ *
+ * Returns: (transfer full) (nullable): A read #GArrowTable.
+ *
+ * Since: 0.11.0
+ */
+GArrowTable *
+gparquet_arrow_file_reader_read_table(GParquetArrowFileReader *reader,
+ GError **error)
+{
+ auto parquet_arrow_file_reader = gparquet_arrow_file_reader_get_raw(reader);
+ std::shared_ptr<arrow::Table> arrow_table;
+ auto status = parquet_arrow_file_reader->ReadTable(&arrow_table);
+ if (garrow_error_check(error,
+ status,
+ "[parquet][arrow][file-reader][read-table]")) {
+ return garrow_table_new_raw(&arrow_table);
+ } else {
+ return NULL;
+ }
+}
+
+/**
+ * gparquet_arrow_file_reader_get_n_row_groups:
+ * @reader: A #GParquetArrowFileReader.
+ *
+ * Returns: The number of row groups.
+ *
+ * Since: 0.11.0
+ */
+gint
+gparquet_arrow_file_reader_get_n_row_groups(GParquetArrowFileReader *reader)
+{
+ auto parquet_arrow_file_reader = gparquet_arrow_file_reader_get_raw(reader);
+ return parquet_arrow_file_reader->num_row_groups();
+}
+
+/**
+ * gparquet_arrow_file_reader_use_threads:
+ * @reader: A #GParquetArrowFileReader.
+ * @use_threads: Whether use threads or not.
+ *
+ * Since: 0.11.0
+ */
+void
+gparquet_arrow_file_reader_set_use_threads(GParquetArrowFileReader *reader,
+ gboolean use_threads)
+{
+ auto parquet_arrow_file_reader = gparquet_arrow_file_reader_get_raw(reader);
+ parquet_arrow_file_reader->set_use_threads(use_threads);
+}
+
+G_END_DECLS
+
+GParquetArrowFileReader *
+gparquet_arrow_file_reader_new_raw(parquet::arrow::FileReader
*parquet_arrow_file_reader)
+{
+ auto arrow_file_reader =
+ GPARQUET_ARROW_FILE_READER(g_object_new(GPARQUET_TYPE_ARROW_FILE_READER,
+ "arrow-file-reader",
parquet_arrow_file_reader,
+ NULL));
+ return arrow_file_reader;
+}
+
+parquet::arrow::FileReader *
+gparquet_arrow_file_reader_get_raw(GParquetArrowFileReader *arrow_file_reader)
+{
+ auto priv = GPARQUET_ARROW_FILE_READER_GET_PRIVATE(arrow_file_reader);
+ return priv->arrow_file_reader;
+}
diff --git a/c_glib/parquet-glib/arrow-file-reader.h
b/c_glib/parquet-glib/arrow-file-reader.h
new file mode 100644
index 0000000..5aa2aa6
--- /dev/null
+++ b/c_glib/parquet-glib/arrow-file-reader.h
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include <arrow-glib/arrow-glib.h>
+
+G_BEGIN_DECLS
+
+#define GPARQUET_TYPE_ARROW_FILE_READER (gparquet_arrow_file_reader_get_type())
+G_DECLARE_DERIVABLE_TYPE(GParquetArrowFileReader,
+ gparquet_arrow_file_reader,
+ GPARQUET,
+ ARROW_FILE_READER,
+ GObject)
+struct _GParquetArrowFileReaderClass
+{
+ GObjectClass parent_class;
+};
+
+GParquetArrowFileReader *
+gparquet_arrow_file_reader_new_arrow(GArrowSeekableInputStream *source,
+ GError **error);
+GParquetArrowFileReader *
+gparquet_arrow_file_reader_new_path(const gchar *path,
+ GError **error);
+
+GArrowTable *
+gparquet_arrow_file_reader_read_table(GParquetArrowFileReader *reader,
+ GError **error);
+
+gint
+gparquet_arrow_file_reader_get_n_row_groups(GParquetArrowFileReader *reader);
+
+void
+gparquet_arrow_file_reader_set_use_threads(GParquetArrowFileReader *reader,
+ gboolean use_threads);
+
+G_END_DECLS
diff --git a/c_glib/parquet-glib/arrow-file-reader.hpp
b/c_glib/parquet-glib/arrow-file-reader.hpp
new file mode 100644
index 0000000..172dccc
--- /dev/null
+++ b/c_glib/parquet-glib/arrow-file-reader.hpp
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include <parquet/arrow/reader.h>
+
+#include <parquet-glib/arrow-file-reader.h>
+
+GParquetArrowFileReader *
+gparquet_arrow_file_reader_new_raw(parquet::arrow::FileReader
*parquet_arrow_file_reader);
+parquet::arrow::FileReader *
+gparquet_arrow_file_reader_get_raw(GParquetArrowFileReader *arrow_file_reader);
diff --git a/c_glib/parquet-glib/arrow-file-writer.cpp
b/c_glib/parquet-glib/arrow-file-writer.cpp
new file mode 100644
index 0000000..61567aa
--- /dev/null
+++ b/c_glib/parquet-glib/arrow-file-writer.cpp
@@ -0,0 +1,265 @@
+/*
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <arrow-glib/arrow-glib.hpp>
+
+#include <parquet-glib/arrow-file-writer.hpp>
+
+G_BEGIN_DECLS
+
+/**
+ * SECTION: arrow-file-writer
+ * @short_description: Arrow file writer class
+ * @include: parquet-glib/parquet-glib.h
+ *
+ * #GParquetArrowFileWriter is a class for writer Apache Arrow data to
+ * file as Apache Parquet format.
+ */
+
+typedef struct GParquetArrowFileWriterPrivate_ {
+ parquet::arrow::FileWriter *arrow_file_writer;
+} GParquetArrowFileWriterPrivate;
+
+enum {
+ PROP_0,
+ PROP_ARROW_FILE_WRITER
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(GParquetArrowFileWriter,
+ gparquet_arrow_file_writer,
+ G_TYPE_OBJECT)
+
+#define GPARQUET_ARROW_FILE_WRITER_GET_PRIVATE(obj) \
+ static_cast<GParquetArrowFileWriterPrivate *>( \
+ gparquet_arrow_file_writer_get_instance_private( \
+ GPARQUET_ARROW_FILE_WRITER(obj)))
+
+static void
+gparquet_arrow_file_writer_finalize(GObject *object)
+{
+ auto priv = GPARQUET_ARROW_FILE_WRITER_GET_PRIVATE(object);
+
+ delete priv->arrow_file_writer;
+
+ G_OBJECT_CLASS(gparquet_arrow_file_writer_parent_class)->finalize(object);
+}
+
+static void
+gparquet_arrow_file_writer_set_property(GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ auto priv = GPARQUET_ARROW_FILE_WRITER_GET_PRIVATE(object);
+
+ switch (prop_id) {
+ case PROP_ARROW_FILE_WRITER:
+ priv->arrow_file_writer =
+ static_cast<parquet::arrow::FileWriter *>(g_value_get_pointer(value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gparquet_arrow_file_writer_get_property(GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (prop_id) {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gparquet_arrow_file_writer_init(GParquetArrowFileWriter *object)
+{
+}
+
+static void
+gparquet_arrow_file_writer_class_init(GParquetArrowFileWriterClass *klass)
+{
+ GParamSpec *spec;
+
+ auto gobject_class = G_OBJECT_CLASS(klass);
+
+ gobject_class->finalize = gparquet_arrow_file_writer_finalize;
+ gobject_class->set_property = gparquet_arrow_file_writer_set_property;
+ gobject_class->get_property = gparquet_arrow_file_writer_get_property;
+
+ spec = g_param_spec_pointer("arrow-file-writer",
+ "ArrowFileWriter",
+ "The raw std::shared<parquet::arrow::FileWriter>
*",
+ static_cast<GParamFlags>(G_PARAM_WRITABLE |
+
G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property(gobject_class, PROP_ARROW_FILE_WRITER, spec);
+}
+
+/**
+ * gparquet_arrow_file_writer_new_arrow:
+ * @schema: Arrow schema for written data.
+ * @sink: Arrow output stream to be written.
+ * @error: (nullable): Return locatipcn for a #GError or %NULL.
+ *
+ * Returns: (nullable): A newly created #GParquetArrowFileWriter.
+ *
+ * Since: 0.11.0
+ */
+GParquetArrowFileWriter *
+gparquet_arrow_file_writer_new_arrow(GArrowSchema *schema,
+ GArrowOutputStream *sink,
+ GError **error)
+{
+ auto arrow_schema = garrow_schema_get_raw(schema).get();
+ auto arrow_output_stream = garrow_output_stream_get_raw(sink);
+ auto arrow_memory_pool = arrow::default_memory_pool();
+ auto parquet_writer_properties = parquet::default_writer_properties();
+ std::unique_ptr<parquet::arrow::FileWriter> parquet_arrow_file_writer;
+ auto status = parquet::arrow::FileWriter::Open(*arrow_schema,
+ arrow_memory_pool,
+ arrow_output_stream,
+ parquet_writer_properties,
+ &parquet_arrow_file_writer);
+ if (garrow_error_check(error,
+ status,
+ "[parquet][arrow][file-writer][new-arrow]")) {
+ return
gparquet_arrow_file_writer_new_raw(parquet_arrow_file_writer.release());
+ } else {
+ return NULL;
+ }
+}
+
+/**
+ * gparquet_arrow_file_writer_new_path:
+ * @schema: Arrow schema for written data.
+ * @path: Path to be read.
+ * @error: (nullable): Return locatipcn for a #GError or %NULL.
+ *
+ * Returns: (nullable): A newly created #GParquetArrowFileWriter.
+ *
+ * Since: 0.11.0
+ */
+GParquetArrowFileWriter *
+gparquet_arrow_file_writer_new_path(GArrowSchema *schema,
+ const gchar *path,
+ GError **error)
+{
+ std::shared_ptr<arrow::io::FileOutputStream> arrow_file_output_stream;
+ auto status = arrow::io::FileOutputStream::Open(path,
+ false,
+ &arrow_file_output_stream);
+ if (!garrow_error_check(error,
+ status,
+ "[parquet][arrow][file-writer][new-path]")) {
+ return NULL;
+ }
+
+ auto arrow_schema = garrow_schema_get_raw(schema).get();
+ std::shared_ptr<arrow::io::OutputStream> arrow_output_stream =
+ arrow_file_output_stream;
+ auto arrow_memory_pool = arrow::default_memory_pool();
+ auto parquet_writer_properties = parquet::default_writer_properties();
+ std::unique_ptr<parquet::arrow::FileWriter> parquet_arrow_file_writer;
+ status = parquet::arrow::FileWriter::Open(*arrow_schema,
+ arrow_memory_pool,
+ arrow_output_stream,
+ parquet_writer_properties,
+ &parquet_arrow_file_writer);
+ if (garrow_error_check(error,
+ status,
+ "[parquet][arrow][file-writer][new-path]")) {
+ return
gparquet_arrow_file_writer_new_raw(parquet_arrow_file_writer.release());
+ } else {
+ return NULL;
+ }
+}
+
+/**
+ * gparquet_arrow_file_writer_write_table:
+ * @writer: A #GParquetArrowFileWriter.
+ * @table: A table to be written.
+ * @chunk_size: The max number of rows in a row group.
+ * @error: (nullable): Return locatipcn for a #GError or %NULL.
+ *
+ * Returns: %TRUE on success, %FALSE if there was an error.
+ *
+ * Since: 0.11.0
+ */
+gboolean
+gparquet_arrow_file_writer_write_table(GParquetArrowFileWriter *writer,
+ GArrowTable *table,
+ guint64 chunk_size,
+ GError **error)
+{
+ auto parquet_arrow_file_writer = gparquet_arrow_file_writer_get_raw(writer);
+ auto arrow_table = garrow_table_get_raw(table).get();
+ auto status = parquet_arrow_file_writer->WriteTable(*arrow_table,
chunk_size);
+ return garrow_error_check(error,
+ status,
+ "[parquet][arrow][file-writer][write-table]");
+}
+
+/**
+ * gparquet_arrow_file_writer_close:
+ * @writer: A #GParquetArrowFileWriter.
+ * @error: (nullable): Return locatipcn for a #GError or %NULL.
+ *
+ * Returns: %TRUE on success, %FALSE if there was an error.
+ *
+ * Since: 0.11.0
+ */
+gboolean
+gparquet_arrow_file_writer_close(GParquetArrowFileWriter *writer,
+ GError **error)
+{
+ auto parquet_arrow_file_writer = gparquet_arrow_file_writer_get_raw(writer);
+ auto status = parquet_arrow_file_writer->Close();
+ return garrow_error_check(error,
+ status,
+ "[parquet][arrow][file-writer][close]");
+}
+
+
+G_END_DECLS
+
+GParquetArrowFileWriter *
+gparquet_arrow_file_writer_new_raw(parquet::arrow::FileWriter
*parquet_arrow_file_writer)
+{
+ auto arrow_file_writer =
+ GPARQUET_ARROW_FILE_WRITER(g_object_new(GPARQUET_TYPE_ARROW_FILE_WRITER,
+ "arrow-file-writer",
parquet_arrow_file_writer,
+ NULL));
+ return arrow_file_writer;
+}
+
+parquet::arrow::FileWriter *
+gparquet_arrow_file_writer_get_raw(GParquetArrowFileWriter *arrow_file_writer)
+{
+ auto priv = GPARQUET_ARROW_FILE_WRITER_GET_PRIVATE(arrow_file_writer);
+ return priv->arrow_file_writer;
+}
diff --git a/c_glib/parquet-glib/arrow-file-writer.h
b/c_glib/parquet-glib/arrow-file-writer.h
new file mode 100644
index 0000000..99db432
--- /dev/null
+++ b/c_glib/parquet-glib/arrow-file-writer.h
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include <arrow-glib/arrow-glib.h>
+
+G_BEGIN_DECLS
+
+#define GPARQUET_TYPE_ARROW_FILE_WRITER (gparquet_arrow_file_writer_get_type())
+G_DECLARE_DERIVABLE_TYPE(GParquetArrowFileWriter,
+ gparquet_arrow_file_writer,
+ GPARQUET,
+ ARROW_FILE_WRITER,
+ GObject)
+struct _GParquetArrowFileWriterClass
+{
+ GObjectClass parent_class;
+};
+
+GParquetArrowFileWriter *
+gparquet_arrow_file_writer_new_arrow(GArrowSchema *schema,
+ GArrowOutputStream *sink,
+ GError **error);
+GParquetArrowFileWriter *
+gparquet_arrow_file_writer_new_path(GArrowSchema *schema,
+ const gchar *path,
+ GError **error);
+
+gboolean
+gparquet_arrow_file_writer_write_table(GParquetArrowFileWriter *writer,
+ GArrowTable *table,
+ guint64 chunk_size,
+ GError **error);
+
+gboolean
+gparquet_arrow_file_writer_close(GParquetArrowFileWriter *writer,
+ GError **error);
+
+G_END_DECLS
diff --git a/c_glib/parquet-glib/arrow-file-writer.hpp
b/c_glib/parquet-glib/arrow-file-writer.hpp
new file mode 100644
index 0000000..866d3f9
--- /dev/null
+++ b/c_glib/parquet-glib/arrow-file-writer.hpp
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include <parquet/arrow/writer.h>
+
+#include <parquet-glib/arrow-file-writer.h>
+
+GParquetArrowFileWriter *
+gparquet_arrow_file_writer_new_raw(parquet::arrow::FileWriter
*parquet_arrow_file_writer);
+parquet::arrow::FileWriter *
+gparquet_arrow_file_writer_get_raw(GParquetArrowFileWriter *arrow_file_writer);
diff --git a/c_glib/parquet-glib/meson.build b/c_glib/parquet-glib/meson.build
new file mode 100644
index 0000000..afa6d21
--- /dev/null
+++ b/c_glib/parquet-glib/meson.build
@@ -0,0 +1,81 @@
+# -*- indent-tabs-mode: nil -*-
+#
+# 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.
+
+project_name = 'parquet-glib'
+
+sources = files(
+ 'arrow-file-reader.cpp',
+ 'arrow-file-writer.cpp',
+)
+
+c_headers = files(
+ 'arrow-file-reader.h',
+ 'arrow-file-writer.h',
+ 'parquet-glib.h',
+)
+
+cpp_headers = files(
+ 'arrow-file-reader.hpp',
+ 'arrow-file-writer.hpp',
+ 'parquet-glib.hpp',
+)
+
+headers = c_headers + cpp_headers
+install_headers(headers, subdir: project_name)
+
+
+dependencies = [
+ arrow,
+ parquet,
+ arrow_glib,
+]
+libparquet_glib = library('parquet-glib',
+ sources: sources,
+ install: true,
+ dependencies: dependencies,
+ include_directories: base_include_directories,
+ soversion: so_version,
+ version: library_version)
+parquet_glib = declare_dependency(link_with: libparquet_glib,
+ include_directories:
base_include_directories,
+ dependencies: dependencies)
+
+pkgconfig.generate(filebase: project_name,
+ name: 'Apache Parquet GLib',
+ description: 'C API for Apache Parquet based on GLib',
+ version: version,
+ requires: ['parquet', 'arrow-glib'],
+ libraries: [libparquet_glib])
+
+gnome.generate_gir(libparquet_glib,
+ dependencies: declare_dependency(sources: arrow_glib_gir),
+ sources: sources + c_headers,
+ namespace: 'Parquet',
+ nsversion: api_version,
+ identifier_prefix: 'GParquet',
+ symbol_prefix: 'gparquet',
+ export_packages: 'parquet-glib',
+ includes: [
+ 'Arrow-1.0',
+ ],
+ install: true,
+ extra_args: [
+ '--warn-all',
+ '--include-uninstalled=./arrow-glib/Arrow-1.0.gir',
+ ])
diff --git a/c_glib/parquet-glib/parquet-glib.h
b/c_glib/parquet-glib/parquet-glib.h
new file mode 100644
index 0000000..6ae0f7e
--- /dev/null
+++ b/c_glib/parquet-glib/parquet-glib.h
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include <parquet-glib/arrow-file-reader.h>
+#include <parquet-glib/arrow-file-writer.h>
diff --git a/c_glib/parquet-glib/parquet-glib.hpp
b/c_glib/parquet-glib/parquet-glib.hpp
new file mode 100644
index 0000000..988e715
--- /dev/null
+++ b/c_glib/parquet-glib/parquet-glib.hpp
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include <parquet-glib/parquet-glib.h>
+
+#include <parquet-glib/arrow-file-reader.hpp>
+#include <parquet-glib/arrow-file-writer.hpp>
diff --git a/c_glib/doc/Makefile.am b/c_glib/parquet-glib/parquet-glib.pc.in
similarity index 75%
copy from c_glib/doc/Makefile.am
copy to c_glib/parquet-glib/parquet-glib.pc.in
index 1d491ab..81559f1 100644
--- a/c_glib/doc/Makefile.am
+++ b/c_glib/parquet-glib/parquet-glib.pc.in
@@ -15,5 +15,14 @@
# specific language governing permissions and limitations
# under the License.
-SUBDIRS = \
- reference
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Apache Parquet GLib
+Description: C API for Apache Parquet based on GLib
+Version: @VERSION@
+Libs: -L${libdir} -lparquet-glib
+Cflags: -I${includedir}
+Requires: arrow-glib
diff --git a/c_glib/test/parquet/test-arrow.rb
b/c_glib/test/parquet/test-arrow.rb
new file mode 100644
index 0000000..de021df
--- /dev/null
+++ b/c_glib/test/parquet/test-arrow.rb
@@ -0,0 +1,64 @@
+# 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.
+
+class TestParquetArrow < Test::Unit::TestCase
+ include Helper::Buildable
+
+ def setup
+ omit("Parquet is required") unless defined?(::Parquet)
+ end
+
+ def test_read_write
+ tempfile = Tempfile.open(["data", ".parquet"])
+
+ values = [true, nil, false, true]
+ chunk_size = 2
+
+ field = Arrow::Field.new("enabled", Arrow::BooleanDataType.new)
+ schema = Arrow::Schema.new([field])
+ writer = Parquet::ArrowFileWriter.new(schema, tempfile.path)
+ begin
+ columns = [
+ Arrow::Column.new(field, build_boolean_array(values)),
+ ]
+ table = Arrow::Table.new(schema, columns)
+ writer.write_table(table, chunk_size)
+ ensure
+ writer.close
+ end
+
+ reader = Parquet::ArrowFileReader.new(tempfile.path)
+ reader.use_threads = true
+ assert_equal(chunk_size, reader.n_row_groups)
+ table = reader.read_table
+ table_data = table.n_columns.times.collect do |i|
+ column = table.get_column(i)
+ data = []
+ column.data.chunks.each do |chunk|
+ chunk.length.times do |j|
+ if chunk.null?(j)
+ data << nil
+ else
+ data << chunk.get_value(j)
+ end
+ end
+ end
+ [column.name, data]
+ end
+ assert_equal([["enabled", values]], table_data)
+ end
+end
diff --git a/c_glib/test/run-test.rb b/c_glib/test/run-test.rb
index 366b083..b317335 100755
--- a/c_glib/test/run-test.rb
+++ b/c_glib/test/run-test.rb
@@ -42,6 +42,11 @@ begin
rescue GObjectIntrospection::RepositoryError::TypelibNotFound
end
+begin
+ Parquet = GI.load("Parquet")
+rescue GObjectIntrospection::RepositoryError::TypelibNotFound
+end
+
require "rbconfig"
require "tempfile"
require_relative "helper/buildable"
diff --git a/c_glib/test/run-test.sh b/c_glib/test/run-test.sh
index 9abd035..8fbed6f 100755
--- a/c_glib/test/run-test.sh
+++ b/c_glib/test/run-test.sh
@@ -20,7 +20,7 @@
test_dir="$(cd $(dirname $0); pwd)"
build_dir="$(cd .; pwd)"
-modules="arrow-glib arrow-gpu-glib"
+modules="arrow-glib arrow-gpu-glib parquet-glib"
for module in ${modules}; do
module_build_dir="${build_dir}/${module}"