31 hours agodocs(format): remove doxygen content (#140) main
David Li [Fri, 23 Sep 2022 14:48:34 +0000 (10:48 -0400)] 
docs(format): remove doxygen content (#140)

The content will be added to the docs instead.

3 days agodocs(format): fix doxygen syntax (#137)
David Li [Tue, 20 Sep 2022 22:35:53 +0000 (18:35 -0400)] 
docs(format): fix doxygen syntax (#137)

* docs(format): fix doxygen syntax

* ci: fix the title check regex one more time

4 days agobuild(c/driver_manager,c/driver/postgres): switch to setuptools (#134)
David Li [Tue, 20 Sep 2022 14:51:37 +0000 (10:51 -0400)] 
build(c/driver_manager,c/driver/postgres): switch to setuptools (#134)

Poetry was generating invalid wheels when used with Conda.

4 days agofix(c/validation): cast to avoid MSVC warning (#135)
David Li [Tue, 20 Sep 2022 14:22:49 +0000 (10:22 -0400)] 
fix(c/validation): cast to avoid MSVC warning (#135)

4 days agoci: fix typo in title check regex (#136)
David Li [Tue, 20 Sep 2022 13:35:58 +0000 (09:35 -0400)] 
ci: fix typo in title check regex (#136)

5 days agobuild(c/driver_manager,c/driver/postgres): fix build paths (#132)
David Li [Mon, 19 Sep 2022 16:12:51 +0000 (12:12 -0400)] 
build(c/driver_manager,c/driver/postgres): fix build paths (#132)

- Include .env file for docker-compose.yml
- Move adbc_driver_manager/tests/ so it doesn't get packaged
- Fix pyproject.toml to always include the libpq-based driver

5 days agoci: adjust title check regex (#133)
David Li [Mon, 19 Sep 2022 14:08:47 +0000 (10:08 -0400)] 
ci: adjust title check regex (#133)

5 days agobuild(c/driver_manager,c/driver/postgres): add Python wheel builds (#129)
David Li [Mon, 19 Sep 2022 12:47:41 +0000 (08:47 -0400)] 
build(c/driver_manager,c/driver/postgres): add Python wheel builds (#129)

* build(c/driver_manager,c/driver/postgres): add Python wheel builds

* fix ci check

* check symbol visibility

* Exclude nanoarrow from ALL

* Fix syntax

8 days agodocs(java): configure Javadocs (#128)
David Li [Fri, 16 Sep 2022 17:35:36 +0000 (13:35 -0400)] 
docs(java): configure Javadocs (#128)

8 days agodocs: describe conventional commits format (#124)
David Li [Fri, 16 Sep 2022 16:36:08 +0000 (12:36 -0400)] 
docs: describe conventional commits format (#124)

* docs: describe commit convention

* Update

* Rename paths for consistency

* Add PR title checker

* Add Go example

9 days agoci(go): add pre-commit hooks for Go (#127)
David Li [Thu, 15 Sep 2022 20:12:37 +0000 (16:12 -0400)] 
ci(go): add pre-commit hooks for Go (#127)

* ci(go): add pre-commit hooks for Go

* Collapse statements

11 days ago[C] Add basic partitioned data test (#123)
David Li [Tue, 13 Sep 2022 18:38:47 +0000 (14:38 -0400)] 
[C] Add basic partitioned data test (#123)

11 days ago[C] Don't conflict with Arrow macros (#122)
David Li [Tue, 13 Sep 2022 16:21:18 +0000 (12:21 -0400)] 
[C] Don't conflict with Arrow macros (#122)

12 days ago[C] Enable and fix some warnings (#121)
David Li [Mon, 12 Sep 2022 17:07:45 +0000 (13:07 -0400)] 
[C] Enable and fix some warnings (#121)

* [C] Enable and fix some warnings

* Change cmake config

2 weeks ago[Ruby] Don't use ../ for RubyGems packaging (#119)
Sutou Kouhei [Fri, 9 Sep 2022 14:04:22 +0000 (23:04 +0900)] 
[Ruby] Don't use ../ for RubyGems packaging (#119)

Fix #118

2 weeks ago[Format] Remove unnecessary TODOs (#117)
David Li [Thu, 8 Sep 2022 20:17:46 +0000 (16:17 -0400)] 
[Format] Remove unnecessary TODOs (#117)

2 weeks ago[C] Make it easier to build the SQLite driver out of the box (#116)
Dewey Dunnington [Thu, 8 Sep 2022 19:39:52 +0000 (16:39 -0300)] 
[C] Make it easier to build the SQLite driver out of the box (#116)

* quality of life improvements for VSCode users

* set the C++ standard

2 weeks ago[Java] Update Java to be consistent with C (#115)
David Li [Thu, 8 Sep 2022 17:58:06 +0000 (13:58 -0400)] 
[Java] Update Java to be consistent with C (#115)

2 weeks ago[Go] fix runs-on for go.yml workflow (#112)
Matt Topol [Thu, 8 Sep 2022 17:55:30 +0000 (13:55 -0400)] 
[Go] fix runs-on for go.yml workflow (#112)

* fix runs-on for go.yml workflow

* fix dirs and no asan

* cgo doesn't work with windows cl, fix order of operations

* move package doc to doc.go so there's at least one Go file in the dir without cgo.

* add build constraint on the test

* trim trailing whitespace

* extra end of file line

* why does macos hate me?

* figure out macos path

* dump macos env to figure out solution

* let's be explicit and see if that makes macos happy

* wrong arg

* trim whitespace

* almost there, i almost have you macos

* and maybe.....

* don't run staticcheck on macos

* single quotes

* ld paths

* conda prefix?

* forgot the target install

* i'm so confused by it hitting the wrong version of libstdc++

* maybe this...

* try with conda prefix?

* use tmate to debug

* fix macos stuff, hopefully

* fix yaml lint, try again

* fix path


* try `-exec env`

* i think it finally works

* bit by trailing whitespace

2 weeks ago[C] Validate statement behaviors in test suite (#114)
David Li [Thu, 8 Sep 2022 15:37:51 +0000 (11:37 -0400)] 
[C] Validate statement behaviors in test suite (#114)

Fixes #67.

2 weeks ago[Docs] Update (#113)
David Li [Thu, 8 Sep 2022 15:18:06 +0000 (11:18 -0400)] 
[Docs] Update (#113)

2 weeks agoincorrect syntax for env vars in go.yml (#111)
Matt Topol [Wed, 7 Sep 2022 19:16:33 +0000 (15:16 -0400)] 
incorrect syntax for env vars in go.yml (#111)

2 weeks ago[C] Refactor and expand validation suite, libpq driver (#106)
David Li [Wed, 7 Sep 2022 19:13:12 +0000 (15:13 -0400)] 
[C] Refactor and expand validation suite, libpq driver (#106)

* [C] Refactor and expand validation suite, libpq driver

Part of #78 and #81.

* [C] Update vendored nanoarrow

2 weeks ago[Go] Add CGO driver mgr wrapper and Github Workflows (#110)
Matt Topol [Wed, 7 Sep 2022 19:11:42 +0000 (15:11 -0400)] 
[Go] Add CGO driver mgr wrapper and Github Workflows (#110)

* Implement wrapper for CGO driver manager

* add github workflows

* add initial impl and sym links

* trim whitespace

* add some more tests

* turn test into example

2 weeks ago[Format] Document API/ABI stability goals (#96)
David Li [Wed, 7 Sep 2022 15:51:21 +0000 (11:51 -0400)] 
[Format] Document API/ABI stability goals (#96)

* [Format] Document API/ABI stability goals

* [Format] Change approach to compatibility

* Describe/update versioning

2 weeks ago[Ruby] Add minimum bindings (#108)
Sutou Kouhei [Wed, 7 Sep 2022 15:43:06 +0000 (00:43 +0900)] 
[Ruby] Add minimum bindings (#108)

Fix #102

2 weeks ago[C] Try to fix MacOS CI (#109)
David Li [Wed, 7 Sep 2022 15:14:35 +0000 (11:14 -0400)] 
[C] Try to fix MacOS CI (#109)

2 weeks ago[GLib] Add minimum bindings (#107)
Sutou Kouhei [Wed, 7 Sep 2022 01:15:23 +0000 (10:15 +0900)] 
[GLib] Add minimum bindings (#107)

fix #101

Co-authored-by: David Li <>
3 weeks ago[Go][Format] initial attempt at wrapping adbc for database/sql (#97)
Matt Topol [Wed, 31 Aug 2022 20:48:58 +0000 (16:48 -0400)] 
[Go][Format] initial attempt at wrapping adbc for database/sql (#97)

* initial attempt at wrapping adbc for database/sql

* implement ConnBeginTx

* add constants for isolation level and readonly

* run clang-format on adbc.h

* change make readonly a connection property, not transaction.

* clang-format

3 weeks ago[Python] Distribute drivers as Python packages (#57)
David Li [Wed, 31 Aug 2022 13:29:08 +0000 (09:29 -0400)] 
[Python] Distribute drivers as Python packages (#57)

* [Python] Bundle Postgres driver as a Python package

* [Python] Bundle Postgres driver without Cython

* [Python] Add more tests

* Fix authors, remove redundant block

3 weeks ago[Format][C][Java] Consolidate ExecuteQuery/ExecuteUpdate (#95)
David Li [Wed, 31 Aug 2022 13:15:01 +0000 (09:15 -0400)] 
[Format][C][Java] Consolidate ExecuteQuery/ExecuteUpdate (#95)

3 weeks agoAdd Golang definitions (#83)
Matt Topol [Tue, 30 Aug 2022 15:52:51 +0000 (11:52 -0400)] 
Add Golang definitions (#83)

* add initial definitions

* add back missing line of license

* add more comments

3 weeks ago[C] Specify a standard entrypoint name (#93)
David Li [Mon, 29 Aug 2022 16:15:58 +0000 (12:15 -0400)] 
[C] Specify a standard entrypoint name (#93)

Fixes #86.

3 weeks ago[C] Add support for pkg-config (#88)
Sutou Kouhei [Mon, 29 Aug 2022 14:26:11 +0000 (23:26 +0900)] 
[C] Add support for pkg-config (#88)

fix #87

3 weeks ago[C] Add support for CMake package (#90)
Sutou Kouhei [Mon, 29 Aug 2022 13:34:00 +0000 (22:34 +0900)] 
[C] Add support for CMake package (#90)

fix #89

4 weeks ago[C] Add nanoarrow-based libpq driver (#65)
David Li [Fri, 26 Aug 2022 18:32:57 +0000 (14:32 -0400)] 
[C] Add nanoarrow-based libpq driver (#65)

4 weeks ago[Python] Implement partitioned data interface (#80)
David Li [Fri, 26 Aug 2022 14:59:32 +0000 (10:59 -0400)] 
[Python] Implement partitioned data interface (#80)

4 weeks ago[Format][C][Java][Python] Simplify execute/query interface (#69)
David Li [Fri, 26 Aug 2022 11:56:42 +0000 (07:56 -0400)] 
[Format][C][Java][Python] Simplify execute/query interface (#69)

* [Format][C][Java][Python] Simplify execute/query interface

Fixes #61.

* Update vendored nanoarrow

* [C] Split Execute

4 weeks ago[C] Update vendored nanoarrow, use amalgamated build (#75)
David Li [Wed, 24 Aug 2022 20:36:07 +0000 (16:36 -0400)] 
[C] Update vendored nanoarrow, use amalgamated build (#75)

4 weeks ago[C] Update vendored nanoarrow (#74)
David Li [Mon, 22 Aug 2022 16:36:38 +0000 (12:36 -0400)] 
[C] Update vendored nanoarrow (#74)

4 weeks agoMINOR: Make issue notifications less noisy (#73)
David Li [Mon, 22 Aug 2022 14:05:18 +0000 (10:05 -0400)] 
MINOR: Make issue notifications less noisy (#73)

5 weeks ago[Format] Clarify thread safety/concurrency guarantees (#66)
David Li [Tue, 16 Aug 2022 18:43:37 +0000 (14:43 -0400)] 
[Format] Clarify thread safety/concurrency guarantees (#66)

6 weeks ago[C] Use nanoarrow to improve validation suite (#63)
David Li [Fri, 12 Aug 2022 19:44:59 +0000 (15:44 -0400)] 
[C] Use nanoarrow to improve validation suite (#63)

* [C] Use nanoarrow to improve validation suite

* Fix embarrassingly blatant use-after-free

6 weeks ago[Format][C][Java] Add method to get parameter schema (#62)
David Li [Fri, 12 Aug 2022 16:50:50 +0000 (12:50 -0400)] 
[Format][C][Java] Add method to get parameter schema (#62)

* [Format][C][Java] Add method to get parameter schema

* Clarify docstrings

6 weeks ago[C][Python] Add options to control append vs create for bulk ingest (#58)
David Li [Wed, 10 Aug 2022 19:16:32 +0000 (15:16 -0400)] 
[C][Python] Add options to control append vs create for bulk ingest (#58)

* [C][Python] Add options to control bulk ingestion

* [Python] Fix issue with PyArrow compat

6 weeks ago[C][Python] Implement DBAPI 2.0 (PEP 249) interface (#56)
David Li [Tue, 9 Aug 2022 16:41:48 +0000 (12:41 -0400)] 
[C][Python] Implement DBAPI 2.0 (PEP 249) interface (#56)

* [Python] Implement DBAPI 2.0 (PEP 249) interface

* [C++] Fix doubles in SQLite3 driver

* [Python] Remove hypothesis file

* [Python] Add more docstrings, tests

* [Python] Remove redundancy

* [Python] Update lockfiles

* [C][Python] Add and test some DBAPI extensions

* [C] Fix SQLite3 driver

6 weeks ago[Java] Bump postgresql in /java/driver/jdbc-validation-postgresql (#54)
dependabot[bot] [Mon, 8 Aug 2022 11:37:27 +0000 (07:37 -0400)] 
[Java] Bump postgresql in /java/driver/jdbc-validation-postgresql (#54)

Bumps [postgresql]( from 42.4.0 to 42.4.1.
- [Release notes](
- [Changelog](
- [Commits](

- dependency-name: org.postgresql:postgresql
  dependency-type: direct:development

Signed-off-by: dependabot[bot] <>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]>
7 weeks ago[Python] Set up package with Poetry (#51)
David Li [Thu, 4 Aug 2022 12:09:27 +0000 (08:09 -0400)] 
[Python] Set up package with Poetry (#51)

* [Python] Set up package with Poetry

* Add .gitattributes

7 weeks ago[Java] Add basic Flight SQL driver (#47)
David Li [Tue, 2 Aug 2022 19:33:30 +0000 (15:33 -0400)] 
[Java] Add basic Flight SQL driver (#47)

* [Java] Add basic Flight SQL driver

* [Java] Add partition descriptor support

* [Java] Properly handle FlightEndpoint.locations

* [Java] Refactor handling of FlightEndpoint

* [Java] Consolidate catches

7 weeks ago[C][Java][Python] Add GetInfo (#45)
David Li [Tue, 2 Aug 2022 18:38:46 +0000 (14:38 -0400)] 
[C][Java][Python] Add GetInfo (#45)

7 weeks ago[Docs] Update (#49)
David Li [Mon, 1 Aug 2022 13:29:49 +0000 (09:29 -0400)] 
[Docs] Update (#49)

7 weeks ago[Java] Updated relative path for parent pom (#50)
Ash [Sun, 31 Jul 2022 16:33:33 +0000 (09:33 -0700)] 
[Java] Updated relative path for parent pom (#50)

2 months ago[C] Fix compatibility issues noticed with Ibis (#44)
David Li [Fri, 22 Jul 2022 16:53:05 +0000 (12:53 -0400)] 
[C] Fix compatibility issues noticed with Ibis (#44)

2 months ago[Docs] Update README (#42)
David Li [Thu, 21 Jul 2022 12:17:40 +0000 (08:17 -0400)] 
[Docs] Update README (#42)

2 months ago[Python] Complete minimal bindings for ADBC (#41)
David Li [Wed, 20 Jul 2022 18:33:47 +0000 (14:33 -0400)] 
[Python] Complete minimal bindings for ADBC (#41)

* [Python] Complete minimal bindings for ADBC

* [CI] Fix CI conditions

* [CI] Set up flake8

* [CI] flake8 <4 does not work with Python >=3.10

2 months ago[Java] Implement prepared statements, refactor for consistency (#40)
David Li [Fri, 15 Jul 2022 18:01:19 +0000 (14:01 -0400)] 
[Java] Implement prepared statements, refactor for consistency (#40)

* Implement prepared statements for Java

* Split out database-specific validation tests

2 months agoRefactor Java APIs for clarity (#39)
David Li [Fri, 15 Jul 2022 17:56:39 +0000 (13:56 -0400)] 
Refactor Java APIs for clarity (#39)

2 months agoAdd contributing info (#38)
David Li [Wed, 13 Jul 2022 19:34:59 +0000 (15:34 -0400)] 
Add contributing info (#38)

2 months agoImplement metadata methods for JDBC (#36)
David Li [Tue, 12 Jul 2022 15:53:46 +0000 (11:53 -0400)] 
Implement metadata methods for JDBC (#36)

Fixes #33.

2 months agoCleanly separate C/Java code (#35)
David Li [Mon, 11 Jul 2022 16:32:03 +0000 (12:32 -0400)] 
Cleanly separate C/Java code (#35)

Fixes #32.

2 months agoClarify bulk ingestion semantics (#34)
David Li [Mon, 11 Jul 2022 16:10:22 +0000 (12:10 -0400)] 
Clarify bulk ingestion semantics (#34)

2 months agoAdd C driver validation suite (#28)
David Li [Fri, 8 Jul 2022 17:52:31 +0000 (13:52 -0400)] 
Add C driver validation suite (#28)

2 months agoAdd test suite for Java ADBC drivers (#31)
David Li [Fri, 8 Jul 2022 17:51:45 +0000 (13:51 -0400)] 
Add test suite for Java ADBC drivers (#31)

2 months agoRefactor the Derby driver into a JDBC driver (#30)
David Li [Thu, 7 Jul 2022 15:04:27 +0000 (11:04 -0400)] 
Refactor the Derby driver into a JDBC driver (#30)

2 months agoInstall the headers along with the driver manager (#29)
David Li [Tue, 5 Jul 2022 18:59:46 +0000 (14:59 -0400)] 
Install the headers along with the driver manager (#29)

2 months agoMake AdbcConnectionNew 2-adic for consistency (#27)
David Li [Tue, 5 Jul 2022 16:54:33 +0000 (12:54 -0400)] 
Make AdbcConnectionNew 2-adic for consistency (#27)

* Make AdbcConnectionNew 2-adic for consistency

* Fix Python build

3 months agoSketch out Python bindings (#17)
David Li [Fri, 24 Jun 2022 18:06:40 +0000 (14:06 -0400)] 
Sketch out Python bindings (#17)

These bindings are structured as a low-level module that mostly
mirrors the ADBC API, and a TBD high-level module that will
implement PEP 249 (except with Turbodbc-style extensions).

3 months agoEnable ASan/UBSan/cpplint (#26)
David Li [Fri, 24 Jun 2022 17:49:14 +0000 (13:49 -0400)] 
Enable ASan/UBSan/cpplint (#26)

3 months agoAdd basic transaction semantics (#24)
David Li [Fri, 24 Jun 2022 17:32:32 +0000 (13:32 -0400)] 
Add basic transaction semantics (#24)

Fixes #23.

3 months agoExpand error codes, add vendor-specific codes (#21)
David Li [Thu, 23 Jun 2022 14:06:55 +0000 (10:06 -0400)] 
Expand error codes, add vendor-specific codes (#21)

Fixes #20.

3 months agoAdd table/column reflection (#18)
David Li [Thu, 23 Jun 2022 13:50:57 +0000 (09:50 -0400)] 
Add table/column reflection (#18)

Fixes #14.

* Implement proposed metadata API

* Implement proposed API for constraint metadata

* Remove redundant metadata methods

3 months agoAdd basic CI for MacOS/Windows (#25)
David Li [Tue, 21 Jun 2022 20:56:50 +0000 (16:56 -0400)] 
Add basic CI for MacOS/Windows (#25)

3 months agoFix Windows build (#16)
David Li [Tue, 14 Jun 2022 14:55:47 +0000 (10:55 -0400)] 
Fix Windows build (#16)

* Add Windows visibility specifiers

* Try to implement Windows loader

* Add driver cleanup

* Add driver cleanup

* Fix driver cleanup

* Address TODOs

3 months agoFix MacOS build (#15)
David Li [Tue, 14 Jun 2022 14:31:13 +0000 (10:31 -0400)] 
Fix MacOS build (#15)

* Fix MacOS build/CMake setup

* Specify static link libs too

* Fix static link libs

* Don't require hardcoding driver names

* Fix test setup

3 months agoSketch out ADBC Java APIs (#12)
David Li [Mon, 13 Jun 2022 14:32:31 +0000 (10:32 -0400)] 
Sketch out ADBC Java APIs (#12)

3 months agoSet up basic C++ CI pipeline (#11)
David Li [Thu, 9 Jun 2022 17:28:23 +0000 (13:28 -0400)] 
Set up basic C++ CI pipeline (#11)

Flight SQL is not included since the Arrow Conda packages do not include it.

3 months agoFix build for ld.bfd (#10)
David Li [Thu, 9 Jun 2022 14:56:37 +0000 (10:56 -0400)] 
Fix build for ld.bfd (#10)

The driver manager and drivers define the same symbols.  Normally,
this means that if the driver manager loads a driver, and then the
driver attempts to resolve ADBC functions (e.g. to populate the
driver function pointer table), the dynamic linker will actually
resolve the driver manager's symbols, which is a problem.

Previously, we used __attribute__(visibility("protected")).  But
it turns out ld.bfd doesn't like this, complaining about an invalid
relocation (ld.mold worked fine).  The driver manager could use
RTLD_DEEPBIND, but this doesn't work with ASan.  We could also try
-Bsymbolic(-functions) too, but this is additional work for the
build process.  So instead, just take the tedious-but-easy route
and define each symbol twice.

3 months agoBulk data ingestion (#7)
David Li [Thu, 9 Jun 2022 14:54:44 +0000 (10:54 -0400)] 
Bulk data ingestion (#7)

* Sketch out bulk data ingestion

* Document parameters and flow better

3 months agoRefactor initialization for consistency (#6)
David Li [Thu, 9 Jun 2022 14:53:15 +0000 (10:53 -0400)] 
Refactor initialization for consistency (#6)

* Move away from ODBC-style parameter strings

Instead, start refactoring things to follow a multi-step init
similar to DuckDB: New(), then SetOption(), then Init().

Also, update the driver manager so it no longer requires a special
entrypoint. Instead, just call AdbcDatabaseNew(), then set options
to indicate the driver to use.

* Refactor how statements are handled

Make them more consistent and reduce the surface of the
SQL-specific portion.

* Fix formatting

3 months agoRefactor error handling (#5)
David Li [Thu, 9 Jun 2022 14:48:53 +0000 (10:48 -0400)] 
Refactor error handling (#5)

It's hard for the driver manager to allocate/free errors since it
would have to manually intercept all calls. Also, it makes it hard
to provide error messages when there is no driver. Move the error
release callback to the error structure itself to make this easier.

3 months agoFix pre-commit CI pipeline (#9)
David Li [Tue, 7 Jun 2022 19:30:58 +0000 (15:30 -0400)] 
Fix pre-commit CI pipeline (#9)

* Fix pre-commit CI pipeline

* Run pre-commit manually

* Cache pre-commit environment

3 months agoSet up pre-commit CI pipeline (#8)
David Li [Tue, 7 Jun 2022 19:17:18 +0000 (15:17 -0400)] 
Set up pre-commit CI pipeline (#8)

3 months agoGet everything building again (#3)
David Li [Thu, 2 Jun 2022 17:41:56 +0000 (13:41 -0400)] 
Get everything building again (#3)

3 months agoAdd .asf.yaml to enable issues (#2)
David Li [Wed, 1 Jun 2022 21:41:13 +0000 (17:41 -0400)] 
Add .asf.yaml to enable issues (#2)

3 months agoInitial import (#1)
David Li [Wed, 1 Jun 2022 20:11:04 +0000 (16:11 -0400)] 
Initial import (#1)

* Update readme and add license in root.

* ARROW-202: Integrate with appveyor ci for windows

This only adds yet a successful compilation for windows. Tests don't

Author: Uwe L. Korn <>

Closes #213 from xhochy/ARROW-202 and squashes the following commits:

d5088a6 [Uwe L. Korn] Correctly reference Kudu in LICENSE and NOTICE
72a583b [Uwe L. Korn] Differentiate Boost libraries based on build type
6c75699 [Uwe L. Korn] Add license header
e33b08c [Uwe L. Korn] Pick up shared Boost libraries correctly
5da5f5d [Uwe L. Korn] ARROW-202: Integrate with appveyor ci for windows

* ARROW-557: [Python] Add option to explicitly opt in to HDFS tests, do not implicitly skip

I have

$ py.test pyarrow/tests/
================================== test session starts ==================================
platform linux2 -- Python 2.7.11, pytest-2.9.0, py-1.4.31, pluggy-0.3.1
rootdir: /home/wesm/code/arrow/python, inifile:
collected 15 items

pyarrow/tests/ sssssssssssssss


$ py.test pyarrow/tests/ --hdfs -v
================================== test session starts ==================================
platform linux2 -- Python 2.7.11, pytest-2.9.0, py-1.4.31, pluggy-0.3.1 -- /home/wesm/anaconda3/envs/py27/bin/python
cachedir: .cache
rootdir: /home/wesm/code/arrow/python, inifile:
collected 15 items

pyarrow/tests/ PASSED
pyarrow/tests/ PASSED
pyarrow/tests/ PASSED
pyarrow/tests/ PASSED
pyarrow/tests/ PASSED
pyarrow/tests/ PASSED
pyarrow/tests/ SKIPPED
pyarrow/tests/ PASSED
pyarrow/tests/ PASSED
pyarrow/tests/ PASSED
pyarrow/tests/ PASSED
pyarrow/tests/ PASSED
pyarrow/tests/ PASSED
pyarrow/tests/ SKIPPED
pyarrow/tests/ PASSED

The `py.test pyarrow --only-hdfs` option will run only the HDFS tests.

Author: Wes McKinney <>

Closes #353 from wesm/ARROW-557 and squashes the following commits:

52e03db [Wes McKinney] Add file, hdfs group to opt in to HDFS tests with --hdfs

* ARROW-1104: Integrate in-memory object store into arrow

This supersedes

This is ready for review. Next steps are
- Integration with the arrow CI
- Write docs on how to use the object store

There is one remaining compilation error (it doesn't find Python.h for one of the Travis configurations, if anybody has an idea on what is going on, let me know).

Author: Philipp Moritz <>
Author: Robert Nishihara <>

Closes #742 from pcmoritz/plasma-store-2 and squashes the following commits:

c100a453 [Philipp Moritz] fixes
d67160c5 [Philipp Moritz] build dlmalloc with -O3
16d1f716 [Philipp Moritz] fix test hanging
0f321e16 [Philipp Moritz] try to fix tests
80f9df40 [Philipp Moritz] make format
4c474d71 [Philipp Moritz] run plasma_store from the right directory
85aa1710 [Philipp Moritz] fix mac tests
61d421b5 [Philipp Moritz] fix formatting
4497e337 [Philipp Moritz] fix tests
00f17f24 [Philipp Moritz] fix licenses
81437920 [Philipp Moritz] fix linting
5370ae06 [Philipp Moritz] fix plasma protocol
a137e783 [Philipp Moritz] more fixes
b36c6aaa [Philipp Moritz] fix
214c426c [Philipp Moritz] fix eviction policy
e7badc48 [Philipp Moritz] fix python extension
6432d3fa [Philipp Moritz] fix formatting
b21f0814 [Philipp Moritz] fix remaining comments about client
27f9c9e8 [Philipp Moritz] fix formatting
7b08fd2a [Philipp Moritz] replace ObjectID pass by value with pass by const reference and fix const correctness
ca80e9a6 [Philipp Moritz] remove plain pointer in plasma client, part II
627b7c75 [Philipp Moritz] fix python extension name
30bd68b7 [Philipp Moritz] remove plain pointer in plasma client, part I
77d98227 [Philipp Moritz] put all the object code into a common library
0fdd4cd5 [Philipp Moritz] link libarrow.a and remove hardcoded optimization flags
8daea699 [Philipp Moritz] fix includes according to google styleguide
65ac7433 [Philipp Moritz] remove offending c++ flag from c flags
7003a4a4 [Philipp Moritz] fix valgrind test by setting working directory
217ff3d8 [Philipp Moritz] add valgrind heuristic
9c703c20 [Philipp Moritz] integrate client tests
9e5ae0e1 [Philipp Moritz] port serialization tests to gtest
0b8593db [Robert Nishihara] Port change from Ray. Change listen backlog size from 5 to 128.
b9a5a06e [Philipp Moritz] fix includes
ed680f97 [Philipp Moritz] reformat the code
f40f85bd [Philipp Moritz] add clang-format exceptions
d6e60d26 [Philipp Moritz] do not compile plasma on windows
f936adb7 [Philipp Moritz] build plasma python client only if python is available
e11b0e86 [Philipp Moritz] fix pthread
74ecb199 [Philipp Moritz] don't link against Python libraries
b1e0335a [Philipp Moritz] fix linting
7f7e7e78 [Philipp Moritz] more linting
79ea0ca7 [Philipp Moritz] fix clang-tidy
99420e8f [Philipp Moritz] add rat exceptions
6cee1e25 [Philipp Moritz] fix
c93034fb [Philipp Moritz] add Apache 2.0 headers
63729130 [Philipp Moritz] fix malloc?
99537c94 [Philipp Moritz] fix compiler warnings
cb3f3a38 [Philipp Moritz] compile C files with CMAKE_C_FLAGS
e649c2af [Philipp Moritz] fix compilation
04c2edb3 [Philipp Moritz] add missing file
51ab9630 [Philipp Moritz] fix compiler warnings
9ef7f412 [Philipp Moritz] make the plasma store compile
e9f9bb4a [Philipp Moritz] Initial commit of the plasma store. Contributors: Philipp Moritz, Robert Nishihara, Richard Shin, Stephanie Wang, Alexey Tumanov, Ion Stoica @ RISElab, UC Berkeley (2017) [from]

* ARROW-1151: [C++] Add branch prediction to RETURN_NOT_OK

Also added some missing status checks to builder-benchmark

Author: Wes McKinney <>

Closes #782 from wesm/ARROW-1151 and squashes the following commits:

9b488a0e [Wes McKinney] Try to fix snappy warning
06276119 [Wes McKinney] Restore check macros used in libplasma
83b3f36d [Wes McKinney] Add branch prediction to RETURN_NOT_OK

* ARROW-1154: [C++] Import miscellaneous computational utility code from parquet-cpp

I will make a corresponding PR to parquet-cpp to ensure that this code migration is complete enough.

Author: Wes McKinney <>

Closes #785 from wesm/ARROW-1154 and squashes the following commits:

08b54c98 [Wes McKinney] Fix variety of compiler warnings
ddc7354b [Wes McKinney] Fixes to get PARQUET-1045 working
f5cd0259 [Wes McKinney] Import miscellaneous computational utility code from parquet-cpp

* ARROW-1185: [C++] Status class cleanup, warn_unused_result attribute and Clang warning fixes

This was tedious, but overdue. The Status class in Arrow as originally imported from Apache Kudu, which had been modified from standard use in Google projects. I simplified the implementation to bring it more in line with the Status implementation used in TensorFlow.

This also addresses ARROW-111 by providing an attribute to warn in Clang if a Status is ignored

Author: Wes McKinney <>

Closes #814 from wesm/status-cleaning and squashes the following commits:

7b7e6517 [Wes McKinney] Bring Status implementation somewhat more in line with TensorFlow and other Google codebases, remove unused posix code. Add warn_unused_result attribute and fix clang warnings

* ARROW-1630: [Serialization] Support Python datetime objects

An additional pair of eyes would be helpful, somewhat strangely the tests are passing for some datetime objects and not for others.

Author: Philipp Moritz <>

Closes #1153 from pcmoritz/serialize-datetime and squashes the following commits:

f3696ae4 [Philipp Moritz] add numpy to LICENSE.txt
a94bca7d [Philipp Moritz] put PyDateTime_IMPORT higher up
0ae645e9 [Philipp Moritz] windows fixes
cbd1b222 [Philipp Moritz] get rid of gmtime_r
f3ea6699 [Philipp Moritz] use numpy datetime code to implement time conversions
e644f4f5 [Philipp Moritz] linting
f38cbd46 [Philipp Moritz] fixes
6e549c47 [Philipp Moritz] serialize datetime

* ARROW-1559: [C++] Add Unique kernel and refactor DictionaryBuilder to be a stateful kernel

Only intended to implement selective categorical conversion in `to_pandas()` but it seems that there is a lot missing to do this in a clean fashion.

Author: Wes McKinney <>

Closes #1266 from xhochy/ARROW-1559 and squashes the following commits:

50249652 [Wes McKinney] Fix MSVC linker issue
b6cb1ece [Wes McKinney] Export CastOptions
4ea3ce61 [Wes McKinney] Return NONE Datum in else branch of functions
4f969c6b [Wes McKinney] Move deprecation suppression after flag munging
7f557cc0 [Wes McKinney] Code review comments, disable C4996 warning (equivalent to -Wno-deprecated) in MSVC builds
84717461 [Wes McKinney] Do not compute hash table threshold on each iteration
ae8f2339 [Wes McKinney] Fix double to int64_t conversion warning
c1444a26 [Wes McKinney] Fix doxygen warnings
2de85961 [Wes McKinney] Add test cases for unique, dictionary_encode
383b46fd [Wes McKinney] Add Array methods for Unique, DictionaryEncode
0962f06b [Wes McKinney] Add cast method for Column, chunked_array and column factory functions
62c3cefd [Wes McKinney] Datum stubs
27151c47 [Wes McKinney] Implement Cast for chunked arrays, fix kernel implementation. Change kernel API to write to a single Datum
1bf2e2f4 [Wes McKinney] Fix bug with column using wrong type
eaadc3e5 [Wes McKinney] Use macros to reduce code duplication in DoubleTableSize
6b4f8f3c [Wes McKinney] Fix datetime64->date32 casting error raised by refactor
2c77a19e [Wes McKinney] Some Decimal->Decimal128 renaming. Add DecimalType base class
c07f91b3 [Wes McKinney] ARROW-1559: Add unique kernel

* ARROW-1693: [JS] Expand JavaScript implementation, build system, fix integration tests

This PR adds a workaround for reading the metadata layout for C++ dictionary-encoded vectors.

I added tests that validate against the C++/Java integration suite. In order to make the new tests pass, I had to update the generated flatbuffers format and add a few types the JS version didn't have yet (Bool, Date32, and Timestamp). It also uses the new `isDelta` flag on DictionaryBatches to determine whether the DictionaryBatch vector should replace or append to the existing dictionary.

I also added a script for generating test arrow files from the C++ and Java implementations, so we don't break the tests updating the format in the future. I saved the generated Arrow files in with the tests because I didn't see a way to pipe the JSON test data through the C++/Java json-to-arrow commands without writing to a file. If I missed something and we can do it all in-memory, I'd be happy to make that change!

This PR is marked WIP because I added an [integration test]( that validates the JS reader reads C++ and Java files the same way, but unfortunately it doesn't. Debugging, I noticed a number of other differences between the buffer layout metadata between the C++ and Java versions. If we go ahead with @jacques-n [comment in ARROW-1693]( and remove/ignore the metadata, this test should pass too.

cc @TheNeuralBit

Author: Paul Taylor <>
Author: Wes McKinney <>

Closes #1294 from trxcllnt/generate-js-test-files and squashes the following commits:

f907d5a7 [Paul Taylor] fix aggressive closure-compiler mangling in the ES5 UMD bundle
57c7df45 [Paul Taylor] remove arrow files from perf tests
5972349c [Paul Taylor] update performance tests to use generated test data
14be77f4 [Paul Taylor] fix Date64Vector TypedArray, enable datetime integration tests
5660eb34 [Wes McKinney] Use openjdk8 for integration tests, jdk7 for main Java CI job
019e8e24 [Paul Taylor] update closure compiler with full support for ESModules, and remove closure-compiler-scripts
48111290 [Paul Taylor] Add support for reading Arrow buffers < MetadataVersion 4
c72134a5 [Paul Taylor] compile JS source in integration tests
c83a700d [Wes McKinney] Hack until ARROW-1837 resolved. Constrain unsigned integers max to signed max for bit width
fd3ed475 [Wes McKinney] Uppercase hex values
224e041c [Wes McKinney] Remove hard-coded file name to prevent primitive JSON file from being clobbered
0882d8e9 [Paul Taylor] separate JS unit tests from integration tests in CI
1f6a81b4 [Paul Taylor] add missing mkdirp for test json data
19136fbf [Paul Taylor] remove test data files in favor of auto-generating them in CI
9f195682 [Paul Taylor] Generate test files when the test run if they don't exist
0cdb74e0 [Paul Taylor] Add a cli arg to generate test JSON files for JS
cc744564 [Paul Taylor] resolve LICENSE.txt conflict
33916230 [Paul Taylor] move js license to top-level license.txt
d0b61f49 [Paul Taylor] add validate package script back in, make suitable for ASF release process
7e3be574 [Paul Taylor] Copy license.txt and notice.txt into target dirs from arrow root.
c8125d2d [Paul Taylor] Update readme to reflect new Table.from signature
49ac3398 [Paul Taylor] allow unrecognized cli args in gulpfile
3c52587e [Paul Taylor] re-enable node_js job in travis
cb142f11 [Paul Taylor] add npm release script, remove unused package scripts
d51793dd [Paul Taylor] run tests on src folder for accurate jest coverage statistics
c087f482 [Paul Taylor] generate test data in build scripts
1d814d00 [Paul Taylor] excise test data csvs
14d48964 [Paul Taylor] stringify Struct Array cells
1f004968 [Paul Taylor] rename FixedWidthListVector to FixedWidthNumericVector
be73c918 [Paul Taylor] add BinaryVector, change ListVector to always return an Array
02fb3006 [Paul Taylor] compare iterator results in integration tests
e67a66a1 [Paul Taylor] remove/ignore test snapshots (getting too big)
de7d96a3 [Paul Taylor] regenerate test arrows from master
a6d3c83e [Paul Taylor] enable integration tests
44889fbe [Paul Taylor] report errors generating test arrows
fd68d510 [Paul Taylor] always increment validity buffer index while reading
562eba7d [Paul Taylor] update test snapshots
d4399a8a [Paul Taylor] update integration tests, add custom jest vector matcher
8d44dcd7 [Paul Taylor] update tests
6d2c03d4 [Paul Taylor] clean arrows folders before regenerating test data
4166a9ff [Paul Taylor] hard-code reader to Arrow spec and ignore field layout metadata
c60305d6 [Paul Taylor] refactor: flatten vector folder, add more types
ba984c61 [Paul Taylor] update dependencies
5eee3eaa [Paul Taylor] add integration tests to compare how JS reads cpp vs. java arrows
d4ff57aa [Paul Taylor] update test snapshots
407b9f5b [Paul Taylor] update reader/table tests for new generated arrows
85497069 [Paul Taylor] update cli args to execute partial test runs for debugging
eefc256d [Paul Taylor] remove old test arrows, add new generated test arrows
0cd31ab9 [Paul Taylor] add generate-arrows script to tests
3ff71384 [Paul Taylor] Add bool, date, time, timestamp, and ARROW-1693 workaround in reader
4a34247c [Paul Taylor] export Row type
141194e7 [Paul Taylor] use fieldNode.length as vector length
c45718e7 [Paul Taylor] support new DictionaryBatch isDelta flag
9d8fef97 [Paul Taylor] split DateVector into Date32 and Date64 types
8592ff3c [Paul Taylor] update generated format flatbuffers

* ARROW-1703: [C++] Vendor exact version of jemalloc we depend on

Author: Uwe L. Korn <>

Closes #1334 from xhochy/ARROW-1703 and squashes the following commits:

7282583f [Uwe L. Korn] ARROW-1703: [C++] Vendor exact version of jemalloc we depend on

* ARROW-2798: [Plasma] Use hashing function that takes into account all UniqueID bytes

Now, the hashing of UniqueID in plasma is too simple which has caused a problem.  In some cases(for example, in github/ray, UniqueID is composed of a taskID and a index),  the UniqueID may be like "ffffffffffffffffffff00", "ffffffffffffffffff01", "fffffffffffffffffff02" ...  . The current hashing method is only to copy the first few bytes of a UniqueID and the result is that most of the hashed ids  are same, so when the hashed ids  put to plasma store, it will become very slow when searching(plasma store uses unordered_map to store the ids, and when the keys are same, it will become slow just like list).

In fact, the same PR has been merged into ray, see

and I have tested the perf between the new hashing method and the original one with putting lots of objects continuously, it seems the new hashing method doesn't cost more time.

Author: songqing <>

Closes #2220 from songqing/oid-hashing and squashes the following commits:

5c803aa0 <songqing> modify murmurhash LICENSE
8b8aa3e1 <songqing> add murmurhash LICENSE
d8d5f93f <songqing> lint fix
426cd1e2 <songqing> lint fix
4767751d <songqing> Use hashing function that takes into account all UniqueID bytes

* ARROW-2634: [Go] Add Go license details to LICENSE.txt

Author: Wes McKinney <>

Closes #2221 from wesm/ARROW-2634 and squashes the following commits:

c65a8193 <Wes McKinney> Add Go license details to LICENSE.txt

* ARROW-3050: [C++] Adopt HiveServer2 client codebase from
cloudera/hs2client. Add Thrift to thirdparty toolchain

This patch incorporates patches developed at cloudera/hs2client (Apache 2.0) by
the following authors:

* 12  Wes McKinney <>, <>
*  2  Thomas Tauber-Marshall <>
*  2  陈晓发 <>
*  2  Matthew Jacobs <>, <>
*  1  Miki Tebeka <>
*  1  Tim Armstrong <>
*  1  henryr <>

Closes #2444

Change-Id: I88aed528a9f4d2069a4908f6a09230ade2fbe50a

* ARROW-1325: [R] Initial R package that builds against the arrow C++ library

This is very minimal in functionality, it just gives a simple R package that calls a function from the arrow C++ library.

Author: Romain Francois <>
Author: Wes McKinney <>

Closes #2489 from romainfrancois/r-bootstrap and squashes the following commits:

89f14b4ba <Wes McKinney> Add license addendums
9e3ffb4d2 <Romain Francois> skip using rpath linker option
79c50011d <Romain Francois> follow up from @wesm comments on #2489
a1a5e7c33 <Romain Francois> + installation instructions
fb412ca1d <Romain Francois> not checking for headers on these files
2848fd168 <Romain Francois> initial R :package: with travis setup and testthat suite, that links to arrow c++ library and calls arrow::int32()

* ARROW-3187: [C++] Add support for using glog (Google logging library)

1. `glog` provides richer information.
2. `glog` can print good call stack while crashing, which is very helpful for debugging.
3. Make logging pluggable with `glog` or original log using a macro. Users can enable/disable `glog` using the cmake option `ARROW_USE_GLOG`.

Author: Yuhong Guo <>
Author: Wes McKinney <>

Closes #2522 from guoyuhong/glog and squashes the following commits:

b359640d4 <Yuhong Guo> Revert some useless changes.
38560c06e <Yuhong Guo> Change back the test code to fix logging-test
e3203a598 <Wes McKinney> Some fixes, run logging-test
4a9d1728b <Wes McKinney> Fix Flatbuffers download url
f36430836 <Yuhong Guo> Add test code to only include glog lib and init it without other use.
c8269fd88 <Yuhong Guo> Change ARROW_JEMALLOC_LINK_LIBS setting to ARROW_LINK_LIBS
34e6841f8 <Yuhong Guo> Add pthread
48afa3484 <Yuhong Guo> Address comment
12f9ba7e9 <Yuhong Guo> Disable glog from ARROW_BUILD_TOOLCHAIN
62f20002d <Yuhong Guo> Add -pthread to glog
673dbebe5 <Yuhong Guo> Try to fix ci FAILURE
69c1e7979 <Yuhong Guo> Add pthread for glog
fbe9cc932 <Yuhong Guo> Change Thirdpart to use EP_CXX_FLAGS
6f4d1b8fc <Yuhong Guo> Add lib64 to lib path suffix.
84532e338 <Yuhong Guo> Add glog to Dockerfile
ccc03cb12 <Yuhong Guo> Fix a bug
7bacd53ef <Yuhong Guo> Add LICENSE information.
9a3834caa <Yuhong Guo> Enable glog and fix building error
2b1f7e00e <Yuhong Guo> Turn glog off.
7d92091a6 <Yuhong Guo> Hide glog symbols from
a6ff67110 <Yuhong Guo> Support offline build of glog
14865ee93 <Yuhong Guo> Try to fix MSVC building failure
53cecebef <Yuhong Guo> Change log level to enum and refine code
09c6af7b9 <Yuhong Guo> Enable glog in plasma

* ARROW-3182: [Gandiva] Integrate gandiva to arrow build. Update licenses to apache license.

Fix clang-format, cpplint warnings, -Wconversion warnings and other warnings
with -DBUILD_WARNING_LEVEL=CHECKIN. Fix some build toolchain issues, Arrow
target dependencies. Remove some unused CMake code

* ARROW-3536: [C++] Add UTF8 validation functions

The baseline UTF8 decoder is adapted from Bjoern Hoehrmann's DFA-based implementation.
The common case of runs of ASCII chars benefit from a fast path handling 8 bytes at a time.

Benchmark results (on a Ryzen 7 machine with gcc 7.3):
Benchmark                                      Time           CPU Iterations
BM_ValidateTinyAscii/repeats:1                 3 ns          3 ns  245245630   3.26202GB/s
BM_ValidateTinyNonAscii/repeats:1              7 ns          7 ns  104679950   1.54295GB/s
BM_ValidateSmallAscii/repeats:1               10 ns         10 ns   66365983   13.0928GB/s
BM_ValidateSmallAlmostAscii/repeats:1         37 ns         37 ns   18755439   3.69415GB/s
BM_ValidateSmallNonAscii/repeats:1            68 ns         68 ns   10267387   1.82934GB/s
BM_ValidateLargeAscii/repeats:1             4140 ns       4140 ns     171331   22.5003GB/s
BM_ValidateLargeAlmostAscii/repeats:1      24472 ns      24468 ns      28565   3.80816GB/s
BM_ValidateLargeNonAscii/repeats:1         50420 ns      50411 ns      13830   1.84927GB/s

The case of tiny strings is probably the most important for the use case of CSV type inference.

PS: benchmarks on the same machine with clang 6.0:
Benchmark                                      Time           CPU Iterations
BM_ValidateTinyAscii/repeats:1                 3 ns          3 ns  213945214   2.84658GB/s
BM_ValidateTinyNonAscii/repeats:1              8 ns          8 ns   90916423   1.33072GB/s
BM_ValidateSmallAscii/repeats:1                7 ns          7 ns   91498265   17.4425GB/s
BM_ValidateSmallAlmostAscii/repeats:1         34 ns         34 ns   20750233   4.08138GB/s
BM_ValidateSmallNonAscii/repeats:1            58 ns         58 ns   12063206   2.14002GB/s
BM_ValidateLargeAscii/repeats:1             3999 ns       3999 ns     175099   23.2937GB/s
BM_ValidateLargeAlmostAscii/repeats:1      21783 ns      21779 ns      31738   4.27822GB/s
BM_ValidateLargeNonAscii/repeats:1         55162 ns      55153 ns      12526   1.69028GB/s

Author: Antoine Pitrou <>

Closes #2916 from pitrou/ARROW-3536-utf8-validation and squashes the following commits:

9c9713b78 <Antoine Pitrou> Improve benchmarks
e6f23963a <Antoine Pitrou> Use a larger state table allowing for single lookups
29d6e347c <Antoine Pitrou> Help clang code gen
e621b220f <Antoine Pitrou> Use memcpy for safe aligned reads, and improve speed of non-ASCII runs
89f6843d9 <Antoine Pitrou> ARROW-3536:  Add UTF8 validation functions

* ARROW-3800: [C++] Vendor a string_view backport

Vendor the `std::string_view` backport from

Author: Antoine Pitrou <>

Closes #2974 from pitrou/ARROW-3800-string-view-backport and squashes the following commits:

4353414b6 <Antoine Pitrou> ARROW-3800:  Vendor a string_view backport

* ARROW-3738: [C++] Parse ISO8601-like timestamps in CSV columns

Second granularity is allowed (we might want to add support for fractions of seconds, e.g. in the "YYYY-MM-DD[T ]hh:mm:ss.ssssss" format).

Timestamp conversion also participates in CSV type inference, since it's unlikely to produce false positives (e.g. a semantically "string" column that would be entirely made of valid timestamp strings).

Author: Antoine Pitrou <>

Closes #2952 from pitrou/ARROW-3738-csv-timestamps and squashes the following commits:

005a6e3f7 <Antoine Pitrou> ARROW-3738:  Parse ISO8601-like timestamps in CSV columns

* ARROW-2653: [C++] Refactor hash table support

1. Get rid of all macros and sprinkled out hash table handling code

2. Improve performance by more careful selection of hash functions
   (and better collision resolution strategy)

Integer hashing benefits from a very fast specialization.
Small string hashing benefits from a fast specialization with less branches
and less computation.
Generic string hashing falls back on hardware CRC32 or Murmur2-64, which has probably sufficient
performance given the typical distribution of string key length.

3. Add some tests and benchmarks

Author: Antoine Pitrou <>

Closes #3005 from pitrou/ARROW-2653 and squashes the following commits:

0c2dcc3de <Antoine Pitrou> ARROW-2653:  Refactor hash table support

* ARROW-4017: [C++] Move vendored libraries in dedicated directory

Also update mapbox::variant to v1.1.5 (I'm not sure which version was previously vendored).

Author: Antoine Pitrou <>

Closes #3184 from pitrou/ARROW-4017-vendored-libraries and squashes the following commits:

fe69566d7 <Antoine Pitrou> ARROW-4017:  Move vendored libraries in dedicated directory

* ARROW-3819: [Packaging] Update conda variant files to conform with feedstock after compiler migration

Crossbow builds:
- [kszucs/crossbow/build-403](
- [kszucs/crossbow/build-404](
- [kszucs/crossbow/build-405](
- [kszucs/crossbow/build-406](
- [kszucs/crossbow/build-407](

Author: Krisztián Szűcs <>

Closes #3368 from kszucs/conda_forge_migration and squashes the following commits:

e0a5a6422 <Krisztián Szűcs>  use --croot
3749a2ff9 <Krisztián Szűcs>  git on osx; set FEEDSTOSK_ROOT
ca7217d7f <Krisztián Szűcs>  support channel sources from variant files
33cba7118 <Krisztián Szűcs>  fix conda path on linux
2505828b7 <Krisztián Szűcs> fix task names
0c4a10bc3 <Krisztián Szűcs> conda recipes for python 3.7; compiler migration

* ARROW-4198: [Gandiva] Added support to cast timestamp

Added howard hinnant date project as a third party library.
Used system timezone database for timezone information.

Author: Antoine Pitrou <>
Author: shyam <>

Closes #3352 from shyambits2004/timestamp and squashes the following commits:

882a5cf6 <Antoine Pitrou> Tweak wording of vendored date library README
7f524805 <Antoine Pitrou> Small tweaks to license wording for the date library
9ee8eff4 <shyam> ARROW-4198 :  Added support to cast timestamp

* ARROW-4546: Update LICENSE.txt with parquet-cpp licenses

- Ported parquet-cpp external license references
- Removed spurious duplicates (boost, mapbox)

Author: François Saint-Jacques <>

Closes #3692 from fsaintjacques/ARROW-4546-parquet-license and squashes the following commits:

a5aa81e48 <François Saint-Jacques> ARROW-4546: Update LICENSE with parquet-cpp licenses

* ARROW-4690: Building TensorFlow compatible wheels for Arrow

This includes a Dockerfile that can be used to create wheels based on ubuntu 14.04 which are compatible with TensorFlow.

TODO before this can be merged:
- [x] write documentation how to build this
- [x] do more testing

Author: Philipp Moritz <>

Closes #3766 from pcmoritz/ubuntu-wheels and squashes the following commits:

f708c29b <Philipp Moritz> remove tensorflow import check
599ce2e7 <Philipp Moritz> fix manylinux1 build instructions
f1fbedf8 <Philipp Moritz> remove tensorflow hacks
bf47f579 <Philipp Moritz> improve wording
4fb1d38b <Philipp Moritz> add documentation
078be98b <Philipp Moritz> add licenses
0ab0bccb <Philipp Moritz> cleanup
c7ab1395 <Philipp Moritz> fix
eae775d5 <Philipp Moritz> update
2820363e <Philipp Moritz> update
ed683309 <Philipp Moritz> update
e8c96ecf <Philipp Moritz> update
8a3b19e8 <Philipp Moritz> update
0fcc3730 <Philipp Moritz> update
fd387797 <Philipp Moritz> update
78dcf42d <Philipp Moritz> update
7726bb6a <Philipp Moritz> update
82ae4828 <Philipp Moritz> update
f44082ea <Philipp Moritz> update
deb30bfd <Philipp Moritz> update
50e40320 <Philipp Moritz> update
58f6c121 <Philipp Moritz> update
5e8ca589 <Philipp Moritz> update
5fa73dd5 <Philipp Moritz> update
595d0fe1 <Philipp Moritz> update
79006722 <Philipp Moritz> add libffi-dev
9ff5236d <Philipp Moritz> update
ca972ad0 <Philipp Moritz> update
60805e22 <Philipp Moritz> update
7a66ba35 <Philipp Moritz> update
1b56d1f1 <Philipp Moritz> zlib
eedef794 <Philipp Moritz> update
3ae2b5ab <Philipp Moritz> update
df297e1c <Philipp Moritz> add python build script
358e4f85 <Philipp Moritz> update
65afcebe <Philipp Moritz> update
11ccfc7e <Philipp Moritz> update
f1784245 <Philipp Moritz> update
b3039c8b <Philipp Moritz> update
9064c3ca <Philipp Moritz> update
c39f92a9 <Philipp Moritz> install tensorflow
ec4e2210 <Philipp Moritz> unicode
773ca2b6 <Philipp Moritz> link python
b690d64a <Philipp Moritz> update
5ce7f0d6 <Philipp Moritz> update
a9302fce <Philipp Moritz> install python-dev
f12e0cfe <Philipp Moritz> multibuild python 2.7
9342006b <Philipp Moritz> add git
ab2ef8e7 <Philipp Moritz> fix cmake install
cef997b5 <Philipp Moritz> install cmake and ninja
5d560faf <Philipp Moritz> add build-essential
adf2f705 <Philipp Moritz> add curl
f8d66963 <Philipp Moritz> remove xz
e439356e <Philipp Moritz> apt update
79fe557e <Philipp Moritz> add docker image for ubuntu wheel

* ARROW-4611: [C++] Rework CMake logic

This changes refactors much of our CMake logic to make use of built-in CMake paths and remove custom logic. It also switches to the use of more modern dependency management via CMake targets instead of plain text variables.

This includes the following fixes:

- Use CMake's standard find features, e.g. respecting the `*_ROOT` variables:
- Add a Dockerfile for Fedora:
- Add a Dockerfile for Ubuntu Xenial:
- Add a Dockerfile for Ubuntu Bionic:
- Add a Dockerfile for Debian Testing:
- Change the clang-7 entry to use system packages without any dependency on conda(-forge):
- Support `double-conversion<3.1`:
- Use google benchmark from toolchain:
- Use the `compilers` metapackage to install the correct binutils when using conda, otherwise system binutils to fix
- RapidJSON throws compiler errors with GCC 8+
- Handle `EXPECT_OK` collision:
- Activate flight build in ci/
- Build Gandiva in the docker containers:

Author: Uwe L. Korn <>

Closes #3688 from xhochy/build-on-fedora and squashes the following commits:

88e11fcfb <Uwe L. Korn> ARROW-4611:  Rework CMake logic

* ARROW-4900: [C++] polyfill __cpuidex on mingw-w64

Author: Jeroen Ooms <>

Closes #3923 from jeroen/cpuidex and squashes the following commits:

59429f02 <Jeroen Ooms> Mention mingw-w64 polyfill in LICENSE.txt
28619330 <Jeroen Ooms> run clang-format
9e780465 <Jeroen Ooms> polyfill for __cpuidex on mingw-w64

* ARROW-5252: [C++] Use standard-compliant std::variant backport

Replace mapbox::variant with Michael Park's variant implementation.

Author: Antoine Pitrou <>

Closes #4259 from pitrou/ARROW-5252-variant-backport and squashes the following commits:

03dbc0e14 <Antoine Pitrou> ARROW-5252:  Use standard-compliant std::variant backport

* ARROW-5648: [C++] Avoid using codecvt

Some antiquated C++ build chains miss the standard <codecvt> header.
Use a small vendored UTF8 implementation instead.

Author: Antoine Pitrou <>

Closes #4616 from pitrou/ARROW-5648-simple-utf8 and squashes the following commits:

54b1b2f68 <Antoine Pitrou> ARROW-5648:  Avoid using codecvt

* ARROW-4800: [C++] Introduce a Result<T> class

- Mostly an adaptation of StatusOr from google/asylo (both header and unittests).
- Demonstrate usage in ipc/writer*
- If this PR is accepted I can do a follow-up PR to port over useful testing utilities.

Author: Micah Kornfield <>
Author: emkornfield <>

Closes #4501 from emkornfield/error_or and squashes the following commits:

82e48c453 <Micah Kornfield> fix linter.  Add unittest.
aad79b183 <Micah Kornfield> rename to Return
1d7dbfbcd <Micah Kornfield> Use bkietz's suggestion.  cleanup test
d8e80431c <Micah Kornfield> fix compile errors
cc626079c <Micah Kornfield> try non anonyous namespace
86e43ac89 <Micah Kornfield> export before
8a4b3ccf3 <Micah Kornfield> try explicit instantation for msvc
f12f6d027 <Micah Kornfield> Revert "remove ARROW_EXPORT from test and try add link to gtest_main"
9581b05b1 <Micah Kornfield> remove ARROW_EXPORT from test and try add link to gtest_main
7a21e577a <Micah Kornfield> try exporting private test classes for appveyor
0b44389da <Micah Kornfield> fix format
de9d2d0d9 <Micah Kornfield> remove duplicate code.  fix format
504fcd7bf <emkornfield> Update cpp/src/arrow/error_or.h
31d9906c5 <Micah Kornfield> use vendored variant
aa540da09 <Micah Kornfield> fix append
6f459a5f9 <Micah Kornfield> address review comments
7a1e54de4 <Micah Kornfield> Add Arrow export
2886733fb <Micah Kornfield> use ARROW_RETURN_NOT_OK
f7ed04f00 <Micah Kornfield> address comments
3e2b3691a <Micah Kornfield> follow recommendation of docs for macro
d5e43d034 <Micah Kornfield> ARROW-4800: Introduce an ErrorOr class

* ARROW-5683: [R] Add snappy to Rtools Windows builds

Following and, R Windows builds can now support Snappy compression. This patch tweaks the necessary files and unskips tests, in addition to some other PKGBUILD script cleanup.

Passing build here:

Author: Neal Richardson <>

Closes #4681 from nealrichardson/r-snappy and squashes the following commits:

0996a30e2 <Neal Richardson> Add license info for rtools-backports
1af08413c <Neal Richardson> Revert "Only run mine for now"
a5d967f0c <Neal Richardson> Get snappy from backports after all
a1c6390b6 <Neal Richardson> -lsnappy
a41544914 <Neal Richardson> Only run mine for now
b911568df <Neal Richardson> More comments; unskip tests
d7a74192a <Neal Richardson> Add snappy to PKGBUILD; prune some default cmake flags and add comment

* ARROW-5725: [Crossbow] Port conda recipes to azure pipelines

- [x] artifact uploading
- [x] osx build
- [x] win build (using appveyor, because of
- [x] linux build
- [x] package gandiva

Author: Krisztián Szűcs <>

Closes #4649 from kszucs/crossbow-azure and squashes the following commits:

20f6cecd3 <Krisztián Szűcs> update conda-win artifact patterns
0c470bb6a <Krisztián Szűcs> readme fixes
b6a86076b <Krisztián Szűcs> configure output folder for the artifacts
68d88a833 <Krisztián Szűcs> combine status api and checks api
111964957 <Krisztián Szűcs> fix artifact patterns
95cb44217 <Krisztián Szűcs> use FETCH_HEAD in the CI templates
cbb9c9ce7 <Krisztián Szűcs> rat
8f58839e1 <Krisztián Szűcs> use the default python on osx
f75efae18 <Krisztián Szűcs> use pip module for installing dependencies
2a598945d <Krisztián Szűcs> tabulate win template
9db3db1dd <Krisztián Szűcs> use pip3
2aa497748 <Krisztián Szűcs> azure template for docker tests
750f624c1 <Krisztián Szűcs> asset uploading script
e0d8fb9b2 <Krisztián Szűcs> git commit additional log
7fbce5df8 <Krisztián Szűcs> use appveyor for the win packages; upload assets scripts
d6c4ce9fa <Krisztián Szűcs> touch done_canary
611222e28 <Krisztián Szűcs> docker shm
ba0e88cce <Krisztián Szűcs> update old templates; query cxx include paths
0d76f1364 <Krisztián Szűcs> win
0c8464a4b <Krisztián Szűcs> parquet-cpp depend on exact arrow-cpp version
aecc2b19e <Krisztián Szűcs> displayName order
c42ebf595 <Krisztián Szűcs> quoting gandiva flags
8abd34779 <Krisztián Szűcs> move displayName after the script
bdf705ff0 <Krisztián Szűcs> OSX configuration
a874d1f99 <Krisztián Szűcs> gandiva flags
f50af1b51 <Krisztián Szűcs> path gymnastics
5cd9fa0b5 <Krisztián Szűcs> use pyarrow as recipe root
4b005892f <Krisztián Szűcs> try to fix assertion error
9ef81c567 <Krisztián Szűcs> use feedstock_root
0e826ac43 <Krisztián Szűcs> fix recipe directories
adae7c0f3 <Krisztián Szűcs> build all three recipes
7b60c9d07 <Krisztián Szűcs> pass arrow_version
ce740d799 <Krisztián Szűcs> fixing path
df31ff7dc <Krisztián Szűcs> trying to fix feedstock and recipe roots
501d55341 <Krisztián Szűcs> set config
b2425e650 <Krisztián Szűcs> fix working directory
53e8eb24f <Krisztián Szűcs> don't use azure templates
b2fd21a24 <Krisztián Szűcs> use variables ]
2037f78fc <Krisztián Szűcs> port conda recipes to azure pipelines

* ARROW-5934: [Python] Bundle arrow's LICENSE with the wheels

Setuptools can handle multiple license files, but they get overwritten because of the same naming, so move the content python/LICENSE.txt to the top level LICENSE.txt.  I've investigated a solution to concatenate these, but it would require to extend multiple distutils/setuptools/wheel commands in a really error-prone fashion.
- Distribute the top level LICENSE.txt file with the wheels
- Distribute the top level LICENSE.txt with the source distribution, however `python bdist` leaves LICENSE.txt file as a garbage in the rebository, it cannot cleanup properly probably because the relative directory reference.

Add 3rdparty licenses because of the static-linkage in the wheels:
- lz4:
- zstd:
- rapidjson: because of transitive dependencies
- uriparser:
- double-conversion:
- snappy:
- brotli:
- jemalloc is already added
- protobuf is already added
- gflags:
- c-ares:
- glog:
- boost is already added
- flatbuffers is already added
- grpc:
- gtest: do we redistribute any binaries from it?
- gbenchmark: do we redistribute any binaries from it?
- apache thrift added
- apache orc added
- zlip is redistributed as a shared library with all wheels (in the future we should switch to static linkage)
- openssl and libcrypto is redistributed as shared libraries with the windows wheels, so added the openssl license preceding version 3

bzip2 doesn't require to include its license with binary redistributions:

Authored-by: Krisztián Szűcs <>
Signed-off-by: Wes McKinney <>
Closes #4880 from kszucs/wheel-license and squashes the following commits:

b839964a2 <Krisztián Szűcs> openssl
f220c6609 <Krisztián Szűcs> zlib
064444d25 <Krisztián Szűcs> distribute notice as well
bee17ac0e <Krisztián Szűcs> orc notice
25f738cf8 <Krisztián Szűcs> Thrift and ORC
54a643bd8 <Krisztián Szűcs> grpc
baa77962f <Krisztián Szűcs> glog
0a3070e5a <Krisztián Szűcs> c-ares
749574f00 <Krisztián Szűcs> gflags
52d7e19a8 <Krisztián Szűcs> typo
0697927c6 <Krisztián Szűcs> brotli
51b9264fe <Krisztián Szűcs> re2
5418a0e2c <Krisztián Szűcs> snappy and double-conversion
5647ab923 <Krisztián Szűcs> lz4 and rapidjson
29fa7e046 <Krisztián Szűcs> wheel licensing

* ARROW-6258: [R] Add macOS build scripts

When installing the R package from source on macOS, if the configure script cannot find libarrow with pkgconfig, and if `apache-arrow` has not been installed via Homebrew (neither of which is the case on CRAN), an "autobrew" step happens: a script is downloaded and sourced, which uses a fork of Homebrew to download and install binary dependencies for bundling with the R package.

This patch alters the configure script to let you `FORCE_AUTOBREW`, which is useful for testing, and it will use a local `autobrew` script file, if found, rather than downloading it. The patch also adds the `autobrew` script and the `apache-arrow.rb` brew formula to the `r/tools` directory, alongside the similar script that downloads the Arrow C++ binary on Windows. The two scripts are copied exactly from their "upstream" versions (noted on L18 of each file), with two minor modifications: (1) `autobrew` will use a local `apache-arrow.rb` formula if the file exists, and (2) the formula adds the `head` reference so you can `brew install --build-from-source --HEAD apache-arrow.rb` and pull the latest master branch of `apache/arrow` from GitHub.

See this in action at Ordinarily I would add a Travis-CI job to `apache/arrow` for this, but I know we're anxious not to delay build times further, so I'll run this job nightly. Nightly runs will solve, and it will also allow us to host an R package repository with nightly binaries for macOS (and Windows too, using the existing Appveyor config + deploy to bintray).

To install a binary from that repository on macOS, `install.packages("arrow", repos="")`.

One TODO: get @jeroen 's approval to include these scripts here under the Apache license and add a citation to LICENSE.txt.

Closes #5095 from nealrichardson/force-autobrew and squashes the following commits:

499296d37 <Neal Richardson> Add license information for autobrew
a63765bd7 <Neal Richardson> :rat:
1a8a77700 <Neal Richardson> Add autobrew scripts
f48e6ba1e <Neal Richardson> Check for local autobrew script
284fd871b <Neal Richardson> Add FORCE_AUTOBREW arg to r/configure to support testing

Authored-by: Neal Richardson <>
Signed-off-by: François Saint-Jacques <>
* ARROW-6454: [LICENSE] Add LLVM's license due to static linkage

Also adding to the conda-forge recipe, which we should keep until the next release.

Closes #5250 from kszucs/llvm-license and squashes the following commits:

f732908ad <Krisztián Szűcs> add LLVM's license

Authored-by: Krisztián Szűcs <>
Signed-off-by: Wes McKinney <>
* ARROW-4649: [C++/CI/R] Add nightly job that tests the homebrew formula

This doesn't just test `brew install apache-arrow --HEAD` as the ticket suggested--it brings the Homebrew formula under our source control and tests against that. This will enable us to know when we need to update the Homebrew formula due to changes in dependencies or cmake configuration.

I've been testing out this approach on a different repository:

Closes #5360 from nealrichardson/homebrew-nightly and squashes the following commits:

4a50a3779 <Neal Richardson> Shuffle again
ea3f9b5fc <Neal Richardson> Move autobrew script again and fix URL to match regular homebrew
851ac6eae <Neal Richardson> Sort hunks :muscle:
1d6512b2a <Neal Richardson> Move homebrew formulae inside dev/tasks. Update autobrew package version in release script
ff1489ea7 <Neal Richardson> Use regular snapshot version for homebrew formula
79e9191f0 <Neal Richardson> Remove autoconf from homebrew formula because new jemalloc no longer requires it
8816279b4 <Neal Richardson> Fix autobrew audit check
b25ac6de6 <Neal Richardson> Fix licensing/:rat: for ci/apache-arrow.rb
89dea4ff0 <Neal Richardson> Parametrize homebrew task and also test 'autobrew'
d61290a87 <Neal Richardson> Remove bottle shas
a133385c1 <Neal Richardson> Fix test (hopefully?)
6d00fe444 <Neal Richardson> Fix regular expression
34af2a911 <Neal Richardson> Add missing test assertion
40fc370c6 <Neal Richardson> Attempt to set the homebrew formula arrow version in the release script
ea4368e49 <Neal Richardson> Re-alphabetize the seds in
262c2415b <Neal Richardson> Rename homebrew task yml; add to LICENSE
163c67a9d <Neal Richardson> Add homebrew formula and crossbow nightly task

Authored-by: Neal Richardson <>
Signed-off-by: Sutou Kouhei <>
* ARROW-6678: [C++][Parquet] Binary data stored in Parquet metadata must be base64-encoded to be UTF-8 compliant

I have added a simple base64 implementation (Zlib license) to arrow/vendored from

Closes #5493 from wesm/ARROW-6678 and squashes the following commits:

c058e8694 <Wes McKinney> Simplify, add MSVC exports
06f75cd5b <Wes McKinney> Fix Python unit test that needs to base64-decode now
eabb121ba <Wes McKinney> Fix LICENSE.txt, add iwyu export
b3a584a29 <Wes McKinney> Add vendored base64 C++ implementation and ensure that Thrift KeyValue in Parquet metadata is UTF-8

Authored-by: Wes McKinney <>
Signed-off-by: Micah Kornfield <>
* ARROW-6679: [RELEASE] Add license info for the autobrew scripts


Closes #5501 from nealrichardson/autobrew-license and squashes the following commits:

3e790f5b8 <Neal Richardson> MIT license for autobrew

Authored-by: Neal Richardson <>
Signed-off-by: Wes McKinney <>
* ARROW-7101: [CI] Refactor docker-compose setup and use it with GitHub Actions

## Projecting ideas from ursabot

### Parametric docker images

The images are better parameterized now, meaning that we can build more variant of the same service. Couple of examples:

UBUNTU=16.04 docker-compose build ubuntu-cpp
ARCH=arm64v8 UBUNTU=18.04 docker-compose build ubuntu-cpp
PYTHON=3.6 docker-compose build conda-python
ARCH=arm32v7 PYTHON=3.6 PANDAS=0.25 docker-compose build conda-python-pandas

Each variant has it's own docker image following a string naming schema:

### Use * and * for each job

The docker images provide the environment, and each language backend usually should implement  two scripts, a `` and a ``. This way dependent build like the docker python, r or c glib are able to reuse the build script of the ancestor without running its tests.

With small enough scripts, if the environment is properly set up even the non-docker builds should be reproducible locally. GitHub Actions support bash scripts across all three platforms, so we can reuse the same `*` and `*` scripts to execute the builds either in docker, on the CI or locally.

## Using GitHub Actions for running the builds

Regardless of the CI we're going to choose, the isolation constraint of different platforms requires some sort of virtualisation. Currently linux (and windows, but I have not tried it yet) has lightweight containerisation, so we should keep the linux builds isolated in docker containers. The rest of the platforms (windows and macOS) should be executed on the CI system.

GitHub Actions support all three major platforms, linux, windows and macOS. I've added cross platform builds for a couple of languages, like Rust, and Go, the rest are work in progress.

### Workflow

A workflow should define all builds of a language, mostly because the path filters can be defined on workflow level. For example the python builds should be triggered if either a cpp/** or a python/** file changes which can be covered in the same workflow file.

## Feature parity with the current builds

Reaching feature parity with all of the builds below is not a goal for this PR, the difficult ones should at least have a tracking JIRA ticket.

### Travis-CI

- [x] **Lint, Release tests**:
  - `Lint / C++, Python, R, Rust, Docker, RAT`
  - `Dev / Source Release`
- [x] **C++ unit tests w/ conda-forge toolchain, coverage**: without coverage
  - `C++ / AMD64 Conda C++`
- [x] **Python 3.6 unit tests, conda-forge toolchain, coverage**: without coverage
  - `Python / AMD64 Conda Python 3.6`
- [x] **[OS X] C++ w/ Xcode 9.3**:
  - `C++ / AMD64 MacOS 10.14 C++`: with Xcode 10.3
- [x] **[OS X] Python w/ Xcode 9.3**:
  - `Python / AMD64 MacOS 10.14 Python 3`: with Xcode 10.3
- [x] **Java OpenJDK8 and OpenJDK11**:
  - `Java / AMD64 Debian Java JDK 8 Maven 3.5.2`
  - `Java / AMD64 Debian Java JDK 11 Maven 3.6.2`
- [x] **Protocol / Flight Integration Tests**:
  - `Dev / Protocol Test`
- [x] **NodeJS**: without running lint and coverage
  - `NodeJS / AMD64 Debian NodeJS 11`
- [x] **C++ & GLib & Ruby w/ gcc 5.4**:
  - `C++ / AMD64 Debian 10 C++`: with GCC 8.3
  - `C++ / AMD64 Ubuntu 16.04 C++`: with GCC 5.4
  - `C++ / AMD64 Ubuntu 18.04 C++`: with GCC 7.4
  - `C GLib / AMD64 Ubuntu 18.04 C GLib`
  - `Ruby / AMD64 Ubuntu 18.04 Ruby`
- [x] **[OS X] C++ & GLib & Ruby w/ XCode 10.2 & Homebrew**
  - `C++ / AMD64 MacOS 10.14 C++`: with Xcode 10.3
  - `C GLib / AMD64 MacOS 10.14 C Glib`: with Xcode 10.3
  - `Ruby / AMD64 MacOS 10.14 Ruby`: with Xcode 10.3
- [x] **Go**: without coverage
  - `Go / AMD64 Debian Go 1.12`
- [x] **R (with and without libarrow)**:
  - `R / AMD64 Conda R 3.6`: with libarrow
  - `R / AMD64 Ubuntu 18.04 R 3.6` with libarrow

### Appveyor

- ~JOB=MinGW32, MINGW_ARCH=i686, MINGW_PACKAGE_PREFIX=mingw-w64-i686, MINGW_PREFIX=c:\msys64\mingw32, MSYSTEM=MINGW32, USE_CLCACHE=false~
- ~JOB=MinGW64, MINGW_ARCH=x86_64, MINGW_PACKAGE_PREFIX=mingw-w64-x86_64, MINGW_PREFIX=c:\msys64\mingw64, MSYSTEM=MINGW64, USE_CLCACHE=false~
- [x] **JOB=Rust, TARGET=x86_64-pc-windows-msvc, USE_CLCACHE=false**:
  - `Rust / AMD64 Windows 2019 Rust nightly-2019-09-25`
- [x] **JOB=C#, APPVEYOR_BUILD_WORKER_IMAGE=Visual Studio 2017, USE_CLCACHE=false**
  - `C# / AMD64 Windows 2019 C# 2.2.103`
- [x] **JOB=Go, MINGW_PACKAGE_PREFIX=mingw-w64-x86_64 ...**:
  - `Go / AMD64 Windows 2019 Go 1.12`

### Github Actions

- [x] **Windows MSVC C++ / Build (Visual Studio 16 2019)**:
  - `C++ / AMD64 Windows 2019 C++`: without tests
- [x] **Windows MSVC C++ / Build (Visual Studio 15 2017)**:
  - `C++ / AMD64 Windows 2016 C++`: without tests
- [x] **Linux docker-compose / Test (C++ w/ clang-7 & system packages)**: all have llvm for gandiva but the compiler is set to gcc
  - `C++ / AMD64 Debian 10 C++`: with GCC 8.3
  - `C++ / AMD64 Ubuntu 16.04 C++`: with GCC 5.4
  - `C++ / AMD64 Ubuntu 18.04 C++`: with GCC 7.4
- [x] **Linux docker-compose / Test (Rust)**: without rustfmt
  - `Rust / AMD64 Debian Rust nightly-2019-09-25`
- [x] **Linux docker-compose / Test (Lint, Release tests)**:
  - `Lint / C++, Python, R, Rust, Docker, RAT`
  - `Dev / Source Release`

### Nightly Crossbow tests

The packaging builds are out of the scope if this PR, but the nightly **dockerized test** task are in.

Nightly tests:
- [x] docker-r
- [x] docker-r-conda
- [x] docker-r-sanitizer
- [x] docker-rust
- [x] docker-cpp
- [x] docker-cpp-cmake32
- [x] docker-cpp-release
- [x] docker-cpp-static-only
- [x] docker-c_glib
- [x] docker-go
- [x] docker-python-2.7
- [x] docker-python-3.6
- [x] docker-python-3.7
- [x] docker-python-2.7-nopandas
- [x] docker-python-3.6-nopandas
- [x] docker-java
- [x] docker-js
- [x] docker-docs
- [x] docker-lint
- [x] docker-iwyu: included in the lint
- [x] docker-clang-format: included in the lint
- [x] docker-pandas-master
- [x] docker-dask-integration
- [x] docker-hdfs-integration
- [x] docker-spark-integration
- [x] docker-turbodbc-integration

# TODOs left:

- [x] Fix the Apidoc generation for c_glib
- [x] Fix the JNI test for Gandiva and ORC
- [x] Test that crossbow tests are passing
- ~Optionally restore the travis configuration to incrementally decommission old builds~

## Follow-up JIRAs:

- [Archery] Consider porting the docker tool of ursabot to archery
- [Archery] Consider to use archery with or instead of the pre-commit hooks
- [Archery] Create a wrapper script in archery for docker compose in order to run the containers with the host's user and group
- [C++] GCC 5.4.0 has a compile errors, reproduce with UBUNTU=16.04 docker-compose run ubuntu-cpp
- [C++][CI] Test the ported fuzzit integration image
- [C++][CI] Turn off unnecessary features in the integration tests (spark/turbodbc/dask/hdfs)
- [C++][CI] Revisit ASAN UBSAN settings in every C++ based image
- [CI] Consider re-adding the removed debian testing image is removed
- [Go][CI] Pre-install the go dependencies in the dockerfile using go get
- [JS][CI] Pre-install the JS dependencies in the dockerfile
- [Rust][CI] Pre-install the rust dependencies in the dockerfile
- [Java][CI] Pre-install the java dependencies in the dockerfile
- [Ruby][CI] Pre-install the ruby dependencies in the dockerfile and remove it from the test script
- [C#][CI] Pre-install the C# dependencies in the dockerfile
- [R][CI] Fix the r-sanitizer build
- [GLIB][MacOS] Fail to execute lua examples (fails to load 'lgi.corelgilua51' despite that lgi is installed)
- [C++][CMake] Automatically set ARROW_GANDIVA_PC_CXX_FLAGS for conda and OSX sdk (see
- [C++][CI] Hiveserver2 instegration test fails to connect to impala container
- [CI][Spark] Support specific Spark version in the integration tet including latest
- [JS][CI] Move nodejs linting from to archery
- [Python][CI] create a docker image for python ASV benchmarks and fix the script
- [CI] Find a short but related prefix for the env vars used for the docker-compose file to prevent collisions
- [C#] the docker container fails to run because of the ubuntu host versions, see
- [C++][Windows] Enable more features on the windows GHA build
- [Doc] document docker-compose usage in the developer sphinx guide
- [CI][C++] Add .ccache to the docker-compose mounts
- [Archery][CI] Refactor the ci/scripts to a sourceable bash functions or to archery directly
- [C++][CI] Use scripts/ to show automatic backtraces
- [C++] Fix the hanging C++ tests in Windows 2019
- [CI] Ask INFRA to set up the DOCKERHUB_* secrets for GitHub actions
- [C++][CI] Running Gandiva tests fails on Fedora:
    Reproduce with: `docker-compose run -e ARROW_GANDIVA=ON fedora-cpp`
    Running gandiva-internals-test, redirecting output into /build/cpp/build/test-logs/gandiva-internals-test.txt (attempt 1/1)
    : CommandLine Error: Option 'x86-experimental-vector-widening-legalization' registered more than once!
    LLVM ERROR: inconsistency in registered CommandLine options
- [JS][CI] NodeJS build fails on Github Actions Windows node
    > NODE_NO_WARNINGS=1 gulp build
    # 'NODE_NO_WARNINGS' is not recognized as an internal or external command,
    # operable program or batch file.
    # npm ERR! code ELIFECYCLE
    # npm ERR! errno 1
    # npm ERR! apache-arrow@1.0.0-SNAPSHOT build: `NODE_NO_WARNINGS=1 gulp build`
    # npm ERR! Exit status 1
    # npm ERR!
    # npm ERR! Failed at the apache-arrow@1.0.0-SNAPSHOT build script.
    # npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

Closes #5589 from kszucs/docker-refactor and squashes the following commits:

5105d12e6 <Krisztián Szűcs> Rename pull-request folder to dev_cron
e9e9a7eec <Krisztián Szűcs> Use underscores for naming the workflow files
a92c99d03 <Krisztián Szűcs> Disable hanging C++ tests on windows
f158c89b5 <Krisztián Szűcs> Attempt to push from apache/arrow master; Don't push from crossbow tasks
0e1d470a1 <Krisztián Szűcs> Turn off ORC on macOS C++ test due to link error
258db5cff <Krisztián Szűcs> Only push docker images from apache/arrow repository
acdfcf086 <Krisztián Szűcs> Remove ORC from the brewfile
5102b85b1 <Krisztián Szűcs> Fix nodeJS workflow
032d6a388 <Krisztián Szűcs> Turn off 2 python builds
7f15b97a8 <Krisztián Szűcs> Filter branches
48b8d128a <Krisztián Szűcs> Fix workflows
36ad9d297 <Krisztián Szűcs> Disable builds
0f603af0c <Krisztián Szűcs> master only and cron workflows
28cc2d78d <Krisztián Szűcs> Rename Java JNI workflow
bcd8af7b7 <Krisztián Szűcs> Port the remaining travis utility scripts
ed5688154 <Krisztián Szűcs> Usage comments; recommend installing pandas from the docs because of its removal from conda_env_python
3c8c023ce <Krisztián Szűcs> Use Arch in volumes; some comments; remove conda version 'latest' from the images
771b023a8 <Krisztián Szűcs> Cleanup files; separate JNI builds
97ff8a122 <Krisztián Szűcs> Push docker images only from master
dc00b4297 <Krisztián Szűcs> Enable path filters
e0e2e1f46 <Krisztián Szűcs> Fix pandas master build
3814e0828 <Krisztián Szűcs> Fix manylinux volumes
c18edda70 <Krisztián Szűcs> Add CentOS version to the manylinux image names
c8b9dd6b1 <Krisztián Szűcs> Missing --pyargs argument for the python test command
33e646981 <Krisztián Szűcs> Turn off gandiva and flight for the HDFS test
b9c547889 <Krisztián Szűcs> Refactor docker-compose file and use it with github actions.

Authored-by: Krisztián Szűcs <>
Signed-off-by: Krisztián Szűcs <>
* ARROW-6633: [C++] Vendor double-conversion library

Since this is both a mandatory dependency and a small-ish library, vendor it to make the build chain simplier. Also, make its use private, because of Windows DLL exports. This incurs a small (~8-10%) performance hit on specific workloads.

Closes #5832 from pitrou/ARROW-6633-vendor-double-conversion and squashes the following commits:

b1e12c7bc <Antoine Pitrou> Remove unneeded code
85877648e <Antoine Pitrou> Add license
3b89b191e <Antoine Pitrou> Make use of double-conversion private.
9e1da51d1 <Antoine Pitrou> ARROW-6633:  Vendor double-conversion library

Authored-by: Antoine Pitrou <>
Signed-off-by: François Saint-Jacques <>
* ARROW-7178: [C++] Vendor forward compatible std::optional

Add a version of std::optional vendored from using git tag v3.2.0

Closes #5849 from gawain-bolton/ARROW-7178_vendor_forward_compatible_std_optional and squashes the following commits:

825213c4e <gawain.bolton> Amend LICENSE.txt for cpp/src/arrow/vendored/optional.hpp
1bb25a962 <gawain.bolton> ARROW-7178:  Vendor forward compatible std::optional

Authored-by: gawain.bolton <>
Signed-off-by: Benjamin Kietzman <>
* ARROW-7169: [C++] Vendor uriparser library

The library is only used internally (the types and headers are not exposed).
Vendoring it makes it easier for core functionality to depend on it.

Closes #5865 from pitrou/ARROW-7169-vendor-uriparser and squashes the following commits:

83bb7c22a <Antoine Pitrou> ARROW-7169:  Vendor uriparser library

Authored-by: Antoine Pitrou <>
Signed-off-by: Krisztián Szűcs <>
* ARROW-6341: [Python] Implement low-level bindings for Dataset

Closes #5237 from kszucs/ARROW-6341 and squashes the following commits:

45121f77a <Krisztián Szűcs> Fix tests for MockFs
069d8f55e <Krisztián Szűcs> Don't expose SimpleDataSource
48b5556ef <Krisztián Szűcs> Test projected partitions
27dbe56ab <Krisztián Szűcs> Don't deprecate RandomFileAccess just remove in favor of CRandomFileAccess
64ca71245 <Krisztián Szűcs> Execute instead of scan
bd0d1d2e7 <Krisztián Szűcs> more type_name
f2ab5ebfe <Krisztián Szűcs> type_name
3988865ca <Krisztián Szűcs> Rebase again
b8949a3ce <Krisztián Szűcs> Result iterator api
7553caa96 <Krisztián Szűcs> Clang format
a1d82546f <Krisztián Szűcs> Remove ScanContext
6260734a3 <Krisztián Szűcs> Fix api changes
e6a562356 <Krisztián Szűcs> Expose root_partition setter; resolve a couple of review issues
c9ba0fb93 <Krisztián Szűcs> Fix review comments
f589ecb23 <Krisztián Szűcs> Removed todo notes
9b38a40cf <Krisztián Szűcs> Docstring additions
3210e9160 <Krisztián Szűcs> Fixing review issues
4384b74cf <Krisztián Szűcs> Enable PYARROW_BUILD_DATASET
f52e735a0 <Krisztián Szűcs> Remove DataFragment and ScanOptions
13eaf46a0 <Krisztián Szűcs> Remove move workaround
620ba6ffa <Krisztián Szűcs> schema as property
e9f77bd6b <Krisztián Szűcs> Expose root_partition
01510bcf8 <Krisztián Szűcs> Some docstrings
5beb0d26c <Krisztián Szűcs> Pxd definition fixes
f89dc4913 <Krisztián Szűcs> Data fragments
c9881c858 <Krisztián Szűcs> Downcast data fragments
032a4358c <Krisztián Szűcs> More expressions and testing
1a4a8544a <Krisztián Szűcs> Fix import errors if dataset is not enabled
2da1b5c76 <Krisztián Szűcs> Please the linters
d1bc74efe <Krisztián Szűcs> HivePartitionScheme
bf5dd17f4 <Krisztián Szűcs> Release the gil for std::move
a76dc6c3c <Krisztián Szűcs> Remove the move headers from flight
8cdfe1054 <Krisztián Szűcs> Expose more methods
53b64910e <Krisztián Szűcs> Expose Scalar/Comparison/Boolean expressions
444ae58a0 <Krisztián Szűcs> Expressions and scalar wrapping
01029a666 <Krisztián Szűcs> Test parquet data discovery
2e416ea8f <Krisztián Szűcs> Expressions
d14cf502b <Krisztián Szűcs> PartitionScheme
bd6e1d656 <Krisztián Szűcs> FileSystemDataSourceDiscovery
0c0e3752f <Krisztián Szűcs> Working scanner
18cfd949b <Krisztián Szűcs> Resolve issues with handling iterator results
43c3d2bb2 <Krisztián Szűcs> MockFileSystem and use Results
3bbc51bd0 <Krisztián Szűcs> MockFileSystem
5e279ead2 <Krisztián Szűcs> Basic scanning
c0d6715aa <Krisztián Szűcs> Rebase datasets
132e2f553 <Krisztián Szűcs> license
d51b560d7 <Krisztián Szűcs> data fragments and data sources
a0b35c7a0 <Krisztián Szűcs> skeleton and headers

Authored-by: Krisztián Szűcs <>
Signed-off-by: Benjamin Kietzman <>
* ARROW-7675: [R][CI] Move Windows CI from Appveyor to GHA

This also includes

Closes #6581 from nealrichardson/r-windows-gha

Lead-authored-by: Neal Richardson <>
Co-authored-by: Sutou Kouhei <>
Signed-off-by: Sutou Kouhei <>
* ARROW-8064: [Dev] Implement Comment bot via Github actions

See it in action:

Main drawback that is is much slower than ursabot, but we can optimize it by:
- porting crossbow to only depend on pygithub instead of libgit2 (will consume the rate limit, but should fit in)
- use caching or docker

Theoretically CROSSBOW_GITHUB_TOKEN is set as a github actions secret, see
We can trigger a build once this is merged into master.

Closes #6571 from kszucs/master and squashes the following commits:

7a604a875 <Krisztián Szűcs> note that the license is BSD2
8586eb727 <Krisztián Szűcs> add license reference
def872434 <Krisztián Szűcs> RAT
a96e7e24c <Krisztián Szűcs> flake8
6f5da639d <Krisztián Szűcs> add requirements to docker whitelist
6678c2e0a <Krisztián Szűcs> update archery dependencies
33f65d48c <Krisztián Szűcs> revert removing the rest of the workflows
a82b8790a <Krisztián Szűcs> test dep
06a7716cb <Krisztián Szűcs> responses test dep
ba2522989 <Krisztián Szűcs> fix archery workflow syntax
9352ee05c <Krisztián Szűcs> run archery unittests
deb857ff1 <Krisztián Szűcs> checkout@v2 and fetch tags
215495a3d <Krisztián Szűcs> fix result path
748832f75 <Krisztián Szűcs> message formatter
ea1b7c863 <Krisztián Szűcs> no dry run
6c83b0c40 <Krisztián Szűcs> dry run
4789ac5d5 <Krisztián Szűcs> response ormatter
1b0b15d5a <Krisztián Szűcs> cleanup
2270a35a9 <Krisztián Szűcs> validate
035024fa0 <Krisztián Szűcs> validate callback
e791c627b <Krisztián Szűcs> diag
641227f73 <Krisztián Szűcs> diab
b22b20400 <Krisztián Szűcs> token
d95e86b7b <Krisztián Szűcs> path to event payload
3e9a27909 <Krisztián Szűcs> pygithub
ca1592d5d <Krisztián Szűcs> typo
3c1358eff <Krisztián Szűcs> triger event handler
55e65faf3 <Krisztián Szűcs> crossbow command
92568eb5e <Krisztián Szűcs> first draft of bot
99ea0c2b5 <Krisztián Szűcs> cat
3c0f16d83 <Krisztián Szűcs> remove all other workflows
1f8f21de9 <Krisztián Szűcs> diag event handling
2f613dd15 <Krisztián Szűcs> Check event handling (#15)

Authored-by: Krisztián Szűcs <>
Signed-off-by: Krisztián Szűcs <>
* ARROW-8111: [C++] User-defined timestamp parser option to CSV, new TimestampParser interface, and strptime-compatible impl

This builds on the work from #6631 while adding unit tests and additional benchmarks.

I also renamed arrow/util/parsing.h to arrow/util/value_parsing.h to make it slightly more discoverable.

Closes #7088 from wesm/ARROW-8111

Lead-authored-by: Wes McKinney <>
Co-authored-by: Antoine Pitrou <>
Co-authored-by: Alexey Prutskov <>
Co-authored-by: Artem Alekseev <>
Signed-off-by: Antoine Pitrou <>
* ARROW-8968: [C++][Gandiva] set data layout for pre-compiled IR to llvm::module

This PR explicitly sets data layout for pre-compiled IR to `llvm:module`. Without the PR, the following warning message is shown at link time of gandiva.

Most of this code comes from by @imaihal in llvm.

~/arrow/cpp/src/gandiva$ ../../build/debug/gandiva-binary-test -V
Running main() from /home/ishizaki/arrow/cpp/googletest_ep-prefix/src/googletest_ep/googletest/src/
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from TestBinary
[ RUN      ] TestBinary.TestSimple
warning: Linking two modules of different data layouts: 'precompiled' is 'E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-a:8:16-n32:64' whereas 'codegen' is 'E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64'

[       OK ] TestBinary.TestSimple (41 ms)
[----------] 1 test from TestBinary (41 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (41 ms total)
[  PASSED  ] 1 test.

Closes #7295 from kiszk/ARROW-8968

Authored-by: Kazuaki Ishizaki <>
Signed-off-by: Wes McKinney <>
* ARROW-8795: [C++] Limited iOS support

Per suggestion from [JIRA](, opening up a pull request to potentially get the ball rolling on having iOS as one of the supported platforms.

Per writeup in [this doc](, there are a few issues with cmake's Xcode generator that require a few workarounds even when using their most recent versions.

The writeup also describes issues that we've encountered building the library, as well as issues that were not resolved as they use optional features we are currently not making use of.

Closes #7189 from ilijapuaca/feature/ios-support

Authored-by: Ilija Puaca <>
Signed-off-by: Antoine Pitrou <>
* ARROW-9004: [C++][Gandiva] Support building with LLVM 10

LLVM 7 and 8 are still supported.

Clang Tools still use 8 because Clang Tools 10 reports an error for
RaipdJSON in sanitizer build. We should work on this as a separated


    /usr/include/rapidjson/internal/stack.h:117:13: runtime error: applying non-zero offset 16 to null pointer
         #0 0x7f4d336c0e2c in void arrow::rapidjson::internal::Stack<arrow::rapidjson::CrtAllocator>::Reserve<arrow::rapidjson::GenericValue<arrow::rapidjson::UTF8<char>, arrow::rapidjson::MemoryPoolAllocator<arrow::rapidjson::CrtAllocator> > >(unsigned long) /usr/include/rapidjson/internal/stack.h:117:13

Ubuntu 16.04 still use LLVM 8 because LLVM 10 requires C++ 14 but g++
5 on Ubuntu 16.04 is too old to use

CentOS 8 packages still use LLVM 8 because there are no packages for
LLVM 10 on CentOS 8.

manylinux1 still use LLVM 8 because g++ 4.8.2 is old to build LLVM 9
or later.

Conda package for Windows still use LLVM 8 because llvmdev 9 or later
use Visual Studio 2017. We need to use Visual Studio 2017 not 2015 to
use llvmdev 9 or later.

Closes #7323 from kou/cpp-llvm-10

Authored-by: Sutou Kouhei <>
Signed-off-by: Sutou Kouhei <>
* ARROW-7605: [C++] Create and install "dependency bundle" static library including jemalloc, mimalloc, and any BUNDLED static library so that static linking to libarrow.a is possible

This PR is a renewed attempt to address the brokenness of our static libraries and their exported CMake targets.

To summarize what's wrong: if any BUNDLED library source is used, or if the jemalloc or mimalloc allocators are used, then the `libarrow.a` static library that we've been installing is unusable. If someone tries to link with it, they get a linker error looking for the missing dependencies. Additionally, the CMake target names exported for `arrow_static` includes the list of all of these bundled libraries, so even attempting to use the `arrow_static` target does not work since the third party CMake build cannot find the missing dependencies.

As one downstream problem caused by this, we've been unable thus far to ship our non-system allocators in packages (R in particular) that do static linking.

Since it is neither safe nor reasonable to expect third party projects to attempt to provide substitute static libraries for the missing dependencies, I have implemented the following:

* Using an MIT-licensed CMake solution, I splice together all of the bundled static libraries to create and install `libarrow_bundled_dependencies.a` (and `arrow_bundled_dependencies.lib` with MSVC). I have verified that this bundle is viable and can be used to create statically linked executables
* Bundled dependencies are no longer exported in ArrowTargets-*.cmake. I spent a bunch of time trying to figure out how to get CMake to automatically pull in the "dependency bundle" when using `arrow_static`, but I couldn't figure out how to do it.
* Added a `ARROW_LINK_SHARED` option to cpp/examples/minimal_build/CMakeLists.txt to show how to create statically linked executables using arrow_static and the dependency bundle.
* Added a "" script to enable a bundled statically-linked build to be tested with Docker (perhaps we should add this to the CI job?)
* Added "run_static.bat" to exhibit a statically linked build with MSVC on Windows

Finally, I verified that I can now successfully create statically linked builds now on Linux, macOS, and Windows.


Closes #7696 from wesm/dependency-bundling

Lead-authored-by: Wes McKinney <>
Co-authored-by: Neal Richardson <>
Co-authored-by: Wes McKinney <>
Signed-off-by: Wes McKinney <>
* ARROW-9402: [C++] Rework portable wrappers for checked integer arithmetic

Vendor relevant code from the portable-snippets library (~ public domain):

Also fix some bugs in checked arithmetic (null values had their value slots checked).
Add compute scaffolding for stateful binary scalar functions.

Closes #7784 from pitrou/ARROW-9402-overflow-arith

Authored-by: Antoine Pitrou <>
Signed-off-by: Antoine Pitrou <>
* ARROW-10035: [C++] Update vendored libraries

Update some vendored libraries to their newest upstream version.

Closes #8234 from pitrou/ARROW-10035-bump-vendored

Authored-by: Antoine Pitrou <>
Signed-off-by: Antoine Pitrou <>
* ARROW-10328: [C++] Vendor fast_float number parsing library

This library is 2x to 3x faster for parsing strings to binary floating-point numbers.

Closes #8494 from pitrou/ARROW-10328-fast-float

Authored-by: Antoine Pitrou <>
Signed-off-by: Antoine Pitrou <>
* ARROW-8113: [C++] Lighter weight variant<>

- [x] Unit tests for `util::Variant<>`
- [x] Compilation time and code size comparison to ensure this refactoring is beneficial
- [x] Benchmark comparison to ensure compute and nested parquet are not impacted
- [x] More docstrings and comments

Locally (release build, no ccache):

$ ninja
ninja: no work to do.
$ export OBJS=`ls src/arrow/CMakeFiles/arrow_objlib.dir/compute/**/*.o`

$ git checkout master && rm $OBJS && time ninja $OBJS
real    0m16.918s
user    2m41.702s
sys     0m2.495s

$ du -h --total $OBJS | tail -n 1
total 7.3M

$ git checkout 8113-Implement-a-lighter-weigh && rm $OBJS && time ninja $OBJS
real    0m14.363s
user    2m19.939s
sys     0m2.125s

$ du -h --total $OBJS | tail -n 1
6.6M    total

Closes #8472 from bkietz/8113-Implement-a-lighter-weigh

Lead-authored-by: Benjamin Kietzman <>
Co-authored-by: Antoine Pitrou <>
Signed-off-by: Antoine Pitrou <>
* ARROW-10948: [C++] Always use GTestConfig.cmake

Because FindGTest.cmake can't detect GoogleTest version. We need
version to ensure using GoogleTest 1.10.0 or later.

Closes #8945 from kou/cpp-gtest

Authored-by: Sutou Kouhei <>
Signed-off-by: Sutou Kouhei <>
* ARROW-11680: [C++] Add vendored version of folly's spsc queue

See issue for rationale / description.

To consider:
 * I based licensing text on other vendored libraries but I'm no expert in how exactly to dot all the i's and cross all the t's.
 * The constructor can throw if allocation of the ring buffer fails.  In general, this sort of queue shouldn't be all that large anyways so this seems unlikely.  We could modify the constructor to be private with a factory method that returns `Result` but at the moment I'm not making any changes to the existing code and so I'm hesitant to start doing so for this reason.
 * ~~There is a test case for the above point but I could take it out if desired.~~ Had to remove test since a massive allocation did not throw on mac.
 * ~~There is a comparative benchmark for boost.  I'm not sure if we want to leave that in?~~ Had to remove benchmark since some build environments did not have boost::lockfree::spsc_queue
 * I've renamed folly::ProducerConsumerQueue to arrow::util::SpscQueue.  I feel the name ProducerConsumerQueue is too vague and could lead to improper usage.  This queue is not safe for multiple readers or multiple writers.

Closes #9519 from westonpace/feature/folly

Lead-authored-by: Weston Pace <>
Co-authored-by: Antoine Pitrou <>
Signed-off-by: Antoine Pitrou <>
* ARROW-12068: [Python] Stop using distutils

According to PEP 632, distutils will be deprecated in Python 3.10 and removed in 3.12.

* switch to `setuptools` for general packaging
* use the `Version` class from the `packaging` project instead of `distutils.LooseVersion`

Closes #9849 from pitrou/ARROW-12068-remove-distutils

Authored-by: Antoine Pitrou <>
Signed-off-by: Antoine Pitrou <>
* ARROW-10797: [C++] Vendor and use PCG random generator library

Closes #8879 from pitrou/ARROW-10797-pcg

Authored-by: Antoine Pitrou <>
Signed-off-by: Antoine Pitrou <>
* PARQUET-490: [C++][Parquet] Basic support for reading DELTA_BINARY_PACKED data

Only works for int32/int64 when delta_bit_width_<=32.

1. Update the implement of DeltaBitPackDecoder
2. Revise the code of putting/getting ZigZag int and the unit test
3. Add the implement of putting/getting ZigZag int64 and unit test

Closes #10627 from shanhuuang/ARROW-13206

Lead-authored-by: shanhuuang <>
Co-authored-by: pincheng.hs <>
Co-authored-by: Antoine Pitrou <>
Signed-off-by: Antoine Pitrou <>
* ARROW-13739: [R] Support dplyr::count() and tally()

Closes #11306 from thisisnic/ARROW-13739_dplyr_count_tally

Lead-authored-by: Nic Crane <>
Co-authored-by: Nic <>
Co-authored-by: Neal Richardson <>
Signed-off-by: Neal Richardson <>
* ARROW-14550: [Doc] Remove the JSON license; a non-free one.


Closes #11596 from attila-lendvai/license

Authored-by: Attila Lendvai <>
Signed-off-by: Krisztián Szűcs <>
* ARROW-10317: [Python] Document compute function options

Add docstrings for parameters of the various function options classes.
Automatically ingest those parameter docstrings into the generated compute function docstrings
(this uses vendored code from `numpydoc`).

Example with the `min_max` parameter docs:

* before:
array : Array-like
    Argument to compute function
skip_nulls : optional
    Parameter for ScalarAggregateOptions constructor. Either `options`
    or `skip_nulls` can be passed, but not both at the same time.
min_count : optional
    Parameter for ScalarAggregateOptions constructor. Either `options`
    or `min_count` can be passed, but not both at the same time.
options : pyarrow.compute.ScalarAggregateOptions, optional
    Parameters altering compute function semantics.
memory_pool : pyarrow.MemoryPool, optional
    If not passed, will allocate memory from the default memory pool.

* after:
array : Array-like
    Argument to compute function.
skip_nulls : bool, default True
    Whether to skip (ignore) nulls in the input.
    If False, any null in the input forces the output to null.
min_count : int, default 1
    Minimum number of non-null values in the input.  If the number
    of non-null values is below `min_count`, the output is null.
options : pyarrow.compute.ScalarAggregateOptions, optional
    Alternative way of passing options.
memory_pool : pyarrow.MemoryPool, optional
    If not passed, will allocate memory from the default memory pool.

Closes #12076 from pitrou/ARROW-10317-py-doc-function-options

Authored-by: Antoine Pitrou <>
Signed-off-by: Antoine Pitrou <>
* ARROW-15896: [Python][C++] Add errno detail for filesystem "file not found" errors

This allows raising FileNotFoundError in Python, which is more user-friendly.

Closes #12626 from pitrou/ARROW-15896-filesystem-errno

Authored-by: Antoine Pitrou <>
Signed-off-by: Antoine Pitrou <>
* ARROW-16232: [C++] Include OpenTelemetry in LICENSE.txt

Closes #12921 from lidavidm/ARROW-16232

Authored-by: David Li <>
Signed-off-by: Sutou Kouhei <>
* ARROW-16228: [CI][Packaging][Conan] Add a job to test minimum build

ci/conan/ is based on

We'll update ci/conan/ to follow the latest cpp/ changes such as new
build options and send a pull request the updates to when we release a new

Closes #12918 from kou/ci-conan

Authored-by: Sutou Kouhei <>
Signed-off-by: Sutou Kouhei <>
* ARROW-16183: [C++][FlightRPC] Support bundled UCX

Closes #12881 from cyb70289/16183-bundled-ucx

Authored-by: Yibo Cai <>
Signed-off-by: David Li <>
* WIP: [C++] Initial ADBC sketch

* WIP: [C++] Sketch API for partitioned result sets

* WIP: [C++] Clean up SQLite demo implementation

* WIP: [C++] Add basic Flight SQL implementation

* WIP: [C++] Add sketch of distributed results

* WIP: [C++] Clarify some docstrings

* WIP: [C++] Clarify some docstrings

* WIP: [C++] Make error handling more natural, remove requirement of common library

* WIP: [C++] Add explicit string length parameters

* WIP: [C++] Add basic metadata method definitions

* WIP: [C++] Expand FlightSql test

* WIP: [C++] Extract test_util.h

* WIP: [C++] Split out Flight SQL tests

* WIP: [C++] Reorganize headers

* WIP: [C++] Move methods out of structs

* WIP: [C++] Simplify wrapper

* WIP: [C++] Move methods out of structs

* WIP: [C++] Make statements configurable in a forward-compatible way

* WIP: [C++] Clarify sorting of partitions

* WIP: [C++] Don't use enums

* WIP: [C++] Sketch out API revisions

* WIP: [C++] Add additional database initialization

* WIP: [C++] Sketch out alternative initialization

* WIP: [C++] Add include guards

* WIP: [C++] Sketch out driver side of driver manager

* WIP: [C++] Sketch out driver manager

* WIP: [C++] Don't require a particular entrypoint

* WIP: [C++] Start sketching out driver manager stubs

* WIP: [C++] Minimal driver manager stubs

* WIP: [C++] Add stubs for basic query execution

* WIP: [C++] Fix Flight SQL driver

* WIP: [C++] Assume strings are null-terminated

* WIP: [C++] Fix typo

* WIP: [C++] Add prepared statements without parameters

* WIP: [C++] Update driver manager to match

* WIP: [C++] Try to fix Mac build errors

* WIP: [C++] Add binding for SQLite

* Reorganize for new repo

* Update readme

Co-authored-by: Jacques Nadeau <>
Co-authored-by: Uwe L. Korn <>
Co-authored-by: Wes McKinney <>
Co-authored-by: Philipp Moritz <>
Co-authored-by: Paul Taylor <>
Co-authored-by: songqing <>
Co-authored-by: Wes McKinney <>
Co-authored-by: Romain Francois <>
Co-authored-by: Yuhong Guo <>
Co-authored-by: praveenbingo <>
Co-authored-by: Antoine Pitrou <>
Co-authored-by: Krisztián Szűcs <>
Co-authored-by: Antoine Pitrou <>
Co-authored-by: François Saint-Jacques <>
Co-authored-by: Jeroen Ooms <>
Co-authored-by: Micah Kornfield <>
Co-authored-by: Neal Richardson <>
Co-authored-by: gawain.bolton <>
Co-authored-by: Sutou Kouhei <>
Co-authored-by: Alexey Prutskov <>
Co-authored-by: Artem Alekseev <>
Co-authored-by: Kazuaki Ishizaki <>
Co-authored-by: Ilija Puaca <>
Co-authored-by: Wes McKinney <>
Co-authored-by: Benjamin Kietzman <>
Co-authored-by: Weston Pace <>
Co-authored-by: shanhuuang <>
Co-authored-by: pincheng.hs <>
Co-authored-by: Nic Crane <>
Co-authored-by: Attila Lendvai <>
Co-authored-by: Yibo Cai <>
3 months agoInitial commit
David Li [Wed, 1 Jun 2022 20:09:34 +0000 (16:09 -0400)] 
Initial commit