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}"

Reply via email to