diff --git a/.asf.yaml b/.asf.yaml index 12438081cfc..ae2709a8b0a 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -19,14 +19,13 @@ github: description: "Apache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing" homepage: https://arrow.apache.org/ collaborators: + - amoeba - anjakefala - benibus - - jbonofre + - danepitkin + - davisusanibar - js8544 - - laurentgo - vibhatha - - zanmato1984 - - ZhangHuiGui notifications: commits: commits@arrow.apache.org diff --git a/.env b/.env index 1358aafe824..00c238421d3 100644 --- a/.env +++ b/.env @@ -48,7 +48,7 @@ ULIMIT_CORE=-1 # Default versions for platforms ALMALINUX=8 ALPINE_LINUX=3.16 -DEBIAN=12 +DEBIAN=11 FEDORA=39 UBUNTU=20.04 @@ -56,27 +56,27 @@ UBUNTU=20.04 CLANG_TOOLS=14 CUDA=11.2.2 DASK=latest -DOTNET=8.0 +DOTNET=7.0 GCC_VERSION="" -GO=1.21.8 -STATICCHECK=v0.4.7 +GO=1.19.13 +STATICCHECK=v0.4.5 HDFS=3.2.1 -JDK=11 +JDK=8 KARTOTHEK=latest # LLVM 12 and GCC 11 reports -Wmismatched-new-delete. LLVM=14 -MAVEN=3.8.7 +MAVEN=3.6.3 NODE=18 NUMBA=latest NUMPY=latest PANDAS=latest PYTHON=3.8 -R=4.4 +R=4.2 SPARK=master TURBODBC=latest -# These correspond to images on Docker Hub that contain R, e.g. rhub/ubuntu-release:latest -R_IMAGE=ubuntu-release +# These correspond to images on Docker Hub that contain R, e.g. rhub/ubuntu-gcc-release:latest +R_IMAGE=ubuntu-gcc-release R_ORG=rhub R_TAG=latest @@ -86,19 +86,21 @@ ARROW_R_DEV=TRUE R_PRUNE_DEPS=FALSE TZ=UTC +# Any non-empty string will install devtoolset-${DEVTOOLSET_VERSION} +DEVTOOLSET_VERSION= + # Used through docker-compose.yml and serves as the default version for the # ci/scripts/install_vcpkg.sh script. Prefer to use short SHAs to keep the # docker tags more readable. -VCPKG="943c5ef1c8f6b5e6ced092b242c8299caae2ff01" # 2024.04.26 Release +VCPKG="a42af01b72c28a8e1d7b48107b33e4f286a55ef6" # 2023.11.20 Release # This must be updated when we update # ci/docker/python-wheel-windows-vs2019.dockerfile. # This is a workaround for our CI problem that "archery docker build" doesn't # use pulled built images in dev/tasks/python-wheels/github.windows.yml. -PYTHON_WHEEL_WINDOWS_IMAGE_REVISION=2024-06-18 +PYTHON_WHEEL_WINDOWS_IMAGE_REVISION=2024-02-05 -# Use conanio/${CONAN_BASE}:{CONAN_VERSION} for "docker-compose run --rm conan". -# See https://github.com/conan-io/conan-docker-tools#readme and -# https://hub.docker.com/u/conanio for available images. -CONAN_BASE=gcc10 -CONAN_VERSION=1.62.0 +# Use conanio/${CONAN} for "docker-compose run --rm conan". See +# https://github.com/conan-io/conan-docker-tools#readme for available +# images. +CONAN=gcc10 diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 793dbb3806f..e7e544c2b0e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -37,10 +37,10 @@ /go/ @zeroshade /java/ @lidavidm /js/ @domoritz @trxcllnt -/matlab/ @kevingurney @kou @sgilmore10 +/matlab/ @kevingurney @kou /python/pyarrow/_flight.pyx @lidavidm /python/pyarrow/**/*gandiva* @wjones127 -/r/ @jonkeane @thisisnic +/r/ @paleolimbot @thisisnic /ruby/ @kou /swift/ @kou @@ -53,7 +53,7 @@ # *.txt # PR CI and repository files -/.github/ @assignUser @jonkeane @kou @raulcd +/.github/ @assignUser @kou @raulcd .asf.yaml @assignUser @kou @raulcd .pre-commit-config.yaml @raulcd .travis.yml @assignUser @kou @raulcd @@ -61,11 +61,11 @@ appveyor.yml @assignUser @kou @raulcd # .git* # release scripts, archery etc. -/ci/ @assignUser @jonkeane @kou @raulcd -/dev/ @assignUser @jonkeane @kou @raulcd +/ci/ @assignUser @kou @raulcd +/dev/ @assignUser @kou @raulcd .dockerignore @raulcd -.env @assignUser @jonkeane @kou @raulcd -docker-compose.yml @assignUser @jonkeane @kou @raulcd +.env @assignUser @kou @raulcd +docker-compose.yml @assignUser @kou @raulcd # R specific packaging tooling /r/configure* @assignUser diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index beb126eaf94..37a1be7d2c0 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -40,7 +40,7 @@ We prefer to receive contributions in the form of GitHub pull requests. Please send pull requests against the [github.com/apache/arrow][4] repository following the procedure below. -If you are looking for some ideas on what to contribute, check out the [GitHub +If you are looking for some ideas on what to contribute, check out the [JIRA issues][3] for the Apache Arrow project. Comment on the issue and/or contact [dev@arrow.apache.org](https://lists.apache.org/list.html?dev@arrow.apache.org) with your questions and ideas. @@ -53,8 +53,8 @@ To contribute a patch: 1. Break your work into small, single-purpose patches if possible. It’s much harder to merge in a large change with a lot of disjoint features. -2. If one doesn't already exist, create a GitHub issue for your patch on the [Arrow Project -GitHub](https://github.com/apache/arrow/issues). +2. If one doesn't already exist, create a JIRA for your patch on the [Arrow Project +JIRA](https://issues.apache.org/jira/browse/ARROW). 3. Submit the patch as a GitHub pull request against the main branch. For a tutorial, see the GitHub guides on [forking a repo](https://help.github.com/en/articles/fork-a-repo) and [sending a pull request](https://help.github.com/en/articles/creating-a-pull-request-from-a-fork). So that your pull request syncs with the JIRA issue, prefix your pull request @@ -68,5 +68,5 @@ Thank you in advance for your contributions! [1]: mailto:dev-subscribe@arrow.apache.org [2]: https://github.com/apache/arrow/tree/main/format -[3]: https://github.com/apache/arrow/issues +[3]: https://issues.apache.org/jira/browse/ARROW [4]: https://github.com/apache/arrow diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7d9ff2f42e8..c100b46c38a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -23,35 +23,24 @@ updates: interval: "weekly" commit-message: prefix: "MINOR: [CI] " - open-pull-requests-limit: 10 - - package-ecosystem: "gomod" - directory: "/go/" - schedule: - interval: "weekly" - commit-message: - prefix: "MINOR: [Go] " - open-pull-requests-limit: 10 - package-ecosystem: "maven" directory: "/java/" schedule: interval: "weekly" commit-message: prefix: "MINOR: [Java] " - open-pull-requests-limit: 10 - package-ecosystem: "npm" directory: "/js/" schedule: interval: "monthly" commit-message: prefix: "MINOR: [JS] " - open-pull-requests-limit: 10 - package-ecosystem: "nuget" directory: "/csharp/" schedule: interval: "weekly" commit-message: prefix: "MINOR: [C#] " - open-pull-requests-limit: 10 ignore: - dependency-name: "Microsoft.Extensions.*" update-types: diff --git a/.github/workflows/archery.yml b/.github/workflows/archery.yml index b016f7d11b9..d5f419f8a7d 100644 --- a/.github/workflows/archery.yml +++ b/.github/workflows/archery.yml @@ -32,7 +32,6 @@ on: - 'docker-compose.yml' env: - ARCHERY_DEBUG: 1 ARCHERY_DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} concurrency: @@ -58,9 +57,9 @@ jobs: shell: bash run: git branch $ARCHERY_DEFAULT_BRANCH origin/$ARCHERY_DEFAULT_BRANCH || true - name: Setup Python - uses: actions/setup-python@v5.1.1 + uses: actions/setup-python@v5 with: - python-version: '3.9' + python-version: '3.8' - name: Install pygit2 binary wheel run: pip install pygit2 --only-binary pygit2 - name: Install Archery, Crossbow- and Test Dependencies diff --git a/.github/workflows/comment_bot.yml b/.github/workflows/comment_bot.yml index 1138c0a02f8..dbcbbff5495 100644 --- a/.github/workflows/comment_bot.yml +++ b/.github/workflows/comment_bot.yml @@ -41,9 +41,9 @@ jobs: # fetch the tags for version number generation fetch-depth: 0 - name: Set up Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: - python-version: 3.12 + python-version: 3.8 - name: Install Archery and Crossbow dependencies run: pip install -e arrow/dev/archery[bot] - name: Handle GitHub comment event diff --git a/.github/workflows/cpp.yml b/.github/workflows/cpp.yml index a82e1eb7666..e9409f1cd62 100644 --- a/.github/workflows/cpp.yml +++ b/.github/workflows/cpp.yml @@ -21,7 +21,6 @@ on: push: paths: - '.github/workflows/cpp.yml' - - 'ci/conda_env_*' - 'ci/docker/**' - 'ci/scripts/cpp_*' - 'ci/scripts/install_azurite.sh' @@ -32,11 +31,9 @@ on: - 'cpp/**' - 'docker-compose.yml' - 'format/Flight.proto' - - 'testing' pull_request: paths: - '.github/workflows/cpp.yml' - - 'ci/conda_env_*' - 'ci/docker/**' - 'ci/scripts/cpp_*' - 'ci/scripts/install_azurite.sh' @@ -47,7 +44,6 @@ on: - 'cpp/**' - 'docker-compose.yml' - 'format/Flight.proto' - - 'testing' concurrency: group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }} @@ -57,7 +53,6 @@ permissions: contents: read env: - ARCHERY_DEBUG: 1 ARROW_ENABLE_TIMING_TESTS: OFF DOCKER_VOLUME_PREFIX: ".docker/" @@ -99,7 +94,6 @@ jobs: cat <> "$GITHUB_OUTPUT" { "arch": "arm64v8", - "archery-use-legacy-docker-compose": "1", "clang-tools": "10", "image": "ubuntu-cpp", "llvm": "10", @@ -124,9 +118,6 @@ jobs: include: ${{ fromJson(needs.docker-targets.outputs.targets) }} env: ARCH: ${{ matrix.arch }} - # By default, use `docker compose` because docker-compose v1 is obsolete, - # except where the Docker client version is too old. - ARCHERY_USE_LEGACY_DOCKER_COMPOSE: ${{ matrix.archery-use-legacy-docker-compose || '0' }} ARROW_SIMD_LEVEL: ${{ matrix.simd-level }} CLANG_TOOLS: ${{ matrix.clang-tools }} LLVM: ${{ matrix.llvm }} @@ -154,8 +145,6 @@ jobs: ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} run: | - # GH-40558: reduce ASLR to avoid ASAN/LSAN crashes - sudo sysctl -w vm.mmap_rnd_bits=28 sudo sysctl -w kernel.core_pattern="core.%e.%p" ulimit -c unlimited archery docker run ${{ matrix.image }} @@ -189,21 +178,13 @@ jobs: - name: Run minimal example run: | cd cpp/examples/minimal_build - docker compose run --rm minimal + docker-compose run --rm minimal macos: - name: ${{ matrix.architecture }} macOS ${{ matrix.macos-version }} C++ - runs-on: macos-${{ matrix.macos-version }} + name: AMD64 macOS 12 C++ + runs-on: macos-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} timeout-minutes: 75 - strategy: - fail-fast: false - matrix: - include: - - architecture: AMD64 - macos-version: "12" - - architecture: ARM64 - macos-version: "14" env: ARROW_AZURE: ON ARROW_BUILD_TESTS: ON @@ -212,7 +193,7 @@ jobs: ARROW_GANDIVA: ON ARROW_GCS: ON ARROW_HDFS: ON - ARROW_HOME: /tmp/local + ARROW_HOME: /usr/local ARROW_JEMALLOC: ON ARROW_ORC: ON ARROW_PARQUET: ON @@ -244,11 +225,11 @@ jobs: - name: Install MinIO run: | $(brew --prefix bash)/bin/bash \ - ci/scripts/install_minio.sh latest ${ARROW_HOME} + ci/scripts/install_minio.sh latest /usr/local - name: Set up Python - uses: actions/setup-python@v5.1.1 + uses: actions/setup-python@v5 with: - python-version: 3.12 + python-version: 3.9 - name: Install Google Cloud Storage Testbench run: ci/scripts/install_gcs_testbench.sh default - name: Install Azurite Storage Emulator @@ -264,8 +245,8 @@ jobs: uses: actions/cache@v4 with: path: ${{ steps.ccache-info.outputs.cache-dir }} - key: cpp-ccache-macos-${{ matrix.macos-version }}-${{ hashFiles('cpp/**') }} - restore-keys: cpp-ccache-macos-${{ matrix.macos-version }}- + key: cpp-ccache-macos-${{ hashFiles('cpp/**') }} + restore-keys: cpp-ccache-macos- - name: Build run: | ci/scripts/cpp_build.sh $(pwd) $(pwd)/build @@ -467,7 +448,7 @@ jobs: https://dl.min.io/server/minio/release/windows-amd64/archive/minio.RELEASE.2022-05-26T05-48-41Z chmod +x /usr/local/bin/minio.exe - name: Set up Python - uses: actions/setup-python@v5.1.1 + uses: actions/setup-python@v5 with: python-version: 3.9 - name: Install Google Cloud Storage Testbench diff --git a/.github/workflows/csharp.yml b/.github/workflows/csharp.yml index 6e8548dc960..17ef2de8108 100644 --- a/.github/workflows/csharp.yml +++ b/.github/workflows/csharp.yml @@ -46,10 +46,10 @@ jobs: strategy: fail-fast: false matrix: - dotnet: ['8.0.x'] + dotnet: ['7.0.x'] steps: - name: Install C# - uses: actions/setup-dotnet@v4.0.1 + uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ matrix.dotnet }} - name: Checkout Arrow @@ -74,10 +74,10 @@ jobs: strategy: fail-fast: false matrix: - dotnet: ['8.0.x'] + dotnet: ['7.0.x'] steps: - name: Install C# - uses: actions/setup-dotnet@v4.0.1 + uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ matrix.dotnet }} - name: Checkout Arrow @@ -94,23 +94,19 @@ jobs: run: ci/scripts/csharp_test.sh $(pwd) macos: - name: AMD64 macOS 13 C# ${{ matrix.dotnet }} - runs-on: macos-13 # Pending https://github.com/pythonnet/pythonnet/issues/2396 + name: AMD64 macOS 11 C# ${{ matrix.dotnet }} + runs-on: macos-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} timeout-minutes: 15 strategy: fail-fast: false matrix: - dotnet: ['8.0.x'] + dotnet: ['7.0.x'] steps: - name: Install C# - uses: actions/setup-dotnet@v4.0.1 + uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ matrix.dotnet }} - - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 - with: - python-version: 3.12 - name: Checkout Arrow uses: actions/checkout@v4 with: diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index cc3ff633074..48927673243 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -29,37 +29,21 @@ concurrency: permissions: contents: read -env: - ARCHERY_DEBUG: 1 - jobs: lint: name: Lint C++, Python, R, Docker, RAT runs-on: ubuntu-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} - timeout-minutes: 15 steps: - name: Checkout Arrow uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 with: fetch-depth: 0 - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: - python-version: 3.12 - - name: Install pre-commit - run: | - python -m pip install pre-commit - pre-commit run --show-diff-on-failure --color=always - - name: Cache pre-commit - uses: actions/cache@v4 - with: - path: ~/.cache/pre-commit - key: pre-commit-${{ hashFiles('.pre-commit-config.yaml') }} - - name: Run pre-commit - run: | - pre-commit run --all-files --color=always --show-diff-on-failure + python-version: 3.8 - name: Setup Archery run: pip install -e dev/archery[docker] - name: Execute Docker Build @@ -104,22 +88,22 @@ jobs: with: fetch-depth: 0 - name: Install Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: - python-version: '3.12' + python-version: '3.8' - name: Install Ruby - uses: ruby/setup-ruby@v1 + uses: ruby/setup-ruby@250fcd6a742febb1123a77a841497ccaa8b9e939 # v1.152.0 with: - ruby-version: ruby + ruby-version: '2.7' - name: Install .NET - uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4.0.1 + uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # v4.0.0 with: - dotnet-version: '8.0.x' + dotnet-version: '7.0.x' - name: Install Dependencies shell: bash run: | gem install test-unit - pip install "cython>=0.29.31" setuptools pytest jira setuptools-scm + pip install "cython>=0.29.31" setuptools six pytest jira - name: Run Release Test env: ARROW_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/dev_pr/link.js b/.github/workflows/dev_pr/link.js index a70dbc604c3..174bd3bae65 100644 --- a/.github/workflows/dev_pr/link.js +++ b/.github/workflows/dev_pr/link.js @@ -82,7 +82,7 @@ async function commentJIRAURL(github, context, pullRequestNumber, jiraID) { async function commentGitHubURL(github, context, pullRequestNumber, issueID) { // Make the call to ensure issue exists before adding comment const issueInfo = await helpers.getGitHubInfo(github, context, issueID, pullRequestNumber); - const message = "* GitHub Issue: #" + issueInfo.number + const message = "* Closes: #" + issueInfo.number if (issueInfo) { const body = context.payload.pull_request.body || ""; if (body.includes(message)) { diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 25db1c39ad8..e394347e952 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -24,19 +24,18 @@ permissions: contents: read env: - ARCHERY_DEBUG: 1 ARROW_ENABLE_TIMING_TESTS: OFF DOCKER_VOLUME_PREFIX: ".docker/" jobs: complete: - name: AMD64 Debian 12 Complete Documentation + name: AMD64 Ubuntu 22.04 Complete Documentation runs-on: ubuntu-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} timeout-minutes: 150 env: - JDK: 17 + UBUNTU: "22.04" steps: - name: Checkout Arrow uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 @@ -49,20 +48,19 @@ jobs: uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 with: path: .docker - key: debian-docs-${{ hashFiles('cpp/**') }} - restore-keys: debian-docs- + key: ubuntu-docs-${{ hashFiles('cpp/**') }} + restore-keys: ubuntu-docs- - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: - python-version: 3.12 + python-version: 3.8 - name: Setup Archery run: pip install -e dev/archery[docker] - name: Execute Docker Build env: ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} - JDK: 17 - run: archery docker run debian-docs + run: archery docker run ubuntu-docs - name: Docker Push if: >- success() && @@ -73,4 +71,4 @@ jobs: ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} continue-on-error: true - run: archery docker push debian-docs + run: archery docker push ubuntu-docs diff --git a/.github/workflows/docs_light.yml b/.github/workflows/docs_light.yml index ea7fe5d02d7..5303531f343 100644 --- a/.github/workflows/docs_light.yml +++ b/.github/workflows/docs_light.yml @@ -31,9 +31,8 @@ on: permissions: contents: read - + env: - ARCHERY_DEBUG: 1 ARROW_ENABLE_TIMING_TESTS: OFF DOCKER_VOLUME_PREFIX: ".docker/" @@ -58,9 +57,9 @@ jobs: key: conda-docs-${{ hashFiles('cpp/**') }} restore-keys: conda-docs- - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: - python-version: 3.12 + python-version: 3.8 - name: Setup Archery run: pip install -e dev/archery[docker] - name: Execute Docker Build diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 20c78d86cb2..bbffab67040 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -41,9 +41,6 @@ concurrency: permissions: contents: read -env: - ARCHERY_DEBUG: 1 - jobs: docker-targets: @@ -62,13 +59,13 @@ jobs: { "arch-label": "AMD64", "arch": "amd64", - "go": "1.21", + "go": "1.19", "runs-on": "ubuntu-latest" }, { "arch-label": "AMD64", "arch": "amd64", - "go": "1.22", + "go": "1.20", "runs-on": "ubuntu-latest" } JSON @@ -78,15 +75,13 @@ jobs: { "arch-label": "ARM64", "arch": "arm64v8", - "archery-use-legacy-docker-compose": "1", - "go": "1.21", + "go": "1.19", "runs-on": ["self-hosted", "arm", "linux"] }, { "arch-label": "ARM64", "arch": "arm64v8", - "archery-use-legacy-docker-compose": "1", - "go": "1.22", + "go": "1.20", "runs-on": ["self-hosted", "arm", "linux"] } JSON @@ -95,7 +90,7 @@ jobs: echo "JSON" >> "$GITHUB_OUTPUT" docker: - name: ${{ matrix.arch-label }} Debian 12 Go ${{ matrix.go }} + name: ${{ matrix.arch-label }} Debian 11 Go ${{ matrix.go }} needs: docker-targets runs-on: ${{ matrix.runs-on }} if: ${{ !contains(github.event.pull_request.title, 'WIP') }} @@ -106,9 +101,6 @@ jobs: include: ${{ fromJson(needs.docker-targets.outputs.targets) }} env: ARCH: ${{ matrix.arch }} - # By default, use Docker CLI because docker-compose v1 is obsolete, - # except where the Docker client version is too old. - ARCHERY_USE_LEGACY_DOCKER_COMPOSE: ${{ matrix.archery-use-legacy-docker-compose || '0' }} GO: ${{ matrix.go }} steps: - name: Checkout Arrow @@ -162,13 +154,13 @@ jobs: CONBENCH_EMAIL: ${{ secrets.CONBENCH_EMAIL }} CONBENCH_PASSWORD: ${{ secrets.CONBENCH_PASS }} CONBENCH_REF: ${{ github.ref_name }} - CONBENCH_MACHINE_INFO_NAME: ${{ matrix.arch }}-debian-12 + CONBENCH_MACHINE_INFO_NAME: ${{ matrix.arch }}-debian-11 run: | python3 -m pip install benchadapt@git+https://github.com/conbench/conbench.git@main#subdirectory=benchadapt/python python3 ci/scripts/go_bench_adapt.py - build_test_386: - name: Go Cross-build and test for 386 + build386: + name: Go Cross-build for 386 runs-on: ubuntu-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} timeout-minutes: 20 @@ -177,32 +169,26 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Get required Go version - run: | - (. .env && echo "GO_VERSION=${GO}") >> $GITHUB_ENV - name: Install Go uses: actions/setup-go@v5 with: - go-version: "${{ env.GO_VERSION }}" + go-version: 1.19 cache: true cache-dependency-path: go/go.sum - name: Run build - run: GOARCH=386 go build ./... - working-directory: ./go - - name: Run test - # WIP refactor, only tests in the specified dirs have been fixed - run: GOARCH=386 go test ./parquet/file/... - working-directory: ./go + run: | + cd go + GOARCH=386 go build ./... docker_cgo: - name: AMD64 Debian 12 Go ${{ matrix.go }} - CGO + name: AMD64 Debian 11 Go ${{ matrix.go }} - CGO runs-on: ubuntu-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} timeout-minutes: 20 strategy: fail-fast: false matrix: - go: ['1.21', '1.22'] + go: [1.19, '1.20'] env: GO: ${{ matrix.go }} steps: @@ -212,7 +198,7 @@ jobs: fetch-depth: 0 submodules: recursive - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: 3.8 - name: Setup Archery @@ -236,14 +222,14 @@ jobs: docker_cgo_python: - name: AMD64 Debian 12 Go ${{ matrix.go }} - CGO Python + name: AMD64 Debian 11 Go ${{ matrix.go }} - CGO Python runs-on: ubuntu-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} timeout-minutes: 15 strategy: fail-fast: false matrix: - go: ['1.21', '1.22'] + go: [1.19, '1.20'] env: GO: ${{ matrix.go }} steps: @@ -252,7 +238,7 @@ jobs: with: fetch-depth: 0 - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: 3.8 - name: Setup Archery @@ -282,7 +268,7 @@ jobs: strategy: fail-fast: false matrix: - go: ['1.21', '1.22'] + go: [1.19, '1.20'] steps: - name: Checkout Arrow uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 @@ -308,14 +294,14 @@ jobs: run: ci/scripts/go_test.sh $(pwd) macos: - name: AMD64 macOS 12 Go ${{ matrix.go }} - runs-on: macos-12 + name: AMD64 macOS 11 Go ${{ matrix.go }} + runs-on: macos-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} timeout-minutes: 60 strategy: fail-fast: false matrix: - go: ['1.21', '1.22'] + go: [1.19, '1.20'] steps: - name: Checkout Arrow uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 @@ -344,7 +330,7 @@ jobs: github.event_name == 'push' && github.repository == 'apache/arrow' && github.ref_name == 'main' - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: '3.10' - name: Run Benchmarks @@ -366,14 +352,14 @@ jobs: macos-cgo: - name: AMD64 macOS 12 Go ${{ matrix.go }} - CGO - runs-on: macos-12 + name: AMD64 macOS 11 Go ${{ matrix.go }} - CGO + runs-on: macos-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} timeout-minutes: 60 strategy: fail-fast: false matrix: - go: ['1.21', '1.22'] + go: [1.19, '1.20'] env: ARROW_GO_TESTCGO: "1" steps: @@ -442,9 +428,6 @@ jobs: shell: msys2 {0} run: | ci/scripts/msys2_setup.sh cgo - - name: Get required Go version - run: | - (. .env && echo "GO_VERSION=${GO}") >> $GITHUB_ENV - name: Update CGO Env vars shell: msys2 {0} run: | @@ -454,7 +437,7 @@ jobs: - name: Install go uses: actions/setup-go@v5 with: - go-version: "${{ env.GO_VERSION }}" + go-version: '1.19' cache: true cache-dependency-path: go/go.sum - name: Install staticcheck diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 43f8af0a600..adb6fb2b57c 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -29,7 +29,6 @@ on: - 'js/**' - 'cpp/**' - 'java/**' - - 'csharp/**' - 'format/**' pull_request: paths: @@ -41,7 +40,6 @@ on: - 'integration/**' - 'js/**' - 'cpp/**' - - 'csharp/**' - 'java/**' - 'format/**' @@ -53,7 +51,6 @@ permissions: contents: read env: - ARCHERY_DEBUG: 1 DOCKER_VOLUME_PREFIX: ".docker/" jobs: @@ -74,11 +71,6 @@ jobs: with: repository: apache/arrow-rs path: rust - - name: Checkout Arrow nanoarrow - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - with: - repository: apache/arrow-nanoarrow - path: nanoarrow - name: Free up disk space run: | ci/scripts/util_free_space.sh @@ -89,7 +81,7 @@ jobs: key: conda-${{ hashFiles('cpp/**') }} restore-keys: conda- - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: 3.8 - name: Setup Archery @@ -101,7 +93,6 @@ jobs: run: > archery docker run \ -e ARCHERY_DEFAULT_BRANCH=${{ github.event.repository.default_branch }} \ - -e ARCHERY_INTEGRATION_WITH_NANOARROW=1 \ -e ARCHERY_INTEGRATION_WITH_RUST=1 \ conda-integration - name: Docker Push diff --git a/.github/workflows/issue_bot.yml b/.github/workflows/issue_bot.yml index 2725825b569..ec614ca1e7c 100644 --- a/.github/workflows/issue_bot.yml +++ b/.github/workflows/issue_bot.yml @@ -21,6 +21,7 @@ on: issues: types: - opened + - edited permissions: contents: read diff --git a/.github/workflows/java.yml b/.github/workflows/java.yml index 0317879b580..1f1fc1b47a3 100644 --- a/.github/workflows/java.yml +++ b/.github/workflows/java.yml @@ -45,7 +45,6 @@ permissions: contents: read env: - ARCHERY_DEBUG: 1 DOCKER_VOLUME_PREFIX: ".docker/" jobs: @@ -57,8 +56,8 @@ jobs: strategy: fail-fast: false matrix: - jdk: [11, 17, 21, 22] - maven: [3.9.6] + jdk: [8, 11, 17, 21] + maven: [3.9.5] image: [java] env: JDK: ${{ matrix.jdk }} @@ -76,7 +75,7 @@ jobs: key: maven-${{ hashFiles('java/**') }} restore-keys: maven- - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: 3.8 - name: Setup Archery @@ -85,12 +84,7 @@ jobs: env: ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} - DEVELOCITY_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} - run: | - archery docker run \ - -e CI=true \ - -e "DEVELOCITY_ACCESS_KEY=$DEVELOCITY_ACCESS_KEY" \ - ${{ matrix.image }} + run: archery docker run ${{ matrix.image }} - name: Docker Push if: >- success() && @@ -104,9 +98,9 @@ jobs: run: archery docker push ${{ matrix.image }} macos: - name: AMD64 macOS 12 Java JDK ${{ matrix.jdk }} - runs-on: macos-12 - if: ${{ !contains(github.event.pull_request.title, 'WIP') }} + name: AMD64 macOS 11 Java JDK ${{ matrix.jdk }} + runs-on: macos-latest + if: github.event_name == 'push' timeout-minutes: 30 strategy: fail-fast: false @@ -125,13 +119,9 @@ jobs: submodules: recursive - name: Build shell: bash - env: - DEVELOCITY_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} run: ci/scripts/java_build.sh $(pwd) $(pwd)/build - name: Test shell: bash - env: - DEVELOCITY_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} run: ci/scripts/java_test.sh $(pwd) $(pwd)/build windows: @@ -156,11 +146,7 @@ jobs: submodules: recursive - name: Build shell: bash - env: - DEVELOCITY_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} run: ci/scripts/java_build.sh $(pwd) $(pwd)/build - name: Test shell: bash - env: - DEVELOCITY_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} run: ci/scripts/java_test.sh $(pwd) $(pwd)/build diff --git a/.github/workflows/java_jni.yml b/.github/workflows/java_jni.yml index c2bc679e681..45de57f360a 100644 --- a/.github/workflows/java_jni.yml +++ b/.github/workflows/java_jni.yml @@ -45,7 +45,6 @@ permissions: contents: read env: - ARCHERY_DEBUG: 1 DOCKER_VOLUME_PREFIX: ".docker/" jobs: @@ -53,7 +52,7 @@ jobs: name: AMD64 manylinux2014 Java JNI runs-on: ubuntu-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} - timeout-minutes: 240 + timeout-minutes: 500 steps: - name: Checkout Arrow uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 @@ -70,7 +69,7 @@ jobs: key: java-jni-manylinux-2014-${{ hashFiles('cpp/**', 'java/**') }} restore-keys: java-jni-manylinux-2014- - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: 3.8 - name: Setup Archery @@ -110,7 +109,7 @@ jobs: key: maven-${{ hashFiles('java/**') }} restore-keys: maven- - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: 3.8 - name: Setup Archery @@ -119,12 +118,7 @@ jobs: env: ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }} ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }} - DEVELOCITY_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} - run: | - archery docker run \ - -e CI=true \ - -e "DEVELOCITY_ACCESS_KEY=$DEVELOCITY_ACCESS_KEY" \ - conda-python-java-integration + run: archery docker run conda-python-java-integration - name: Docker Push if: >- success() && diff --git a/.github/workflows/java_nightly.yml b/.github/workflows/java_nightly.yml index 72afb6dbf1c..c19576d2f65 100644 --- a/.github/workflows/java_nightly.yml +++ b/.github/workflows/java_nightly.yml @@ -58,10 +58,10 @@ jobs: repository: ursacomputing/crossbow ref: main - name: Set up Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: cache: 'pip' - python-version: 3.12 + python-version: 3.8 - name: Install Archery shell: bash run: pip install -e arrow/dev/archery[all] diff --git a/.github/workflows/js.yml b/.github/workflows/js.yml index 630bef61105..0d09e30d6ea 100644 --- a/.github/workflows/js.yml +++ b/.github/workflows/js.yml @@ -38,13 +38,10 @@ concurrency: permissions: contents: read -env: - ARCHERY_DEBUG: 1 - jobs: docker: - name: AMD64 Debian 12 NodeJS 18 + name: AMD64 Debian 11 NodeJS 18 runs-on: ubuntu-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} timeout-minutes: 60 @@ -54,7 +51,7 @@ jobs: with: fetch-depth: 0 - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: 3.8 - name: Setup Archery @@ -80,10 +77,10 @@ jobs: run: archery docker push debian-js macos: - name: AMD64 macOS 12 NodeJS ${{ matrix.node }} - runs-on: macos-12 - if: ${{ !contains(github.event.pull_request.title, 'WIP') }} - timeout-minutes: 30 + name: AMD64 macOS 11 NodeJS ${{ matrix.node }} + runs-on: macos-latest + if: github.event_name == 'push' + timeout-minutes: 90 strategy: fail-fast: false matrix: @@ -105,16 +102,15 @@ jobs: node-version: ${{ matrix.node }} - name: Build shell: bash - run: ci/scripts/js_build.sh $(pwd) build + run: ci/scripts/js_build.sh $(pwd) - name: Test shell: bash - run: ci/scripts/js_test.sh $(pwd) build + run: ci/scripts/js_test.sh $(pwd) windows: name: AMD64 Windows NodeJS ${{ matrix.node }} runs-on: windows-latest - if: ${{ !contains(github.event.pull_request.title, 'WIP') }} - timeout-minutes: 45 + if: github.event_name == 'push' strategy: fail-fast: false matrix: @@ -136,7 +132,7 @@ jobs: node-version: ${{ matrix.node }} - name: Build shell: bash - run: ci/scripts/js_build.sh $(pwd) build + run: ci/scripts/js_build.sh $(pwd) - name: Test shell: bash - run: ci/scripts/js_test.sh $(pwd) build + run: ci/scripts/js_test.sh $(pwd) diff --git a/.github/workflows/matlab.yml b/.github/workflows/matlab.yml index ca8280927f4..eceeb551a06 100644 --- a/.github/workflows/matlab.yml +++ b/.github/workflows/matlab.yml @@ -42,23 +42,7 @@ jobs: ubuntu: name: AMD64 Ubuntu 20.04 MATLAB - # Explicitly pin the Ubuntu version to 20.04 for the time being because: - # - # 1. The version of GLIBCXX shipped with Ubuntu 22.04 is not binary compatible - # with the GLIBCXX bundled with MATLAB R2023a. This is a relatively common - # issue. - # - # For example, see: - # - # https://www.mathworks.com/matlabcentral/answers/1907290-how-to-manually-select-the-libstdc-library-to-use-to-resolve-a-version-glibcxx_-not-found - # - # 2. The version of GLIBCXX shipped with Ubuntu 22.04 is not binary compatible with - # the version of GLIBCXX shipped with Debian 11. Several of the Arrow community - # members who work on the MATLAB bindings use Debian 11 locally for qualification. - # Using Ubuntu 20.04 eases development workflows for these community members. - # - # In the future, we can investigate adding support for building against more Linux (e.g. `ubuntu-22.04`) and MATLAB versions (e.g. R2023b). - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} steps: - name: Check out repository @@ -70,7 +54,7 @@ jobs: - name: Install MATLAB uses: matlab-actions/setup-matlab@v2 with: - release: R2024a + release: R2023a - name: Install ccache run: sudo apt-get install ccache - name: Setup ccache @@ -90,24 +74,24 @@ jobs: run: ci/scripts/matlab_build.sh $(pwd) - name: Run MATLAB Tests env: + # libarrow.so requires a more recent version of libstdc++.so + # than is bundled with MATLAB under /sys/os/glnxa64. + # Therefore, if a MEX function that depends on libarrow.so + # is executed within the MATLAB address space, runtime linking + # errors will occur. To work around this issue, we can explicitly + # force MATLAB to use the system libstdc++.so via LD_PRELOAD. + LD_PRELOAD: /usr/lib/x86_64-linux-gnu/libstdc++.so.6 + # Add the installation directory to the MATLAB Search Path by # setting the MATLABPATH environment variable. MATLABPATH: matlab/install/arrow_matlab uses: matlab-actions/run-tests@v2 with: select-by-folder: matlab/test - strict: true macos: - name: ${{ matrix.architecture }} macOS ${{ matrix.macos-version }} MATLAB - runs-on: macos-${{ matrix.macos-version }} + name: AMD64 macOS 11 MATLAB + runs-on: macos-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} - strategy: - matrix: - include: - - architecture: AMD64 - macos-version: "12" - - architecture: ARM64 - macos-version: "14" steps: - name: Check out repository uses: actions/checkout@v4 @@ -118,7 +102,7 @@ jobs: - name: Install MATLAB uses: matlab-actions/setup-matlab@v2 with: - release: R2024a + release: R2023a - name: Install ccache run: brew install ccache - name: Setup ccache @@ -143,8 +127,7 @@ jobs: MATLABPATH: matlab/install/arrow_matlab uses: matlab-actions/run-tests@v2 with: - select-by-folder: matlab/test - strict: true + select-by-folder: matlab/test windows: name: AMD64 Windows 2022 MATLAB runs-on: windows-2022 @@ -157,7 +140,7 @@ jobs: - name: Install MATLAB uses: matlab-actions/setup-matlab@v2 with: - release: R2024a + release: R2023a - name: Download Timezone Database shell: bash run: ci/scripts/download_tz_database.sh @@ -190,5 +173,4 @@ jobs: MATLABPATH: matlab/install/arrow_matlab uses: matlab-actions/run-tests@v2 with: - select-by-folder: matlab/test - strict: true + select-by-folder: matlab/test diff --git a/.github/workflows/pr_bot.yml b/.github/workflows/pr_bot.yml index 7dd06b6aeec..31ab3280070 100644 --- a/.github/workflows/pr_bot.yml +++ b/.github/workflows/pr_bot.yml @@ -82,9 +82,9 @@ jobs: # fetch the tags for version number generation fetch-depth: 0 - name: Set up Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: - python-version: 3.12 + python-version: 3.8 - name: Install Archery and Crossbow dependencies run: pip install -e arrow/dev/archery[bot] - name: Handle PR workflow event diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 916db2580e3..6e3797b29c2 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -41,7 +41,6 @@ permissions: contents: read env: - ARCHERY_DEBUG: 1 DOCKER_VOLUME_PREFIX: ".docker/" jobs: @@ -101,7 +100,7 @@ jobs: key: ${{ matrix.cache }}-${{ hashFiles('cpp/**') }} restore-keys: ${{ matrix.cache }}- - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: 3.8 - name: Setup Archery @@ -127,21 +126,12 @@ jobs: run: archery docker push ${{ matrix.image }} macos: - name: ${{ matrix.architecture }} macOS ${{ matrix.macos-version }} Python 3 - runs-on: macos-${{ matrix.macos-version }} + name: AMD64 macOS 12 Python 3 + runs-on: macos-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} timeout-minutes: 60 - strategy: - fail-fast: false - matrix: - include: - - architecture: AMD64 - macos-version: "12" - - architecture: ARM64 - macos-version: "14" env: - ARROW_HOME: /tmp/local - ARROW_AZURE: ON + ARROW_HOME: /usr/local ARROW_DATASET: ON ARROW_FLIGHT: ON ARROW_GANDIVA: ON @@ -171,7 +161,7 @@ jobs: fetch-depth: 0 submodules: recursive - name: Setup Python - uses: actions/setup-python@v5.1.1 + uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install Dependencies @@ -181,19 +171,6 @@ jobs: python -m pip install \ -r python/requirements-build.txt \ -r python/requirements-test.txt - - name: Setup ccache - shell: bash - run: ci/scripts/ccache_setup.sh - - name: ccache info - id: ccache-info - shell: bash - run: echo "cache-dir=$(ccache --get-config cache_dir)" >> $GITHUB_OUTPUT - - name: Cache ccache - uses: actions/cache@v4 - with: - path: ${{ steps.ccache-info.outputs.cache-dir }} - key: python-ccache-macos-${{ matrix.macos-version }}-${{ hashFiles('cpp/**', 'python/**') }} - restore-keys: python-ccache-macos-${{ matrix.macos-version }}- - name: Build shell: bash run: | diff --git a/.github/workflows/r.yml b/.github/workflows/r.yml index bf7eb99e7e9..8c47915b7b6 100644 --- a/.github/workflows/r.yml +++ b/.github/workflows/r.yml @@ -51,7 +51,6 @@ permissions: contents: read env: - ARCHERY_DEBUG: 1 DOCKER_VOLUME_PREFIX: ".docker/" jobs: @@ -61,7 +60,7 @@ jobs: strategy: matrix: include: - - cpp_version: "15.0.2" + - cpp_version: "13.0.0" steps: - name: Checkout Arrow uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 @@ -86,19 +85,18 @@ jobs: run: | sudo apt-get install devscripts - # replace the SHA with v2 once INFRA-26031 is resolved - - uses: r-lib/actions/setup-r@732fb28088814627972f1ccbacc02561178cf391 + - uses: r-lib/actions/setup-r@v2 with: use-public-rspm: true install-r: false - - uses: r-lib/actions/setup-r-dependencies@732fb28088814627972f1ccbacc02561178cf391 + - uses: r-lib/actions/setup-r-dependencies@v2 with: extra-packages: any::rcmdcheck needs: check working-directory: src/r - - uses: r-lib/actions/check-r-package@732fb28088814627972f1ccbacc02561178cf391 + - uses: r-lib/actions/check-r-package@v2 with: working-directory: src/r env: @@ -121,7 +119,7 @@ jobs: strategy: fail-fast: false matrix: - r: ["4.4"] + r: ["4.3"] ubuntu: [20.04] force-tests: ["true"] env: @@ -133,9 +131,6 @@ jobs: with: fetch-depth: 0 submodules: recursive - - name: Free up disk space - run: | - ci/scripts/util_free_space.sh - name: Cache Docker Volumes uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 with: @@ -147,7 +142,7 @@ jobs: ubuntu-${{ matrix.ubuntu }}-r-${{ matrix.r }}-${{ hashFiles('cpp/src/**/*.cc','cpp/src/**/*.h)') }}- ubuntu-${{ matrix.ubuntu }}-r-${{ matrix.r }}- - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: 3.8 - name: Setup Archery @@ -195,11 +190,12 @@ jobs: fail-fast: false matrix: config: - - { org: "rhub", image: "ubuntu-gcc12", tag: "latest" } + - { org: "rhub", image: "debian-gcc-devel", tag: "latest", devtoolset: "" } env: R_ORG: ${{ matrix.config.org }} R_IMAGE: ${{ matrix.config.image }} R_TAG: ${{ matrix.config.tag }} + DEVTOOLSET_VERSION: ${{ matrix.config.devtoolset }} steps: - name: Checkout Arrow uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 @@ -207,7 +203,7 @@ jobs: fetch-depth: 0 submodules: recursive - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: 3.8 - name: Setup Archery @@ -341,11 +337,11 @@ jobs: cd r/windows ls *.zip | xargs -n 1 unzip -uo rm -rf *.zip - - uses: r-lib/actions/setup-r@732fb28088814627972f1ccbacc02561178cf391 + - uses: r-lib/actions/setup-r@v2 with: r-version: ${{ matrix.config.rversion }} Ncpus: 2 - - uses: r-lib/actions/setup-r-dependencies@732fb28088814627972f1ccbacc02561178cf391 + - uses: r-lib/actions/setup-r-dependencies@v2 env: GITHUB_PAT: "${{ github.token }}" with: @@ -373,12 +369,11 @@ jobs: MAKEFLAGS = paste0("-j", parallel::detectCores()), ARROW_R_DEV = TRUE, "_R_CHECK_FORCE_SUGGESTS_" = FALSE, - "_R_CHECK_STOP_ON_INVALID_NUMERIC_VERSION_INPUTS_" = TRUE, - "_R_CHECK_DONTTEST_EXAMPLES_" = TRUE + "_R_CHECK_STOP_ON_INVALID_NUMERIC_VERSION_INPUTS_" = TRUE ) rcmdcheck::rcmdcheck(".", build_args = '--no-build-vignettes', - args = c('--no-manual', '--as-cran', '--ignore-vignettes'), + args = c('--no-manual', '--as-cran', '--ignore-vignettes', '--run-donttest'), error_on = 'warning', check_dir = 'check', timeout = 3600 diff --git a/.github/workflows/r_nightly.yml b/.github/workflows/r_nightly.yml index 1ec071b6bbb..a57a8cddea3 100644 --- a/.github/workflows/r_nightly.yml +++ b/.github/workflows/r_nightly.yml @@ -60,10 +60,10 @@ jobs: repository: ursacomputing/crossbow ref: main - name: Set up Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: cache: 'pip' - python-version: 3.12 + python-version: 3.8 - name: Install Archery shell: bash run: pip install -e arrow/dev/archery[all] @@ -86,7 +86,7 @@ jobs: exit 1 fi - name: Cache Repo - uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 + uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 with: path: repo key: r-nightly-${{ github.run_id }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 8d549795024..00000000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,74 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -name: Release - -on: - push: - tags: - # Trigger workflow when a tag whose name matches the pattern - # pattern "apache-arrow-{MAJOR}.{MINOR}.{PATCH}" is pushed. - - "apache-arrow-[0-9]+.[0-9]+.[0-9]+" - -permissions: - contents: write - -env: - GH_TOKEN: ${{ github.token }} - -jobs: - publish: - name: Publish - runs-on: ubuntu-latest - timeout-minutes: 5 - steps: - - name: Get Tag Name of Latest Release Candidate - run: | - rc_tag=$(gh release list --repo apache/arrow | \ - cut -f3 | \ - grep -F "${GITHUB_REF_NAME}-rc" | \ - head -n1) - echo "Latest Release Candidate Tag: ${rc_tag}" - echo "RELEASE_CANDIDATE_TAG_NAME=${rc_tag}" >> ${GITHUB_ENV} - - name: Store Version and Release Candidate Number - run: | - version_with_rc=${RELEASE_CANDIDATE_TAG_NAME#apache-arrow-} - version=${version_with_rc%-rc*} - rc_num=${version_with_rc#${version}-rc} - echo "VERSION_WITH_RC=${version_with_rc}" >> ${GITHUB_ENV} - echo "VERSION=${version}" >> ${GITHUB_ENV} - echo "RC_NUM=${rc_num}" >> ${GITHUB_ENV} - - name: Download Release Candidate Artifacts - run: | - mkdir release_candidate_artifacts - gh release download ${RELEASE_CANDIDATE_TAG_NAME} --repo apache/arrow --dir release_candidate_artifacts - - name: Create Release Title - run: | - title="Apache Arrow ${VERSION}" - echo "RELEASE_TITLE=${title}" >> ${GITHUB_ENV} - # Set the release notes to "TODO" temporarily. After the release notes page - # (https://arrow.apache.org/release/{VERSION}.html) is published, use - # gh release edit to update the release notes to refer to the newly - # pushed web page. See dev/post/post-05-update-gh-release-notes.sh - - name: Create GitHub Release - run: | - gh release create ${GITHUB_REF_NAME} \ - --repo apache/arrow \ - --verify-tag \ - --title "${RELEASE_TITLE}" \ - --notes "TODO" \ - release_candidate_artifacts/* \ No newline at end of file diff --git a/.github/workflows/release_candidate.yml b/.github/workflows/release_candidate.yml deleted file mode 100644 index ec732f0eb33..00000000000 --- a/.github/workflows/release_candidate.yml +++ /dev/null @@ -1,70 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -name: Release - -on: - push: - tags: - # Trigger workflow when a tag whose name matches the pattern - # "apache-arrow-{MAJOR}.{MINOR}.{PATCH}-rc{RC_NUM}" is pushed. - - "apache-arrow-[0-9]+.[0-9]+.[0-9]+-rc[0-9]+" - -permissions: - contents: write - -env: - GH_TOKEN: ${{ github.token }} - -jobs: - publish: - name: Publish - runs-on: ubuntu-latest - timeout-minutes: 5 - steps: - - name: Checkout Arrow - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Store Version and Release Candidate Number - run: | - version_with_rc=${GITHUB_REF_NAME#apache-arrow-} - version=${version_with_rc%-rc*} - rc_num=${version_with_rc#${version}-rc} - echo "VERSION_WITH_RC=${version_with_rc}" >> ${GITHUB_ENV} - echo "VERSION=${version}" >> ${GITHUB_ENV} - echo "RC_NUM=${rc_num}" >> ${GITHUB_ENV} - - name: Create Release Candidate Title - run: | - title="Apache Arrow ${VERSION} RC${RC_NUM}" - echo "RELEASE_CANDIDATE_TITLE=${title}" >> ${GITHUB_ENV} - - name: Create Release Candidate Notes - run: | - release_notes="Release Candidate: ${VERSION} RC${RC_NUM}" - echo "RELEASE_CANDIDATE_NOTES=${release_notes}" >> ${GITHUB_ENV} - - name: Create Release tarball - run: | - cd dev/release/ && ./utils-create-release-tarball.sh ${VERSION} ${RC_NUM} - echo "RELEASE_TARBALL=apache-arrow-${VERSION}.tar.gz" >> ${GITHUB_ENV} - - name: Create GitHub Release - run: | - gh release create ${GITHUB_REF_NAME} \ - --verify-tag \ - --prerelease \ - --title "${RELEASE_CANDIDATE_TITLE}" \ - --notes "Release Notes: ${RELEASE_CANDIDATE_NOTES}" \ - dev/release/${RELEASE_TARBALL} diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml index e4d650e74a8..74d56895f4c 100644 --- a/.github/workflows/ruby.yml +++ b/.github/workflows/ruby.yml @@ -53,7 +53,6 @@ permissions: contents: read env: - ARCHERY_DEBUG: 1 DOCKER_VOLUME_PREFIX: ".docker/" jobs: @@ -83,7 +82,7 @@ jobs: key: ubuntu-${{ matrix.ubuntu }}-ruby-${{ hashFiles('cpp/**') }} restore-keys: ubuntu-${{ matrix.ubuntu }}-ruby- - name: Setup Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 with: python-version: 3.8 - name: Setup Archery @@ -116,7 +115,7 @@ jobs: run: archery docker push ubuntu-ruby macos: - name: AMD64 macOS 14 GLib & Ruby + name: AMD64 macOS 12 GLib & Ruby runs-on: macos-latest if: ${{ !contains(github.event.pull_request.title, 'WIP') }} timeout-minutes: 60 @@ -131,7 +130,7 @@ jobs: ARROW_GCS: ON ARROW_GLIB_GTK_DOC: true ARROW_GLIB_WERROR: true - ARROW_HOME: /tmp/local + ARROW_HOME: /usr/local ARROW_JEMALLOC: OFF ARROW_ORC: OFF ARROW_PARQUET: ON @@ -140,6 +139,7 @@ jobs: ARROW_WITH_SNAPPY: ON ARROW_WITH_ZLIB: ON ARROW_WITH_ZSTD: ON + XML_CATALOG_FILES: /usr/local/etc/xml/catalog steps: - name: Checkout Arrow uses: actions/checkout@v4 @@ -185,7 +185,7 @@ jobs: shell: bash run: ci/scripts/ruby_test.sh $(pwd) $(pwd)/build - windows-mingw: + windows: name: AMD64 Windows MinGW ${{ matrix.mingw-n-bits }} GLib & Ruby runs-on: windows-2019 if: ${{ !contains(github.event.pull_request.title, 'WIP') }} @@ -196,7 +196,9 @@ jobs: mingw-n-bits: - 64 ruby-version: - - ruby + # TODO: Use the latest Ruby again when we fix GH-39130. + # - ruby + - "3.1" env: ARROW_BUILD_STATIC: OFF ARROW_BUILD_TESTS: OFF @@ -264,6 +266,7 @@ jobs: ridk exec bash ci\scripts\cpp_build.sh "${source_dir}" "${build_dir}" - name: Build GLib run: | + $Env:CMAKE_BUILD_PARALLEL_LEVEL = $Env:NUMBER_OF_PROCESSORS $source_dir = "$(ridk exec cygpath --unix "$(Get-Location)")" $build_dir = "$(ridk exec cygpath --unix "$(Get-Location)\build")" $ErrorActionPreference = "Continue" @@ -301,119 +304,3 @@ jobs: $Env:MAKE = "ridk exec make" $ErrorActionPreference = "Continue" rake -f ruby\Rakefile - - windows-msvc: - name: AMD64 Windows MSVC GLib - runs-on: windows-2019 - if: ${{ !contains(github.event.pull_request.title, 'WIP') }} - timeout-minutes: 90 - strategy: - fail-fast: false - env: - ARROW_ACERO: ON - ARROW_BOOST_USE_SHARED: OFF - ARROW_BUILD_BENCHMARKS: OFF - ARROW_BUILD_SHARED: ON - ARROW_BUILD_STATIC: OFF - ARROW_BUILD_TESTS: OFF - ARROW_DATASET: ON - ARROW_DEPENDENCY_SOURCE: VCPKG - ARROW_DEPENDENCY_USE_SHARED: OFF - ARROW_FLIGHT: ON - ARROW_FLIGHT_SQL: ON - ARROW_GANDIVA: OFF - ARROW_GLIB_VAPI: "false" - ARROW_HDFS: OFF - ARROW_HOME: "${{ github.workspace }}/dist" - ARROW_JEMALLOC: OFF - ARROW_MIMALLOC: ON - ARROW_ORC: OFF - ARROW_PARQUET: ON - ARROW_SUBSTRAIT: OFF - ARROW_USE_GLOG: OFF - ARROW_VERBOSE_THIRDPARTY_BUILD: OFF - ARROW_WITH_BROTLI: OFF - ARROW_WITH_BZ2: OFF - ARROW_WITH_LZ4: OFF - ARROW_WITH_OPENTELEMETRY: OFF - ARROW_WITH_SNAPPY: ON - ARROW_WITH_ZLIB: ON - ARROW_WITH_ZSTD: ON - CMAKE_CXX_STANDARD: "17" - CMAKE_GENERATOR: Ninja - CMAKE_INSTALL_PREFIX: "${{ github.workspace }}/dist" - CMAKE_UNITY_BUILD: ON - VCPKG_BINARY_SOURCES: 'clear;nuget,GitHub,readwrite' - VCPKG_ROOT: "${{ github.workspace }}/vcpkg" - VCPKG_TRIPLET: x64-windows - permissions: - packages: write - steps: - - name: Disable Crash Dialogs - run: | - reg add ` - "HKCU\SOFTWARE\Microsoft\Windows\Windows Error Reporting" ` - /v DontShowUI ` - /t REG_DWORD ` - /d 1 ` - /f - - name: Checkout Arrow - uses: actions/checkout@v4 - with: - fetch-depth: 0 - submodules: recursive - - name: Install vcpkg - shell: bash - run: | - ci/scripts/install_vcpkg.sh "${VCPKG_ROOT}" - - name: Install meson - run: | - python -m pip install meson - - name: Install ccache - shell: bash - run: | - ci/scripts/install_ccache.sh 4.6.3 /usr - - name: Setup ccache - shell: bash - run: | - ci/scripts/ccache_setup.sh - - name: ccache info - id: ccache-info - shell: bash - run: | - echo "cache-dir=$(ccache --get-config cache_dir)" >> $GITHUB_OUTPUT - - name: Cache ccache - uses: actions/cache@v4 - with: - path: ${{ steps.ccache-info.outputs.cache-dir }} - key: glib-ccache-msvc-${{ env.CACHE_VERSION }}-${{ hashFiles('cpp/**') }} - restore-keys: glib-ccache-msvc-${{ env.CACHE_VERSION }}- - env: - # We can invalidate the current cache by updating this. - CACHE_VERSION: "2024-05-09" - - name: Setup NuGet credentials for vcpkg caching - shell: bash - run: | - $(vcpkg/vcpkg.exe fetch nuget | tail -n 1) \ - sources add \ - -source "https://nuget.pkg.github.com/$GITHUB_REPOSITORY_OWNER/index.json" \ - -storepasswordincleartext \ - -name "GitHub" \ - -username "$GITHUB_REPOSITORY_OWNER" \ - -password "${{ secrets.GITHUB_TOKEN }}" - $(vcpkg/vcpkg.exe fetch nuget | tail -n 1) \ - setapikey "${{ secrets.GITHUB_TOKEN }}" \ - -source "https://nuget.pkg.github.com/$GITHUB_REPOSITORY_OWNER/index.json" - - name: Build C++ vcpkg dependencies - run: | - vcpkg\vcpkg.exe install --triplet $env:VCPKG_TRIPLET --x-manifest-root cpp --x-install-root build\cpp\vcpkg_installed - - name: Build C++ - shell: cmd - run: | - call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 - bash -c "ci/scripts/cpp_build.sh $(pwd) $(pwd)/build" - - name: Build GLib - shell: cmd - run: | - call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64 - bash -c "ci/scripts/c_glib_build.sh $(pwd) $(pwd)/build" diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index 1b3c9eca181..f55e9e77503 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -41,7 +41,6 @@ permissions: contents: read env: - ARCHERY_DEBUG: 1 DOCKER_VOLUME_PREFIX: ".docker/" jobs: diff --git a/.gitignore b/.gitignore index 52ffa6c6124..5d51d258bd8 100644 --- a/.gitignore +++ b/.gitignore @@ -100,11 +100,3 @@ __debug_bin # direnv .envrc - -# Develocity -java/.mvn/.gradle-enterprise/ -java/.mvn/.develocity/ - -# rat -filtered_rat.txt -rat.txt diff --git a/.hadolint.yaml b/.hadolint.yaml index 6d326d7317e..a6d7d03f84f 100644 --- a/.hadolint.yaml +++ b/.hadolint.yaml @@ -18,8 +18,7 @@ ignored: - DL3008 - DL3013 - - DL3015 # Avoid additional packages by specifying `--no-install-recommends` - DL3018 - - DL3028 # Ruby gem version pinning + - DL3015 # Avoid additional packages by specifying `--no-install-recommends` + - DL3028 # Ruby gem version pinning - DL3007 # r-sanitizer must use latest - - DL3041 # Specify version with `dnf install -y -`. diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bf0bcde1462..d3c7624f63e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -29,25 +29,19 @@ repos: entry: bash -c "git archive HEAD --prefix=apache-arrow/ --output=arrow-src.tar && ./dev/release/run-rat.sh arrow-src.tar" always_run: true pass_filenames: false - - repo: https://github.com/hadolint/hadolint - rev: v2.12.0 - hooks: - - id: hadolint-docker + - id: hadolint name: Docker Format - # We can enable this after we fix all existing lint failures. - # files: (/Dockerfile|\.dockerfile)$ - files: >- - ( - ?^ci/docker/conda-python-emscripten\.dockerfile$| - ?^ci/docker/python-wheel-windows-test-vs2019\.dockerfile$| - ) - types: [] + language: docker_image + types: + - dockerfile + entry: --entrypoint /bin/hadolint hadolint/hadolint:latest - + exclude: ^dev/.*$ - repo: https://github.com/pycqa/flake8 rev: 6.1.0 hooks: - id: flake8 name: Python Format - files: ^(python|dev|c_glib|integration)/ + files: ^(python|dev|integration)/ types: - file - python @@ -58,107 +52,3 @@ repos: hooks: - id: cython-lint args: [--no-pycodestyle] - - repo: https://github.com/pre-commit/mirrors-clang-format - rev: v14.0.6 - hooks: - - id: clang-format - name: C++ Format - types_or: - - c++ - # - json - # - proto - files: >- - ^cpp/ - exclude: >- - ( - ?\.grpc\.fb\.(cc|h)$| - ?\.pb\.(cc|h)$| - ?_generated.*\.(cc|h)$| - ?^cpp/src/arrow/vendored/| - ?^cpp/src/generated/| - ?^cpp/thirdparty/| - ) - - repo: https://github.com/pre-commit/mirrors-clang-format - rev: v14.0.6 - hooks: - - id: clang-format - name: C/GLib Format - files: >- - ^c_glib/ - - repo: https://github.com/pre-commit/mirrors-clang-format - rev: v14.0.6 - hooks: - - id: clang-format - name: MATLAB (C++) Format - files: >- - ^matlab/src/cpp/ - - repo: https://github.com/pre-commit/mirrors-clang-format - rev: v14.0.6 - hooks: - - id: clang-format - name: Python (C++) Format - files: >- - ^python/pyarrow/src/ - exclude: >- - ( - ?\.grpc\.fb\.(cc|h)$| - ?.pb\.(cc|h)$| - ?^cpp/src/generated/| - ) - - repo: https://github.com/pre-commit/mirrors-clang-format - rev: v14.0.6 - hooks: - - id: clang-format - name: R (C++) Format - files: >- - ^r/src/ - exclude: >- - ( - ?^r/src/arrowExports\.cpp$| - ) - - repo: https://github.com/cheshirekow/cmake-format-precommit - rev: v0.6.13 - hooks: - - id: cmake-format - name: CMake Format - files: >- - ( - ?.*CMakeLists\.txt$| - ?^ci/.*/.*\.cmake$| - ?^cpp/.*/.*\.cmake\.in$| - ?^cpp/.*/.*\.cmake$| - ) - exclude: >- - ( - ?^ci/conan/all/.*CMakeLists\.txt$| - ?^cpp/cmake_modules/FindNumPy\.cmake$| - ?^cpp/cmake_modules/FindPythonLibsNew\.cmake$| - ?^cpp/cmake_modules/UseCython\.cmake$| - ?^cpp/src/arrow/util/.*\.h\.cmake$| - ) - - repo: https://github.com/sphinx-contrib/sphinx-lint - rev: v0.9.1 - hooks: - - id: sphinx-lint - files: ^docs/source - exclude: ^docs/source/python/generated - args: [ - '--enable', - 'all', - '--disable', - 'dangling-hyphen,line-too-long', - ] - - repo: https://github.com/golangci/golangci-lint - rev: v1.59.0 - hooks: - # no built-in support for multiple go.mod - # https://github.com/golangci/golangci-lint/issues/828 - - id: golangci-lint-full - name: golangci-lint-full-arrow - entry: bash -c 'cd go/arrow && golangci-lint run' - - id: golangci-lint-full - name: golangci-lint-full-parquet - entry: bash -c 'cd go/parquet && golangci-lint run' - - id: golangci-lint-full - name: golangci-lint-full-internal - entry: bash -c 'cd go/internal && golangci-lint run' diff --git a/LICENSE.txt b/LICENSE.txt index 7bb1330a100..0423854567b 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -2252,10 +2252,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - --------------------------------------------------------------------------------- -java/vector/src/main/java/org/apache/arrow/vector/util/IntObjectHashMap.java -java/vector/src/main/java/org/apache/arrow/vector/util/IntObjectMap.java - -These file are derived from code from Netty, which is made available under the -Apache License 2.0. diff --git a/appveyor.yml b/appveyor.yml index 5954251d347..d0f9082833c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -44,7 +44,6 @@ environment: ARROW_BUILD_FLIGHT_SQL: "ON" ARROW_BUILD_GANDIVA: "ON" ARROW_GCS: "ON" - ARROW_ORC: "ON" ARROW_S3: "ON" GENERATOR: Ninja PYTHON: "3.10" diff --git a/c_glib/.clang-format b/c_glib/.clang-format deleted file mode 100644 index f1009b78bb8..00000000000 --- a/c_glib/.clang-format +++ /dev/null @@ -1,45 +0,0 @@ - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - ---- -AlignAfterOpenBracket: true -AlignConsecutiveMacros: AcrossEmptyLines -AllowAllArgumentsOnNextLine: false -AllowShortEnumsOnASingleLine: false -AllowShortIfStatementsOnASingleLine: false -AlwaysBreakAfterReturnType: All -BinPackArguments: false -BinPackParameters: false -BraceWrapping: - AfterFunction: true - AfterStruct: true -BreakBeforeBinaryOperators: None -BreakBeforeBraces: Custom -ColumnLimit: 90 -ConstructorInitializerIndentWidth: 2 -ContinuationIndentWidth: 2 -IndentCaseBlocks: true -IndentPPDirectives: AfterHash -IndentWidth: 2 -NamespaceIndentation: All -PPIndentWidth: 2 -PackConstructorInitializers: CurrentLine -SortIncludes: Never ---- -Language: JavaScript -SpacesInContainerLiterals: false diff --git a/c_glib/Brewfile b/c_glib/Brewfile index d281e047350..5ab50203696 100644 --- a/c_glib/Brewfile +++ b/c_glib/Brewfile @@ -16,5 +16,7 @@ # under the License. brew "gobject-introspection" +brew "gtk-doc" +brew "libtool" brew "meson" brew "vala" diff --git a/c_glib/arrow-cuda-glib/arrow-cuda-glib.h b/c_glib/arrow-cuda-glib/arrow-cuda-glib.h index 572ff92ed9b..b3c7f210876 100644 --- a/c_glib/arrow-cuda-glib/arrow-cuda-glib.h +++ b/c_glib/arrow-cuda-glib/arrow-cuda-glib.h @@ -21,6 +21,4 @@ #include -#include - #include diff --git a/c_glib/arrow-cuda-glib/cuda.cpp b/c_glib/arrow-cuda-glib/cuda.cpp index 66790558d3f..13525b5906f 100644 --- a/c_glib/arrow-cuda-glib/cuda.cpp +++ b/c_glib/arrow-cuda-glib/cuda.cpp @@ -70,7 +70,9 @@ G_BEGIN_DECLS * #GArrowCUDABuffer. */ -G_DEFINE_TYPE(GArrowCUDADeviceManager, garrow_cuda_device_manager, G_TYPE_OBJECT) +G_DEFINE_TYPE(GArrowCUDADeviceManager, + garrow_cuda_device_manager, + G_TYPE_OBJECT) static void garrow_cuda_device_manager_init(GArrowCUDADeviceManager *object) @@ -96,7 +98,8 @@ garrow_cuda_device_manager_new(GError **error) { auto arrow_manager = arrow::cuda::CudaDeviceManager::Instance(); if (garrow::check(error, arrow_manager, "[cuda][device-manager][new]")) { - auto manager = g_object_new(GARROW_CUDA_TYPE_DEVICE_MANAGER, NULL); + auto manager = g_object_new(GARROW_CUDA_TYPE_DEVICE_MANAGER, + NULL); return GARROW_CUDA_DEVICE_MANAGER(manager); } else { return NULL; @@ -122,7 +125,8 @@ garrow_cuda_device_manager_get_context(GArrowCUDADeviceManager *manager, { auto arrow_manager = arrow::cuda::CudaDeviceManager::Instance(); auto arrow_cuda_context = (*arrow_manager)->GetContext(gpu_number); - if (garrow::check(error, arrow_cuda_context, "[cuda][device-manager][get-context]]")) { + if (garrow::check(error, arrow_cuda_context, + "[cuda][device-manager][get-context]]")) { return garrow_cuda_context_new_raw(&(*arrow_cuda_context)); } else { return NULL; @@ -144,8 +148,8 @@ garrow_cuda_device_manager_get_n_devices(GArrowCUDADeviceManager *manager) return (*arrow_manager)->num_devices(); } -typedef struct GArrowCUDAContextPrivate_ -{ + +typedef struct GArrowCUDAContextPrivate_ { std::shared_ptr context; } GArrowCUDAContextPrivate; @@ -153,11 +157,14 @@ enum { PROP_CONTEXT = 1 }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowCUDAContext, garrow_cuda_context, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowCUDAContext, + garrow_cuda_context, + G_TYPE_OBJECT) -#define GARROW_CUDA_CONTEXT_GET_PRIVATE(object) \ - static_cast( \ - garrow_cuda_context_get_instance_private(GARROW_CUDA_CONTEXT(object))) +#define GARROW_CUDA_CONTEXT_GET_PRIVATE(object) \ + static_cast( \ + garrow_cuda_context_get_instance_private( \ + GARROW_CUDA_CONTEXT(object))) static void garrow_cuda_context_finalize(GObject *object) @@ -179,8 +186,8 @@ garrow_cuda_context_set_property(GObject *object, switch (prop_id) { case PROP_CONTEXT: - priv->context = *static_cast *>( - g_value_get_pointer(value)); + priv->context = + *static_cast *>(g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -205,7 +212,7 @@ static void garrow_cuda_context_init(GArrowCUDAContext *object) { auto priv = GARROW_CUDA_CONTEXT_GET_PRIVATE(object); - new (&priv->context) std::shared_ptr; + new(&priv->context) std::shared_ptr; } static void @@ -215,7 +222,7 @@ garrow_cuda_context_class_init(GArrowCUDAContextClass *klass) auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_cuda_context_finalize; + gobject_class->finalize = garrow_cuda_context_finalize; gobject_class->set_property = garrow_cuda_context_set_property; gobject_class->get_property = garrow_cuda_context_get_property; @@ -224,11 +231,11 @@ garrow_cuda_context_class_init(GArrowCUDAContextClass *klass) * * Since: 0.8.0 */ - spec = g_param_spec_pointer( - "context", - "Context", - "The raw std::shared_ptr", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("context", + "Context", + "The raw std::shared_ptr", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_CONTEXT, spec); } @@ -247,7 +254,10 @@ garrow_cuda_context_get_allocated_size(GArrowCUDAContext *context) return arrow_context->bytes_allocated(); } -G_DEFINE_TYPE(GArrowCUDABuffer, garrow_cuda_buffer, GARROW_TYPE_BUFFER) + +G_DEFINE_TYPE(GArrowCUDABuffer, + garrow_cuda_buffer, + GARROW_TYPE_BUFFER) static void garrow_cuda_buffer_init(GArrowCUDABuffer *object) @@ -271,13 +281,15 @@ garrow_cuda_buffer_class_init(GArrowCUDABufferClass *klass) * Since: 0.8.0 */ GArrowCUDABuffer * -garrow_cuda_buffer_new(GArrowCUDAContext *context, gint64 size, GError **error) +garrow_cuda_buffer_new(GArrowCUDAContext *context, + gint64 size, + GError **error) { auto arrow_context = garrow_cuda_context_get_raw(context); auto arrow_buffer_result = arrow_context->Allocate(size); if (garrow::check(error, arrow_buffer_result, "[cuda][buffer][new]")) { std::shared_ptr arrow_buffer = - std::move(*arrow_buffer_result); + std::move(*arrow_buffer_result); return garrow_cuda_buffer_new_raw(&arrow_buffer); } else { return NULL; @@ -329,8 +341,8 @@ garrow_cuda_buffer_new_record_batch(GArrowCUDAContext *context, { auto arrow_context = garrow_cuda_context_get_raw(context); auto arrow_record_batch = garrow_record_batch_get_raw(record_batch); - auto arrow_buffer = - arrow::cuda::SerializeRecordBatch(*arrow_record_batch, arrow_context.get()); + auto arrow_buffer = arrow::cuda::SerializeRecordBatch(*arrow_record_batch, + arrow_context.get()); if (garrow::check(error, arrow_buffer, "[cuda][buffer][new-record-batch]")) { return garrow_cuda_buffer_new_raw(&(*arrow_buffer)); } else { @@ -386,7 +398,9 @@ garrow_cuda_buffer_copy_from_host(GArrowCUDABuffer *buffer, { auto arrow_buffer = garrow_cuda_buffer_get_raw(buffer); auto status = arrow_buffer->CopyFromHost(0, data, size); - return garrow_error_check(error, status, "[cuda][buffer][copy-from-host]"); + return garrow_error_check(error, + status, + "[cuda][buffer][copy-from-host]"); } /** @@ -452,12 +466,15 @@ garrow_cuda_buffer_read_record_batch(GArrowCUDABuffer *buffer, if (options) { auto arrow_options = garrow_read_options_get_raw(options); - auto arrow_dictionary_memo = garrow_read_options_get_dictionary_memo_raw(options); - auto arrow_record_batch = arrow::cuda::ReadRecordBatch(arrow_schema, - arrow_dictionary_memo, - arrow_buffer, - arrow_options->memory_pool); - if (garrow::check(error, arrow_record_batch, "[cuda][buffer][read-record-batch]")) { + auto arrow_dictionary_memo = + garrow_read_options_get_dictionary_memo_raw(options); + auto arrow_record_batch = + arrow::cuda::ReadRecordBatch(arrow_schema, + arrow_dictionary_memo, + arrow_buffer, + arrow_options->memory_pool); + if (garrow::check(error, arrow_record_batch, + "[cuda][buffer][read-record-batch]")) { return garrow_record_batch_new_raw(&(*arrow_record_batch)); } else { return NULL; @@ -465,8 +482,12 @@ garrow_cuda_buffer_read_record_batch(GArrowCUDABuffer *buffer, } else { auto arrow_pool = arrow::default_memory_pool(); auto arrow_record_batch = - arrow::cuda::ReadRecordBatch(arrow_schema, nullptr, arrow_buffer, arrow_pool); - if (garrow::check(error, arrow_record_batch, "[cuda][buffer][read-record-batch]")) { + arrow::cuda::ReadRecordBatch(arrow_schema, + nullptr, + arrow_buffer, + arrow_pool); + if (garrow::check(error, arrow_record_batch, + "[cuda][buffer][read-record-batch]")) { return garrow_record_batch_new_raw(&(*arrow_record_batch)); } else { return NULL; @@ -474,7 +495,10 @@ garrow_cuda_buffer_read_record_batch(GArrowCUDABuffer *buffer, } } -G_DEFINE_TYPE(GArrowCUDAHostBuffer, garrow_cuda_host_buffer, GARROW_TYPE_MUTABLE_BUFFER) + +G_DEFINE_TYPE(GArrowCUDAHostBuffer, + garrow_cuda_host_buffer, + GARROW_TYPE_MUTABLE_BUFFER) static void garrow_cuda_host_buffer_init(GArrowCUDAHostBuffer *object) @@ -510,8 +534,8 @@ garrow_cuda_host_buffer_new(gint gpu_number, gint64 size, GError **error) } } -typedef struct GArrowCUDAIPCMemoryHandlePrivate_ -{ + +typedef struct GArrowCUDAIPCMemoryHandlePrivate_ { std::shared_ptr ipc_memory_handle; } GArrowCUDAIPCMemoryHandlePrivate; @@ -523,9 +547,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowCUDAIPCMemoryHandle, garrow_cuda_ipc_memory_handle, G_TYPE_OBJECT) -#define GARROW_CUDA_IPC_MEMORY_HANDLE_GET_PRIVATE(object) \ - static_cast( \ - garrow_cuda_ipc_memory_handle_get_instance_private( \ +#define GARROW_CUDA_IPC_MEMORY_HANDLE_GET_PRIVATE(object) \ + static_cast( \ + garrow_cuda_ipc_memory_handle_get_instance_private( \ GARROW_CUDA_IPC_MEMORY_HANDLE(object))) static void @@ -549,8 +573,7 @@ garrow_cuda_ipc_memory_handle_set_property(GObject *object, switch (prop_id) { case PROP_IPC_MEMORY_HANDLE: priv->ipc_memory_handle = - *static_cast *>( - g_value_get_pointer(value)); + *static_cast *>(g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -583,7 +606,7 @@ garrow_cuda_ipc_memory_handle_class_init(GArrowCUDAIPCMemoryHandleClass *klass) auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_cuda_ipc_memory_handle_finalize; + gobject_class->finalize = garrow_cuda_ipc_memory_handle_finalize; gobject_class->set_property = garrow_cuda_ipc_memory_handle_set_property; gobject_class->get_property = garrow_cuda_ipc_memory_handle_get_property; @@ -592,11 +615,11 @@ garrow_cuda_ipc_memory_handle_class_init(GArrowCUDAIPCMemoryHandleClass *klass) * * Since: 0.8.0 */ - spec = g_param_spec_pointer( - "ipc-memory-handle", - "IPC Memory Handle", - "The raw std::shared_ptr", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("ipc-memory-handle", + "IPC Memory Handle", + "The raw std::shared_ptr", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_IPC_MEMORY_HANDLE, spec); } @@ -612,7 +635,9 @@ garrow_cuda_ipc_memory_handle_class_init(GArrowCUDAIPCMemoryHandleClass *klass) * Since: 0.8.0 */ GArrowCUDAIPCMemoryHandle * -garrow_cuda_ipc_memory_handle_new(const guint8 *data, gsize size, GError **error) +garrow_cuda_ipc_memory_handle_new(const guint8 *data, + gsize size, + GError **error) { auto arrow_handle = arrow::cuda::CudaIpcMemHandle::FromBuffer(data); if (garrow::check(error, arrow_handle, "[cuda][ipc-memory-handle][new]")) { @@ -635,11 +660,13 @@ garrow_cuda_ipc_memory_handle_new(const guint8 *data, gsize size, GError **error * Since: 0.8.0 */ GArrowBuffer * -garrow_cuda_ipc_memory_handle_serialize(GArrowCUDAIPCMemoryHandle *handle, GError **error) +garrow_cuda_ipc_memory_handle_serialize(GArrowCUDAIPCMemoryHandle *handle, + GError **error) { auto arrow_handle = garrow_cuda_ipc_memory_handle_get_raw(handle); auto arrow_buffer = arrow_handle->Serialize(arrow::default_memory_pool()); - if (garrow::check(error, arrow_buffer, "[cuda][ipc-memory-handle][serialize]")) { + if (garrow::check(error, arrow_buffer, + "[cuda][ipc-memory-handle][serialize]")) { return garrow_buffer_new_raw(&(*arrow_buffer)); } else { return NULL; @@ -647,8 +674,7 @@ garrow_cuda_ipc_memory_handle_serialize(GArrowCUDAIPCMemoryHandle *handle, GErro } static GArrowBuffer * -garrow_cuda_buffer_input_stream_buffer_new_raw_readable_interface( - std::shared_ptr *arrow_buffer) +garrow_cuda_buffer_input_stream_buffer_new_raw_readable_interface(std::shared_ptr *arrow_buffer) { auto arrow_cuda_buffer = reinterpret_cast *>(arrow_buffer); @@ -669,15 +695,17 @@ garrow_cuda_buffer_input_stream_readable_interface_init(GArrowReadableInterface { iface->buffer_new_raw = garrow_cuda_buffer_input_stream_buffer_new_raw_readable_interface; - iface->get_raw = garrow_cuda_buffer_input_stream_get_raw_readable_interface; + iface->get_raw = + garrow_cuda_buffer_input_stream_get_raw_readable_interface; } G_DEFINE_TYPE_WITH_CODE( GArrowCUDABufferInputStream, garrow_cuda_buffer_input_stream, GARROW_TYPE_BUFFER_INPUT_STREAM, - G_IMPLEMENT_INTERFACE(GARROW_TYPE_READABLE, - garrow_cuda_buffer_input_stream_readable_interface_init)) + G_IMPLEMENT_INTERFACE( + GARROW_TYPE_READABLE, + garrow_cuda_buffer_input_stream_readable_interface_init)) static void garrow_cuda_buffer_input_stream_init(GArrowCUDABufferInputStream *object) @@ -702,10 +730,12 @@ GArrowCUDABufferInputStream * garrow_cuda_buffer_input_stream_new(GArrowCUDABuffer *buffer) { auto arrow_buffer = garrow_cuda_buffer_get_raw(buffer); - auto arrow_reader = std::make_shared(arrow_buffer); + auto arrow_reader = + std::make_shared(arrow_buffer); return garrow_cuda_buffer_input_stream_new_raw(&arrow_reader); } + G_DEFINE_TYPE(GArrowCUDABufferOutputStream, garrow_cuda_buffer_output_stream, GARROW_TYPE_OUTPUT_STREAM) @@ -733,7 +763,8 @@ GArrowCUDABufferOutputStream * garrow_cuda_buffer_output_stream_new(GArrowCUDABuffer *buffer) { auto arrow_buffer = garrow_cuda_buffer_get_raw(buffer); - auto arrow_writer = std::make_shared(arrow_buffer); + auto arrow_writer = + std::make_shared(arrow_buffer); return garrow_cuda_buffer_output_stream_new_raw(&arrow_writer); } @@ -797,13 +828,15 @@ garrow_cuda_buffer_output_stream_get_buffered_size(GArrowCUDABufferOutputStream return arrow_stream->num_bytes_buffered(); } + G_END_DECLS GArrowCUDAContext * garrow_cuda_context_new_raw(std::shared_ptr *arrow_context) { - return GARROW_CUDA_CONTEXT( - g_object_new(GARROW_CUDA_TYPE_CONTEXT, "context", arrow_context, NULL)); + return GARROW_CUDA_CONTEXT(g_object_new(GARROW_CUDA_TYPE_CONTEXT, + "context", arrow_context, + NULL)); } std::shared_ptr @@ -817,12 +850,10 @@ garrow_cuda_context_get_raw(GArrowCUDAContext *context) } GArrowCUDAIPCMemoryHandle * -garrow_cuda_ipc_memory_handle_new_raw( - std::shared_ptr *arrow_handle) +garrow_cuda_ipc_memory_handle_new_raw(std::shared_ptr *arrow_handle) { auto handle = g_object_new(GARROW_CUDA_TYPE_IPC_MEMORY_HANDLE, - "ipc-memory-handle", - arrow_handle, + "ipc-memory-handle", arrow_handle, NULL); return GARROW_CUDA_IPC_MEMORY_HANDLE(handle); } @@ -840,8 +871,9 @@ garrow_cuda_ipc_memory_handle_get_raw(GArrowCUDAIPCMemoryHandle *handle) GArrowCUDABuffer * garrow_cuda_buffer_new_raw(std::shared_ptr *arrow_buffer) { - return GARROW_CUDA_BUFFER( - g_object_new(GARROW_CUDA_TYPE_BUFFER, "buffer", arrow_buffer, NULL)); + return GARROW_CUDA_BUFFER(g_object_new(GARROW_CUDA_TYPE_BUFFER, + "buffer", arrow_buffer, + NULL)); } std::shared_ptr @@ -855,10 +887,11 @@ garrow_cuda_buffer_get_raw(GArrowCUDABuffer *buffer) } GArrowCUDAHostBuffer * -garrow_cuda_host_buffer_new_raw( - std::shared_ptr *arrow_buffer) +garrow_cuda_host_buffer_new_raw(std::shared_ptr *arrow_buffer) { - auto buffer = g_object_new(GARROW_CUDA_TYPE_HOST_BUFFER, "buffer", arrow_buffer, NULL); + auto buffer = g_object_new(GARROW_CUDA_TYPE_HOST_BUFFER, + "buffer", arrow_buffer, + NULL); return GARROW_CUDA_HOST_BUFFER(buffer); } @@ -873,12 +906,10 @@ garrow_cuda_host_buffer_get_raw(GArrowCUDAHostBuffer *buffer) } GArrowCUDABufferInputStream * -garrow_cuda_buffer_input_stream_new_raw( - std::shared_ptr *arrow_reader) +garrow_cuda_buffer_input_stream_new_raw(std::shared_ptr *arrow_reader) { auto input_stream = g_object_new(GARROW_CUDA_TYPE_BUFFER_INPUT_STREAM, - "input-stream", - arrow_reader, + "input-stream", arrow_reader, NULL); return GARROW_CUDA_BUFFER_INPUT_STREAM(input_stream); } @@ -889,17 +920,16 @@ garrow_cuda_buffer_input_stream_get_raw(GArrowCUDABufferInputStream *input_strea if (!input_stream) return nullptr; - auto arrow_reader = garrow_input_stream_get_raw(GARROW_INPUT_STREAM(input_stream)); + auto arrow_reader = + garrow_input_stream_get_raw(GARROW_INPUT_STREAM(input_stream)); return std::static_pointer_cast(arrow_reader); } GArrowCUDABufferOutputStream * -garrow_cuda_buffer_output_stream_new_raw( - std::shared_ptr *arrow_writer) +garrow_cuda_buffer_output_stream_new_raw(std::shared_ptr *arrow_writer) { auto output_stream = g_object_new(GARROW_CUDA_TYPE_BUFFER_OUTPUT_STREAM, - "output-stream", - arrow_writer, + "output-stream", arrow_writer, NULL); return GARROW_CUDA_BUFFER_OUTPUT_STREAM(output_stream); } @@ -910,6 +940,7 @@ garrow_cuda_buffer_output_stream_get_raw(GArrowCUDABufferOutputStream *output_st if (!output_stream) return nullptr; - auto arrow_writer = garrow_output_stream_get_raw(GARROW_OUTPUT_STREAM(output_stream)); + auto arrow_writer = + garrow_output_stream_get_raw(GARROW_OUTPUT_STREAM(output_stream)); return std::static_pointer_cast(arrow_writer); } diff --git a/c_glib/arrow-cuda-glib/cuda.h b/c_glib/arrow-cuda-glib/cuda.h index f04a3381259..3c98daeaf75 100644 --- a/c_glib/arrow-cuda-glib/cuda.h +++ b/c_glib/arrow-cuda-glib/cuda.h @@ -21,12 +21,9 @@ #include -#include - G_BEGIN_DECLS #define GARROW_CUDA_TYPE_DEVICE_MANAGER (garrow_cuda_device_manager_get_type()) -GARROW_CUDA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GArrowCUDADeviceManager, garrow_cuda_device_manager, GARROW_CUDA, @@ -38,25 +35,28 @@ struct _GArrowCUDADeviceManagerClass }; #define GARROW_CUDA_TYPE_CONTEXT (garrow_cuda_context_get_type()) -GARROW_CUDA_AVAILABLE_IN_0_12 -G_DECLARE_DERIVABLE_TYPE( - GArrowCUDAContext, garrow_cuda_context, GARROW_CUDA, CONTEXT, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowCUDAContext, + garrow_cuda_context, + GARROW_CUDA, + CONTEXT, + GObject) struct _GArrowCUDAContextClass { GObjectClass parent_class; }; #define GARROW_CUDA_TYPE_BUFFER (garrow_cuda_buffer_get_type()) -GARROW_CUDA_AVAILABLE_IN_0_12 -G_DECLARE_DERIVABLE_TYPE( - GArrowCUDABuffer, garrow_cuda_buffer, GARROW_CUDA, BUFFER, GArrowBuffer) +G_DECLARE_DERIVABLE_TYPE(GArrowCUDABuffer, + garrow_cuda_buffer, + GARROW_CUDA, + BUFFER, + GArrowBuffer) struct _GArrowCUDABufferClass { GArrowBufferClass parent_class; }; #define GARROW_CUDA_TYPE_HOST_BUFFER (garrow_cuda_host_buffer_get_type()) -GARROW_CUDA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GArrowCUDAHostBuffer, garrow_cuda_host_buffer, GARROW_CUDA, @@ -67,8 +67,8 @@ struct _GArrowCUDAHostBufferClass GArrowMutableBufferClass parent_class; }; -#define GARROW_CUDA_TYPE_IPC_MEMORY_HANDLE (garrow_cuda_ipc_memory_handle_get_type()) -GARROW_CUDA_AVAILABLE_IN_0_12 +#define GARROW_CUDA_TYPE_IPC_MEMORY_HANDLE \ + (garrow_cuda_ipc_memory_handle_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowCUDAIPCMemoryHandle, garrow_cuda_ipc_memory_handle, GARROW_CUDA, @@ -79,8 +79,8 @@ struct _GArrowCUDAIPCMemoryHandleClass GObjectClass parent_class; }; -#define GARROW_CUDA_TYPE_BUFFER_INPUT_STREAM (garrow_cuda_buffer_input_stream_get_type()) -GARROW_CUDA_AVAILABLE_IN_0_12 +#define GARROW_CUDA_TYPE_BUFFER_INPUT_STREAM \ + (garrow_cuda_buffer_input_stream_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowCUDABufferInputStream, garrow_cuda_buffer_input_stream, GARROW_CUDA, @@ -91,9 +91,8 @@ struct _GArrowCUDABufferInputStreamClass GArrowBufferInputStreamClass parent_class; }; -#define GARROW_CUDA_TYPE_BUFFER_OUTPUT_STREAM \ +#define GARROW_CUDA_TYPE_BUFFER_OUTPUT_STREAM \ (garrow_cuda_buffer_output_stream_get_type()) -GARROW_CUDA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GArrowCUDABufferOutputStream, garrow_cuda_buffer_output_stream, GARROW_CUDA, @@ -104,100 +103,80 @@ struct _GArrowCUDABufferOutputStreamClass GArrowOutputStreamClass parent_class; }; -GARROW_CUDA_AVAILABLE_IN_0_12 GArrowCUDADeviceManager * garrow_cuda_device_manager_new(GError **error); -GARROW_CUDA_AVAILABLE_IN_0_12 GArrowCUDAContext * garrow_cuda_device_manager_get_context(GArrowCUDADeviceManager *manager, gint gpu_number, GError **error); - -GARROW_CUDA_AVAILABLE_IN_0_12 gsize garrow_cuda_device_manager_get_n_devices(GArrowCUDADeviceManager *manager); -GARROW_CUDA_AVAILABLE_IN_0_12 gint64 garrow_cuda_context_get_allocated_size(GArrowCUDAContext *context); -GARROW_CUDA_AVAILABLE_IN_0_12 -GArrowCUDABuffer * -garrow_cuda_buffer_new(GArrowCUDAContext *context, gint64 size, GError **error); -GARROW_CUDA_AVAILABLE_IN_0_12 +GArrowCUDABuffer * +garrow_cuda_buffer_new(GArrowCUDAContext *context, + gint64 size, + GError **error); GArrowCUDABuffer * garrow_cuda_buffer_new_ipc(GArrowCUDAContext *context, GArrowCUDAIPCMemoryHandle *handle, GError **error); - -GARROW_CUDA_AVAILABLE_IN_0_12 GArrowCUDABuffer * garrow_cuda_buffer_new_record_batch(GArrowCUDAContext *context, GArrowRecordBatch *record_batch, GError **error); - -GARROW_CUDA_AVAILABLE_IN_0_12 GBytes * garrow_cuda_buffer_copy_to_host(GArrowCUDABuffer *buffer, gint64 position, gint64 size, GError **error); - -GARROW_CUDA_AVAILABLE_IN_0_12 gboolean garrow_cuda_buffer_copy_from_host(GArrowCUDABuffer *buffer, const guint8 *data, gint64 size, GError **error); - -GARROW_CUDA_AVAILABLE_IN_0_12 GArrowCUDAIPCMemoryHandle * -garrow_cuda_buffer_export(GArrowCUDABuffer *buffer, GError **error); - -GARROW_CUDA_AVAILABLE_IN_0_12 +garrow_cuda_buffer_export(GArrowCUDABuffer *buffer, + GError **error); GArrowCUDAContext * garrow_cuda_buffer_get_context(GArrowCUDABuffer *buffer); - -GARROW_CUDA_AVAILABLE_IN_0_12 GArrowRecordBatch * garrow_cuda_buffer_read_record_batch(GArrowCUDABuffer *buffer, GArrowSchema *schema, GArrowReadOptions *options, GError **error); -GARROW_CUDA_AVAILABLE_IN_0_12 + GArrowCUDAHostBuffer * -garrow_cuda_host_buffer_new(gint gpu_number, gint64 size, GError **error); +garrow_cuda_host_buffer_new(gint gpu_number, + gint64 size, + GError **error); -GARROW_CUDA_AVAILABLE_IN_0_12 GArrowCUDAIPCMemoryHandle * -garrow_cuda_ipc_memory_handle_new(const guint8 *data, gsize size, GError **error); +garrow_cuda_ipc_memory_handle_new(const guint8 *data, + gsize size, + GError **error); -GARROW_CUDA_AVAILABLE_IN_0_12 GArrowBuffer * garrow_cuda_ipc_memory_handle_serialize(GArrowCUDAIPCMemoryHandle *handle, GError **error); -GARROW_CUDA_AVAILABLE_IN_0_12 GArrowCUDABufferInputStream * garrow_cuda_buffer_input_stream_new(GArrowCUDABuffer *buffer); -GARROW_CUDA_AVAILABLE_IN_0_12 GArrowCUDABufferOutputStream * garrow_cuda_buffer_output_stream_new(GArrowCUDABuffer *buffer); -GARROW_CUDA_AVAILABLE_IN_0_12 gboolean garrow_cuda_buffer_output_stream_set_buffer_size(GArrowCUDABufferOutputStream *stream, gint64 size, GError **error); -GARROW_CUDA_AVAILABLE_IN_0_12 gint64 garrow_cuda_buffer_output_stream_get_buffer_size(GArrowCUDABufferOutputStream *stream); - -GARROW_CUDA_AVAILABLE_IN_0_12 gint64 garrow_cuda_buffer_output_stream_get_buffered_size(GArrowCUDABufferOutputStream *stream); diff --git a/c_glib/arrow-cuda-glib/cuda.hpp b/c_glib/arrow-cuda-glib/cuda.hpp index fc0bc4f0bcb..0f8985a9de4 100644 --- a/c_glib/arrow-cuda-glib/cuda.hpp +++ b/c_glib/arrow-cuda-glib/cuda.hpp @@ -29,8 +29,7 @@ std::shared_ptr garrow_cuda_context_get_raw(GArrowCUDAContext *context); GArrowCUDAIPCMemoryHandle * -garrow_cuda_ipc_memory_handle_new_raw( - std::shared_ptr *arrow_handle); +garrow_cuda_ipc_memory_handle_new_raw(std::shared_ptr *arrow_handle); std::shared_ptr garrow_cuda_ipc_memory_handle_get_raw(GArrowCUDAIPCMemoryHandle *handle); @@ -40,19 +39,16 @@ std::shared_ptr garrow_cuda_buffer_get_raw(GArrowCUDABuffer *buffer); GArrowCUDAHostBuffer * -garrow_cuda_host_buffer_new_raw( - std::shared_ptr *arrow_buffer); +garrow_cuda_host_buffer_new_raw(std::shared_ptr *arrow_buffer); std::shared_ptr garrow_cuda_host_buffer_get_raw(GArrowCUDAHostBuffer *buffer); GArrowCUDABufferInputStream * -garrow_cuda_buffer_input_stream_new_raw( - std::shared_ptr *arrow_reader); +garrow_cuda_buffer_input_stream_new_raw(std::shared_ptr *arrow_reader); std::shared_ptr garrow_cuda_buffer_input_stream_get_raw(GArrowCUDABufferInputStream *input_stream); GArrowCUDABufferOutputStream * -garrow_cuda_buffer_output_stream_new_raw( - std::shared_ptr *arrow_writer); +garrow_cuda_buffer_output_stream_new_raw(std::shared_ptr *arrow_writer); std::shared_ptr garrow_cuda_buffer_output_stream_get_raw(GArrowCUDABufferOutputStream *output_stream); diff --git a/c_glib/arrow-cuda-glib/meson.build b/c_glib/arrow-cuda-glib/meson.build index 36730dec6c4..1718e2fc990 100644 --- a/c_glib/arrow-cuda-glib/meson.build +++ b/c_glib/arrow-cuda-glib/meson.build @@ -31,17 +31,10 @@ cpp_headers = files( 'cuda.hpp', ) -version_h = configure_file( - input: 'version.h.in', - output: 'version.h', - command: [python3, generate_version_header_py, '--library', 'GARROW_CUDA', '--version', version, '--input', '@INPUT@', '--output', '@OUTPUT@'], -) - -c_headers += version_h - headers = c_headers + cpp_headers install_headers(headers, subdir: 'arrow-cuda-glib') + dependencies = [ arrow_cuda, arrow_glib, @@ -52,21 +45,19 @@ libarrow_cuda_glib = library('arrow-cuda-glib', dependencies: dependencies, implicit_include_directories: false, include_directories: base_include_directories, - cpp_args: ['-DGARROW_CUDA_COMPILATION'], soversion: so_version, version: library_version) arrow_cuda_glib = declare_dependency(link_with: libarrow_cuda_glib, include_directories: base_include_directories, dependencies: dependencies) -if target_machine.system() != 'windows' - pkgconfig.generate(libarrow_cuda_glib, - description: 'C API for Apache Arrow CUDA based on GLib', - filebase: 'arrow-cuda-glib', - name: 'Apache Arrow CUDA GLib', - requires: ['arrow-glib', 'arrow-cuda'], - variables: pkgconfig_variables, - version: version) -endif + +pkgconfig.generate(libarrow_cuda_glib, + description: 'C API for Apache Arrow CUDA based on GLib', + filebase: 'arrow-cuda-glib', + name: 'Apache Arrow CUDA GLib', + requires: ['arrow-glib', 'arrow-cuda'], + variables: pkgconfig_variables, + version: version) if have_gi gir_dependencies = [ @@ -81,13 +72,15 @@ if have_gi dependencies: gir_dependencies, export_packages: 'arrow-cuda-glib', extra_args: gir_extra_args, + fatal_warnings: gi_fatal_warnings, header: 'arrow-cuda-glib/arrow-cuda-glib.h', identifier_prefix: 'GArrowCUDA', includes: [ 'Arrow-1.0', ], - kwargs: generate_gi_common_args, + install: true, namespace: 'ArrowCUDA', + nsversion: api_version, sources: sources + c_headers, symbol_prefix: 'garrow_cuda') diff --git a/c_glib/arrow-cuda-glib/version.h.in b/c_glib/arrow-cuda-glib/version.h.in deleted file mode 100644 index 0ab5bfd562b..00000000000 --- a/c_glib/arrow-cuda-glib/version.h.in +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#pragma once - -#include - -/** - * SECTION: version - * @section_id: version-macros - * @title: Version related macros - * @include: arrow-cuda-glib/arrow-cuda-glib.h - * - * Apache Arrow CUDA GLib provides macros that can be used by C pre-processor. - * They are useful to check version related things at compile time. - */ - -/** - * GARROW_CUDA_VERSION_MAJOR: - * - * The major version. - * - * Since: 17.0.0 - */ -#define GARROW_CUDA_VERSION_MAJOR (@VERSION_MAJOR@) - -/** - * GARROW_CUDA_VERSION_MINOR: - * - * The minor version. - * - * Since: 17.0.0 - */ -#define GARROW_CUDA_VERSION_MINOR (@VERSION_MINOR@) - -/** - * GARROW_CUDA_VERSION_MICRO: - * - * The micro version. - * - * Since: 17.0.0 - */ -#define GARROW_CUDA_VERSION_MICRO (@VERSION_MICRO@) - -/** - * GARROW_CUDA_VERSION_TAG: - * - * The version tag. Normally, it's an empty string. It's "SNAPSHOT" - * for snapshot version. - * - * Since: 17.0.0 - */ -#define GARROW_CUDA_VERSION_TAG "@VERSION_TAG@" - -/** - * GARROW_CUDA_VERSION_CHECK: - * @major: A major version to check for. - * @minor: A minor version to check for. - * @micro: A micro version to check for. - * - * You can use this macro in C pre-processor. - * - * Returns: %TRUE if the compile time Apache Arrow GLib version is the - * same as or newer than the passed version, %FALSE otherwise. - * - * Since: 17.0.0 - */ -#define GARROW_CUDA_VERSION_CHECK(major, minor, micro) \ - (GARROW_CUDA_VERSION_MAJOR > (major) || \ - (GARROW_CUDA_VERSION_MAJOR == (major) && \ - GARROW_CUDA_VERSION_MINOR > (minor)) || \ - (GARROW_CUDA_VERSION_MAJOR == (major) && \ - GARROW_CUDA_VERSION_MINOR == (minor) && \ - GARROW_CUDA_VERSION_MICRO >= (micro))) - -/** - * GARROW_CUDA_DISABLE_DEPRECATION_WARNINGS: - * - * If this macro is defined, no deprecated warnings are produced. - * - * You must define this macro before including the - * arrow-glib/arrow-glib.h header. - * - * Since: 17.0.0 - */ - -#ifdef GARROW_CUDA_DISABLE_DEPRECATION_WARNINGS -# define GARROW_CUDA_DEPRECATED -# define GARROW_CUDA_DEPRECATED_FOR(function) -# define GARROW_CUDA_UNAVAILABLE(major, minor) -#else -# define GARROW_CUDA_DEPRECATED G_DEPRECATED -# define GARROW_CUDA_DEPRECATED_FOR(function) G_DEPRECATED_FOR(function) -# define GARROW_CUDA_UNAVAILABLE(major, minor) G_UNAVAILABLE(major, minor) -#endif - -@ENCODED_VERSIONS@ - -/** - * GARROW_CUDA_VERSION_MIN_REQUIRED: - * - * You can use this macro for compile time API version check. - * - * This macro value must be one of the predefined version macros such - * as %GARROW_CUDA_VERSION_0_10. - * - * If you use any functions that is defined by newer version than - * %GARROW_CUDA_VERSION_MIN_REQUIRED, deprecated warnings are produced at - * compile time. - * - * You must define this macro before including the - * arrow-cuda-glib/arrow-cuda-glib.h header. - * - * Since: 17.0.0 - */ -#ifndef GARROW_CUDA_VERSION_MIN_REQUIRED -# define GARROW_CUDA_VERSION_MIN_REQUIRED GARROW_VERSION_MIN_REQUIRED -#endif - -/** - * GARROW_CUDA_VERSION_MAX_ALLOWED: - * - * You can use this macro for compile time API version check. - * - * This macro value must be one of the predefined version macros such - * as %GARROW_CUDA_VERSION_0_10. - * - * If you use any functions that is defined by newer version than - * %GARROW_CUDA_VERSION_MAX_ALLOWED, deprecated warnings are produced at - * compile time. - * - * You must define this macro before including the - * arrow-cuda-glib/arrow-cuda-glib.h header. - * - * Since: 17.0.0 - */ -#ifndef GARROW_CUDA_VERSION_MAX_ALLOWED -# define GARROW_CUDA_VERSION_MAX_ALLOWED GARROW_VERSION_MAX_ALLOWED -#endif - -@VISIBILITY_MACROS@ - -@AVAILABILITY_MACROS@ diff --git a/c_glib/arrow-dataset-glib/arrow-dataset-glib.h b/c_glib/arrow-dataset-glib/arrow-dataset-glib.h index 7ebf36ddd2b..58f4e216cc7 100644 --- a/c_glib/arrow-dataset-glib/arrow-dataset-glib.h +++ b/c_glib/arrow-dataset-glib/arrow-dataset-glib.h @@ -21,8 +21,6 @@ #include -#include - #include #include #include diff --git a/c_glib/arrow-dataset-glib/dataset-definition.h b/c_glib/arrow-dataset-glib/dataset-definition.h index bc52d6d3663..d0e71b7fbdd 100644 --- a/c_glib/arrow-dataset-glib/dataset-definition.h +++ b/c_glib/arrow-dataset-glib/dataset-definition.h @@ -21,13 +21,14 @@ #include -#include - G_BEGIN_DECLS #define GADATASET_TYPE_DATASET (gadataset_dataset_get_type()) -GADATASET_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE(GADatasetDataset, gadataset_dataset, GADATASET, DATASET, GObject) +G_DECLARE_DERIVABLE_TYPE(GADatasetDataset, + gadataset_dataset, + GADATASET, + DATASET, + GObject) struct _GADatasetDatasetClass { GObjectClass parent_class; diff --git a/c_glib/arrow-dataset-glib/dataset-factory.cpp b/c_glib/arrow-dataset-glib/dataset-factory.cpp index cc664176b64..97cab555420 100644 --- a/c_glib/arrow-dataset-glib/dataset-factory.cpp +++ b/c_glib/arrow-dataset-glib/dataset-factory.cpp @@ -44,8 +44,7 @@ G_BEGIN_DECLS * Since: 5.0.0 */ -struct GADatasetFinishOptionsPrivate -{ +struct GADatasetFinishOptionsPrivate { arrow::dataset::FinishOptions options; GArrowSchema *schema; }; @@ -61,9 +60,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GADatasetFinishOptions, gadataset_finish_options, G_TYPE_OBJECT) -#define GADATASET_FINISH_OPTIONS_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_finish_options_get_instance_private(GADATASET_FINISH_OPTIONS(obj))) +#define GADATASET_FINISH_OPTIONS_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_finish_options_get_instance_private( \ + GADATASET_FINISH_OPTIONS(obj))) static void gadataset_finish_options_finalize(GObject *object) @@ -161,7 +161,7 @@ static void gadataset_finish_options_init(GADatasetFinishOptions *object) { auto priv = GADATASET_FINISH_OPTIONS_GET_PRIVATE(object); - new (&priv->options) arrow::dataset::FinishOptions; + new(&priv->options) arrow::dataset::FinishOptions; } static void @@ -174,11 +174,11 @@ gadataset_finish_options_class_init(GADatasetFinishOptionsClass *klass) gobject_class->get_property = gadataset_finish_options_get_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "finish-options", - "Finish options", - "The raw arrow::dataset::FinishOptions *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("finish-options", + "Finish options", + "The raw arrow::dataset::FinishOptions *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FINISH_OPTIONS, spec); /** @@ -240,8 +240,8 @@ gadataset_finish_options_new(void) return gadataset_finish_options_new_raw(nullptr); } -typedef struct GADatasetDatasetFactoryPrivate_ -{ + +typedef struct GADatasetDatasetFactoryPrivate_ { std::shared_ptr factory; } GADatasetDatasetFactoryPrivate; @@ -253,9 +253,10 @@ G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GADatasetDatasetFactory, gadataset_dataset_factory, G_TYPE_OBJECT) -#define GADATASET_DATASET_FACTORY_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_dataset_factory_get_instance_private(GADATASET_DATASET_FACTORY(obj))) +#define GADATASET_DATASET_FACTORY_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_dataset_factory_get_instance_private( \ + GADATASET_DATASET_FACTORY(obj))) static void gadataset_dataset_factory_finalize(GObject *object) @@ -294,23 +295,23 @@ static void gadataset_dataset_factory_init(GADatasetDatasetFactory *object) { auto priv = GADATASET_DATASET_FACTORY_GET_PRIVATE(object); - new (&priv->factory) std::shared_ptr; + new(&priv->factory) std::shared_ptr; } static void gadataset_dataset_factory_class_init(GADatasetDatasetFactoryClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = gadataset_dataset_factory_finalize; + gobject_class->finalize = gadataset_dataset_factory_finalize; gobject_class->set_property = gadataset_dataset_factory_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "dataset-factory", - "Dataset factory", - "The raw " - "std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("dataset-factory", + "Dataset factory", + "The raw " + "std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_DATASET_FACTORY, spec); } @@ -344,8 +345,8 @@ gadataset_dataset_factory_finish(GADatasetDatasetFactory *factory, } } -typedef struct GADatasetFileSystemDatasetFactoryPrivate_ -{ + +typedef struct GADatasetFileSystemDatasetFactoryPrivate_ { GADatasetFileFormat *format; GArrowFileSystem *file_system; GADatasetPartitioning *partitioning; @@ -364,9 +365,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GADatasetFileSystemDatasetFactory, gadataset_file_system_dataset_factory, GADATASET_TYPE_DATASET_FACTORY) -#define GADATASET_FILE_SYSTEM_DATASET_FACTORY_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_file_system_dataset_factory_get_instance_private( \ +#define GADATASET_FILE_SYSTEM_DATASET_FACTORY_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_file_system_dataset_factory_get_instance_private( \ GADATASET_FILE_SYSTEM_DATASET_FACTORY(obj))) static void @@ -394,7 +395,8 @@ gadataset_file_system_dataset_factory_dispose(GObject *object) priv->files = NULL; } - G_OBJECT_CLASS(gadataset_file_system_dataset_factory_parent_class)->dispose(object); + G_OBJECT_CLASS( + gadataset_file_system_dataset_factory_parent_class)->dispose(object); } static void @@ -402,7 +404,8 @@ gadataset_file_system_dataset_factory_finalize(GObject *object) { auto priv = GADATASET_FILE_SYSTEM_DATASET_FACTORY_GET_PRIVATE(object); priv->options.~FileSystemFactoryOptions(); - G_OBJECT_CLASS(gadataset_file_system_dataset_factory_parent_class)->finalize(object); + G_OBJECT_CLASS( + gadataset_file_system_dataset_factory_parent_class)->finalize(object); } static void @@ -427,7 +430,8 @@ gadataset_file_system_dataset_factory_set_property(GObject *object, if (partitioning) { g_object_ref(partitioning); priv->partitioning = GADATASET_PARTITIONING(partitioning); - priv->options.partitioning = gadataset_partitioning_get_raw(priv->partitioning); + priv->options.partitioning = + gadataset_partitioning_get_raw(priv->partitioning); } else { priv->options.partitioning = arrow::dataset::Partitioning::Default(); } @@ -473,10 +477,11 @@ gadataset_file_system_dataset_factory_get_property(GObject *object, } static void -gadataset_file_system_dataset_factory_init(GADatasetFileSystemDatasetFactory *object) +gadataset_file_system_dataset_factory_init( + GADatasetFileSystemDatasetFactory *object) { auto priv = GADATASET_FILE_SYSTEM_DATASET_FACTORY_GET_PRIVATE(object); - new (&priv->options) arrow::dataset::FileSystemFactoryOptions; + new(&priv->options) arrow::dataset::FileSystemFactoryOptions; } static void @@ -484,8 +489,8 @@ gadataset_file_system_dataset_factory_class_init( GADatasetFileSystemDatasetFactoryClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = gadataset_file_system_dataset_factory_dispose; - gobject_class->finalize = gadataset_file_system_dataset_factory_finalize; + gobject_class->dispose = gadataset_file_system_dataset_factory_dispose; + gobject_class->finalize = gadataset_file_system_dataset_factory_finalize; gobject_class->set_property = gadataset_file_system_dataset_factory_set_property; gobject_class->get_property = gadataset_file_system_dataset_factory_get_property; @@ -497,12 +502,12 @@ gadataset_file_system_dataset_factory_class_init( * * Since: 5.0.0 */ - spec = g_param_spec_object( - "format", - "Format", - "Format passed to GADatasetFileSystemDataset", - GADATASET_TYPE_FILE_FORMAT, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("format", + "Format", + "Format passed to GADatasetFileSystemDataset", + GADATASET_TYPE_FILE_FORMAT, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FORMAT, spec); /** @@ -563,7 +568,9 @@ GADatasetFileSystemDatasetFactory * gadataset_file_system_dataset_factory_new(GADatasetFileFormat *format) { return GADATASET_FILE_SYSTEM_DATASET_FACTORY( - g_object_new(GADATASET_TYPE_FILE_SYSTEM_DATASET_FACTORY, "format", format, NULL)); + g_object_new(GADATASET_TYPE_FILE_SYSTEM_DATASET_FACTORY, + "format", format, + NULL)); } /** @@ -585,7 +592,9 @@ gadataset_file_system_dataset_factory_set_file_system( const gchar *context = "[file-system-dataset-factory][set-file-system]"; auto priv = GADATASET_FILE_SYSTEM_DATASET_FACTORY_GET_PRIVATE(factory); if (priv->file_system) { - garrow::check(error, arrow::Status::Invalid("file system is already set"), context); + garrow::check(error, + arrow::Status::Invalid("file system is already set"), + context); return FALSE; } priv->file_system = file_system; @@ -605,16 +614,21 @@ gadataset_file_system_dataset_factory_set_file_system( */ gboolean gadataset_file_system_dataset_factory_set_file_system_uri( - GADatasetFileSystemDatasetFactory *factory, const gchar *uri, GError **error) + GADatasetFileSystemDatasetFactory *factory, + const gchar *uri, + GError **error) { const gchar *context = "[file-system-dataset-factory][set-file-system-uri]"; auto priv = GADATASET_FILE_SYSTEM_DATASET_FACTORY_GET_PRIVATE(factory); if (priv->file_system) { - garrow::check(error, arrow::Status::Invalid("file system is already set"), context); + garrow::check(error, + arrow::Status::Invalid("file system is already set"), + context); return FALSE; } std::string internal_path; - auto arrow_file_system_result = arrow::fs::FileSystemFromUri(uri, &internal_path); + auto arrow_file_system_result = + arrow::fs::FileSystemFromUri(uri, &internal_path); if (!garrow::check(error, arrow_file_system_result, context)) { return FALSE; } @@ -640,14 +654,17 @@ gadataset_file_system_dataset_factory_set_file_system_uri( * Since: 5.0.0 */ gboolean -gadataset_file_system_dataset_factory_add_path(GADatasetFileSystemDatasetFactory *factory, - const gchar *path, - GError **error) +gadataset_file_system_dataset_factory_add_path( + GADatasetFileSystemDatasetFactory *factory, + const gchar *path, + GError **error) { const gchar *context = "[file-system-dataset-factory][add-path]"; auto priv = GADATASET_FILE_SYSTEM_DATASET_FACTORY_GET_PRIVATE(factory); if (!priv->file_system) { - garrow::check(error, arrow::Status::Invalid("file system isn't set"), context); + garrow::check(error, + arrow::Status::Invalid("file system isn't set"), + context); return FALSE; } auto arrow_file_system = garrow_file_system_get_raw(priv->file_system); @@ -672,20 +689,25 @@ gadataset_file_system_dataset_factory_add_path(GADatasetFileSystemDatasetFactory * Since: 5.0.0 */ GADatasetFileSystemDataset * -gadataset_file_system_dataset_factory_finish(GADatasetFileSystemDatasetFactory *factory, - GADatasetFinishOptions *options, - GError **error) +gadataset_file_system_dataset_factory_finish( + GADatasetFileSystemDatasetFactory *factory, + GADatasetFinishOptions *options, + GError **error) { const gchar *context = "[file-system-dataset-factory][finish]"; auto priv = GADATASET_FILE_SYSTEM_DATASET_FACTORY_GET_PRIVATE(factory); if (!priv->file_system) { - garrow::check(error, arrow::Status::Invalid("file system isn't set"), context); + garrow::check(error, + arrow::Status::Invalid("file system isn't set"), + context); return NULL; } auto arrow_file_system = garrow_file_system_get_raw(priv->file_system); auto arrow_format = gadataset_file_format_get_raw(priv->format); - arrow::Result> arrow_factory_result; - if (priv->files && !priv->files->next && + arrow::Result> + arrow_factory_result; + if (priv->files && + !priv->files->next && garrow_file_info_is_dir(GARROW_FILE_INFO(priv->files->data))) { auto file = GARROW_FILE_INFO(priv->files->data); arrow::fs::FileSelector arrow_selector; @@ -722,25 +744,24 @@ gadataset_file_system_dataset_factory_finish(GADatasetFileSystemDatasetFactory * return NULL; } auto arrow_dataset = *arrow_dataset_result; - return GADATASET_FILE_SYSTEM_DATASET(gadataset_dataset_new_raw(&arrow_dataset, - "dataset", - &arrow_dataset, - "file-system", - priv->file_system, - "format", - priv->format, - "partitioning", - priv->partitioning, - NULL)); + return GADATASET_FILE_SYSTEM_DATASET( + gadataset_dataset_new_raw(&arrow_dataset, + "dataset", &arrow_dataset, + "file-system", priv->file_system, + "format", priv->format, + "partitioning", priv->partitioning, + NULL)); } + G_END_DECLS GADatasetFinishOptions * gadataset_finish_options_new_raw(arrow::dataset::FinishOptions *options) { - return GADATASET_FINISH_OPTIONS( - g_object_new(GADATASET_TYPE_FINISH_OPTIONS, "finish-options", options, NULL)); + return GADATASET_FINISH_OPTIONS(g_object_new(GADATASET_TYPE_FINISH_OPTIONS, + "finish-options", options, + NULL)); } arrow::dataset::FinishOptions * diff --git a/c_glib/arrow-dataset-glib/dataset-factory.h b/c_glib/arrow-dataset-glib/dataset-factory.h index e7d3bc27aea..292a9ca70dd 100644 --- a/c_glib/arrow-dataset-glib/dataset-factory.h +++ b/c_glib/arrow-dataset-glib/dataset-factory.h @@ -24,36 +24,40 @@ G_BEGIN_DECLS #define GADATASET_TYPE_FINISH_OPTIONS (gadataset_finish_options_get_type()) -GADATASET_AVAILABLE_IN_11_0 -G_DECLARE_DERIVABLE_TYPE( - GADatasetFinishOptions, gadataset_finish_options, GADATASET, FINISH_OPTIONS, GObject) +G_DECLARE_DERIVABLE_TYPE(GADatasetFinishOptions, + gadataset_finish_options, + GADATASET, + FINISH_OPTIONS, + GObject) struct _GADatasetFinishOptionsClass { GObjectClass parent_class; }; -GADATASET_AVAILABLE_IN_11_0 +GARROW_AVAILABLE_IN_11_0 GADatasetFinishOptions * gadataset_finish_options_new(void); #define GADATASET_TYPE_DATASET_FACTORY (gadataset_dataset_factory_get_type()) -GADATASET_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GADatasetDatasetFactory, gadataset_dataset_factory, GADATASET, DATASET_FACTORY, GObject) +G_DECLARE_DERIVABLE_TYPE(GADatasetDatasetFactory, + gadataset_dataset_factory, + GADATASET, + DATASET_FACTORY, + GObject) struct _GADatasetDatasetFactoryClass { GObjectClass parent_class; }; -GADATASET_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GADatasetDataset * gadataset_dataset_factory_finish(GADatasetDatasetFactory *factory, GADatasetFinishOptions *options, GError **error); -#define GADATASET_TYPE_FILE_SYSTEM_DATASET_FACTORY \ + +#define GADATASET_TYPE_FILE_SYSTEM_DATASET_FACTORY \ (gadataset_file_system_dataset_factory_get_type()) -GADATASET_AVAILABLE_IN_5_0 G_DECLARE_DERIVABLE_TYPE(GADatasetFileSystemDatasetFactory, gadataset_file_system_dataset_factory, GADATASET, @@ -64,44 +68,48 @@ struct _GADatasetFileSystemDatasetFactoryClass GADatasetDatasetFactoryClass parent_class; }; -GADATASET_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GADatasetFileSystemDatasetFactory * gadataset_file_system_dataset_factory_new(GADatasetFileFormat *file_format); -GADATASET_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gboolean gadataset_file_system_dataset_factory_set_file_system( GADatasetFileSystemDatasetFactory *factory, GArrowFileSystem *file_system, GError **error); -GADATASET_AVAILABLE_IN_5_0 gboolean gadataset_file_system_dataset_factory_set_file_system_uri( - GADatasetFileSystemDatasetFactory *factory, const gchar *uri, GError **error); + GADatasetFileSystemDatasetFactory *factory, + const gchar *uri, + GError **error); -GADATASET_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gboolean -gadataset_file_system_dataset_factory_add_path(GADatasetFileSystemDatasetFactory *factory, - const gchar *path, - GError **error); +gadataset_file_system_dataset_factory_add_path( + GADatasetFileSystemDatasetFactory *factory, + const gchar *path, + GError **error); /* -GADATASET_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gboolean gadataset_file_system_dataset_factory_add_file( GADatasetFileSystemDatasetFactory *factory, GArrowFileInfo *file, GError **error); -GADATASET_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gboolean gadataset_file_system_dataset_factory_add_selector( GADatasetFileSystemDatasetFactory *factory, - GArrowFileSelector *selector, + GArrorFileSelector *selector, GError **error); */ -GADATASET_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GADatasetFileSystemDataset * -gadataset_file_system_dataset_factory_finish(GADatasetFileSystemDatasetFactory *factory, - GADatasetFinishOptions *options, - GError **error); +gadataset_file_system_dataset_factory_finish( + GADatasetFileSystemDatasetFactory *factory, + GADatasetFinishOptions *options, + GError **error); + G_END_DECLS diff --git a/c_glib/arrow-dataset-glib/dataset.cpp b/c_glib/arrow-dataset-glib/dataset.cpp index f84e4e3db38..8613bedad42 100644 --- a/c_glib/arrow-dataset-glib/dataset.cpp +++ b/c_glib/arrow-dataset-glib/dataset.cpp @@ -19,7 +19,6 @@ #include #include -#include #include #include @@ -46,8 +45,7 @@ G_BEGIN_DECLS * Since: 5.0.0 */ -typedef struct GADatasetDatasetPrivate_ -{ +typedef struct GADatasetDatasetPrivate_ { std::shared_ptr dataset; } GADatasetDatasetPrivate; @@ -55,11 +53,14 @@ enum { PROP_DATASET = 1, }; -G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GADatasetDataset, gadataset_dataset, G_TYPE_OBJECT) +G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GADatasetDataset, + gadataset_dataset, + G_TYPE_OBJECT) -#define GADATASET_DATASET_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_dataset_get_instance_private(GADATASET_DATASET(obj))) +#define GADATASET_DATASET_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_dataset_get_instance_private( \ + GADATASET_DATASET(obj))) static void gadataset_dataset_finalize(GObject *object) @@ -79,8 +80,9 @@ gadataset_dataset_set_property(GObject *object, switch (prop_id) { case PROP_DATASET: - priv->dataset = *static_cast *>( - g_value_get_pointer(value)); + priv->dataset = + *static_cast *>( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -92,23 +94,23 @@ static void gadataset_dataset_init(GADatasetDataset *object) { auto priv = GADATASET_DATASET_GET_PRIVATE(object); - new (&priv->dataset) std::shared_ptr; + new(&priv->dataset) std::shared_ptr; } static void gadataset_dataset_class_init(GADatasetDatasetClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = gadataset_dataset_finalize; + gobject_class->finalize = gadataset_dataset_finalize; gobject_class->set_property = gadataset_dataset_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "dataset", - "Dataset", - "The raw " - "std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("dataset", + "Dataset", + "The raw " + "std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_DATASET, spec); } @@ -123,7 +125,8 @@ gadataset_dataset_class_init(GADatasetDatasetClass *klass) * Since: 5.0.0 */ GADatasetScannerBuilder * -gadataset_dataset_begin_scan(GADatasetDataset *dataset, GError **error) +gadataset_dataset_begin_scan(GADatasetDataset *dataset, + GError **error) { return gadataset_scanner_builder_new(dataset, error); } @@ -139,60 +142,33 @@ gadataset_dataset_begin_scan(GADatasetDataset *dataset, GError **error) * Since: 5.0.0 */ GArrowTable * -gadataset_dataset_to_table(GADatasetDataset *dataset, GError **error) +gadataset_dataset_to_table(GADatasetDataset *dataset, + GError **error) { auto arrow_dataset = gadataset_dataset_get_raw(dataset); auto arrow_scanner_builder_result = arrow_dataset->NewScan(); - if (!garrow::check(error, arrow_scanner_builder_result, "[dataset][to-table]")) { + if (!garrow::check(error, + arrow_scanner_builder_result, + "[dataset][to-table]")) { return NULL; } auto arrow_scanner_builder = *arrow_scanner_builder_result; auto arrow_scanner_result = arrow_scanner_builder->Finish(); - if (!garrow::check(error, arrow_scanner_result, "[dataset][to-table]")) { + if (!garrow::check(error, + arrow_scanner_result, + "[dataset][to-table]")) { return NULL; } auto arrow_scanner = *arrow_scanner_result; auto arrow_table_result = arrow_scanner->ToTable(); - if (!garrow::check(error, arrow_table_result, "[dataset][to-table]")) { + if (!garrow::check(error, + arrow_scanner_result, + "[dataset][to-table]")) { return NULL; } return garrow_table_new_raw(&(*arrow_table_result)); } -/** - * gadataset_dataset_to_record_batch_reader: - * @dataset: A #GADatasetDataset. - * @error: (nullable): Return location for a #GError or %NULL. - * - * Returns: (transfer full) (nullable): - * A #GArrowRecordBatchReader on success, %NULL on error. - * - * Since: 17.0.0 - */ -GArrowRecordBatchReader * -gadataset_dataset_to_record_batch_reader(GADatasetDataset *dataset, GError **error) -{ - auto arrow_dataset = gadataset_dataset_get_raw(dataset); - auto arrow_scanner_builder_result = arrow_dataset->NewScan(); - if (!garrow::check(error, - arrow_scanner_builder_result, - "[dataset][to-record-batch-reader]")) { - return nullptr; - } - auto arrow_scanner_builder = *arrow_scanner_builder_result; - auto arrow_scanner_result = arrow_scanner_builder->Finish(); - if (!garrow::check(error, arrow_scanner_result, "[dataset][to-record-batch-reader]")) { - return nullptr; - } - auto arrow_scanner = *arrow_scanner_result; - auto arrow_reader_result = arrow_scanner->ToRecordBatchReader(); - if (!garrow::check(error, arrow_reader_result, "[dataset][to-record-batch-reader]")) { - return nullptr; - } - auto sources = g_list_prepend(nullptr, dataset); - return garrow_record_batch_reader_new_raw(&(*arrow_reader_result), sources); -} - /** * gadataset_dataset_get_type_name: * @dataset: A #GADatasetDataset. @@ -211,8 +187,8 @@ gadataset_dataset_get_type_name(GADatasetDataset *dataset) return g_strndup(type_name.data(), type_name.size()); } -typedef struct GADatasetFileSystemDatasetWriteOptionsPrivate_ -{ + +typedef struct GADatasetFileSystemDatasetWriteOptionsPrivate_ { arrow::dataset::FileSystemDatasetWriteOptions options; GADatasetFileWriteOptions *file_write_options; GArrowFileSystem *file_system; @@ -232,9 +208,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GADatasetFileSystemDatasetWriteOptions, gadataset_file_system_dataset_write_options, G_TYPE_OBJECT) -#define GADATASET_FILE_SYSTEM_DATASET_WRITE_OPTIONS_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_file_system_dataset_write_options_get_instance_private( \ +#define GADATASET_FILE_SYSTEM_DATASET_WRITE_OPTIONS_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_file_system_dataset_write_options_get_instance_private( \ GADATASET_FILE_SYSTEM_DATASET_WRITE_OPTIONS(obj))) static void @@ -242,8 +218,8 @@ gadataset_file_system_dataset_write_options_finalize(GObject *object) { auto priv = GADATASET_FILE_SYSTEM_DATASET_WRITE_OPTIONS_GET_PRIVATE(object); priv->options.~FileSystemDatasetWriteOptions(); - G_OBJECT_CLASS(gadataset_file_system_dataset_write_options_parent_class) - ->finalize(object); + G_OBJECT_CLASS(gadataset_file_system_dataset_write_options_parent_class)-> + finalize(object); } static void @@ -266,8 +242,8 @@ gadataset_file_system_dataset_write_options_dispose(GObject *object) priv->partitioning = NULL; } - G_OBJECT_CLASS(gadataset_file_system_dataset_write_options_parent_class) - ->dispose(object); + G_OBJECT_CLASS(gadataset_file_system_dataset_write_options_parent_class)-> + dispose(object); } static void @@ -288,7 +264,8 @@ gadataset_file_system_dataset_write_options_set_property(GObject *object, auto old_file_write_options = priv->file_write_options; if (file_write_options) { g_object_ref(file_write_options); - priv->file_write_options = GADATASET_FILE_WRITE_OPTIONS(file_write_options); + priv->file_write_options = + GADATASET_FILE_WRITE_OPTIONS(file_write_options); priv->options.file_write_options = gadataset_file_write_options_get_raw(priv->file_write_options); } else { @@ -331,7 +308,8 @@ gadataset_file_system_dataset_write_options_set_property(GObject *object, if (partitioning) { g_object_ref(partitioning); priv->partitioning = GADATASET_PARTITIONING(partitioning); - priv->options.partitioning = gadataset_partitioning_get_raw(priv->partitioning); + priv->options.partitioning = + gadataset_partitioning_get_raw(priv->partitioning); } else { priv->options.partitioning = arrow::dataset::Partitioning::Default(); } @@ -390,7 +368,7 @@ gadataset_file_system_dataset_write_options_init( GADatasetFileSystemDatasetWriteOptions *object) { auto priv = GADATASET_FILE_SYSTEM_DATASET_WRITE_OPTIONS_GET_PRIVATE(object); - new (&(priv->options)) arrow::dataset::FileSystemDatasetWriteOptions; + new(&(priv->options)) arrow::dataset::FileSystemDatasetWriteOptions; priv->options.partitioning = arrow::dataset::Partitioning::Default(); } @@ -399,10 +377,14 @@ gadataset_file_system_dataset_write_options_class_init( GADatasetFileSystemDatasetWriteOptionsClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = gadataset_file_system_dataset_write_options_finalize; - gobject_class->dispose = gadataset_file_system_dataset_write_options_dispose; - gobject_class->set_property = gadataset_file_system_dataset_write_options_set_property; - gobject_class->get_property = gadataset_file_system_dataset_write_options_get_property; + gobject_class->finalize = + gadataset_file_system_dataset_write_options_finalize; + gobject_class->dispose = + gadataset_file_system_dataset_write_options_dispose; + gobject_class->set_property = + gadataset_file_system_dataset_write_options_set_property; + gobject_class->get_property = + gadataset_file_system_dataset_write_options_get_property; arrow::dataset::FileSystemDatasetWriteOptions default_options; GParamSpec *spec; @@ -511,11 +493,12 @@ GADatasetFileSystemDatasetWriteOptions * gadataset_file_system_dataset_write_options_new(void) { return GADATASET_FILE_SYSTEM_DATASET_WRITE_OPTIONS( - g_object_new(GADATASET_TYPE_FILE_SYSTEM_DATASET_WRITE_OPTIONS, NULL)); + g_object_new(GADATASET_TYPE_FILE_SYSTEM_DATASET_WRITE_OPTIONS, + NULL)); } -typedef struct GADatasetFileSystemDatasetPrivate_ -{ + +typedef struct GADatasetFileSystemDatasetPrivate_ { GADatasetFileFormat *format; GArrowFileSystem *file_system; GADatasetPartitioning *partitioning; @@ -531,9 +514,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GADatasetFileSystemDataset, gadataset_file_system_dataset, GADATASET_TYPE_DATASET) -#define GADATASET_FILE_SYSTEM_DATASET_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_file_system_dataset_get_instance_private( \ +#define GADATASET_FILE_SYSTEM_DATASET_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_file_system_dataset_get_instance_private( \ GADATASET_FILE_SYSTEM_DATASET(obj))) static void @@ -611,7 +594,7 @@ static void gadataset_file_system_dataset_class_init(GADatasetFileSystemDatasetClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = gadataset_file_system_dataset_dispose; + gobject_class->dispose = gadataset_file_system_dataset_dispose; gobject_class->set_property = gadataset_file_system_dataset_set_property; gobject_class->get_property = gadataset_file_system_dataset_get_property; @@ -623,13 +606,15 @@ gadataset_file_system_dataset_class_init(GADatasetFileSystemDatasetClass *klass) * * Since: 5.0.0 */ - spec = g_param_spec_object( - "format", - "Format", - "Format of the dataset", - GADATASET_TYPE_FILE_FORMAT, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property(gobject_class, PROP_FILE_SYSTEM_DATASET_FORMAT, spec); + spec = g_param_spec_object("format", + "Format", + "Format of the dataset", + GADATASET_TYPE_FILE_FORMAT, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property(gobject_class, + PROP_FILE_SYSTEM_DATASET_FORMAT, + spec); /** * GADatasetFileSystemDataset:file-system: @@ -638,12 +623,12 @@ gadataset_file_system_dataset_class_init(GADatasetFileSystemDatasetClass *klass) * * Since: 5.0.0 */ - spec = g_param_spec_object( - "file-system", - "File system", - "File system of the dataset", - GARROW_TYPE_FILE_SYSTEM, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("file-system", + "File system", + "File system of the dataset", + GARROW_TYPE_FILE_SYSTEM, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FILE_SYSTEM_DATASET_FILE_SYSTEM, spec); @@ -655,12 +640,12 @@ gadataset_file_system_dataset_class_init(GADatasetFileSystemDatasetClass *klass) * * Since: 6.0.0 */ - spec = g_param_spec_object( - "partitioning", - "Partitioning", - "Partitioning of the dataset", - GADATASET_TYPE_PARTITIONING, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("partitioning", + "Partitioning", + "Partitioning of the dataset", + GADATASET_TYPE_PARTITIONING, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FILE_SYSTEM_DATASET_PARTITIONING, spec); @@ -683,42 +668,56 @@ gadataset_file_system_dataset_write_scanner( GError **error) { auto arrow_scanner = gadataset_scanner_get_raw(scanner); - auto arrow_options = gadataset_file_system_dataset_write_options_get_raw(options); - auto status = arrow::dataset::FileSystemDataset::Write(*arrow_options, arrow_scanner); - return garrow::check(error, status, "[file-system-dataset][write-scanner]"); + auto arrow_options = + gadataset_file_system_dataset_write_options_get_raw(options); + auto status = + arrow::dataset::FileSystemDataset::Write(*arrow_options, arrow_scanner); + return garrow::check(error, + status, + "[file-system-dataset][write-scanner]"); } + G_END_DECLS GADatasetDataset * -gadataset_dataset_new_raw(std::shared_ptr *arrow_dataset) +gadataset_dataset_new_raw( + std::shared_ptr *arrow_dataset) { - return gadataset_dataset_new_raw(arrow_dataset, "dataset", arrow_dataset, NULL); + return gadataset_dataset_new_raw(arrow_dataset, + "dataset", arrow_dataset, + NULL); } GADatasetDataset * -gadataset_dataset_new_raw(std::shared_ptr *arrow_dataset, - const gchar *first_property_name, - ...) +gadataset_dataset_new_raw( + std::shared_ptr *arrow_dataset, + const gchar *first_property_name, + ...) { va_list args; va_start(args, first_property_name); - auto array = gadataset_dataset_new_raw_valist(arrow_dataset, first_property_name, args); + auto array = gadataset_dataset_new_raw_valist(arrow_dataset, + first_property_name, + args); va_end(args); return array; } GADatasetDataset * -gadataset_dataset_new_raw_valist(std::shared_ptr *arrow_dataset, - const gchar *first_property_name, - va_list args) +gadataset_dataset_new_raw_valist( + std::shared_ptr *arrow_dataset, + const gchar *first_property_name, + va_list args) { GType type = GADATASET_TYPE_DATASET; const auto type_name = (*arrow_dataset)->type_name(); if (type_name == "filesystem") { type = GADATASET_TYPE_FILE_SYSTEM_DATASET; } - return GADATASET_DATASET(g_object_new_valist(type, first_property_name, args)); + return GADATASET_DATASET(g_object_new_valist(type, + first_property_name, + args)); } std::shared_ptr diff --git a/c_glib/arrow-dataset-glib/dataset.h b/c_glib/arrow-dataset-glib/dataset.h index 5b957f0538a..6c003ca82c8 100644 --- a/c_glib/arrow-dataset-glib/dataset.h +++ b/c_glib/arrow-dataset-glib/dataset.h @@ -25,22 +25,21 @@ G_BEGIN_DECLS -GADATASET_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GADatasetScannerBuilder * -gadataset_dataset_begin_scan(GADatasetDataset *dataset, GError **error); -GADATASET_AVAILABLE_IN_5_0 +gadataset_dataset_begin_scan(GADatasetDataset *dataset, + GError **error); +GARROW_AVAILABLE_IN_5_0 GArrowTable * -gadataset_dataset_to_table(GADatasetDataset *dataset, GError **error); -GADATASET_AVAILABLE_IN_5_0 +gadataset_dataset_to_table(GADatasetDataset *dataset, + GError **error); +GARROW_AVAILABLE_IN_5_0 gchar * gadataset_dataset_get_type_name(GADatasetDataset *dataset); -GADATASET_AVAILABLE_IN_17_0 -GArrowRecordBatchReader * -gadataset_dataset_to_record_batch_reader(GADatasetDataset *dataset, GError **error); -#define GADATASET_TYPE_FILE_SYSTEM_DATASET_WRITE_OPTIONS \ + +#define GADATASET_TYPE_FILE_SYSTEM_DATASET_WRITE_OPTIONS \ (gadataset_file_system_dataset_write_options_get_type()) -GADATASET_AVAILABLE_IN_6_0 G_DECLARE_DERIVABLE_TYPE(GADatasetFileSystemDatasetWriteOptions, gadataset_file_system_dataset_write_options, GADATASET, @@ -51,12 +50,13 @@ struct _GADatasetFileSystemDatasetWriteOptionsClass GObjectClass parent_class; }; -GADATASET_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 GADatasetFileSystemDatasetWriteOptions * gadataset_file_system_dataset_write_options_new(void); -#define GADATASET_TYPE_FILE_SYSTEM_DATASET (gadataset_file_system_dataset_get_type()) -GADATASET_AVAILABLE_IN_5_0 + +#define GADATASET_TYPE_FILE_SYSTEM_DATASET \ + (gadataset_file_system_dataset_get_type()) G_DECLARE_DERIVABLE_TYPE(GADatasetFileSystemDataset, gadataset_file_system_dataset, GADATASET, @@ -67,11 +67,12 @@ struct _GADatasetFileSystemDatasetClass GADatasetDatasetClass parent_class; }; -GADATASET_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 gboolean gadataset_file_system_dataset_write_scanner( GADatasetScanner *scanner, GADatasetFileSystemDatasetWriteOptions *options, GError **error); + G_END_DECLS diff --git a/c_glib/arrow-dataset-glib/dataset.hpp b/c_glib/arrow-dataset-glib/dataset.hpp index 30d2f45cba7..1dab391e8af 100644 --- a/c_glib/arrow-dataset-glib/dataset.hpp +++ b/c_glib/arrow-dataset-glib/dataset.hpp @@ -23,19 +23,24 @@ #include + GADatasetDataset * -gadataset_dataset_new_raw(std::shared_ptr *arrow_dataset); +gadataset_dataset_new_raw( + std::shared_ptr *arrow_dataset); GADatasetDataset * -gadataset_dataset_new_raw(std::shared_ptr *arrow_dataset, - const gchar *first_property_name, - ...); +gadataset_dataset_new_raw( + std::shared_ptr *arrow_dataset, + const gchar *first_property_name, + ...); GADatasetDataset * -gadataset_dataset_new_raw_valist(std::shared_ptr *arrow_dataset, - const gchar *first_property_name, - va_list arg); +gadataset_dataset_new_raw_valist( + std::shared_ptr *arrow_dataset, + const gchar *first_property_name, + va_list arg); std::shared_ptr gadataset_dataset_get_raw(GADatasetDataset *dataset); + arrow::dataset::FileSystemDatasetWriteOptions * gadataset_file_system_dataset_write_options_get_raw( GADatasetFileSystemDatasetWriteOptions *options); diff --git a/c_glib/arrow-dataset-glib/enums.h.template b/c_glib/arrow-dataset-glib/enums.h.template index 8b89a8b031b..b7d3c99c0be 100644 --- a/c_glib/arrow-dataset-glib/enums.h.template +++ b/c_glib/arrow-dataset-glib/enums.h.template @@ -22,8 +22,6 @@ #include -#include - G_BEGIN_DECLS /*** END file-header ***/ @@ -33,7 +31,6 @@ G_BEGIN_DECLS /*** END file-production ***/ /*** BEGIN value-header ***/ -GADATASET_AVAILABLE_IN_ALL GType @enum_name@_get_type(void) G_GNUC_CONST; #define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) /*** END value-header ***/ diff --git a/c_glib/arrow-dataset-glib/file-format.cpp b/c_glib/arrow-dataset-glib/file-format.cpp index 121c6511f6a..db0eb064eba 100644 --- a/c_glib/arrow-dataset-glib/file-format.cpp +++ b/c_glib/arrow-dataset-glib/file-format.cpp @@ -50,8 +50,7 @@ G_BEGIN_DECLS * Since: 3.0.0 */ -typedef struct GADatasetFileWriteOptionsPrivate_ -{ +typedef struct GADatasetFileWriteOptionsPrivate_ { std::shared_ptr options; } GADatasetFileWriteOptionsPrivate; @@ -63,9 +62,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GADatasetFileWriteOptions, gadataset_file_write_options, G_TYPE_OBJECT) -#define GADATASET_FILE_WRITE_OPTIONS_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_file_write_options_get_instance_private( \ +#define GADATASET_FILE_WRITE_OPTIONS_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_file_write_options_get_instance_private( \ GADATASET_FILE_WRITE_OPTIONS(obj))) static void @@ -86,8 +85,9 @@ gadataset_file_write_options_set_property(GObject *object, switch (prop_id) { case PROP_OPTIONS: - priv->options = *static_cast *>( - g_value_get_pointer(value)); + priv->options = + *static_cast *>( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -99,7 +99,7 @@ static void gadataset_file_write_options_init(GADatasetFileWriteOptions *object) { auto priv = GADATASET_FILE_WRITE_OPTIONS_GET_PRIVATE(object); - new (&priv->options) std::shared_ptr; + new(&priv->options) std::shared_ptr; } static void @@ -107,21 +107,21 @@ gadataset_file_write_options_class_init(GADatasetFileWriteOptionsClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = gadataset_file_write_options_finalize; + gobject_class->finalize = gadataset_file_write_options_finalize; gobject_class->set_property = gadataset_file_write_options_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "options", - "Options", - "The raw " - "std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("options", + "Options", + "The raw " + "std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_OPTIONS, spec); } -typedef struct GADatasetFileWriterPrivate_ -{ + +typedef struct GADatasetFileWriterPrivate_ { std::shared_ptr writer; } GADatasetFileWriterPrivate; @@ -129,11 +129,14 @@ enum { PROP_WRITER = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GADatasetFileWriter, gadataset_file_writer, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GADatasetFileWriter, + gadataset_file_writer, + G_TYPE_OBJECT) -#define GADATASET_FILE_WRITER_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_file_writer_get_instance_private(GADATASET_FILE_WRITER(obj))) +#define GADATASET_FILE_WRITER_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_file_writer_get_instance_private( \ + GADATASET_FILE_WRITER(obj))) static void gadataset_file_writer_finalize(GObject *object) @@ -153,8 +156,9 @@ gadataset_file_writer_set_property(GObject *object, switch (prop_id) { case PROP_WRITER: - priv->writer = *static_cast *>( - g_value_get_pointer(value)); + priv->writer = + *static_cast *>( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -166,7 +170,7 @@ static void gadataset_file_writer_init(GADatasetFileWriter *object) { auto priv = GADATASET_FILE_WRITER_GET_PRIVATE(object); - new (&(priv->writer)) std::shared_ptr; + new(&(priv->writer)) std::shared_ptr; } static void @@ -174,16 +178,16 @@ gadataset_file_writer_class_init(GADatasetFileWriterClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = gadataset_file_writer_finalize; + gobject_class->finalize = gadataset_file_writer_finalize; gobject_class->set_property = gadataset_file_writer_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "writer", - "Writer", - "The raw " - "std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("writer", + "Writer", + "The raw " + "std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_WRITER, spec); } @@ -226,7 +230,9 @@ gadataset_file_writer_write_record_batch_reader(GADatasetFileWriter *writer, const auto arrow_writer = gadataset_file_writer_get_raw(writer); auto arrow_reader = garrow_record_batch_reader_get_raw(reader); auto status = arrow_writer->Write(arrow_reader.get()); - return garrow::check(error, status, "[file-writer][write-record-batch-reader]"); + return garrow::check(error, + status, + "[file-writer][write-record-batch-reader]"); } /** @@ -239,15 +245,18 @@ gadataset_file_writer_write_record_batch_reader(GADatasetFileWriter *writer, * Since: 6.0.0 */ gboolean -gadataset_file_writer_finish(GADatasetFileWriter *writer, GError **error) +gadataset_file_writer_finish(GADatasetFileWriter *writer, + GError **error) { const auto arrow_writer = gadataset_file_writer_get_raw(writer); auto status = arrow_writer->Finish().status(); - return garrow::check(error, status, "[file-writer][finish]"); + return garrow::check(error, + status, + "[file-writer][finish]"); } -typedef struct GADatasetFileFormatPrivate_ -{ + +typedef struct GADatasetFileFormatPrivate_ { std::shared_ptr format; } GADatasetFileFormatPrivate; @@ -255,11 +264,14 @@ enum { PROP_FORMAT = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GADatasetFileFormat, gadataset_file_format, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GADatasetFileFormat, + gadataset_file_format, + G_TYPE_OBJECT) -#define GADATASET_FILE_FORMAT_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_file_format_get_instance_private(GADATASET_FILE_FORMAT(obj))) +#define GADATASET_FILE_FORMAT_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_file_format_get_instance_private( \ + GADATASET_FILE_FORMAT(obj))) static void gadataset_file_format_finalize(GObject *object) @@ -279,8 +291,9 @@ gadataset_file_format_set_property(GObject *object, switch (prop_id) { case PROP_FORMAT: - priv->format = *static_cast *>( - g_value_get_pointer(value)); + priv->format = + *static_cast *>( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -292,7 +305,7 @@ static void gadataset_file_format_init(GADatasetFileFormat *object) { auto priv = GADATASET_FILE_FORMAT_GET_PRIVATE(object); - new (&priv->format) std::shared_ptr; + new(&priv->format) std::shared_ptr; } static void @@ -300,15 +313,15 @@ gadataset_file_format_class_init(GADatasetFileFormatClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = gadataset_file_format_finalize; + gobject_class->finalize = gadataset_file_format_finalize; gobject_class->set_property = gadataset_file_format_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "format", - "Format", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("format", + "Format", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FORMAT, spec); } @@ -375,10 +388,11 @@ gadataset_file_format_open_writer(GADatasetFileFormat *format, auto arrow_file_system = garrow_file_system_get_raw(file_system); auto arrow_schema = garrow_schema_get_raw(schema); auto arrow_options = gadataset_file_write_options_get_raw(options); - auto arrow_writer_result = arrow_format->MakeWriter(arrow_destination, - arrow_schema, - arrow_options, - {arrow_file_system, path}); + auto arrow_writer_result = + arrow_format->MakeWriter(arrow_destination, + arrow_schema, + arrow_options, + {arrow_file_system, path}); if (garrow::check(error, arrow_writer_result, "[file-format][open-writer]")) { auto arrow_writer = *arrow_writer_result; return gadataset_file_writer_new_raw(&arrow_writer); @@ -405,6 +419,7 @@ gadataset_file_format_equal(GADatasetFileFormat *format, return arrow_format->Equals(*arrow_other_format); } + G_DEFINE_TYPE(GADatasetCSVFileFormat, gadataset_csv_file_format, GADATASET_TYPE_FILE_FORMAT) @@ -434,6 +449,7 @@ gadataset_csv_file_format_new(void) return GADATASET_CSV_FILE_FORMAT(gadataset_file_format_new_raw(&arrow_format)); } + G_DEFINE_TYPE(GADatasetIPCFileFormat, gadataset_ipc_file_format, GADATASET_TYPE_FILE_FORMAT) @@ -463,6 +479,7 @@ gadataset_ipc_file_format_new(void) return GADATASET_IPC_FILE_FORMAT(gadataset_file_format_new_raw(&arrow_format)); } + G_DEFINE_TYPE(GADatasetParquetFileFormat, gadataset_parquet_file_format, GADATASET_TYPE_FILE_FORMAT) @@ -489,9 +506,11 @@ gadataset_parquet_file_format_new(void) { std::shared_ptr arrow_format = std::make_shared(); - return GADATASET_PARQUET_FILE_FORMAT(gadataset_file_format_new_raw(&arrow_format)); + return GADATASET_PARQUET_FILE_FORMAT( + gadataset_file_format_new_raw(&arrow_format)); } + G_END_DECLS GADatasetFileWriteOptions * @@ -499,7 +518,9 @@ gadataset_file_write_options_new_raw( std::shared_ptr *arrow_options) { return GADATASET_FILE_WRITE_OPTIONS( - g_object_new(GADATASET_TYPE_FILE_WRITE_OPTIONS, "options", arrow_options, NULL)); + g_object_new(GADATASET_TYPE_FILE_WRITE_OPTIONS, + "options", arrow_options, + NULL)); } std::shared_ptr @@ -509,11 +530,14 @@ gadataset_file_write_options_get_raw(GADatasetFileWriteOptions *options) return priv->options; } + GADatasetFileWriter * -gadataset_file_writer_new_raw(std::shared_ptr *arrow_writer) +gadataset_file_writer_new_raw( + std::shared_ptr *arrow_writer) { - return GADATASET_FILE_WRITER( - g_object_new(GADATASET_TYPE_FILE_WRITER, "writer", arrow_writer, NULL)); + return GADATASET_FILE_WRITER(g_object_new(GADATASET_TYPE_FILE_WRITER, + "writer", arrow_writer, + NULL)); } std::shared_ptr @@ -523,8 +547,10 @@ gadataset_file_writer_get_raw(GADatasetFileWriter *writer) return priv->writer; } + GADatasetFileFormat * -gadataset_file_format_new_raw(std::shared_ptr *arrow_format) +gadataset_file_format_new_raw( + std::shared_ptr *arrow_format) { GType type = GADATASET_TYPE_FILE_FORMAT; const auto &type_name = (*arrow_format)->type_name(); @@ -535,7 +561,9 @@ gadataset_file_format_new_raw(std::shared_ptr *arrow } else if (type_name == "parquet") { type = GADATASET_TYPE_PARQUET_FILE_FORMAT; } - return GADATASET_FILE_FORMAT(g_object_new(type, "format", arrow_format, NULL)); + return GADATASET_FILE_FORMAT(g_object_new(type, + "format", arrow_format, + NULL)); } std::shared_ptr diff --git a/c_glib/arrow-dataset-glib/file-format.h b/c_glib/arrow-dataset-glib/file-format.h index f70523597e7..16a8340747c 100644 --- a/c_glib/arrow-dataset-glib/file-format.h +++ b/c_glib/arrow-dataset-glib/file-format.h @@ -21,12 +21,10 @@ #include -#include - G_BEGIN_DECLS -#define GADATASET_TYPE_FILE_WRITE_OPTIONS (gadataset_file_write_options_get_type()) -GADATASET_AVAILABLE_IN_6_0 +#define GADATASET_TYPE_FILE_WRITE_OPTIONS \ + (gadataset_file_write_options_get_type()) G_DECLARE_DERIVABLE_TYPE(GADatasetFileWriteOptions, gadataset_file_write_options, GADATASET, @@ -37,45 +35,53 @@ struct _GADatasetFileWriteOptionsClass GObjectClass parent_class; }; -#define GADATASET_TYPE_FILE_WRITER (gadataset_file_writer_get_type()) -GADATASET_AVAILABLE_IN_6_0 -G_DECLARE_DERIVABLE_TYPE( - GADatasetFileWriter, gadataset_file_writer, GADATASET, FILE_WRITER, GObject) + +#define GADATASET_TYPE_FILE_WRITER \ + (gadataset_file_writer_get_type()) +G_DECLARE_DERIVABLE_TYPE(GADatasetFileWriter, + gadataset_file_writer, + GADATASET, + FILE_WRITER, + GObject) struct _GADatasetFileWriterClass { GObjectClass parent_class; }; -GADATASET_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 gboolean gadataset_file_writer_write_record_batch(GADatasetFileWriter *writer, GArrowRecordBatch *record_batch, GError **error); -GADATASET_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 gboolean gadataset_file_writer_write_record_batch_reader(GADatasetFileWriter *writer, GArrowRecordBatchReader *reader, GError **error); -GADATASET_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 gboolean -gadataset_file_writer_finish(GADatasetFileWriter *writer, GError **error); +gadataset_file_writer_finish(GADatasetFileWriter *writer, + GError **error); + #define GADATASET_TYPE_FILE_FORMAT (gadataset_file_format_get_type()) -GADATASET_AVAILABLE_IN_3_0 -G_DECLARE_DERIVABLE_TYPE( - GADatasetFileFormat, gadataset_file_format, GADATASET, FILE_FORMAT, GObject) +G_DECLARE_DERIVABLE_TYPE(GADatasetFileFormat, + gadataset_file_format, + GADATASET, + FILE_FORMAT, + GObject) struct _GADatasetFileFormatClass { GObjectClass parent_class; }; -GADATASET_AVAILABLE_IN_3_0 +GARROW_AVAILABLE_IN_3_0 gchar * gadataset_file_format_get_type_name(GADatasetFileFormat *format); -GADATASET_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 GADatasetFileWriteOptions * gadataset_file_format_get_default_write_options(GADatasetFileFormat *format); -GADATASET_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 GADatasetFileWriter * gadataset_file_format_open_writer(GADatasetFileFormat *format, GArrowOutputStream *destination, @@ -85,13 +91,13 @@ gadataset_file_format_open_writer(GADatasetFileFormat *format, GADatasetFileWriteOptions *options, GError **error); -GADATASET_AVAILABLE_IN_3_0 +GARROW_AVAILABLE_IN_3_0 gboolean gadataset_file_format_equal(GADatasetFileFormat *format, GADatasetFileFormat *other_format); + #define GADATASET_TYPE_CSV_FILE_FORMAT (gadataset_csv_file_format_get_type()) -GADATASET_AVAILABLE_IN_3_0 G_DECLARE_DERIVABLE_TYPE(GADatasetCSVFileFormat, gadataset_csv_file_format, GADATASET, @@ -102,12 +108,11 @@ struct _GADatasetCSVFileFormatClass GADatasetFileFormatClass parent_class; }; -GADATASET_AVAILABLE_IN_3_0 -GADatasetCSVFileFormat * -gadataset_csv_file_format_new(void); +GARROW_AVAILABLE_IN_3_0 +GADatasetCSVFileFormat *gadataset_csv_file_format_new(void); + #define GADATASET_TYPE_IPC_FILE_FORMAT (gadataset_ipc_file_format_get_type()) -GADATASET_AVAILABLE_IN_3_0 G_DECLARE_DERIVABLE_TYPE(GADatasetIPCFileFormat, gadataset_ipc_file_format, GADATASET, @@ -118,12 +123,12 @@ struct _GADatasetIPCFileFormatClass GADatasetFileFormatClass parent_class; }; -GADATASET_AVAILABLE_IN_3_0 -GADatasetIPCFileFormat * -gadataset_ipc_file_format_new(void); +GARROW_AVAILABLE_IN_3_0 +GADatasetIPCFileFormat *gadataset_ipc_file_format_new(void); -#define GADATASET_TYPE_PARQUET_FILE_FORMAT (gadataset_parquet_file_format_get_type()) -GADATASET_AVAILABLE_IN_3_0 + +#define GADATASET_TYPE_PARQUET_FILE_FORMAT \ + (gadataset_parquet_file_format_get_type()) G_DECLARE_DERIVABLE_TYPE(GADatasetParquetFileFormat, gadataset_parquet_file_format, GADATASET, @@ -134,8 +139,8 @@ struct _GADatasetParquetFileFormatClass GADatasetFileFormatClass parent_class; }; -GADATASET_AVAILABLE_IN_3_0 -GADatasetParquetFileFormat * -gadataset_parquet_file_format_new(void); +GARROW_AVAILABLE_IN_3_0 +GADatasetParquetFileFormat *gadataset_parquet_file_format_new(void); + G_END_DECLS diff --git a/c_glib/arrow-dataset-glib/file-format.hpp b/c_glib/arrow-dataset-glib/file-format.hpp index f425fa02463..636dc5c015b 100644 --- a/c_glib/arrow-dataset-glib/file-format.hpp +++ b/c_glib/arrow-dataset-glib/file-format.hpp @@ -29,12 +29,16 @@ gadataset_file_write_options_new_raw( std::shared_ptr gadataset_file_write_options_get_raw(GADatasetFileWriteOptions *options); + GADatasetFileWriter * -gadataset_file_writer_new_raw(std::shared_ptr *arrow_writer); +gadataset_file_writer_new_raw( + std::shared_ptr *arrow_writer); std::shared_ptr gadataset_file_writer_get_raw(GADatasetFileWriter *writer); + GADatasetFileFormat * -gadataset_file_format_new_raw(std::shared_ptr *arrow_format); +gadataset_file_format_new_raw( + std::shared_ptr *arrow_format); std::shared_ptr gadataset_file_format_get_raw(GADatasetFileFormat *format); diff --git a/c_glib/arrow-dataset-glib/fragment.cpp b/c_glib/arrow-dataset-glib/fragment.cpp index 0a8efe4acd4..f2f0cd1c3e9 100644 --- a/c_glib/arrow-dataset-glib/fragment.cpp +++ b/c_glib/arrow-dataset-glib/fragment.cpp @@ -39,8 +39,7 @@ G_BEGIN_DECLS /* arrow::dataset::Fragment */ -typedef struct GADatasetFragmentPrivate_ -{ +typedef struct GADatasetFragmentPrivate_ { std::shared_ptr fragment; } GADatasetFragmentPrivate; @@ -48,11 +47,14 @@ enum { PROP_FRAGMENT = 1, }; -G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GADatasetFragment, gadataset_fragment, G_TYPE_OBJECT) +G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GADatasetFragment, + gadataset_fragment, + G_TYPE_OBJECT) -#define GADATASET_FRAGMENT_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_fragment_get_instance_private(GADATASET_FRAGMENT(obj))) +#define GADATASET_FRAGMENT_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_fragment_get_instance_private( \ + GADATASET_FRAGMENT(obj))) static void gadataset_fragment_finalize(GObject *object) @@ -74,8 +76,9 @@ gadataset_fragment_set_property(GObject *object, switch (prop_id) { case PROP_FRAGMENT: - priv->fragment = *static_cast *>( - g_value_get_pointer(value)); + priv->fragment = + *static_cast *>( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -87,7 +90,7 @@ static void gadataset_fragment_init(GADatasetFragment *object) { auto priv = GADATASET_FRAGMENT_GET_PRIVATE(object); - new (&priv->fragment) std::shared_ptr; + new(&priv->fragment) std::shared_ptr; } static void @@ -95,15 +98,15 @@ gadataset_fragment_class_init(GADatasetFragmentClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = gadataset_fragment_finalize; + gobject_class->finalize = gadataset_fragment_finalize; gobject_class->set_property = gadataset_fragment_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "fragment", - "Fragment", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("fragment", + "Fragment", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FRAGMENT, spec); } @@ -155,10 +158,13 @@ gadataset_in_memory_fragment_new(GArrowSchema *schema, G_END_DECLS GADatasetFragment * -gadataset_fragment_new_raw(std::shared_ptr *arrow_fragment) +gadataset_fragment_new_raw( + std::shared_ptr *arrow_fragment) { - auto fragment = GADATASET_FRAGMENT( - g_object_new(GADATASET_TYPE_FRAGMENT, "fragment", arrow_fragment, NULL)); + auto fragment = + GADATASET_FRAGMENT(g_object_new(GADATASET_TYPE_FRAGMENT, + "fragment", arrow_fragment, + NULL)); return fragment; } @@ -173,7 +179,9 @@ GADatasetInMemoryFragment * gadataset_in_memory_fragment_new_raw( std::shared_ptr *arrow_fragment) { - auto fragment = GADATASET_IN_MEMORY_FRAGMENT( - g_object_new(GADATASET_TYPE_IN_MEMORY_FRAGMENT, "fragment", arrow_fragment, NULL)); + auto fragment = + GADATASET_IN_MEMORY_FRAGMENT(g_object_new(GADATASET_TYPE_IN_MEMORY_FRAGMENT, + "fragment", arrow_fragment, + NULL)); return fragment; } diff --git a/c_glib/arrow-dataset-glib/fragment.h b/c_glib/arrow-dataset-glib/fragment.h index 80eb9e19df3..9376b6cf3ee 100644 --- a/c_glib/arrow-dataset-glib/fragment.h +++ b/c_glib/arrow-dataset-glib/fragment.h @@ -21,16 +21,16 @@ #include -#include - G_BEGIN_DECLS /* arrow::dataset::Fragment */ #define GADATASET_TYPE_FRAGMENT (gadataset_fragment_get_type()) -GADATASET_AVAILABLE_IN_4_0 -G_DECLARE_DERIVABLE_TYPE( - GADatasetFragment, gadataset_fragment, GADATASET, FRAGMENT, GObject) +G_DECLARE_DERIVABLE_TYPE(GADatasetFragment, + gadataset_fragment, + GADATASET, + FRAGMENT, + GObject) struct _GADatasetFragmentClass { GObjectClass parent_class; @@ -38,8 +38,8 @@ struct _GADatasetFragmentClass /* arrow::dataset::InMemoryFragment */ -#define GADATASET_TYPE_IN_MEMORY_FRAGMENT (gadataset_in_memory_fragment_get_type()) -GADATASET_AVAILABLE_IN_4_0 +#define GADATASET_TYPE_IN_MEMORY_FRAGMENT \ + (gadataset_in_memory_fragment_get_type()) G_DECLARE_DERIVABLE_TYPE(GADatasetInMemoryFragment, gadataset_in_memory_fragment, GADATASET, @@ -50,7 +50,7 @@ struct _GADatasetInMemoryFragmentClass GADatasetFragmentClass parent_class; }; -GADATASET_AVAILABLE_IN_4_0 +GARROW_AVAILABLE_IN_4_0 GADatasetInMemoryFragment * gadataset_in_memory_fragment_new(GArrowSchema *schema, GArrowRecordBatch **record_batches, diff --git a/c_glib/arrow-dataset-glib/fragment.hpp b/c_glib/arrow-dataset-glib/fragment.hpp index 7360905723c..904f8365396 100644 --- a/c_glib/arrow-dataset-glib/fragment.hpp +++ b/c_glib/arrow-dataset-glib/fragment.hpp @@ -26,9 +26,10 @@ std::shared_ptr gadataset_fragment_get_raw(GADatasetFragment *fragment); -GADatasetFragment * -gadataset_fragment_new_raw(std::shared_ptr *arrow_fragment); +GADatasetFragment* +gadataset_fragment_new_raw( + std::shared_ptr *arrow_fragment); -GADatasetInMemoryFragment * +GADatasetInMemoryFragment* gadataset_in_memory_fragment_new_raw( std::shared_ptr *arrow_fragment); diff --git a/c_glib/arrow-dataset-glib/meson.build b/c_glib/arrow-dataset-glib/meson.build index 3425efc5555..4037cf00b7a 100644 --- a/c_glib/arrow-dataset-glib/meson.build +++ b/c_glib/arrow-dataset-glib/meson.build @@ -17,8 +17,6 @@ # specific language governing permissions and limitations # under the License. -project_name = 'arrow-dataset-glib' - sources = files( 'dataset-factory.cpp', 'dataset.cpp', @@ -49,27 +47,20 @@ cpp_headers = files( 'scanner.hpp', ) -version_h = configure_file( - input: 'version.h.in', - output: 'version.h', - command: [python3, generate_version_header_py, '--library', 'GADATASET', '--version', version, '--input', '@INPUT@', '--output', '@OUTPUT@'], -) - -c_headers += version_h - enums = gnome.mkenums('enums', sources: c_headers, identifier_prefix: 'GADataset', symbol_prefix: 'gadataset', c_template: 'enums.c.template', h_template: 'enums.h.template', - install_dir: join_paths(include_dir, project_name), + install_dir: join_paths(include_dir, 'arrow-dataset-glib'), install_header: true) enums_source = enums[0] enums_header = enums[1] + headers = c_headers + cpp_headers -install_headers(headers, subdir: project_name) +install_headers(headers, subdir: 'arrow-dataset-glib') dependencies = [ arrow_dataset, @@ -81,8 +72,6 @@ libarrow_dataset_glib = library('arrow-dataset-glib', dependencies: dependencies, implicit_include_directories: false, include_directories: base_include_directories, - cpp_args: ['-DGADATASET_COMPILATION'], - c_args: ['-DGADATASET_COMPILATION'], soversion: so_version, version: library_version) arrow_dataset_glib = declare_dependency(link_with: libarrow_dataset_glib, @@ -99,7 +88,7 @@ pkgconfig.generate(libarrow_dataset_glib, version: version) if have_gi - arrow_dataset_glib_gir = \ + dataset_glib_gir = \ gnome.generate_gir(libarrow_dataset_glib, dependencies: declare_dependency(sources: arrow_glib_gir), export_packages: 'arrow-dataset-glib', @@ -107,13 +96,15 @@ if have_gi '--warn-all', '--include-uninstalled=./arrow-glib/Arrow-1.0.gir', ], + fatal_warnings: gi_fatal_warnings, header: 'arrow-dataset-glib/arrow-dataset-glib.h', identifier_prefix: 'GADataset', includes: [ 'Arrow-1.0', ], - kwargs: generate_gi_common_args, + install: true, namespace: 'ArrowDataset', + nsversion: api_version, sources: sources + c_headers + enums, symbol_prefix: 'gadataset') @@ -124,6 +115,6 @@ if have_gi arrow_glib_vapi, 'gio-2.0', ], - sources: [arrow_dataset_glib_gir[0]]) + sources: [dataset_glib_gir[0]]) endif endif diff --git a/c_glib/arrow-dataset-glib/partitioning.cpp b/c_glib/arrow-dataset-glib/partitioning.cpp index 8506b6a4df8..b22289b5d01 100644 --- a/c_glib/arrow-dataset-glib/partitioning.cpp +++ b/c_glib/arrow-dataset-glib/partitioning.cpp @@ -56,8 +56,7 @@ G_BEGIN_DECLS * Since: 6.0.0 */ -struct GADatasetPartitioningFactoryOptionsPrivate -{ +struct GADatasetPartitioningFactoryOptionsPrivate { gboolean infer_dictionary; GArrowSchema *schema; GADatasetSegmentEncoding segment_encoding; @@ -73,9 +72,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GADatasetPartitioningFactoryOptions, gadataset_partitioning_factory_options, G_TYPE_OBJECT) -#define GADATASET_PARTITIONING_FACTORY_OPTIONS_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_partitioning_factory_options_get_instance_private( \ +#define GADATASET_PARTITIONING_FACTORY_OPTIONS_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_partitioning_factory_options_get_instance_private( \ GADATASET_PARTITIONING_FACTORY_OPTIONS(obj))) static void @@ -156,7 +155,8 @@ gadataset_partitioning_factory_options_get_property(GObject *object, } static void -gadataset_partitioning_factory_options_init(GADatasetPartitioningFactoryOptions *object) +gadataset_partitioning_factory_options_init( + GADatasetPartitioningFactoryOptions *object) { } @@ -167,8 +167,10 @@ gadataset_partitioning_factory_options_class_init( auto gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = gadataset_partitioning_factory_options_dispose; - gobject_class->set_property = gadataset_partitioning_factory_options_set_property; - gobject_class->get_property = gadataset_partitioning_factory_options_get_property; + gobject_class->set_property = + gadataset_partitioning_factory_options_set_property; + gobject_class->get_property = + gadataset_partitioning_factory_options_get_property; arrow::dataset::PartitioningFactoryOptions default_options; GParamSpec *spec; @@ -208,7 +210,9 @@ gadataset_partitioning_factory_options_class_init( "against the schema and update internal state", GARROW_TYPE_SCHEMA, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_FACTORY_OPTIONS_SCHEMA, spec); + g_object_class_install_property(gobject_class, + PROP_FACTORY_OPTIONS_SCHEMA, + spec); /** * GADatasetPartitioningFactoryOptions:segment-encoding: @@ -218,15 +222,15 @@ gadataset_partitioning_factory_options_class_init( * * Since: 11.0.0 */ - spec = g_param_spec_enum( - "segment-encoding", - "Segment encoding", - "After splitting a path into components, " - "decode the path components before " - "parsing according to this scheme", - GADATASET_TYPE_SEGMENT_ENCODING, - static_cast(default_options.segment_encoding), - static_cast(G_PARAM_READWRITE)); + spec = g_param_spec_enum("segment-encoding", + "Segment encoding", + "After splitting a path into components, " + "decode the path components before " + "parsing according to this scheme", + GADATASET_TYPE_SEGMENT_ENCODING, + static_cast( + default_options.segment_encoding), + static_cast(G_PARAM_READWRITE)); g_object_class_install_property(gobject_class, PROP_FACTORY_OPTIONS_SEGMENT_ENCODING, spec); @@ -243,11 +247,12 @@ GADatasetPartitioningFactoryOptions * gadataset_partitioning_factory_options_new(void) { return GADATASET_PARTITIONING_FACTORY_OPTIONS( - g_object_new(GADATASET_TYPE_PARTITIONING_FACTORY_OPTIONS, nullptr)); + g_object_new(GADATASET_TYPE_PARTITIONING_FACTORY_OPTIONS, + nullptr)); } -struct GADatasetPartitioningPrivate -{ + +struct GADatasetPartitioningPrivate { std::shared_ptr partitioning; }; @@ -259,9 +264,10 @@ G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GADatasetPartitioning, gadataset_partitioning, G_TYPE_OBJECT) -#define GADATASET_PARTITIONING_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_partitioning_get_instance_private(GADATASET_PARTITIONING(obj))) +#define GADATASET_PARTITIONING_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_partitioning_get_instance_private( \ + GADATASET_PARTITIONING(obj))) static void gadataset_partitioning_finalize(GObject *object) @@ -281,8 +287,9 @@ gadataset_partitioning_set_property(GObject *object, switch (prop_id) { case PROP_PARTITIONING: - priv->partitioning = *static_cast *>( - g_value_get_pointer(value)); + priv->partitioning = + *static_cast *>( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -294,7 +301,7 @@ static void gadataset_partitioning_init(GADatasetPartitioning *object) { auto priv = GADATASET_PARTITIONING_GET_PRIVATE(object); - new (&priv->partitioning) std::shared_ptr; + new(&priv->partitioning) std::shared_ptr; } static void @@ -302,16 +309,16 @@ gadataset_partitioning_class_init(GADatasetPartitioningClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = gadataset_partitioning_finalize; + gobject_class->finalize = gadataset_partitioning_finalize; gobject_class->set_property = gadataset_partitioning_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "partitioning", - "Partitioning", - "The raw " - "std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("partitioning", + "Partitioning", + "The raw " + "std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_PARTITIONING, spec); } @@ -330,9 +337,11 @@ gadataset_partitioning_get_type_name(GADatasetPartitioning *partitioning) { auto arrow_partitioning = gadataset_partitioning_get_raw(partitioning); auto arrow_type_name = arrow_partitioning->type_name(); - return g_strndup(arrow_type_name.c_str(), arrow_type_name.size()); + return g_strndup(arrow_type_name.c_str(), + arrow_type_name.size()); } + /** * gadataset_partitioning_create_default: * @@ -348,8 +357,8 @@ gadataset_partitioning_create_default(void) return gadataset_partitioning_new_raw(&arrow_partitioning); } -struct GADatasetKeyValuePartitioningOptionsPrivate -{ + +struct GADatasetKeyValuePartitioningOptionsPrivate { GADatasetSegmentEncoding segment_encoding; }; @@ -361,9 +370,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GADatasetKeyValuePartitioningOptions, gadataset_key_value_partitioning_options, G_TYPE_OBJECT) -#define GADATASET_KEY_VALUE_PARTITIONING_OPTIONS_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_key_value_partitioning_options_get_instance_private( \ +#define GADATASET_KEY_VALUE_PARTITIONING_OPTIONS_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_key_value_partitioning_options_get_instance_private( \ GADATASET_KEY_VALUE_PARTITIONING_OPTIONS(obj))) static void @@ -415,8 +424,10 @@ gadataset_key_value_partitioning_options_class_init( { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->set_property = gadataset_key_value_partitioning_options_set_property; - gobject_class->get_property = gadataset_key_value_partitioning_options_get_property; + gobject_class->set_property = + gadataset_key_value_partitioning_options_set_property; + gobject_class->get_property = + gadataset_key_value_partitioning_options_get_property; arrow::dataset::KeyValuePartitioningOptions default_options; GParamSpec *spec; @@ -428,16 +439,18 @@ gadataset_key_value_partitioning_options_class_init( * * Since: 11.0.0 */ - spec = g_param_spec_enum( - "segment-encoding", - "Segment encoding", - "After splitting a path into components, " - "decode the path components before " - "parsing according to this scheme", - GADATASET_TYPE_SEGMENT_ENCODING, - static_cast(default_options.segment_encoding), - static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_OPTIONS_SEGMENT_ENCODING, spec); + spec = g_param_spec_enum("segment-encoding", + "Segment encoding", + "After splitting a path into components, " + "decode the path components before " + "parsing according to this scheme", + GADATASET_TYPE_SEGMENT_ENCODING, + static_cast( + default_options.segment_encoding), + static_cast(G_PARAM_READWRITE)); + g_object_class_install_property(gobject_class, + PROP_OPTIONS_SEGMENT_ENCODING, + spec); } /** @@ -451,9 +464,11 @@ GADatasetKeyValuePartitioningOptions * gadataset_key_value_partitioning_options_new(void) { return GADATASET_KEY_VALUE_PARTITIONING_OPTIONS( - g_object_new(GADATASET_TYPE_KEY_VALUE_PARTITIONING_OPTIONS, nullptr)); + g_object_new(GADATASET_TYPE_KEY_VALUE_PARTITIONING_OPTIONS, + nullptr)); } + G_DEFINE_ABSTRACT_TYPE(GADatasetKeyValuePartitioning, gadataset_key_value_partitioning, GADATASET_TYPE_PARTITIONING) @@ -464,17 +479,19 @@ gadataset_key_value_partitioning_init(GADatasetKeyValuePartitioning *object) } static void -gadataset_key_value_partitioning_class_init(GADatasetKeyValuePartitioningClass *klass) +gadataset_key_value_partitioning_class_init( + GADatasetKeyValuePartitioningClass *klass) { } G_END_DECLS template GADatasetPartitioning * -garrow_key_value_partitioning_new(GArrowSchema *schema, - GList *dictionaries, - PartitioningOptions &arrow_options, - GError **error) +garrow_key_value_partitioning_new( + GArrowSchema *schema, + GList *dictionaries, + PartitioningOptions &arrow_options, + GError **error) { auto arrow_schema = garrow_schema_get_raw(schema); std::vector> arrow_dictionaries; @@ -486,8 +503,12 @@ garrow_key_value_partitioning_new(GArrowSchema *schema, arrow_dictionaries.push_back(nullptr); } } - auto arrow_partitioning = std::static_pointer_cast( - std::make_shared(arrow_schema, arrow_dictionaries, arrow_options)); + auto arrow_partitioning = + std::static_pointer_cast( + std::make_shared( + arrow_schema, + arrow_dictionaries, + arrow_options)); return gadataset_partitioning_new_raw(&arrow_partitioning); } G_BEGIN_DECLS @@ -502,7 +523,8 @@ gadataset_directory_partitioning_init(GADatasetDirectoryPartitioning *object) } static void -gadataset_directory_partitioning_class_init(GADatasetDirectoryPartitioningClass *klass) +gadataset_directory_partitioning_class_init( + GADatasetDirectoryPartitioningClass *klass) { } @@ -520,10 +542,11 @@ gadataset_directory_partitioning_class_init(GADatasetDirectoryPartitioningClass * Since: 6.0.0 */ GADatasetDirectoryPartitioning * -gadataset_directory_partitioning_new(GArrowSchema *schema, - GList *dictionaries, - GADatasetKeyValuePartitioningOptions *options, - GError **error) +gadataset_directory_partitioning_new( + GArrowSchema *schema, + GList *dictionaries, + GADatasetKeyValuePartitioningOptions *options, + GError **error) { arrow::dataset::KeyValuePartitioningOptions arrow_options; if (options) { @@ -531,14 +554,11 @@ gadataset_directory_partitioning_new(GArrowSchema *schema, } return GADATASET_DIRECTORY_PARTITIONING( garrow_key_value_partitioning_new( - schema, - dictionaries, - arrow_options, - error)); + schema, dictionaries, arrow_options, error)); } -struct GADatasetHivePartitioningOptionsPrivate -{ + +struct GADatasetHivePartitioningOptionsPrivate { gchar *null_fallback; }; @@ -550,9 +570,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GADatasetHivePartitioningOptions, gadataset_hive_partitioning_options, GADATASET_TYPE_KEY_VALUE_PARTITIONING_OPTIONS) -#define GADATASET_HIVE_PARTITIONING_OPTIONS_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_hive_partitioning_options_get_instance_private( \ +#define GADATASET_HIVE_PARTITIONING_OPTIONS_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_hive_partitioning_options_get_instance_private( \ GADATASET_HIVE_PARTITIONING_OPTIONS(obj))) static void @@ -611,7 +631,8 @@ gadataset_hive_partitioning_options_get_property(GObject *object, } static void -gadataset_hive_partitioning_options_init(GADatasetHivePartitioningOptions *object) +gadataset_hive_partitioning_options_init( + GADatasetHivePartitioningOptions *object) { } @@ -640,7 +661,9 @@ gadataset_hive_partitioning_options_class_init( "The fallback string for null", default_options.null_fallback.c_str(), static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_OPTIONS_NULL_FALLBACK, spec); + g_object_class_install_property(gobject_class, + PROP_OPTIONS_NULL_FALLBACK, + spec); } /** @@ -654,9 +677,11 @@ GADatasetHivePartitioningOptions * gadataset_hive_partitioning_options_new(void) { return GADATASET_HIVE_PARTITIONING_OPTIONS( - g_object_new(GADATASET_TYPE_HIVE_PARTITIONING_OPTIONS, nullptr)); + g_object_new(GADATASET_TYPE_HIVE_PARTITIONING_OPTIONS, + nullptr)); } + G_DEFINE_TYPE(GADatasetHivePartitioning, gadataset_hive_partitioning, GADATASET_TYPE_KEY_VALUE_PARTITIONING) @@ -667,7 +692,8 @@ gadataset_hive_partitioning_init(GADatasetHivePartitioning *object) } static void -gadataset_hive_partitioning_class_init(GADatasetHivePartitioningClass *klass) +gadataset_hive_partitioning_class_init( + GADatasetHivePartitioningClass *klass) { } @@ -695,10 +721,8 @@ gadataset_hive_partitioning_new(GArrowSchema *schema, arrow_options = gadataset_hive_partitioning_options_get_raw(options); } return GADATASET_HIVE_PARTITIONING( - garrow_key_value_partitioning_new(schema, - dictionaries, - arrow_options, - error)); + garrow_key_value_partitioning_new( + schema, dictionaries, arrow_options, error)); } /** @@ -711,7 +735,8 @@ gadataset_hive_partitioning_new(GArrowSchema *schema, * Since: 11.0.0 */ gchar * -gadataset_hive_partitioning_get_null_fallback(GADatasetHivePartitioning *partitioning) +gadataset_hive_partitioning_get_null_fallback( + GADatasetHivePartitioning *partitioning) { const auto arrow_partitioning = std::static_pointer_cast( @@ -720,6 +745,7 @@ gadataset_hive_partitioning_get_null_fallback(GADatasetHivePartitioning *partiti return g_strdup(null_fallback.c_str()); } + G_END_DECLS arrow::dataset::PartitioningFactoryOptions @@ -749,11 +775,13 @@ gadataset_key_value_partitioning_options_get_raw( } arrow::dataset::HivePartitioningOptions -gadataset_hive_partitioning_options_get_raw(GADatasetHivePartitioningOptions *options) +gadataset_hive_partitioning_options_get_raw( + GADatasetHivePartitioningOptions *options) { auto priv = GADATASET_HIVE_PARTITIONING_OPTIONS_GET_PRIVATE(options); - auto arrow_key_value_options = gadataset_key_value_partitioning_options_get_raw( - GADATASET_KEY_VALUE_PARTITIONING_OPTIONS(options)); + auto arrow_key_value_options = + gadataset_key_value_partitioning_options_get_raw( + GADATASET_KEY_VALUE_PARTITIONING_OPTIONS(options)); arrow::dataset::HivePartitioningOptions arrow_options; arrow_options.segment_encoding = arrow_key_value_options.segment_encoding; arrow_options.null_fallback = priv->null_fallback; @@ -771,8 +799,9 @@ gadataset_partitioning_new_raw( } else if (arrow_type_name == "hive") { type = GADATASET_TYPE_HIVE_PARTITIONING; } - return GADATASET_PARTITIONING( - g_object_new(type, "partitioning", arrow_partitioning, nullptr)); + return GADATASET_PARTITIONING(g_object_new(type, + "partitioning", arrow_partitioning, + nullptr)); } std::shared_ptr diff --git a/c_glib/arrow-dataset-glib/partitioning.h b/c_glib/arrow-dataset-glib/partitioning.h index 7671958d88e..ca347b895b9 100644 --- a/c_glib/arrow-dataset-glib/partitioning.h +++ b/c_glib/arrow-dataset-glib/partitioning.h @@ -21,8 +21,6 @@ #include -#include - G_BEGIN_DECLS /** @@ -39,9 +37,9 @@ typedef enum { GADATASET_SEGMENT_ENCODING_URI, } GADatasetSegmentEncoding; -#define GADATASET_TYPE_PARTITIONING_FACTORY_OPTIONS \ + +#define GADATASET_TYPE_PARTITIONING_FACTORY_OPTIONS \ (gadataset_partitioning_factory_options_get_type()) -GADATASET_AVAILABLE_IN_11_0 G_DECLARE_DERIVABLE_TYPE(GADatasetPartitioningFactoryOptions, gadataset_partitioning_factory_options, GADATASET, @@ -52,30 +50,34 @@ struct _GADatasetPartitioningFactoryOptionsClass GObjectClass parent_class; }; -GADATASET_AVAILABLE_IN_11_0 +GARROW_AVAILABLE_IN_11_0 GADatasetPartitioningFactoryOptions * gadataset_partitioning_factory_options_new(void); + #define GADATASET_TYPE_PARTITIONING (gadataset_partitioning_get_type()) -GADATASET_AVAILABLE_IN_6_0 -G_DECLARE_DERIVABLE_TYPE( - GADatasetPartitioning, gadataset_partitioning, GADATASET, PARTITIONING, GObject) +G_DECLARE_DERIVABLE_TYPE(GADatasetPartitioning, + gadataset_partitioning, + GADATASET, + PARTITIONING, + GObject) struct _GADatasetPartitioningClass { GObjectClass parent_class; }; -GADATASET_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 gchar * gadataset_partitioning_get_type_name(GADatasetPartitioning *partitioning); -GADATASET_AVAILABLE_IN_12_0 + +GARROW_AVAILABLE_IN_12_0 GADatasetPartitioning * gadataset_partitioning_create_default(void); -#define GADATASET_TYPE_KEY_VALUE_PARTITIONING_OPTIONS \ + +#define GADATASET_TYPE_KEY_VALUE_PARTITIONING_OPTIONS \ (gadataset_key_value_partitioning_options_get_type()) -GADATASET_AVAILABLE_IN_11_0 G_DECLARE_DERIVABLE_TYPE(GADatasetKeyValuePartitioningOptions, gadataset_key_value_partitioning_options, GADATASET, @@ -86,13 +88,13 @@ struct _GADatasetKeyValuePartitioningOptionsClass GObjectClass parent_class; }; -GADATASET_AVAILABLE_IN_11_0 +GARROW_AVAILABLE_IN_11_0 GADatasetKeyValuePartitioningOptions * gadataset_key_value_partitioning_options_new(void); -#define GADATASET_TYPE_KEY_VALUE_PARTITIONING \ + +#define GADATASET_TYPE_KEY_VALUE_PARTITIONING \ (gadataset_key_value_partitioning_get_type()) -GADATASET_AVAILABLE_IN_6_0 G_DECLARE_DERIVABLE_TYPE(GADatasetKeyValuePartitioning, gadataset_key_value_partitioning, GADATASET, @@ -103,9 +105,9 @@ struct _GADatasetKeyValuePartitioningClass GADatasetPartitioningClass parent_class; }; -#define GADATASET_TYPE_DIRECTORY_PARTITIONING \ + +#define GADATASET_TYPE_DIRECTORY_PARTITIONING \ (gadataset_directory_partitioning_get_type()) -GADATASET_AVAILABLE_IN_6_0 G_DECLARE_DERIVABLE_TYPE(GADatasetDirectoryPartitioning, gadataset_directory_partitioning, GADATASET, @@ -116,16 +118,17 @@ struct _GADatasetDirectoryPartitioningClass GADatasetKeyValuePartitioningClass parent_class; }; -GADATASET_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 GADatasetDirectoryPartitioning * -gadataset_directory_partitioning_new(GArrowSchema *schema, - GList *dictionaries, - GADatasetKeyValuePartitioningOptions *options, - GError **error); +gadataset_directory_partitioning_new( + GArrowSchema *schema, + GList *dictionaries, + GADatasetKeyValuePartitioningOptions *options, + GError **error); -#define GADATASET_TYPE_HIVE_PARTITIONING_OPTIONS \ + +#define GADATASET_TYPE_HIVE_PARTITIONING_OPTIONS \ (gadataset_hive_partitioning_options_get_type()) -GADATASET_AVAILABLE_IN_11_0 G_DECLARE_DERIVABLE_TYPE(GADatasetHivePartitioningOptions, gadataset_hive_partitioning_options, GADATASET, @@ -136,12 +139,13 @@ struct _GADatasetHivePartitioningOptionsClass GADatasetKeyValuePartitioningOptionsClass parent_class; }; -GADATASET_AVAILABLE_IN_11_0 +GARROW_AVAILABLE_IN_11_0 GADatasetHivePartitioningOptions * gadataset_hive_partitioning_options_new(void); -#define GADATASET_TYPE_HIVE_PARTITIONING (gadataset_hive_partitioning_get_type()) -GADATASET_AVAILABLE_IN_11_0 + +#define GADATASET_TYPE_HIVE_PARTITIONING \ + (gadataset_hive_partitioning_get_type()) G_DECLARE_DERIVABLE_TYPE(GADatasetHivePartitioning, gadataset_hive_partitioning, GADATASET, @@ -152,14 +156,16 @@ struct _GADatasetHivePartitioningClass GADatasetKeyValuePartitioningClass parent_class; }; -GADATASET_AVAILABLE_IN_11_0 +GARROW_AVAILABLE_IN_11_0 GADatasetHivePartitioning * gadataset_hive_partitioning_new(GArrowSchema *schema, GList *dictionaries, GADatasetHivePartitioningOptions *options, GError **error); -GADATASET_AVAILABLE_IN_11_0 +GARROW_AVAILABLE_IN_11_0 gchar * -gadataset_hive_partitioning_get_null_fallback(GADatasetHivePartitioning *partitioning); +gadataset_hive_partitioning_get_null_fallback( + GADatasetHivePartitioning *partitioning); + G_END_DECLS diff --git a/c_glib/arrow-dataset-glib/partitioning.hpp b/c_glib/arrow-dataset-glib/partitioning.hpp index a57a44d7140..4ce8667e789 100644 --- a/c_glib/arrow-dataset-glib/partitioning.hpp +++ b/c_glib/arrow-dataset-glib/partitioning.hpp @@ -32,7 +32,8 @@ gadataset_key_value_partitioning_options_get_raw( GADatasetKeyValuePartitioningOptions *options); arrow::dataset::HivePartitioningOptions -gadataset_hive_partitioning_options_get_raw(GADatasetHivePartitioningOptions *options); +gadataset_hive_partitioning_options_get_raw( + GADatasetHivePartitioningOptions *options); GADatasetPartitioning * gadataset_partitioning_new_raw( diff --git a/c_glib/arrow-dataset-glib/scanner.cpp b/c_glib/arrow-dataset-glib/scanner.cpp index 28af1f16e59..07a5d4aeada 100644 --- a/c_glib/arrow-dataset-glib/scanner.cpp +++ b/c_glib/arrow-dataset-glib/scanner.cpp @@ -40,8 +40,7 @@ G_BEGIN_DECLS * Since: 5.0.0 */ -typedef struct GADatasetScannerPrivate_ -{ +typedef struct GADatasetScannerPrivate_ { std::shared_ptr scanner; } GADatasetScannerPrivate; @@ -49,11 +48,14 @@ enum { PROP_SCANNER = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GADatasetScanner, gadataset_scanner, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GADatasetScanner, + gadataset_scanner, + G_TYPE_OBJECT) -#define GADATASET_SCANNER_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_scanner_get_instance_private(GADATASET_SCANNER(obj))) +#define GADATASET_SCANNER_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_scanner_get_instance_private( \ + GADATASET_SCANNER(obj))) static void gadataset_scanner_finalize(GObject *object) @@ -73,8 +75,9 @@ gadataset_scanner_set_property(GObject *object, switch (prop_id) { case PROP_SCANNER: - priv->scanner = *static_cast *>( - g_value_get_pointer(value)); + priv->scanner = + *static_cast *>( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -86,22 +89,22 @@ static void gadataset_scanner_init(GADatasetScanner *object) { auto priv = GADATASET_SCANNER_GET_PRIVATE(object); - new (&priv->scanner) std::shared_ptr; + new(&priv->scanner) std::shared_ptr; } static void gadataset_scanner_class_init(GADatasetScannerClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = gadataset_scanner_finalize; + gobject_class->finalize = gadataset_scanner_finalize; gobject_class->set_property = gadataset_scanner_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "scanner", - "Scanner", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("scanner", + "Scanner", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_SCANNER, spec); } @@ -116,7 +119,8 @@ gadataset_scanner_class_init(GADatasetScannerClass *klass) * Since: 5.0.0 */ GArrowTable * -gadataset_scanner_to_table(GADatasetScanner *scanner, GError **error) +gadataset_scanner_to_table(GADatasetScanner *scanner, + GError **error) { auto arrow_scanner = gadataset_scanner_get_raw(scanner); auto arrow_table_result = arrow_scanner->ToTable(); @@ -128,30 +132,8 @@ gadataset_scanner_to_table(GADatasetScanner *scanner, GError **error) } } -/** - * gadataset_scanner_to_record_batch_reader: - * @scanner: A #GADatasetScanner. - * @error: (nullable): Return location for a #GError or %NULL. - * - * Returns: (transfer full) (nullable): - * A #GArrowRecordBatchReader on success, %NULL on error. - * - * Since: 17.0.0 - */ -GArrowRecordBatchReader * -gadataset_scanner_to_record_batch_reader(GADatasetScanner *scanner, GError **error) -{ - auto arrow_scanner = gadataset_scanner_get_raw(scanner); - auto arrow_reader_result = arrow_scanner->ToRecordBatchReader(); - if (!garrow::check(error, arrow_reader_result, "[scanner][to-record-batch-reader]")) { - return nullptr; - } - auto sources = g_list_prepend(nullptr, scanner); - return garrow_record_batch_reader_new_raw(&(*arrow_reader_result), sources); -} -typedef struct GADatasetScannerBuilderPrivate_ -{ +typedef struct GADatasetScannerBuilderPrivate_ { std::shared_ptr scanner_builder; } GADatasetScannerBuilderPrivate; @@ -163,9 +145,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GADatasetScannerBuilder, gadataset_scanner_builder, G_TYPE_OBJECT) -#define GADATASET_SCANNER_BUILDER_GET_PRIVATE(obj) \ - static_cast( \ - gadataset_scanner_builder_get_instance_private(GADATASET_SCANNER_BUILDER(obj))) +#define GADATASET_SCANNER_BUILDER_GET_PRIVATE(obj) \ + static_cast( \ + gadataset_scanner_builder_get_instance_private( \ + GADATASET_SCANNER_BUILDER(obj))) static void gadataset_scanner_builder_finalize(GObject *object) @@ -199,23 +182,23 @@ static void gadataset_scanner_builder_init(GADatasetScannerBuilder *object) { auto priv = GADATASET_SCANNER_BUILDER_GET_PRIVATE(object); - new (&priv->scanner_builder) std::shared_ptr; + new(&priv->scanner_builder) std::shared_ptr; } static void gadataset_scanner_builder_class_init(GADatasetScannerBuilderClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = gadataset_scanner_builder_finalize; + gobject_class->finalize = gadataset_scanner_builder_finalize; gobject_class->set_property = gadataset_scanner_builder_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "scanner-builder", - "Scanner builder", - "The raw " - "std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("scanner-builder", + "Scanner builder", + "The raw " + "std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_SCANNER_BUILDER, spec); } @@ -234,7 +217,9 @@ gadataset_scanner_builder_new(GADatasetDataset *dataset, GError **error) { auto arrow_dataset = gadataset_dataset_get_raw(dataset); auto arrow_scanner_builder_result = arrow_dataset->NewScan(); - if (garrow::check(error, arrow_scanner_builder_result, "[scanner-builder][new]")) { + if (garrow::check(error, + arrow_scanner_builder_result, + "[scanner-builder][new]")) { auto arrow_scanner_builder = *arrow_scanner_builder_result; return gadataset_scanner_builder_new_raw(&arrow_scanner_builder); } else { @@ -251,7 +236,8 @@ gadataset_scanner_builder_new(GADatasetDataset *dataset, GError **error) * Since: 6.0.0 */ GADatasetScannerBuilder * -gadataset_scanner_builder_new_record_batch_reader(GArrowRecordBatchReader *reader) +gadataset_scanner_builder_new_record_batch_reader( + GArrowRecordBatchReader *reader) { auto arrow_reader = garrow_record_batch_reader_get_raw(reader); auto arrow_scanner_builder = @@ -292,7 +278,8 @@ gadataset_scanner_builder_set_filter(GADatasetScannerBuilder *builder, * Since: 5.0.0 */ GADatasetScanner * -gadataset_scanner_builder_finish(GADatasetScannerBuilder *builder, GError **error) +gadataset_scanner_builder_finish(GADatasetScannerBuilder *builder, + GError **error) { auto arrow_builder = gadataset_scanner_builder_get_raw(builder); auto arrow_scanner_result = arrow_builder->Finish(); @@ -304,13 +291,17 @@ gadataset_scanner_builder_finish(GADatasetScannerBuilder *builder, GError **erro } } + G_END_DECLS GADatasetScanner * -gadataset_scanner_new_raw(std::shared_ptr *arrow_scanner) +gadataset_scanner_new_raw( + std::shared_ptr *arrow_scanner) { - auto scanner = GADATASET_SCANNER( - g_object_new(GADATASET_TYPE_SCANNER, "scanner", arrow_scanner, NULL)); + auto scanner = + GADATASET_SCANNER(g_object_new(GADATASET_TYPE_SCANNER, + "scanner", arrow_scanner, + NULL)); return scanner; } @@ -325,10 +316,10 @@ GADatasetScannerBuilder * gadataset_scanner_builder_new_raw( std::shared_ptr *arrow_scanner_builder) { - return GADATASET_SCANNER_BUILDER(g_object_new(GADATASET_TYPE_SCANNER_BUILDER, - "scanner-builder", - arrow_scanner_builder, - NULL)); + return GADATASET_SCANNER_BUILDER( + g_object_new(GADATASET_TYPE_SCANNER_BUILDER, + "scanner-builder", arrow_scanner_builder, + NULL)); } std::shared_ptr diff --git a/c_glib/arrow-dataset-glib/scanner.h b/c_glib/arrow-dataset-glib/scanner.h index d92eca5ab84..464661c9d0f 100644 --- a/c_glib/arrow-dataset-glib/scanner.h +++ b/c_glib/arrow-dataset-glib/scanner.h @@ -21,50 +21,54 @@ #include #include -#include G_BEGIN_DECLS #define GADATASET_TYPE_SCANNER (gadataset_scanner_get_type()) -GADATASET_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE(GADatasetScanner, gadataset_scanner, GADATASET, SCANNER, GObject) +G_DECLARE_DERIVABLE_TYPE(GADatasetScanner, + gadataset_scanner, + GADATASET, + SCANNER, + GObject) struct _GADatasetScannerClass { GObjectClass parent_class; }; -GADATASET_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GArrowTable * -gadataset_scanner_to_table(GADatasetScanner *scanner, GError **error); - -GADATASET_AVAILABLE_IN_17_0 -GArrowRecordBatchReader * -gadataset_scanner_to_record_batch_reader(GADatasetScanner *scanner, GError **error); +gadataset_scanner_to_table(GADatasetScanner *scanner, + GError **error); #define GADATASET_TYPE_SCANNER_BUILDER (gadataset_scanner_builder_get_type()) -GADATASET_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GADatasetScannerBuilder, gadataset_scanner_builder, GADATASET, SCANNER_BUILDER, GObject) +G_DECLARE_DERIVABLE_TYPE(GADatasetScannerBuilder, + gadataset_scanner_builder, + GADATASET, + SCANNER_BUILDER, + GObject) struct _GADatasetScannerBuilderClass { GObjectClass parent_class; }; -GADATASET_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GADatasetScannerBuilder * -gadataset_scanner_builder_new(GADatasetDataset *dataset, GError **error); -GADATASET_AVAILABLE_IN_6_0 +gadataset_scanner_builder_new(GADatasetDataset *dataset, + GError **error); +GARROW_AVAILABLE_IN_6_0 GADatasetScannerBuilder * -gadataset_scanner_builder_new_record_batch_reader(GArrowRecordBatchReader *reader); +gadataset_scanner_builder_new_record_batch_reader( + GArrowRecordBatchReader *reader); -GADATASET_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 gboolean gadataset_scanner_builder_set_filter(GADatasetScannerBuilder *builder, GArrowExpression *expression, GError **error); -GADATASET_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GADatasetScanner * -gadataset_scanner_builder_finish(GADatasetScannerBuilder *builder, GError **error); +gadataset_scanner_builder_finish(GADatasetScannerBuilder *builder, + GError **error); G_END_DECLS diff --git a/c_glib/arrow-dataset-glib/scanner.hpp b/c_glib/arrow-dataset-glib/scanner.hpp index 028754a1813..663ab6fc44b 100644 --- a/c_glib/arrow-dataset-glib/scanner.hpp +++ b/c_glib/arrow-dataset-glib/scanner.hpp @@ -25,7 +25,8 @@ #include GADatasetScanner * -gadataset_scanner_new_raw(std::shared_ptr *arrow_scanner); +gadataset_scanner_new_raw( + std::shared_ptr *arrow_scanner); std::shared_ptr gadataset_scanner_get_raw(GADatasetScanner *scanner); diff --git a/c_glib/arrow-dataset-glib/version.h.in b/c_glib/arrow-dataset-glib/version.h.in deleted file mode 100644 index 7e678bda3a8..00000000000 --- a/c_glib/arrow-dataset-glib/version.h.in +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#pragma once - -#include - -/** - * SECTION: version - * @section_id: version-macros - * @title: Version related macros - * @include: arrow-dataset-glib/arrow-dataset-glib.h - * - * Apache Arrow Dataset GLib provides macros that can be used by C pre-processor. - * They are useful to check version related things at compile time. - */ - -/** - * GADATASET_VERSION_MAJOR: - * - * The major version. - * - * Since: 17.0.0 - */ -#define GADATASET_VERSION_MAJOR (@VERSION_MAJOR@) - -/** - * GADATASET_VERSION_MINOR: - * - * The minor version. - * - * Since: 17.0.0 - */ -#define GADATASET_VERSION_MINOR (@VERSION_MINOR@) - -/** - * GADATASET_VERSION_MICRO: - * - * The micro version. - * - * Since: 17.0.0 - */ -#define GADATASET_VERSION_MICRO (@VERSION_MICRO@) - -/** - * GADATASET_VERSION_TAG: - * - * The version tag. Normally, it's an empty string. It's "SNAPSHOT" - * for snapshot version. - * - * Since: 17.0.0 - */ -#define GADATASET_VERSION_TAG "@VERSION_TAG@" - -/** - * GADATASET_VERSION_CHECK: - * @major: A major version to check for. - * @minor: A minor version to check for. - * @micro: A micro version to check for. - * - * You can use this macro in C pre-processor. - * - * Returns: %TRUE if the compile time Apache Arrow GLib version is the - * same as or newer than the passed version, %FALSE otherwise. - * - * Since: 17.0.0 - */ -#define GADATASET_VERSION_CHECK(major, minor, micro) \ - (GADATASET_VERSION_MAJOR > (major) || \ - (GADATASET_VERSION_MAJOR == (major) && \ - GADATASET_VERSION_MINOR > (minor)) || \ - (GADATASET_VERSION_MAJOR == (major) && \ - GADATASET_VERSION_MINOR == (minor) && \ - GADATASET_VERSION_MICRO >= (micro))) - -/** - * GADATASET_DISABLE_DEPRECATION_WARNINGS: - * - * If this macro is defined, no deprecated warnings are produced. - * - * You must define this macro before including the - * arrow-glib/arrow-glib.h header. - * - * Since: 17.0.0 - */ - -#ifdef GADATASET_DISABLE_DEPRECATION_WARNINGS -# define GADATASET_DEPRECATED -# define GADATASET_DEPRECATED_FOR(function) -# define GADATASET_UNAVAILABLE(major, minor) -#else -# define GADATASET_DEPRECATED G_DEPRECATED -# define GADATASET_DEPRECATED_FOR(function) G_DEPRECATED_FOR(function) -# define GADATASET_UNAVAILABLE(major, minor) G_UNAVAILABLE(major, minor) -#endif - -@ENCODED_VERSIONS@ - -/** - * GADATASET_VERSION_MIN_REQUIRED: - * - * You can use this macro for compile time API version check. - * - * This macro value must be one of the predefined version macros such - * as %GADATASET_VERSION_0_10. - * - * If you use any functions that is defined by newer version than - * %GADATASET_VERSION_MIN_REQUIRED, deprecated warnings are produced at - * compile time. - * - * You must define this macro before including the - * arrow-dataset-glib/arrow-dataset-glib.h header. - * - * Since: 17.0.0 - */ -#ifndef GADATASET_VERSION_MIN_REQUIRED -# define GADATASET_VERSION_MIN_REQUIRED GARROW_VERSION_MIN_REQUIRED -#endif - -/** - * GADATASET_VERSION_MAX_ALLOWED: - * - * You can use this macro for compile time API version check. - * - * This macro value must be one of the predefined version macros such - * as %GADATASET_VERSION_0_10. - * - * If you use any functions that is defined by newer version than - * %GADATASET_VERSION_MAX_ALLOWED, deprecated warnings are produced at - * compile time. - * - * You must define this macro before including the - * arrow-dataset-glib/arrow-dataset-glib.h header. - * - * Since: 17.0.0 - */ -#ifndef GADATASET_VERSION_MAX_ALLOWED -# define GADATASET_VERSION_MAX_ALLOWED GARROW_VERSION_MAX_ALLOWED -#endif - -@VISIBILITY_MACROS@ - -@AVAILABILITY_MACROS@ diff --git a/c_glib/arrow-flight-glib/arrow-flight-glib.h b/c_glib/arrow-flight-glib/arrow-flight-glib.h index 7e973dd125d..6fc8f43d840 100644 --- a/c_glib/arrow-flight-glib/arrow-flight-glib.h +++ b/c_glib/arrow-flight-glib/arrow-flight-glib.h @@ -19,8 +19,6 @@ #pragma once -#include - #include #include #include diff --git a/c_glib/arrow-flight-glib/client.cpp b/c_glib/arrow-flight-glib/client.cpp index 80c47e336f8..60dec29dbbd 100644 --- a/c_glib/arrow-flight-glib/client.cpp +++ b/c_glib/arrow-flight-glib/client.cpp @@ -56,16 +56,18 @@ gaflight_stream_reader_class_init(GAFlightStreamReaderClass *klass) { } -typedef struct GAFlightCallOptionsPrivate_ -{ +typedef struct GAFlightCallOptionsPrivate_ { arrow::flight::FlightCallOptions options; } GAFlightCallOptionsPrivate; -G_DEFINE_TYPE_WITH_PRIVATE(GAFlightCallOptions, gaflight_call_options, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GAFlightCallOptions, + gaflight_call_options, + G_TYPE_OBJECT) -#define GAFLIGHT_CALL_OPTIONS_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_call_options_get_instance_private(GAFLIGHT_CALL_OPTIONS(obj))) +#define GAFLIGHT_CALL_OPTIONS_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_call_options_get_instance_private( \ + GAFLIGHT_CALL_OPTIONS(obj))) static void gaflight_call_options_finalize(GObject *object) @@ -81,7 +83,7 @@ static void gaflight_call_options_init(GAFlightCallOptions *object) { auto priv = GAFLIGHT_CALL_OPTIONS_GET_PRIVATE(object); - new (&priv->options) arrow::flight::FlightCallOptions; + new(&priv->options) arrow::flight::FlightCallOptions; } static void @@ -163,8 +165,8 @@ gaflight_call_options_foreach_header(GAFlightCallOptions *options, } } -struct GAFlightClientOptionsPrivate -{ + +struct GAFlightClientOptionsPrivate { arrow::flight::FlightClientOptions options; }; @@ -177,11 +179,14 @@ enum { PROP_DISABLE_SERVER_VERIFICATION, }; -G_DEFINE_TYPE_WITH_PRIVATE(GAFlightClientOptions, gaflight_client_options, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GAFlightClientOptions, + gaflight_client_options, + G_TYPE_OBJECT) -#define GAFLIGHT_CLIENT_OPTIONS_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_client_options_get_instance_private(GAFLIGHT_CLIENT_OPTIONS(obj))) +#define GAFLIGHT_CLIENT_OPTIONS_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_client_options_get_instance_private( \ + GAFLIGHT_CLIENT_OPTIONS(obj))) static void gaflight_client_options_finalize(GObject *object) @@ -263,7 +268,7 @@ static void gaflight_client_options_init(GAFlightClientOptions *object) { auto priv = GAFLIGHT_CLIENT_OPTIONS_GET_PRIVATE(object); - new (&(priv->options)) arrow::flight::FlightClientOptions; + new(&(priv->options)) arrow::flight::FlightClientOptions; priv->options = arrow::flight::FlightClientOptions::Defaults(); } @@ -290,7 +295,9 @@ gaflight_client_options_class_init(GAFlightClientOptionsClass *klass) nullptr, options.tls_root_certs.c_str(), static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_TLS_ROOT_CERTIFICATES, spec); + g_object_class_install_property(gobject_class, + PROP_TLS_ROOT_CERTIFICATES, + spec); /** * GAFlightClientOptions:override-host-name: @@ -304,7 +311,9 @@ gaflight_client_options_class_init(GAFlightClientOptionsClass *klass) nullptr, options.override_hostname.c_str(), static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_OVERRIDE_HOST_NAME, spec); + g_object_class_install_property(gobject_class, + PROP_OVERRIDE_HOST_NAME, + spec); /** * GAFlightClientOptions:certificate-chain: @@ -318,7 +327,9 @@ gaflight_client_options_class_init(GAFlightClientOptionsClass *klass) nullptr, options.cert_chain.c_str(), static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_CERTIFICATE_CHAIN, spec); + g_object_class_install_property(gobject_class, + PROP_CERTIFICATE_CHAIN, + spec); /** * GAFlightClientOptions:private-key: @@ -333,7 +344,9 @@ gaflight_client_options_class_init(GAFlightClientOptionsClass *klass) nullptr, options.private_key.c_str(), static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_PRIVATE_KEY, spec); + g_object_class_install_property(gobject_class, + PROP_PRIVATE_KEY, + spec); /** * GAFlightClientOptions:write-size-limit-bytes: @@ -353,7 +366,9 @@ gaflight_client_options_class_init(GAFlightClientOptionsClass *klass) INT64_MAX, options.write_size_limit_bytes, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_WRITE_SIZE_LIMIT_BYTES, spec); + g_object_class_install_property(gobject_class, + PROP_WRITE_SIZE_LIMIT_BYTES, + spec); /** * GAFlightClientOptions:disable-server-verification: @@ -368,7 +383,9 @@ gaflight_client_options_class_init(GAFlightClientOptionsClass *klass) NULL, options.disable_server_verification, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_DISABLE_SERVER_VERIFICATION, spec); + g_object_class_install_property(gobject_class, + PROP_DISABLE_SERVER_VERIFICATION, + spec); } /** @@ -385,8 +402,8 @@ gaflight_client_options_new(void) g_object_new(GAFLIGHT_TYPE_CLIENT_OPTIONS, NULL)); } -struct GAFlightClientPrivate -{ + +struct GAFlightClientPrivate { std::shared_ptr client; }; @@ -394,11 +411,14 @@ enum { PROP_CLIENT = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GAFlightClient, gaflight_client, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GAFlightClient, + gaflight_client, + G_TYPE_OBJECT) -#define GAFLIGHT_CLIENT_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_client_get_instance_private(GAFLIGHT_CLIENT(obj))) +#define GAFLIGHT_CLIENT_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_client_get_instance_private( \ + GAFLIGHT_CLIENT(obj))) static void gaflight_client_finalize(GObject *object) @@ -420,8 +440,9 @@ gaflight_client_set_property(GObject *object, switch (prop_id) { case PROP_CLIENT: - priv->client = *(static_cast *>( - g_value_get_pointer(value))); + priv->client = + *(static_cast *>( + g_value_get_pointer(value))); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -433,7 +454,7 @@ static void gaflight_client_init(GAFlightClient *object) { auto priv = GAFLIGHT_CLIENT_GET_PRIVATE(object); - new (&priv->client) std::shared_ptr; + new(&priv->client) std::shared_ptr; } static void @@ -445,11 +466,11 @@ gaflight_client_class_init(GAFlightClientClass *klass) gobject_class->set_property = gaflight_client_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "client", - "Client", - "The raw std::shared_ptr", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("client", + "Client", + "The raw std::shared_ptr", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_CLIENT, spec); } @@ -477,7 +498,8 @@ gaflight_client_new(GAFlightLocation *location, result = arrow::flight::FlightClient::Connect(*flight_location); } if (garrow::check(error, result, "[flight-client][new]")) { - std::shared_ptr flight_client = std::move(*result); + std::shared_ptr flight_client = + std::move(*result); return gaflight_client_new_raw(&flight_client); } else { return NULL; @@ -494,11 +516,14 @@ gaflight_client_new(GAFlightLocation *location, * Since: 8.0.0 */ gboolean -gaflight_client_close(GAFlightClient *client, GError **error) +gaflight_client_close(GAFlightClient *client, + GError **error) { auto flight_client = gaflight_client_get_raw(client); auto status = flight_client->Close(); - return garrow::check(error, status, "[flight-client][close]"); + return garrow::check(error, + status, + "[flight-client][close]"); } /** @@ -532,13 +557,19 @@ gaflight_client_authenticate_basic_token(GAFlightClient *client, if (options) { flight_options = gaflight_call_options_get_raw(options); } - auto result = flight_client->AuthenticateBasicToken(*flight_options, user, password); - if (!garrow::check(error, result, "[flight-client][authenticate-basic-token]")) { + auto result = flight_client->AuthenticateBasicToken(*flight_options, + user, + password); + if (!garrow::check(error, + result, + "[flight-client][authenticate-basic-token]")) { return FALSE; } auto bearer_token = *result; - *bearer_name = g_strndup(bearer_token.first.data(), bearer_token.first.size()); - *bearer_value = g_strndup(bearer_token.second.data(), bearer_token.second.size()); + *bearer_name = g_strndup(bearer_token.first.data(), + bearer_token.first.size()); + *bearer_value = g_strndup(bearer_token.second.data(), + bearer_token.second.size()); return TRUE; } @@ -574,14 +605,18 @@ gaflight_client_list_flights(GAFlightClient *client, std::unique_ptr flight_listing; auto result = flight_client->ListFlights(*flight_options, *flight_criteria); auto status = std::move(result).Value(&flight_listing); - if (!garrow::check(error, status, "[flight-client][list-flights]")) { + if (!garrow::check(error, + status, + "[flight-client][list-flights]")) { return NULL; } GList *listing = NULL; std::unique_ptr flight_info; while (true) { status = flight_listing->Next().Value(&flight_info); - if (!garrow::check(error, status, "[flight-client][list-flights]")) { + if (!garrow::check(error, + status, + "[flight-client][list-flights]")) { g_list_free_full(listing, g_object_unref); return NULL; } @@ -619,7 +654,8 @@ gaflight_client_get_flight_info(GAFlightClient *client, if (options) { flight_options = gaflight_call_options_get_raw(options); } - auto result = flight_client->GetFlightInfo(*flight_options, *flight_descriptor); + auto result = flight_client->GetFlightInfo(*flight_options, + *flight_descriptor); if (!garrow::check(error, result, "[flight-client][get-flight-info]")) { return NULL; } @@ -654,25 +690,29 @@ gaflight_client_do_get(GAFlightClient *client, flight_options = gaflight_call_options_get_raw(options); } auto result = flight_client->DoGet(*flight_options, *flight_ticket); - if (!garrow::check(error, result, "[flight-client][do-get]")) { + if (!garrow::check(error, + result, + "[flight-client][do-get]")) { return nullptr; } auto flight_reader = std::move(*result); return gaflight_stream_reader_new_raw(flight_reader.release(), TRUE); } + G_END_DECLS + GAFlightStreamReader * -gaflight_stream_reader_new_raw(arrow::flight::FlightStreamReader *flight_reader, - gboolean is_owner) -{ - return GAFLIGHT_STREAM_READER(g_object_new(GAFLIGHT_TYPE_STREAM_READER, - "reader", - flight_reader, - "is-owner", - is_owner, - NULL)); +gaflight_stream_reader_new_raw( + arrow::flight::FlightStreamReader *flight_reader, + gboolean is_owner) +{ + return GAFLIGHT_STREAM_READER( + g_object_new(GAFLIGHT_TYPE_STREAM_READER, + "reader", flight_reader, + "is-owner", is_owner, + NULL)); } arrow::flight::FlightCallOptions * @@ -697,8 +737,10 @@ gaflight_client_get_raw(GAFlightClient *client) } GAFlightClient * -gaflight_client_new_raw(std::shared_ptr *flight_client) +gaflight_client_new_raw( + std::shared_ptr *flight_client) { - return GAFLIGHT_CLIENT( - g_object_new(GAFLIGHT_TYPE_CLIENT, "client", flight_client, NULL)); + return GAFLIGHT_CLIENT(g_object_new(GAFLIGHT_TYPE_CLIENT, + "client", flight_client, + NULL)); } diff --git a/c_glib/arrow-flight-glib/client.h b/c_glib/arrow-flight-glib/client.h index a91bbe55e3c..42b18bfa607 100644 --- a/c_glib/arrow-flight-glib/client.h +++ b/c_glib/arrow-flight-glib/client.h @@ -23,8 +23,9 @@ G_BEGIN_DECLS -#define GAFLIGHT_TYPE_STREAM_READER (gaflight_stream_reader_get_type()) -GAFLIGHT_AVAILABLE_IN_6_0 + +#define GAFLIGHT_TYPE_STREAM_READER \ + (gaflight_stream_reader_get_type()) G_DECLARE_DERIVABLE_TYPE(GAFlightStreamReader, gaflight_stream_reader, GAFLIGHT, @@ -35,65 +36,76 @@ struct _GAFlightStreamReaderClass GAFlightRecordBatchReaderClass parent_class; }; + #define GAFLIGHT_TYPE_CALL_OPTIONS (gaflight_call_options_get_type()) -GAFLIGHT_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GAFlightCallOptions, gaflight_call_options, GAFLIGHT, CALL_OPTIONS, GObject) +G_DECLARE_DERIVABLE_TYPE(GAFlightCallOptions, + gaflight_call_options, + GAFLIGHT, + CALL_OPTIONS, + GObject) struct _GAFlightCallOptionsClass { GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GAFlightCallOptions * gaflight_call_options_new(void); -GAFLIGHT_AVAILABLE_IN_9_0 +GARROW_AVAILABLE_IN_9_0 void gaflight_call_options_add_header(GAFlightCallOptions *options, const gchar *name, const gchar *value); -GAFLIGHT_AVAILABLE_IN_9_0 +GARROW_AVAILABLE_IN_9_0 void gaflight_call_options_clear_headers(GAFlightCallOptions *options); -GAFLIGHT_AVAILABLE_IN_9_0 +GARROW_AVAILABLE_IN_9_0 void gaflight_call_options_foreach_header(GAFlightCallOptions *options, GAFlightHeaderFunc func, gpointer user_data); + #define GAFLIGHT_TYPE_CLIENT_OPTIONS (gaflight_client_options_get_type()) -GAFLIGHT_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GAFlightClientOptions, gaflight_client_options, GAFLIGHT, CLIENT_OPTIONS, GObject) +G_DECLARE_DERIVABLE_TYPE(GAFlightClientOptions, + gaflight_client_options, + GAFLIGHT, + CLIENT_OPTIONS, + GObject) struct _GAFlightClientOptionsClass { GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GAFlightClientOptions * gaflight_client_options_new(void); + #define GAFLIGHT_TYPE_CLIENT (gaflight_client_get_type()) -GAFLIGHT_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE(GAFlightClient, gaflight_client, GAFLIGHT, CLIENT, GObject) +G_DECLARE_DERIVABLE_TYPE(GAFlightClient, + gaflight_client, + GAFLIGHT, + CLIENT, + GObject) struct _GAFlightClientClass { GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GAFlightClient * gaflight_client_new(GAFlightLocation *location, GAFlightClientOptions *options, GError **error); -GAFLIGHT_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gboolean -gaflight_client_close(GAFlightClient *client, GError **error); +gaflight_client_close(GAFlightClient *client, + GError **error); -GAFLIGHT_AVAILABLE_IN_12_0 +GARROW_AVAILABLE_IN_12_0 gboolean gaflight_client_authenticate_basic_token(GAFlightClient *client, const gchar *user, @@ -103,25 +115,26 @@ gaflight_client_authenticate_basic_token(GAFlightClient *client, gchar **bearer_value, GError **error); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GList * gaflight_client_list_flights(GAFlightClient *client, GAFlightCriteria *criteria, GAFlightCallOptions *options, GError **error); -GAFLIGHT_AVAILABLE_IN_9_0 +GARROW_AVAILABLE_IN_9_0 GAFlightInfo * gaflight_client_get_flight_info(GAFlightClient *client, GAFlightDescriptor *descriptor, GAFlightCallOptions *options, GError **error); -GAFLIGHT_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 GAFlightStreamReader * gaflight_client_do_get(GAFlightClient *client, GAFlightTicket *ticket, GAFlightCallOptions *options, GError **error); + G_END_DECLS diff --git a/c_glib/arrow-flight-glib/client.hpp b/c_glib/arrow-flight-glib/client.hpp index 185a28e6dc4..b6b768b8d31 100644 --- a/c_glib/arrow-flight-glib/client.hpp +++ b/c_glib/arrow-flight-glib/client.hpp @@ -23,23 +23,20 @@ #include -GAFLIGHT_EXTERN + GAFlightStreamReader * -gaflight_stream_reader_new_raw(arrow::flight::FlightStreamReader *flight_reader, - gboolean is_owner); +gaflight_stream_reader_new_raw( + arrow::flight::FlightStreamReader *flight_reader, + gboolean is_owner); -GAFLIGHT_EXTERN arrow::flight::FlightCallOptions * gaflight_call_options_get_raw(GAFlightCallOptions *options); -GAFLIGHT_EXTERN arrow::flight::FlightClientOptions * gaflight_client_options_get_raw(GAFlightClientOptions *options); -GAFLIGHT_EXTERN std::shared_ptr gaflight_client_get_raw(GAFlightClient *client); - -GAFLIGHT_EXTERN GAFlightClient * -gaflight_client_new_raw(std::shared_ptr *flight_client); +gaflight_client_new_raw( + std::shared_ptr *flight_client); diff --git a/c_glib/arrow-flight-glib/common.cpp b/c_glib/arrow-flight-glib/common.cpp index efc544f10cf..5aee3483032 100644 --- a/c_glib/arrow-flight-glib/common.cpp +++ b/c_glib/arrow-flight-glib/common.cpp @@ -53,6 +53,7 @@ G_BEGIN_DECLS * Since: 5.0.0 */ + /** * GAFlightHeaderFunc: * @name: A header name. @@ -67,8 +68,8 @@ G_BEGIN_DECLS * Since: 9.0.0 */ -typedef struct GAFlightCriteriaPrivate_ -{ + +typedef struct GAFlightCriteriaPrivate_ { arrow::flight::Criteria criteria; GBytes *expression; } GAFlightCriteriaPrivate; @@ -77,11 +78,14 @@ enum { PROP_EXPRESSION = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GAFlightCriteria, gaflight_criteria, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GAFlightCriteria, + gaflight_criteria, + G_TYPE_OBJECT) -#define GAFLIGHT_CRITERIA_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_criteria_get_instance_private(GAFLIGHT_CRITERIA(obj))) +#define GAFLIGHT_CRITERIA_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_criteria_get_instance_private( \ + GAFLIGHT_CRITERIA(obj))) static void gaflight_criteria_dispose(GObject *object) @@ -123,7 +127,8 @@ gaflight_criteria_set_property(GObject *object, { gsize size; auto data = g_bytes_get_data(priv->expression, &size); - priv->criteria.expression.assign(static_cast(data), size); + priv->criteria.expression.assign(static_cast(data), + size); } break; default: @@ -154,7 +159,7 @@ static void gaflight_criteria_init(GAFlightCriteria *object) { auto priv = GAFLIGHT_CRITERIA_GET_PRIVATE(object); - new (&priv->criteria) arrow::flight::Criteria; + new(&priv->criteria) arrow::flight::Criteria; } static void @@ -196,19 +201,24 @@ GAFlightCriteria * gaflight_criteria_new(GBytes *expression) { return GAFLIGHT_CRITERIA( - g_object_new(GAFLIGHT_TYPE_CRITERIA, "expression", expression, NULL)); + g_object_new(GAFLIGHT_TYPE_CRITERIA, + "expression", expression, + NULL)); } -typedef struct GAFlightLocationPrivate_ -{ + +typedef struct GAFlightLocationPrivate_ { arrow::flight::Location location; } GAFlightLocationPrivate; -G_DEFINE_TYPE_WITH_PRIVATE(GAFlightLocation, gaflight_location, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GAFlightLocation, + gaflight_location, + G_TYPE_OBJECT) -#define GAFLIGHT_LOCATION_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_location_get_instance_private(GAFLIGHT_LOCATION(obj))) +#define GAFLIGHT_LOCATION_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_location_get_instance_private( \ + GAFLIGHT_LOCATION(obj))) static void gaflight_location_finalize(GObject *object) @@ -224,7 +234,7 @@ static void gaflight_location_init(GAFlightLocation *object) { auto priv = GAFLIGHT_LOCATION_GET_PRIVATE(object); - new (&priv->location) arrow::flight::Location; + new(&priv->location) arrow::flight::Location; } static void @@ -245,7 +255,8 @@ gaflight_location_class_init(GAFlightLocationClass *klass) * Since: 5.0.0 */ GAFlightLocation * -gaflight_location_new(const gchar *uri, GError **error) +gaflight_location_new(const gchar *uri, + GError **error) { auto location = GAFLIGHT_LOCATION(g_object_new(GAFLIGHT_TYPE_LOCATION, NULL)); auto flight_location = gaflight_location_get_raw(location); @@ -305,15 +316,16 @@ gaflight_location_get_scheme(GAFlightLocation *location) * Since: 5.0.0 */ gboolean -gaflight_location_equal(GAFlightLocation *location, GAFlightLocation *other_location) +gaflight_location_equal(GAFlightLocation *location, + GAFlightLocation *other_location) { const auto flight_location = gaflight_location_get_raw(location); const auto flight_other_location = gaflight_location_get_raw(other_location); return flight_location->Equals(*flight_other_location); } -typedef struct GAFlightDescriptorPrivate_ -{ + +typedef struct GAFlightDescriptorPrivate_ { arrow::flight::FlightDescriptor descriptor; } GAFlightDescriptorPrivate; @@ -325,9 +337,10 @@ G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GAFlightDescriptor, gaflight_descriptor, G_TYPE_OBJECT) -#define GAFLIGHT_DESCRIPTOR_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_descriptor_get_instance_private(GAFLIGHT_DESCRIPTOR(obj))) +#define GAFLIGHT_DESCRIPTOR_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_descriptor_get_instance_private( \ + GAFLIGHT_DESCRIPTOR(obj))) static void gaflight_descriptor_finalize(GObject *object) @@ -349,8 +362,8 @@ gaflight_descriptor_set_property(GObject *object, switch (prop_id) { case PROP_DESCRIPTOR: - priv->descriptor = - *static_cast(g_value_get_pointer(value)); + priv->descriptor = *static_cast( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -362,7 +375,7 @@ static void gaflight_descriptor_init(GAFlightDescriptor *object) { auto priv = GAFLIGHT_DESCRIPTOR_GET_PRIVATE(object); - new (&priv->descriptor) arrow::flight::FlightDescriptor; + new(&priv->descriptor) arrow::flight::FlightDescriptor; } static void @@ -374,11 +387,11 @@ gaflight_descriptor_class_init(GAFlightDescriptorClass *klass) gobject_class->set_property = gaflight_descriptor_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "descriptor", - "Descriptor", - "The raw arrow::flight::FlightDescriptor", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("descriptor", + "Descriptor", + "The raw arrow::flight::FlightDescriptor", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_EXPRESSION, spec); } @@ -414,12 +427,17 @@ gboolean gaflight_descriptor_equal(GAFlightDescriptor *descriptor, GAFlightDescriptor *other_descriptor) { - const auto flight_descriptor = gaflight_descriptor_get_raw(descriptor); - const auto flight_other_descriptor = gaflight_descriptor_get_raw(other_descriptor); + const auto flight_descriptor = + gaflight_descriptor_get_raw(descriptor); + const auto flight_other_descriptor = + gaflight_descriptor_get_raw(other_descriptor); return flight_descriptor->Equals(*flight_other_descriptor); } -G_DEFINE_TYPE(GAFlightPathDescriptor, gaflight_path_descriptor, GAFLIGHT_TYPE_DESCRIPTOR) + +G_DEFINE_TYPE(GAFlightPathDescriptor, + gaflight_path_descriptor, + GAFLIGHT_TYPE_DESCRIPTOR) static void gaflight_path_descriptor_init(GAFlightPathDescriptor *object) @@ -442,14 +460,16 @@ gaflight_path_descriptor_class_init(GAFlightPathDescriptorClass *klass) * Since: 5.0.0 */ GAFlightPathDescriptor * -gaflight_path_descriptor_new(const gchar **paths, gsize n_paths) +gaflight_path_descriptor_new(const gchar **paths, + gsize n_paths) { std::vector flight_paths; for (gsize i = 0; i < n_paths; i++) { flight_paths.push_back(paths[i]); } auto flight_descriptor = arrow::flight::FlightDescriptor::Path(flight_paths); - return GAFLIGHT_PATH_DESCRIPTOR(gaflight_descriptor_new_raw(&flight_descriptor)); + return GAFLIGHT_PATH_DESCRIPTOR( + gaflight_descriptor_new_raw(&flight_descriptor)); } /** @@ -482,6 +502,7 @@ gaflight_path_descriptor_get_paths(GAFlightPathDescriptor *descriptor) } } + G_DEFINE_TYPE(GAFlightCommandDescriptor, gaflight_command_descriptor, GAFLIGHT_TYPE_DESCRIPTOR) @@ -508,7 +529,8 @@ GAFlightCommandDescriptor * gaflight_command_descriptor_new(const gchar *command) { auto flight_descriptor = arrow::flight::FlightDescriptor::Command(command); - return GAFLIGHT_COMMAND_DESCRIPTOR(gaflight_descriptor_new_raw(&flight_descriptor)); + return GAFLIGHT_COMMAND_DESCRIPTOR( + gaflight_descriptor_new_raw(&flight_descriptor)); } /** @@ -530,8 +552,8 @@ gaflight_command_descriptor_get_command(GAFlightCommandDescriptor *descriptor) return g_strdup(flight_command.c_str()); } -typedef struct GAFlightTicketPrivate_ -{ + +typedef struct GAFlightTicketPrivate_ { arrow::flight::Ticket ticket; GBytes *data; } GAFlightTicketPrivate; @@ -540,11 +562,14 @@ enum { PROP_DATA = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GAFlightTicket, gaflight_ticket, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GAFlightTicket, + gaflight_ticket, + G_TYPE_OBJECT) -#define GAFLIGHT_TICKET_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_ticket_get_instance_private(GAFLIGHT_TICKET(obj))) +#define GAFLIGHT_TICKET_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_ticket_get_instance_private( \ + GAFLIGHT_TICKET(obj))) static void gaflight_ticket_dispose(GObject *object) @@ -586,7 +611,8 @@ gaflight_ticket_set_property(GObject *object, { gsize size; auto data = g_bytes_get_data(priv->data, &size); - priv->ticket.ticket.assign(static_cast(data), size); + priv->ticket.ticket.assign(static_cast(data), + size); } break; default: @@ -617,7 +643,7 @@ static void gaflight_ticket_init(GAFlightTicket *object) { auto priv = GAFLIGHT_TICKET_GET_PRIVATE(object); - new (&priv->ticket) arrow::flight::Ticket; + new(&priv->ticket) arrow::flight::Ticket; } static void @@ -659,7 +685,10 @@ gaflight_ticket_class_init(GAFlightTicketClass *klass) GAFlightTicket * gaflight_ticket_new(GBytes *data) { - return GAFLIGHT_TICKET(g_object_new(GAFLIGHT_TYPE_TICKET, "data", data, NULL)); + return GAFLIGHT_TICKET( + g_object_new(GAFLIGHT_TYPE_TICKET, + "data", data, + NULL)); } /** @@ -672,15 +701,16 @@ gaflight_ticket_new(GBytes *data) * Since: 5.0.0 */ gboolean -gaflight_ticket_equal(GAFlightTicket *ticket, GAFlightTicket *other_ticket) +gaflight_ticket_equal(GAFlightTicket *ticket, + GAFlightTicket *other_ticket) { const auto flight_ticket = gaflight_ticket_get_raw(ticket); const auto flight_other_ticket = gaflight_ticket_get_raw(other_ticket); return flight_ticket->Equals(*flight_other_ticket); } -typedef struct GAFlightEndpointPrivate_ -{ + +typedef struct GAFlightEndpointPrivate_ { arrow::flight::FlightEndpoint endpoint; GAFlightTicket *ticket; GList *locations; @@ -690,11 +720,14 @@ enum { PROP_TICKET = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GAFlightEndpoint, gaflight_endpoint, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GAFlightEndpoint, + gaflight_endpoint, + G_TYPE_OBJECT) -#define GAFLIGHT_ENDPOINT_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_endpoint_get_instance_private(GAFLIGHT_ENDPOINT(obj))) +#define GAFLIGHT_ENDPOINT_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_endpoint_get_instance_private( \ + GAFLIGHT_ENDPOINT(obj))) static void gaflight_endpoint_dispose(GObject *object) @@ -746,7 +779,7 @@ static void gaflight_endpoint_init(GAFlightEndpoint *object) { auto priv = GAFLIGHT_ENDPOINT_GET_PRIVATE(object); - new (&priv->endpoint) arrow::flight::FlightEndpoint; + new(&priv->endpoint) arrow::flight::FlightEndpoint; } static void @@ -784,7 +817,8 @@ gaflight_endpoint_class_init(GAFlightEndpointClass *klass) * Since: 5.0.0 */ GAFlightEndpoint * -gaflight_endpoint_new(GAFlightTicket *ticket, GList *locations) +gaflight_endpoint_new(GAFlightTicket *ticket, + GList *locations) { auto endpoint = gaflight_endpoint_new_raw(nullptr, ticket); auto priv = GAFLIGHT_ENDPOINT_GET_PRIVATE(endpoint); @@ -806,7 +840,8 @@ gaflight_endpoint_new(GAFlightTicket *ticket, GList *locations) * Since: 5.0.0 */ gboolean -gaflight_endpoint_equal(GAFlightEndpoint *endpoint, GAFlightEndpoint *other_endpoint) +gaflight_endpoint_equal(GAFlightEndpoint *endpoint, + GAFlightEndpoint *other_endpoint) { const auto flight_endpoint = gaflight_endpoint_get_raw(endpoint); const auto flight_other_endpoint = gaflight_endpoint_get_raw(other_endpoint); @@ -832,14 +867,15 @@ gaflight_endpoint_get_locations(GAFlightEndpoint *endpoint) const auto flight_endpoint = gaflight_endpoint_get_raw(endpoint); GList *locations = NULL; for (const auto &flight_location : flight_endpoint->locations) { - auto location = gaflight_location_new(flight_location.ToString().c_str(), nullptr); + auto location = gaflight_location_new(flight_location.ToString().c_str(), + nullptr); locations = g_list_prepend(locations, location); } return g_list_reverse(locations); } -typedef struct GAFlightInfoPrivate_ -{ + +typedef struct GAFlightInfoPrivate_ { arrow::flight::FlightInfo info; } GAFlightInfoPrivate; @@ -847,11 +883,14 @@ enum { PROP_INFO = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GAFlightInfo, gaflight_info, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GAFlightInfo, + gaflight_info, + G_TYPE_OBJECT) -#define GAFLIGHT_INFO_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_info_get_instance_private(GAFLIGHT_INFO(obj))) +#define GAFLIGHT_INFO_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_info_get_instance_private( \ + GAFLIGHT_INFO(obj))) static void gaflight_info_finalize(GObject *object) @@ -874,8 +913,9 @@ gaflight_info_set_property(GObject *object, switch (prop_id) { case PROP_INFO: { - auto info = static_cast(g_value_get_pointer(value)); - new (&(priv->info)) arrow::flight::FlightInfo(*info); + auto info = + static_cast(g_value_get_pointer(value)); + new(&(priv->info)) arrow::flight::FlightInfo(*info); } break; default: @@ -898,11 +938,11 @@ gaflight_info_class_init(GAFlightInfoClass *klass) gobject_class->set_property = gaflight_info_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "info", - "Info", - "The raw arrow::flight::FlightInfo *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("info", + "Info", + "The raw arrow::flight::FlightInfo *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_INFO, spec); } @@ -934,12 +974,15 @@ gaflight_info_new(GArrowSchema *schema, auto endpoint = GAFLIGHT_ENDPOINT(node->data); flight_endpoints.push_back(*gaflight_endpoint_get_raw(endpoint)); } - auto flight_info_result = arrow::flight::FlightInfo::Make(*arrow_schema, - *flight_descriptor, - flight_endpoints, - total_records, - total_bytes); - if (!garrow::check(error, flight_info_result, "[flight-info][new]")) { + auto flight_info_result = + arrow::flight::FlightInfo::Make(*arrow_schema, + *flight_descriptor, + flight_endpoints, + total_records, + total_bytes); + if (!garrow::check(error, + flight_info_result, + "[flight-info][new]")) { return NULL; } return gaflight_info_new_raw(&(*flight_info_result)); @@ -956,15 +999,22 @@ gaflight_info_new(GArrowSchema *schema, * Since: 5.0.0 */ gboolean -gaflight_info_equal(GAFlightInfo *info, GAFlightInfo *other_info) +gaflight_info_equal(GAFlightInfo *info, + GAFlightInfo *other_info) { const auto flight_info = gaflight_info_get_raw(info); const auto flight_other_info = gaflight_info_get_raw(other_info); - return (flight_info->serialized_schema() == flight_other_info->serialized_schema()) && - (flight_info->descriptor() == flight_other_info->descriptor()) && - (flight_info->endpoints() == flight_other_info->endpoints()) && - (flight_info->total_records() == flight_other_info->total_records()) && - (flight_info->total_bytes() == flight_other_info->total_bytes()); + return + (flight_info->serialized_schema() == + flight_other_info->serialized_schema()) && + (flight_info->descriptor() == + flight_other_info->descriptor()) && + (flight_info->endpoints() == + flight_other_info->endpoints()) && + (flight_info->total_records() == + flight_other_info->total_records()) && + (flight_info->total_bytes() == + flight_other_info->total_bytes()); } /** @@ -978,7 +1028,9 @@ gaflight_info_equal(GAFlightInfo *info, GAFlightInfo *other_info) * Since: 5.0.0 */ GArrowSchema * -gaflight_info_get_schema(GAFlightInfo *info, GArrowReadOptions *options, GError **error) +gaflight_info_get_schema(GAFlightInfo *info, + GArrowReadOptions *options, + GError **error) { const auto flight_info = gaflight_info_get_raw(info); arrow::Status status; @@ -1063,8 +1115,7 @@ gaflight_info_get_total_bytes(GAFlightInfo *info) return flight_info->total_bytes(); } -typedef struct GAFlightStreamChunkPrivate_ -{ +typedef struct GAFlightStreamChunkPrivate_ { arrow::flight::FlightStreamChunk chunk; } GAFlightStreamChunkPrivate; @@ -1072,11 +1123,14 @@ enum { PROP_CHUNK = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GAFlightStreamChunk, gaflight_stream_chunk, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GAFlightStreamChunk, + gaflight_stream_chunk, + G_TYPE_OBJECT) -#define GAFLIGHT_STREAM_CHUNK_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_stream_chunk_get_instance_private(GAFLIGHT_STREAM_CHUNK(obj))) +#define GAFLIGHT_STREAM_CHUNK_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_stream_chunk_get_instance_private( \ + GAFLIGHT_STREAM_CHUNK(obj))) static void gaflight_stream_chunk_finalize(GObject *object) @@ -1099,7 +1153,8 @@ gaflight_stream_chunk_set_property(GObject *object, switch (prop_id) { case PROP_CHUNK: priv->chunk = - *static_cast(g_value_get_pointer(value)); + *static_cast( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -1121,11 +1176,11 @@ gaflight_stream_chunk_class_init(GAFlightStreamChunkClass *klass) gobject_class->set_property = gaflight_stream_chunk_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "chunk", - "Stream chunk", - "The raw arrow::flight::FlightStreamChunk *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("chunk", + "Stream chunk", + "The raw arrow::flight::FlightStreamChunk *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_CHUNK, spec); } @@ -1165,8 +1220,8 @@ gaflight_stream_chunk_get_metadata(GAFlightStreamChunk *chunk) } } -typedef struct GAFlightRecordBatchReaderPrivate_ -{ + +typedef struct GAFlightRecordBatchReaderPrivate_ { arrow::flight::MetadataRecordBatchReader *reader; bool is_owner; } GAFlightRecordBatchReaderPrivate; @@ -1180,9 +1235,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GAFlightRecordBatchReader, gaflight_record_batch_reader, G_TYPE_OBJECT) -#define GAFLIGHT_RECORD_BATCH_READER_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_record_batch_reader_get_instance_private( \ +#define GAFLIGHT_RECORD_BATCH_READER_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_record_batch_reader_get_instance_private( \ GAFLIGHT_RECORD_BATCH_READER(obj))) static void @@ -1206,7 +1261,8 @@ gaflight_record_batch_reader_set_property(GObject *object, switch (prop_id) { case PROP_READER: priv->reader = - static_cast(g_value_get_pointer(value)); + static_cast( + g_value_get_pointer(value)); break; case PROP_IS_OWNER: priv->is_owner = g_value_get_boolean(value); @@ -1231,19 +1287,19 @@ gaflight_record_batch_reader_class_init(GAFlightRecordBatchReaderClass *klass) gobject_class->set_property = gaflight_record_batch_reader_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "reader", - nullptr, - nullptr, - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("reader", + nullptr, + nullptr, + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_READER, spec); - spec = g_param_spec_boolean( - "is-owner", - nullptr, - nullptr, - TRUE, - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_boolean("is-owner", + nullptr, + nullptr, + TRUE, + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_IS_OWNER, spec); } @@ -1258,7 +1314,8 @@ gaflight_record_batch_reader_class_init(GAFlightRecordBatchReaderClass *klass) * Since: 6.0.0 */ GAFlightStreamChunk * -gaflight_record_batch_reader_read_next(GAFlightRecordBatchReader *reader, GError **error) +gaflight_record_batch_reader_read_next(GAFlightRecordBatchReader *reader, + GError **error) { auto flight_reader = gaflight_record_batch_reader_get_raw(reader); arrow::flight::FlightStreamChunk flight_chunk; @@ -1284,7 +1341,8 @@ gaflight_record_batch_reader_read_next(GAFlightRecordBatchReader *reader, GError * Since: 6.0.0 */ GArrowTable * -gaflight_record_batch_reader_read_all(GAFlightRecordBatchReader *reader, GError **error) +gaflight_record_batch_reader_read_all(GAFlightRecordBatchReader *reader, + GError **error) { auto flight_reader = gaflight_record_batch_reader_get_raw(reader); std::shared_ptr arrow_table; @@ -1296,16 +1354,18 @@ gaflight_record_batch_reader_read_all(GAFlightRecordBatchReader *reader, GError } } + G_END_DECLS + GAFlightCriteria * gaflight_criteria_new_raw(const arrow::flight::Criteria *flight_criteria) { auto criteria = g_object_new(GAFLIGHT_TYPE_CRITERIA, NULL); auto priv = GAFLIGHT_CRITERIA_GET_PRIVATE(criteria); priv->criteria = *flight_criteria; - priv->expression = - g_bytes_new(priv->criteria.expression.data(), priv->criteria.expression.size()); + priv->expression = g_bytes_new(priv->criteria.expression.data(), + priv->criteria.expression.size()); return GAFLIGHT_CRITERIA(criteria); } @@ -1324,7 +1384,8 @@ gaflight_location_get_raw(GAFlightLocation *location) } GAFlightDescriptor * -gaflight_descriptor_new_raw(const arrow::flight::FlightDescriptor *flight_descriptor) +gaflight_descriptor_new_raw( + const arrow::flight::FlightDescriptor *flight_descriptor) { GType gtype = GAFLIGHT_TYPE_DESCRIPTOR; switch (flight_descriptor->type) { @@ -1337,7 +1398,9 @@ gaflight_descriptor_new_raw(const arrow::flight::FlightDescriptor *flight_descri default: break; } - return GAFLIGHT_DESCRIPTOR(g_object_new(gtype, "descriptor", flight_descriptor, NULL)); + return GAFLIGHT_DESCRIPTOR(g_object_new(gtype, + "descriptor", flight_descriptor, + NULL)); } arrow::flight::FlightDescriptor * @@ -1353,7 +1416,8 @@ gaflight_ticket_new_raw(const arrow::flight::Ticket *flight_ticket) auto ticket = g_object_new(GAFLIGHT_TYPE_TICKET, NULL); auto priv = GAFLIGHT_TICKET_GET_PRIVATE(ticket); priv->ticket = *flight_ticket; - priv->data = g_bytes_new(priv->ticket.ticket.data(), priv->ticket.ticket.size()); + priv->data = g_bytes_new(priv->ticket.ticket.data(), + priv->ticket.ticket.size()); return GAFLIGHT_TICKET(ticket); } @@ -1368,7 +1432,8 @@ GAFlightEndpoint * gaflight_endpoint_new_raw(const arrow::flight::FlightEndpoint *flight_endpoint, GAFlightTicket *ticket) { - auto endpoint = GAFLIGHT_ENDPOINT(g_object_new(GAFLIGHT_TYPE_ENDPOINT, NULL)); + auto endpoint = GAFLIGHT_ENDPOINT(g_object_new(GAFLIGHT_TYPE_ENDPOINT, + NULL)); auto priv = GAFLIGHT_ENDPOINT_GET_PRIVATE(endpoint); if (ticket) { priv->ticket = ticket; @@ -1398,7 +1463,9 @@ gaflight_endpoint_get_raw(GAFlightEndpoint *endpoint) GAFlightInfo * gaflight_info_new_raw(arrow::flight::FlightInfo *flight_info) { - return GAFLIGHT_INFO(g_object_new(GAFLIGHT_TYPE_INFO, "info", flight_info, NULL)); + return GAFLIGHT_INFO(g_object_new(GAFLIGHT_TYPE_INFO, + "info", flight_info, + NULL)); } arrow::flight::FlightInfo * @@ -1412,7 +1479,9 @@ GAFlightStreamChunk * gaflight_stream_chunk_new_raw(arrow::flight::FlightStreamChunk *flight_chunk) { return GAFLIGHT_STREAM_CHUNK( - g_object_new(GAFLIGHT_TYPE_STREAM_CHUNK, "chunk", flight_chunk, NULL)); + g_object_new(GAFLIGHT_TYPE_STREAM_CHUNK, + "chunk", flight_chunk, + NULL)); } arrow::flight::FlightStreamChunk * diff --git a/c_glib/arrow-flight-glib/common.h b/c_glib/arrow-flight-glib/common.h index b1d89f79c35..469ff4097f5 100644 --- a/c_glib/arrow-flight-glib/common.h +++ b/c_glib/arrow-flight-glib/common.h @@ -21,70 +21,82 @@ #include -#include - G_BEGIN_DECLS -typedef void (*GAFlightHeaderFunc)(const gchar *name, - const gchar *value, - gpointer user_data); + +typedef void(*GAFlightHeaderFunc)(const gchar *name, + const gchar *value, + gpointer user_data); + #define GAFLIGHT_TYPE_CRITERIA (gaflight_criteria_get_type()) -GAFLIGHT_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE(GAFlightCriteria, gaflight_criteria, GAFLIGHT, CRITERIA, GObject) +G_DECLARE_DERIVABLE_TYPE(GAFlightCriteria, + gaflight_criteria, + GAFLIGHT, + CRITERIA, + GObject) struct _GAFlightCriteriaClass { GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GAFlightCriteria * gaflight_criteria_new(GBytes *expression); + #define GAFLIGHT_TYPE_LOCATION (gaflight_location_get_type()) -GAFLIGHT_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE(GAFlightLocation, gaflight_location, GAFLIGHT, LOCATION, GObject) +G_DECLARE_DERIVABLE_TYPE(GAFlightLocation, + gaflight_location, + GAFLIGHT, + LOCATION, + GObject) struct _GAFlightLocationClass { GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GAFlightLocation * -gaflight_location_new(const gchar *uri, GError **error); +gaflight_location_new(const gchar *uri, + GError **error); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gchar * gaflight_location_to_string(GAFlightLocation *location); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gchar * gaflight_location_get_scheme(GAFlightLocation *location); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gboolean -gaflight_location_equal(GAFlightLocation *location, GAFlightLocation *other_location); +gaflight_location_equal(GAFlightLocation *location, + GAFlightLocation *other_location); + #define GAFLIGHT_TYPE_DESCRIPTOR (gaflight_descriptor_get_type()) -GAFLIGHT_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GAFlightDescriptor, gaflight_descriptor, GAFLIGHT, DESCRIPTOR, GObject) +G_DECLARE_DERIVABLE_TYPE(GAFlightDescriptor, + gaflight_descriptor, + GAFLIGHT, + DESCRIPTOR, + GObject) struct _GAFlightDescriptorClass { GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gchar * gaflight_descriptor_to_string(GAFlightDescriptor *descriptor); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gboolean gaflight_descriptor_equal(GAFlightDescriptor *descriptor, GAFlightDescriptor *other_descriptor); + #define GAFLIGHT_TYPE_PATH_DESCRIPTOR (gaflight_path_descriptor_get_type()) -GAFLIGHT_AVAILABLE_IN_5_0 G_DECLARE_DERIVABLE_TYPE(GAFlightPathDescriptor, gaflight_path_descriptor, GAFLIGHT, @@ -95,16 +107,17 @@ struct _GAFlightPathDescriptorClass GAFlightDescriptorClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GAFlightPathDescriptor * -gaflight_path_descriptor_new(const gchar **paths, gsize n_paths); +gaflight_path_descriptor_new(const gchar **paths, + gsize n_paths); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gchar ** gaflight_path_descriptor_get_paths(GAFlightPathDescriptor *descriptor); + #define GAFLIGHT_TYPE_COMMAND_DESCRIPTOR (gaflight_command_descriptor_get_type()) -GAFLIGHT_AVAILABLE_IN_5_0 G_DECLARE_DERIVABLE_TYPE(GAFlightCommandDescriptor, gaflight_command_descriptor, GAFLIGHT, @@ -115,59 +128,74 @@ struct _GAFlightCommandDescriptorClass GAFlightDescriptorClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GAFlightCommandDescriptor * gaflight_command_descriptor_new(const gchar *command); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gchar * gaflight_command_descriptor_get_command(GAFlightCommandDescriptor *descriptor); + #define GAFLIGHT_TYPE_TICKET (gaflight_ticket_get_type()) -GAFLIGHT_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE(GAFlightTicket, gaflight_ticket, GAFLIGHT, TICKET, GObject) +G_DECLARE_DERIVABLE_TYPE(GAFlightTicket, + gaflight_ticket, + GAFLIGHT, + TICKET, + GObject) struct _GAFlightTicketClass { GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GAFlightTicket * gaflight_ticket_new(GBytes *data); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gboolean -gaflight_ticket_equal(GAFlightTicket *ticket, GAFlightTicket *other_ticket); +gaflight_ticket_equal(GAFlightTicket *ticket, + GAFlightTicket *other_ticket); + #define GAFLIGHT_TYPE_ENDPOINT (gaflight_endpoint_get_type()) -GAFLIGHT_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE(GAFlightEndpoint, gaflight_endpoint, GAFLIGHT, ENDPOINT, GObject) +G_DECLARE_DERIVABLE_TYPE(GAFlightEndpoint, + gaflight_endpoint, + GAFLIGHT, + ENDPOINT, + GObject) struct _GAFlightEndpointClass { GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GAFlightEndpoint * -gaflight_endpoint_new(GAFlightTicket *ticket, GList *locations); +gaflight_endpoint_new(GAFlightTicket *ticket, + GList *locations); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gboolean -gaflight_endpoint_equal(GAFlightEndpoint *endpoint, GAFlightEndpoint *other_endpoint); +gaflight_endpoint_equal(GAFlightEndpoint *endpoint, + GAFlightEndpoint *other_endpoint); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GList * gaflight_endpoint_get_locations(GAFlightEndpoint *endpoint); + #define GAFLIGHT_TYPE_INFO (gaflight_info_get_type()) -GAFLIGHT_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE(GAFlightInfo, gaflight_info, GAFLIGHT, INFO, GObject) +G_DECLARE_DERIVABLE_TYPE(GAFlightInfo, + gaflight_info, + GAFLIGHT, + INFO, + GObject) struct _GAFlightInfoClass { GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GAFlightInfo * gaflight_info_new(GArrowSchema *schema, GAFlightDescriptor *descriptor, @@ -176,44 +204,51 @@ gaflight_info_new(GArrowSchema *schema, gint64 total_bytes, GError **error); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gboolean -gaflight_info_equal(GAFlightInfo *info, GAFlightInfo *other_info); +gaflight_info_equal(GAFlightInfo *info, + GAFlightInfo *other_info); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GArrowSchema * -gaflight_info_get_schema(GAFlightInfo *info, GArrowReadOptions *options, GError **error); -GAFLIGHT_AVAILABLE_IN_5_0 +gaflight_info_get_schema(GAFlightInfo *info, + GArrowReadOptions *options, + GError **error); +GARROW_AVAILABLE_IN_5_0 GAFlightDescriptor * gaflight_info_get_descriptor(GAFlightInfo *info); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GList * gaflight_info_get_endpoints(GAFlightInfo *info); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gint64 gaflight_info_get_total_records(GAFlightInfo *info); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gint64 gaflight_info_get_total_bytes(GAFlightInfo *info); + #define GAFLIGHT_TYPE_STREAM_CHUNK (gaflight_stream_chunk_get_type()) -GAFLIGHT_AVAILABLE_IN_6_0 -G_DECLARE_DERIVABLE_TYPE( - GAFlightStreamChunk, gaflight_stream_chunk, GAFLIGHT, STREAM_CHUNK, GObject) +G_DECLARE_DERIVABLE_TYPE(GAFlightStreamChunk, + gaflight_stream_chunk, + GAFLIGHT, + STREAM_CHUNK, + GObject) struct _GAFlightStreamChunkClass { GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 GArrowRecordBatch * gaflight_stream_chunk_get_data(GAFlightStreamChunk *chunk); -GAFLIGHT_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 GArrowBuffer * gaflight_stream_chunk_get_metadata(GAFlightStreamChunk *chunk); -#define GAFLIGHT_TYPE_RECORD_BATCH_READER (gaflight_record_batch_reader_get_type()) -GAFLIGHT_AVAILABLE_IN_6_0 + +#define GAFLIGHT_TYPE_RECORD_BATCH_READER \ + (gaflight_record_batch_reader_get_type()) G_DECLARE_DERIVABLE_TYPE(GAFlightRecordBatchReader, gaflight_record_batch_reader, GAFLIGHT, @@ -224,12 +259,15 @@ struct _GAFlightRecordBatchReaderClass GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 GAFlightStreamChunk * -gaflight_record_batch_reader_read_next(GAFlightRecordBatchReader *reader, GError **error); +gaflight_record_batch_reader_read_next(GAFlightRecordBatchReader *reader, + GError **error); -GAFLIGHT_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 GArrowTable * -gaflight_record_batch_reader_read_all(GAFlightRecordBatchReader *reader, GError **error); +gaflight_record_batch_reader_read_all(GAFlightRecordBatchReader *reader, + GError **error); + G_END_DECLS diff --git a/c_glib/arrow-flight-glib/common.hpp b/c_glib/arrow-flight-glib/common.hpp index db56fff579b..d23f7c8867f 100644 --- a/c_glib/arrow-flight-glib/common.hpp +++ b/c_glib/arrow-flight-glib/common.hpp @@ -23,59 +23,41 @@ #include -GAFLIGHT_EXTERN + GAFlightCriteria * gaflight_criteria_new_raw(const arrow::flight::Criteria *flight_criteria); - -GAFLIGHT_EXTERN arrow::flight::Criteria * gaflight_criteria_get_raw(GAFlightCriteria *criteria); -GAFLIGHT_EXTERN arrow::flight::Location * gaflight_location_get_raw(GAFlightLocation *location); -GAFLIGHT_EXTERN GAFlightDescriptor * -gaflight_descriptor_new_raw(const arrow::flight::FlightDescriptor *flight_descriptor); - -GAFLIGHT_EXTERN +gaflight_descriptor_new_raw( + const arrow::flight::FlightDescriptor *flight_descriptor); arrow::flight::FlightDescriptor * gaflight_descriptor_get_raw(GAFlightDescriptor *descriptor); -GAFLIGHT_EXTERN GAFlightTicket * gaflight_ticket_new_raw(const arrow::flight::Ticket *flight_ticket); - -GAFLIGHT_EXTERN arrow::flight::Ticket * gaflight_ticket_get_raw(GAFlightTicket *ticket); -GAFLIGHT_EXTERN GAFlightEndpoint * gaflight_endpoint_new_raw(const arrow::flight::FlightEndpoint *flight_endpoint, GAFlightTicket *ticket); - -GAFLIGHT_EXTERN arrow::flight::FlightEndpoint * gaflight_endpoint_get_raw(GAFlightEndpoint *endpoint); -GAFLIGHT_EXTERN GAFlightInfo * gaflight_info_new_raw(arrow::flight::FlightInfo *flight_info); - -GAFLIGHT_EXTERN arrow::flight::FlightInfo * gaflight_info_get_raw(GAFlightInfo *info); -GAFLIGHT_EXTERN GAFlightStreamChunk * gaflight_stream_chunk_new_raw(arrow::flight::FlightStreamChunk *flight_chunk); - -GAFLIGHT_EXTERN arrow::flight::FlightStreamChunk * gaflight_stream_chunk_get_raw(GAFlightStreamChunk *chunk); -GAFLIGHT_EXTERN arrow::flight::MetadataRecordBatchReader * gaflight_record_batch_reader_get_raw(GAFlightRecordBatchReader *reader); diff --git a/c_glib/arrow-flight-glib/meson.build b/c_glib/arrow-flight-glib/meson.build index c1422e0d10a..b869fd226b8 100644 --- a/c_glib/arrow-flight-glib/meson.build +++ b/c_glib/arrow-flight-glib/meson.build @@ -37,14 +37,6 @@ cpp_headers = files( 'server.hpp', ) -version_h = configure_file( - input: 'version.h.in', - output: 'version.h', - command: [python3, generate_version_header_py, '--library', 'GAFLIGHT', '--version', version, '--input', '@INPUT@', '--output', '@OUTPUT@'], -) - -c_headers += version_h - headers = c_headers + cpp_headers install_headers(headers, subdir: 'arrow-flight-glib') @@ -58,7 +50,6 @@ libarrow_flight_glib = library('arrow-flight-glib', dependencies: dependencies, implicit_include_directories: false, include_directories: base_include_directories, - cpp_args: ['-DGAFLIGHT_COMPILATION'], soversion: so_version, version: library_version) arrow_flight_glib = declare_dependency(link_with: libarrow_flight_glib, @@ -74,7 +65,7 @@ pkgconfig.generate(libarrow_flight_glib, version: version) if have_gi - arrow_flight_glib_gir = \ + flight_glib_gir = \ gnome.generate_gir(libarrow_flight_glib, dependencies: declare_dependency(sources: arrow_glib_gir), export_packages: 'arrow-flight-glib', @@ -82,24 +73,26 @@ if have_gi '--warn-all', '--include-uninstalled=./arrow-glib/Arrow-1.0.gir', ], + fatal_warnings: gi_fatal_warnings, header: 'arrow-flight-glib/arrow-flight-glib.h', identifier_prefix: 'GAFlight', includes: [ 'Arrow-1.0', ], - kwargs: generate_gi_common_args, + install: true, namespace: 'ArrowFlight', + nsversion: api_version, sources: sources + c_headers, symbol_prefix: 'gaflight') if generate_vapi - arrow_flight_glib_vapi = \ + flight_glib_vapi = \ gnome.generate_vapi('arrow-flight-glib', install: true, packages: [ arrow_glib_vapi, 'gio-2.0', ], - sources: [arrow_flight_glib_gir[0]]) + sources: [flight_glib_gir[0]]) endif endif diff --git a/c_glib/arrow-flight-glib/server.cpp b/c_glib/arrow-flight-glib/server.cpp index f7444918e90..9deb1623b16 100644 --- a/c_glib/arrow-flight-glib/server.cpp +++ b/c_glib/arrow-flight-glib/server.cpp @@ -63,8 +63,8 @@ G_BEGIN_DECLS * Since: 5.0.0 */ -typedef struct GAFlightDataStreamPrivate_ -{ + +typedef struct GAFlightDataStreamPrivate_ { arrow::flight::FlightDataStream *stream; } GAFlightDataStreamPrivate; @@ -72,11 +72,14 @@ enum { PROP_STREAM = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GAFlightDataStream, gaflight_data_stream, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GAFlightDataStream, + gaflight_data_stream, + G_TYPE_OBJECT) -#define GAFLIGHT_DATA_STREAM_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_data_stream_get_instance_private(GAFLIGHT_DATA_STREAM(obj))) +#define GAFLIGHT_DATA_STREAM_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_data_stream_get_instance_private( \ + GAFLIGHT_DATA_STREAM(obj))) static void gaflight_data_stream_finalize(GObject *object) @@ -98,8 +101,8 @@ gaflight_data_stream_set_property(GObject *object, switch (prop_id) { case PROP_STREAM: - priv->stream = - static_cast(g_value_get_pointer(value)); + priv->stream = static_cast( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -121,16 +124,16 @@ gaflight_data_stream_class_init(GAFlightDataStreamClass *klass) gobject_class->set_property = gaflight_data_stream_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "stream", - "Stream", - "The raw arrow::flight::FlightDataStream *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("stream", + "Stream", + "The raw arrow::flight::FlightDataStream *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_STREAM, spec); } -typedef struct GAFlightRecordBatchStreamPrivate_ -{ + +typedef struct GAFlightRecordBatchStreamPrivate_ { GArrowRecordBatchReader *reader; } GAFlightRecordBatchStreamPrivate; @@ -142,9 +145,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GAFlightRecordBatchStream, gaflight_record_batch_stream, GAFLIGHT_TYPE_DATA_STREAM) -#define GAFLIGHT_RECORD_BATCH_STREAM_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_record_batch_stream_get_instance_private( \ +#define GAFLIGHT_RECORD_BATCH_STREAM_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_record_batch_stream_get_instance_private( \ GAFLIGHT_RECORD_BATCH_STREAM(obj))) static void @@ -218,12 +221,12 @@ gaflight_record_batch_stream_class_init(GAFlightRecordBatchStreamClass *klass) * * Since: 6.0.0 */ - spec = g_param_spec_object( - "reader", - "Reader", - "The reader that produces record batches", - GARROW_TYPE_RECORD_BATCH_READER, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("reader", + "Reader", + "The reader that produces record batches", + GARROW_TYPE_RECORD_BATCH_READER, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_READER, spec); } @@ -249,17 +252,16 @@ gaflight_record_batch_stream_new(GArrowRecordBatchReader *reader, } else { arrow_options = &arrow_options_default; } - auto stream = - std::make_unique(arrow_reader, *arrow_options); + auto stream = std::make_unique< + arrow::flight::RecordBatchStream>(arrow_reader, *arrow_options); return static_cast( g_object_new(GAFLIGHT_TYPE_RECORD_BATCH_STREAM, - "stream", - stream.release(), - "reader", - reader, + "stream", stream.release(), + "reader", reader, NULL)); } + G_DEFINE_TYPE(GAFlightMessageReader, gaflight_message_reader, GAFLIGHT_TYPE_RECORD_BATCH_READER) @@ -290,8 +292,8 @@ gaflight_message_reader_get_descriptor(GAFlightMessageReader *reader) return gaflight_descriptor_new_raw(&flight_descriptor); } -struct GAFlightServerCallContextPrivate -{ + +struct GAFlightServerCallContextPrivate { arrow::flight::ServerCallContext *call_context; std::string current_incoming_header_key; std::string current_incoming_header_value; @@ -305,9 +307,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GAFlightServerCallContext, gaflight_server_call_context, G_TYPE_OBJECT) -#define GAFLIGHT_SERVER_CALL_CONTEXT_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_server_call_context_get_instance_private( \ +#define GAFLIGHT_SERVER_CALL_CONTEXT_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_server_call_context_get_instance_private( \ GAFLIGHT_SERVER_CALL_CONTEXT(obj))) static void @@ -330,7 +332,8 @@ gaflight_server_call_context_set_property(GObject *object, switch (prop_id) { case PROP_CALL_CONTEXT: priv->call_context = - static_cast(g_value_get_pointer(value)); + static_cast( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -342,8 +345,8 @@ static void gaflight_server_call_context_init(GAFlightServerCallContext *object) { auto priv = GAFLIGHT_SERVER_CALL_CONTEXT_GET_PRIVATE(object); - new (&(priv->current_incoming_header_key)) std::string; - new (&(priv->current_incoming_header_value)) std::string; + new(&(priv->current_incoming_header_key)) std::string; + new(&(priv->current_incoming_header_value)) std::string; } static void @@ -355,11 +358,11 @@ gaflight_server_call_context_class_init(GAFlightServerCallContextClass *klass) gobject_class->set_property = gaflight_server_call_context_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "call-context", - "Call context", - "The raw arrow::flight::ServerCallContext", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("call-context", + "Call context", + "The raw arrow::flight::ServerCallContext", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_CALL_CONTEXT, spec); } @@ -374,9 +377,10 @@ gaflight_server_call_context_class_init(GAFlightServerCallContextClass *klass) * Since: 14.0.0 */ void -gaflight_server_call_context_foreach_incoming_header(GAFlightServerCallContext *context, - GAFlightHeaderFunc func, - gpointer user_data) +gaflight_server_call_context_foreach_incoming_header( + GAFlightServerCallContext *context, + GAFlightHeaderFunc func, + gpointer user_data) { auto priv = GAFLIGHT_SERVER_CALL_CONTEXT_GET_PRIVATE(context); auto flight_context = gaflight_server_call_context_get_raw(context); @@ -389,8 +393,8 @@ gaflight_server_call_context_foreach_incoming_header(GAFlightServerCallContext * } } -struct GAFlightServerAuthSenderPrivate -{ + +struct GAFlightServerAuthSenderPrivate { arrow::flight::ServerAuthSender *sender; }; @@ -402,9 +406,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GAFlightServerAuthSender, gaflight_server_auth_sender, G_TYPE_OBJECT) -#define GAFLIGHT_SERVER_AUTH_SENDER_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_server_auth_sender_get_instance_private(GAFLIGHT_SERVER_AUTH_SENDER(obj))) +#define GAFLIGHT_SERVER_AUTH_SENDER_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_server_auth_sender_get_instance_private( \ + GAFLIGHT_SERVER_AUTH_SENDER(obj))) static void gaflight_server_auth_sender_set_property(GObject *object, @@ -438,11 +443,11 @@ gaflight_server_auth_sender_class_init(GAFlightServerAuthSenderClass *klass) gobject_class->set_property = gaflight_server_auth_sender_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "sender", - "Sender", - "The raw arrow::flight::ServerAuthSender *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("sender", + "Sender", + "The raw arrow::flight::ServerAuthSender *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_SERVER_AUTH_SENDER, spec); } @@ -471,8 +476,8 @@ gaflight_server_auth_sender_write(GAFlightServerAuthSender *sender, return garrow::check(error, status, "[flight-server-auth-sender][write]"); } -struct GAFlightServerAuthReaderPrivate -{ + +struct GAFlightServerAuthReaderPrivate { arrow::flight::ServerAuthReader *reader; }; @@ -484,9 +489,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GAFlightServerAuthReader, gaflight_server_auth_reader, G_TYPE_OBJECT) -#define GAFLIGHT_SERVER_AUTH_READER_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_server_auth_reader_get_instance_private(GAFLIGHT_SERVER_AUTH_READER(obj))) +#define GAFLIGHT_SERVER_AUTH_READER_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_server_auth_reader_get_instance_private( \ + GAFLIGHT_SERVER_AUTH_READER(obj))) static void gaflight_server_auth_reader_set_property(GObject *object, @@ -520,11 +526,11 @@ gaflight_server_auth_reader_class_init(GAFlightServerAuthReaderClass *klass) gobject_class->set_property = gaflight_server_auth_reader_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "reader", - "Reader", - "The raw arrow::flight::ServerAuthReader *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("reader", + "Reader", + "The raw arrow::flight::ServerAuthReader *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_SERVER_AUTH_READER, spec); } @@ -541,7 +547,8 @@ gaflight_server_auth_reader_class_init(GAFlightServerAuthReaderClass *klass) * Since: 12.0.0 */ GBytes * -gaflight_server_auth_reader_read(GAFlightServerAuthReader *reader, GError **error) +gaflight_server_auth_reader_read(GAFlightServerAuthReader *reader, + GError **error) { auto flight_reader = gaflight_server_auth_reader_get_raw(reader); std::string flight_message; @@ -552,8 +559,8 @@ gaflight_server_auth_reader_read(GAFlightServerAuthReader *reader, GError **erro return g_bytes_new(flight_message.data(), flight_message.size()); } -struct GAFlightServerAuthHandlerPrivate -{ + +struct GAFlightServerAuthHandlerPrivate { std::shared_ptr handler; }; @@ -565,9 +572,9 @@ G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GAFlightServerAuthHandler, gaflight_server_auth_handler, G_TYPE_OBJECT) -#define GAFLIGHT_SERVER_AUTH_HANDLER_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_server_auth_handler_get_instance_private( \ +#define GAFLIGHT_SERVER_AUTH_HANDLER_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_server_auth_handler_get_instance_private( \ GAFLIGHT_SERVER_AUTH_HANDLER(obj))) static void @@ -589,8 +596,9 @@ gaflight_server_auth_handler_set_property(GObject *object, switch (prop_id) { case PROP_SERVER_AUTH_HANDLER: if (g_value_get_pointer(value)) { - priv->handler = *static_cast *>( - g_value_get_pointer(value)); + priv->handler = + *static_cast*>( + g_value_get_pointer(value)); } break; default: @@ -603,7 +611,7 @@ static void gaflight_server_auth_handler_init(GAFlightServerAuthHandler *object) { auto priv = GAFLIGHT_SERVER_AUTH_HANDLER_GET_PRIVATE(object); - new (&priv->handler) std::shared_ptr; + new(&priv->handler) std::shared_ptr; } static void @@ -615,30 +623,29 @@ gaflight_server_auth_handler_class_init(GAFlightServerAuthHandlerClass *klass) gobject_class->set_property = gaflight_server_auth_handler_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "handler", - "Handler", - "The raw std::shared_ptr<" - "arrow::flight::ServerAuthHandler>", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("handler", + "Handler", + "The raw std::shared_ptr<" + "arrow::flight::ServerAuthHandler>", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_SERVER_AUTH_HANDLER, spec); } + G_END_DECLS namespace gaflight { class ServerCustomAuthHandler : public arrow::flight::ServerAuthHandler { public: explicit ServerCustomAuthHandler(GAFlightServerCustomAuthHandler *handler) : arrow::flight::ServerAuthHandler(), - handler_(handler) - { + handler_(handler) { } arrow::Status Authenticate(const arrow::flight::ServerCallContext &context, arrow::flight::ServerAuthSender *sender, - arrow::flight::ServerAuthReader *reader) override - { + arrow::flight::ServerAuthReader *reader) override { auto klass = GAFLIGHT_SERVER_CUSTOM_AUTH_HANDLER_GET_CLASS(handler_); auto gacontext = gaflight_server_call_context_new_raw(&context); auto gasender = gaflight_server_auth_sender_new_raw(sender); @@ -661,8 +668,7 @@ namespace gaflight { arrow::Status IsValid(const arrow::flight::ServerCallContext &context, const std::string &token, - std::string *peer_identity) override - { + std::string *peer_identity) override { auto klass = GAFLIGHT_SERVER_CUSTOM_AUTH_HANDLER_GET_CLASS(handler_); auto gacontext = gaflight_server_call_context_new_raw(&context); auto gtoken = g_bytes_new_static(token.data(), token.size()); @@ -672,9 +678,11 @@ namespace gaflight { g_object_unref(gacontext); if (gpeer_identity) { gsize gpeer_identity_size; - auto gpeer_identity_data = g_bytes_get_data(gpeer_identity, &gpeer_identity_size); - *peer_identity = std::string(static_cast(gpeer_identity_data), - gpeer_identity_size); + auto gpeer_identity_data = g_bytes_get_data(gpeer_identity, + &gpeer_identity_size); + *peer_identity = + std::string(static_cast(gpeer_identity_data), + gpeer_identity_size); g_bytes_unref(gpeer_identity); } if (error) { @@ -690,7 +698,7 @@ namespace gaflight { private: GAFlightServerCustomAuthHandler *handler_; }; -} // namespace gaflight +} G_BEGIN_DECLS G_DEFINE_TYPE(GAFlightServerCustomAuthHandler, @@ -724,20 +732,25 @@ gaflight_server_custom_auth_handler_class_init( * Since: 12.0.0 */ void -gaflight_server_custom_auth_handler_authenticate(GAFlightServerCustomAuthHandler *handler, - GAFlightServerCallContext *context, - GAFlightServerAuthSender *sender, - GAFlightServerAuthReader *reader, - GError **error) +gaflight_server_custom_auth_handler_authenticate( + GAFlightServerCustomAuthHandler *handler, + GAFlightServerCallContext *context, + GAFlightServerAuthSender *sender, + GAFlightServerAuthReader *reader, + GError **error) { auto flight_handler = - gaflight_server_auth_handler_get_raw(GAFLIGHT_SERVER_AUTH_HANDLER(handler)); + gaflight_server_auth_handler_get_raw( + GAFLIGHT_SERVER_AUTH_HANDLER(handler)); auto flight_context = gaflight_server_call_context_get_raw(context); auto flight_sender = gaflight_server_auth_sender_get_raw(sender); auto flight_reader = gaflight_server_auth_reader_get_raw(reader); - auto status = - flight_handler->Authenticate(*flight_context, flight_sender, flight_reader); - garrow::check(error, status, "[flight-server-custom-auth-handler][authenticate]"); + auto status = flight_handler->Authenticate(*flight_context, + flight_sender, + flight_reader); + garrow::check(error, + status, + "[flight-server-custom-auth-handler][authenticate]"); } /** @@ -756,32 +769,36 @@ gaflight_server_custom_auth_handler_authenticate(GAFlightServerCustomAuthHandler * Since: 12.0.0 */ GBytes * -gaflight_server_custom_auth_handler_is_valid(GAFlightServerCustomAuthHandler *handler, - GAFlightServerCallContext *context, - GBytes *token, - GError **error) +gaflight_server_custom_auth_handler_is_valid( + GAFlightServerCustomAuthHandler *handler, + GAFlightServerCallContext *context, + GBytes *token, + GError **error) { auto flight_handler = - gaflight_server_auth_handler_get_raw(GAFLIGHT_SERVER_AUTH_HANDLER(handler)); + gaflight_server_auth_handler_get_raw( + GAFLIGHT_SERVER_AUTH_HANDLER(handler)); gsize token_size; auto token_data = g_bytes_get_data(token, &token_size); auto flight_context = gaflight_server_call_context_get_raw(context); std::string flight_token(static_cast(token_data), token_size); std::string flight_peer_identity; - auto status = - flight_handler->IsValid(*flight_context, flight_token, &flight_peer_identity); + auto status = flight_handler->IsValid(*flight_context, + flight_token, + &flight_peer_identity); if (garrow::check(error, status, "[flight-server-custom-auth-handler]" "[is-valid]")) { - return g_bytes_new(flight_peer_identity.data(), flight_peer_identity.size()); + return g_bytes_new(flight_peer_identity.data(), + flight_peer_identity.size()); } else { return nullptr; } } -typedef struct GAFlightServerOptionsPrivate_ -{ + +typedef struct GAFlightServerOptionsPrivate_ { arrow::flight::FlightServerOptions options; GAFlightLocation *location; GAFlightServerAuthHandler *auth_handler; @@ -792,11 +809,14 @@ enum { PROP_AUTH_HANDLER, }; -G_DEFINE_TYPE_WITH_PRIVATE(GAFlightServerOptions, gaflight_server_options, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GAFlightServerOptions, + gaflight_server_options, + G_TYPE_OBJECT) -#define GAFLIGHT_SERVER_OPTIONS_GET_PRIVATE(obj) \ - static_cast( \ - gaflight_server_options_get_instance_private(GAFLIGHT_SERVER_OPTIONS(obj))) +#define GAFLIGHT_SERVER_OPTIONS_GET_PRIVATE(obj) \ + static_cast( \ + gaflight_server_options_get_instance_private( \ + GAFLIGHT_SERVER_OPTIONS(obj))) static void gaflight_server_options_dispose(GObject *object) @@ -839,7 +859,7 @@ gaflight_server_options_set_property(GObject *object, { priv->location = GAFLIGHT_LOCATION(g_value_dup_object(value)); auto flight_location = gaflight_location_get_raw(priv->location); - new (&(priv->options)) arrow::flight::FlightServerOptions(*flight_location); + new(&(priv->options)) arrow::flight::FlightServerOptions(*flight_location); } break; case PROP_AUTH_HANDLER: @@ -847,7 +867,8 @@ gaflight_server_options_set_property(GObject *object, if (priv->auth_handler) { g_object_unref(priv->auth_handler); } - priv->auth_handler = GAFLIGHT_SERVER_AUTH_HANDLER(g_value_dup_object(value)); + priv->auth_handler = + GAFLIGHT_SERVER_AUTH_HANDLER(g_value_dup_object(value)); if (priv->auth_handler) { priv->options.auth_handler = gaflight_server_auth_handler_get_raw(priv->auth_handler); @@ -906,12 +927,12 @@ gaflight_server_options_class_init(GAFlightServerOptionsClass *klass) * * Since: 5.0.0 */ - spec = g_param_spec_object( - "location", - "Location", - "The location to be listened", - GAFLIGHT_TYPE_LOCATION, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("location", + "Location", + "The location to be listened", + GAFLIGHT_TYPE_LOCATION, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_LOCATION, spec); /** @@ -941,37 +962,48 @@ GAFlightServerOptions * gaflight_server_options_new(GAFlightLocation *location) { return static_cast( - g_object_new(GAFLIGHT_TYPE_SERVER_OPTIONS, "location", location, NULL)); + g_object_new(GAFLIGHT_TYPE_SERVER_OPTIONS, + "location", location, + NULL)); } -G_DEFINE_INTERFACE(GAFlightServable, gaflight_servable, G_TYPE_OBJECT) + +G_DEFINE_INTERFACE(GAFlightServable, + gaflight_servable, + G_TYPE_OBJECT) static void gaflight_servable_default_init(GAFlightServableInterface *iface) { } + G_END_DECLS namespace gaflight { class Server : public arrow::flight::FlightServerBase { public: - explicit Server(GAFlightServer *gaserver) : FlightServerBase(), gaserver_(gaserver) {} + explicit Server(GAFlightServer *gaserver) : + FlightServerBase(), + gaserver_(gaserver) { + } ~Server() override = default; arrow::Status - ListFlights(const arrow::flight::ServerCallContext &context, - const arrow::flight::Criteria *criteria, - std::unique_ptr *listing) override - { + ListFlights( + const arrow::flight::ServerCallContext &context, + const arrow::flight::Criteria *criteria, + std::unique_ptr *listing) override { auto gacontext = gaflight_server_call_context_new_raw(&context); GAFlightCriteria *gacriteria = nullptr; if (criteria) { gacriteria = gaflight_criteria_new_raw(criteria); } GError *gerror = nullptr; - auto gaflights = - gaflight_server_list_flights(gaserver_, gacontext, gacriteria, &gerror); + auto gaflights = gaflight_server_list_flights(gaserver_, + gacontext, + gacriteria, + &gerror); if (gacriteria) { g_object_unref(gacriteria); } @@ -988,20 +1020,22 @@ namespace gaflight { g_object_unref(gaflight); } g_list_free(gaflights); - *listing = std::make_unique(flights); + *listing = std::make_unique< + arrow::flight::SimpleFlightListing>(flights); return arrow::Status::OK(); } arrow::Status GetFlightInfo(const arrow::flight::ServerCallContext &context, const arrow::flight::FlightDescriptor &request, - std::unique_ptr *info) override - { + std::unique_ptr *info) override { auto gacontext = gaflight_server_call_context_new_raw(&context); auto garequest = gaflight_descriptor_new_raw(&request); GError *gerror = nullptr; - auto gainfo = - gaflight_server_get_flight_info(gaserver_, gacontext, garequest, &gerror); + auto gainfo = gaflight_server_get_flight_info(gaserver_, + gacontext, + garequest, + &gerror); g_object_unref(garequest); g_object_unref(gacontext); if (gerror) { @@ -1009,20 +1043,23 @@ namespace gaflight { arrow::StatusCode::UnknownError, "[flight-server][get-flight-info]"); } - *info = std::make_unique(*gaflight_info_get_raw(gainfo)); + *info = std::make_unique( + *gaflight_info_get_raw(gainfo)); g_object_unref(gainfo); return arrow::Status::OK(); } - arrow::Status - DoGet(const arrow::flight::ServerCallContext &context, - const arrow::flight::Ticket &ticket, - std::unique_ptr *stream) override - { + arrow::Status DoGet( + const arrow::flight::ServerCallContext &context, + const arrow::flight::Ticket &ticket, + std::unique_ptr *stream) override { auto gacontext = gaflight_server_call_context_new_raw(&context); auto gaticket = gaflight_ticket_new_raw(&ticket); GError *gerror = nullptr; - auto gastream = gaflight_server_do_get(gaserver_, gacontext, gaticket, &gerror); + auto gastream = gaflight_server_do_get(gaserver_, + gacontext, + gaticket, + &gerror); g_object_unref(gaticket); g_object_unref(gacontext); if (gerror) { @@ -1037,11 +1074,10 @@ namespace gaflight { private: GAFlightServer *gaserver_; }; -}; // namespace gaflight +}; G_BEGIN_DECLS -struct GAFlightServerPrivate -{ +struct GAFlightServerPrivate { gaflight::Server server; }; @@ -1056,13 +1092,18 @@ gaflight_server_servable_interface_init(GAFlightServableInterface *iface) iface->get_raw = gaflight_server_servable_get_raw; } -G_DEFINE_ABSTRACT_TYPE_WITH_CODE( - GAFlightServer, gaflight_server, G_TYPE_OBJECT, G_ADD_PRIVATE(GAFlightServer); - G_IMPLEMENT_INTERFACE(GAFLIGHT_TYPE_SERVABLE, gaflight_server_servable_interface_init)) +G_DEFINE_ABSTRACT_TYPE_WITH_CODE(GAFlightServer, + gaflight_server, + G_TYPE_OBJECT, + G_ADD_PRIVATE(GAFlightServer); + G_IMPLEMENT_INTERFACE( + GAFLIGHT_TYPE_SERVABLE, + gaflight_server_servable_interface_init)) -#define GAFLIGHT_SERVER_GET_PRIVATE(object) \ - static_cast( \ - gaflight_server_get_instance_private(GAFLIGHT_SERVER(object))) +#define GAFLIGHT_SERVER_GET_PRIVATE(object) \ + static_cast( \ + gaflight_server_get_instance_private( \ + GAFLIGHT_SERVER(object))) G_END_DECLS static arrow::flight::FlightServerBase * @@ -1086,7 +1127,7 @@ static void gaflight_server_init(GAFlightServer *object) { auto priv = GAFLIGHT_SERVER_GET_PRIVATE(object); - new (&(priv->server)) gaflight::Server(object); + new(&(priv->server)) gaflight::Server(object); } static void @@ -1129,7 +1170,8 @@ gaflight_server_listen(GAFlightServer *server, gint gaflight_server_get_port(GAFlightServer *server) { - const auto flight_server = gaflight_servable_get_raw(GAFLIGHT_SERVABLE(server)); + const auto flight_server = + gaflight_servable_get_raw(GAFLIGHT_SERVABLE(server)); return flight_server->port(); } @@ -1146,10 +1188,13 @@ gaflight_server_get_port(GAFlightServer *server) * Since: 5.0.0 */ gboolean -gaflight_server_shutdown(GAFlightServer *server, GError **error) +gaflight_server_shutdown(GAFlightServer *server, + GError **error) { auto flight_server = gaflight_servable_get_raw(GAFLIGHT_SERVABLE(server)); - return garrow::check(error, flight_server->Shutdown(), "[flight-server][shutdown]"); + return garrow::check(error, + flight_server->Shutdown(), + "[flight-server][shutdown]"); } /** @@ -1172,7 +1217,10 @@ gaflight_server_list_flights(GAFlightServer *server, { auto klass = GAFLIGHT_SERVER_GET_CLASS(server); if (!(klass && klass->list_flights)) { - g_set_error(error, GARROW_ERROR, GARROW_ERROR_NOT_IMPLEMENTED, "not implemented"); + g_set_error(error, + GARROW_ERROR, + GARROW_ERROR_NOT_IMPLEMENTED, + "not implemented"); return nullptr; } return (*(klass->list_flights))(server, context, criteria, error); @@ -1197,7 +1245,10 @@ gaflight_server_get_flight_info(GAFlightServer *server, { auto klass = GAFLIGHT_SERVER_GET_CLASS(server); if (!(klass && klass->get_flight_info)) { - g_set_error(error, GARROW_ERROR, GARROW_ERROR_NOT_IMPLEMENTED, "not implemented"); + g_set_error(error, + GARROW_ERROR, + GARROW_ERROR_NOT_IMPLEMENTED, + "not implemented"); return nullptr; } return (*(klass->get_flight_info))(server, context, request, error); @@ -1222,14 +1273,19 @@ gaflight_server_do_get(GAFlightServer *server, { auto klass = GAFLIGHT_SERVER_GET_CLASS(server); if (!(klass && klass->do_get)) { - g_set_error(error, GARROW_ERROR, GARROW_ERROR_NOT_IMPLEMENTED, "not implemented"); + g_set_error(error, + GARROW_ERROR, + GARROW_ERROR_NOT_IMPLEMENTED, + "not implemented"); return nullptr; } return (*(klass->do_get))(server, context, ticket, error); } + G_END_DECLS + arrow::flight::FlightDataStream * gaflight_data_stream_get_raw(GAFlightDataStream *stream) { @@ -1237,16 +1293,17 @@ gaflight_data_stream_get_raw(GAFlightDataStream *stream) return priv->stream; } + GAFlightMessageReader * -gaflight_message_reader_new_raw(arrow::flight::FlightMessageReader *flight_reader, - gboolean is_owner) -{ - return GAFLIGHT_MESSAGE_READER(g_object_new(GAFLIGHT_TYPE_MESSAGE_READER, - "reader", - flight_reader, - "is-owner", - is_owner, - NULL)); +gaflight_message_reader_new_raw( + arrow::flight::FlightMessageReader *flight_reader, + gboolean is_owner) +{ + return GAFLIGHT_MESSAGE_READER( + g_object_new(GAFLIGHT_TYPE_MESSAGE_READER, + "reader", flight_reader, + "is-owner", is_owner, + NULL)); } arrow::flight::FlightMessageReader * @@ -1257,14 +1314,15 @@ gaflight_message_reader_get_raw(GAFlightMessageReader *reader) return static_cast(flight_reader); } + GAFlightServerCallContext * gaflight_server_call_context_new_raw( const arrow::flight::ServerCallContext *flight_call_context) { - return GAFLIGHT_SERVER_CALL_CONTEXT(g_object_new(GAFLIGHT_TYPE_SERVER_CALL_CONTEXT, - "call-context", - flight_call_context, - NULL)); + return GAFLIGHT_SERVER_CALL_CONTEXT( + g_object_new(GAFLIGHT_TYPE_SERVER_CALL_CONTEXT, + "call-context", flight_call_context, + NULL)); } const arrow::flight::ServerCallContext * @@ -1275,10 +1333,13 @@ gaflight_server_call_context_get_raw(GAFlightServerCallContext *call_context) } GAFlightServerAuthSender * -gaflight_server_auth_sender_new_raw(arrow::flight::ServerAuthSender *flight_sender) +gaflight_server_auth_sender_new_raw( + arrow::flight::ServerAuthSender *flight_sender) { return GAFLIGHT_SERVER_AUTH_SENDER( - g_object_new(GAFLIGHT_TYPE_SERVER_AUTH_SENDER, "sender", flight_sender, nullptr)); + g_object_new(GAFLIGHT_TYPE_SERVER_AUTH_SENDER, + "sender", flight_sender, + nullptr)); } arrow::flight::ServerAuthSender * @@ -1289,10 +1350,13 @@ gaflight_server_auth_sender_get_raw(GAFlightServerAuthSender *sender) } GAFlightServerAuthReader * -gaflight_server_auth_reader_new_raw(arrow::flight::ServerAuthReader *flight_reader) +gaflight_server_auth_reader_new_raw( + arrow::flight::ServerAuthReader *flight_reader) { return GAFLIGHT_SERVER_AUTH_READER( - g_object_new(GAFLIGHT_TYPE_SERVER_AUTH_READER, "reader", flight_reader, nullptr)); + g_object_new(GAFLIGHT_TYPE_SERVER_AUTH_READER, + "reader", flight_reader, + nullptr)); } arrow::flight::ServerAuthReader * diff --git a/c_glib/arrow-flight-glib/server.h b/c_glib/arrow-flight-glib/server.h index 7e594febb17..77ecf36fd52 100644 --- a/c_glib/arrow-flight-glib/server.h +++ b/c_glib/arrow-flight-glib/server.h @@ -23,17 +23,22 @@ G_BEGIN_DECLS -#define GAFLIGHT_TYPE_DATA_STREAM (gaflight_data_stream_get_type()) -GAFLIGHT_AVAILABLE_IN_6_0 -G_DECLARE_DERIVABLE_TYPE( - GAFlightDataStream, gaflight_data_stream, GAFLIGHT, DATA_STREAM, GObject) + +#define GAFLIGHT_TYPE_DATA_STREAM \ + (gaflight_data_stream_get_type()) +G_DECLARE_DERIVABLE_TYPE(GAFlightDataStream, + gaflight_data_stream, + GAFLIGHT, + DATA_STREAM, + GObject) struct _GAFlightDataStreamClass { GObjectClass parent_class; }; -#define GAFLIGHT_TYPE_RECORD_BATCH_STREAM (gaflight_record_batch_stream_get_type()) -GAFLIGHT_AVAILABLE_IN_6_0 + +#define GAFLIGHT_TYPE_RECORD_BATCH_STREAM \ + (gaflight_record_batch_stream_get_type()) G_DECLARE_DERIVABLE_TYPE(GAFlightRecordBatchStream, gaflight_record_batch_stream, GAFLIGHT, @@ -44,13 +49,14 @@ struct _GAFlightRecordBatchStreamClass GAFlightDataStreamClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 GAFlightRecordBatchStream * gaflight_record_batch_stream_new(GArrowRecordBatchReader *reader, GArrowWriteOptions *options); -#define GAFLIGHT_TYPE_MESSAGE_READER (gaflight_message_reader_get_type()) -GAFLIGHT_AVAILABLE_IN_14_0 + +#define GAFLIGHT_TYPE_MESSAGE_READER \ + (gaflight_message_reader_get_type()) G_DECLARE_DERIVABLE_TYPE(GAFlightMessageReader, gaflight_message_reader, GAFLIGHT, @@ -61,12 +67,13 @@ struct _GAFlightMessageReaderClass GAFlightRecordBatchReaderClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 GAFlightDescriptor * gaflight_message_reader_get_descriptor(GAFlightMessageReader *reader); -#define GAFLIGHT_TYPE_SERVER_CALL_CONTEXT (gaflight_server_call_context_get_type()) -GAFLIGHT_AVAILABLE_IN_5_0 + +#define GAFLIGHT_TYPE_SERVER_CALL_CONTEXT \ + (gaflight_server_call_context_get_type()) G_DECLARE_DERIVABLE_TYPE(GAFlightServerCallContext, gaflight_server_call_context, GAFLIGHT, @@ -77,14 +84,16 @@ struct _GAFlightServerCallContextClass GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 void -gaflight_server_call_context_foreach_incoming_header(GAFlightServerCallContext *context, - GAFlightHeaderFunc func, - gpointer user_data); +gaflight_server_call_context_foreach_incoming_header( + GAFlightServerCallContext *context, + GAFlightHeaderFunc func, + gpointer user_data); + -#define GAFLIGHT_TYPE_SERVER_AUTH_SENDER (gaflight_server_auth_sender_get_type()) -GAFLIGHT_AVAILABLE_IN_12_0 +#define GAFLIGHT_TYPE_SERVER_AUTH_SENDER \ + (gaflight_server_auth_sender_get_type()) G_DECLARE_DERIVABLE_TYPE(GAFlightServerAuthSender, gaflight_server_auth_sender, GAFLIGHT, @@ -95,14 +104,15 @@ struct _GAFlightServerAuthSenderClass GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_12_0 +GARROW_AVAILABLE_IN_12_0 gboolean gaflight_server_auth_sender_write(GAFlightServerAuthSender *sender, GBytes *message, GError **error); -#define GAFLIGHT_TYPE_SERVER_AUTH_READER (gaflight_server_auth_reader_get_type()) -GAFLIGHT_AVAILABLE_IN_12_0 + +#define GAFLIGHT_TYPE_SERVER_AUTH_READER \ + (gaflight_server_auth_reader_get_type()) G_DECLARE_DERIVABLE_TYPE(GAFlightServerAuthReader, gaflight_server_auth_reader, GAFLIGHT, @@ -113,12 +123,14 @@ struct _GAFlightServerAuthReaderClass GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_12_0 +GARROW_AVAILABLE_IN_12_0 GBytes * -gaflight_server_auth_reader_read(GAFlightServerAuthReader *reader, GError **error); +gaflight_server_auth_reader_read(GAFlightServerAuthReader *reader, + GError **error); + -#define GAFLIGHT_TYPE_SERVER_AUTH_HANDLER (gaflight_server_auth_handler_get_type()) -GAFLIGHT_AVAILABLE_IN_12_0 +#define GAFLIGHT_TYPE_SERVER_AUTH_HANDLER \ + (gaflight_server_auth_handler_get_type()) G_DECLARE_DERIVABLE_TYPE(GAFlightServerAuthHandler, gaflight_server_auth_handler, GAFLIGHT, @@ -129,9 +141,8 @@ struct _GAFlightServerAuthHandlerClass GObjectClass parent_class; }; -#define GAFLIGHT_TYPE_SERVER_CUSTOM_AUTH_HANDLER \ +#define GAFLIGHT_TYPE_SERVER_CUSTOM_AUTH_HANDLER \ (gaflight_server_custom_auth_handler_get_type()) -GAFLIGHT_AVAILABLE_IN_12_0 G_DECLARE_DERIVABLE_TYPE(GAFlightServerCustomAuthHandler, gaflight_server_custom_auth_handler, GAFLIGHT, @@ -160,41 +171,54 @@ struct _GAFlightServerCustomAuthHandlerClass GError **error); }; -GAFLIGHT_AVAILABLE_IN_12_0 +GARROW_AVAILABLE_IN_12_0 void -gaflight_server_custom_auth_handler_authenticate(GAFlightServerCustomAuthHandler *handler, - GAFlightServerCallContext *context, - GAFlightServerAuthSender *sender, - GAFlightServerAuthReader *reader, - GError **error); +gaflight_server_custom_auth_handler_authenticate( + GAFlightServerCustomAuthHandler *handler, + GAFlightServerCallContext *context, + GAFlightServerAuthSender *sender, + GAFlightServerAuthReader *reader, + GError **error); -GAFLIGHT_AVAILABLE_IN_12_0 +GARROW_AVAILABLE_IN_12_0 GBytes * -gaflight_server_custom_auth_handler_is_valid(GAFlightServerCustomAuthHandler *handler, - GAFlightServerCallContext *context, - GBytes *token, - GError **error); +gaflight_server_custom_auth_handler_is_valid( + GAFlightServerCustomAuthHandler *handler, + GAFlightServerCallContext *context, + GBytes *token, + GError **error); + #define GAFLIGHT_TYPE_SERVER_OPTIONS (gaflight_server_options_get_type()) -GAFLIGHT_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GAFlightServerOptions, gaflight_server_options, GAFLIGHT, SERVER_OPTIONS, GObject) +G_DECLARE_DERIVABLE_TYPE(GAFlightServerOptions, + gaflight_server_options, + GAFLIGHT, + SERVER_OPTIONS, + GObject) struct _GAFlightServerOptionsClass { GObjectClass parent_class; }; -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GAFlightServerOptions * gaflight_server_options_new(GAFlightLocation *location); + #define GAFLIGHT_TYPE_SERVABLE (gaflight_servable_get_type()) -GAFLIGHT_AVAILABLE_IN_9_0 -G_DECLARE_INTERFACE(GAFlightServable, gaflight_servable, GAFLIGHT, SERVABLE, GObject) +G_DECLARE_INTERFACE(GAFlightServable, + gaflight_servable, + GAFLIGHT, + SERVABLE, + GObject) + #define GAFLIGHT_TYPE_SERVER (gaflight_server_get_type()) -GAFLIGHT_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE(GAFlightServer, gaflight_server, GAFLIGHT, SERVER, GObject) +G_DECLARE_DERIVABLE_TYPE(GAFlightServer, + gaflight_server, + GAFLIGHT, + SERVER, + GObject) /** * GAFlightServerClass: * @list_flights: A virtual function to implement `ListFlights` API. @@ -220,34 +244,36 @@ struct _GAFlightServerClass GError **error); }; -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gboolean gaflight_server_listen(GAFlightServer *server, GAFlightServerOptions *options, GError **error); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gint gaflight_server_get_port(GAFlightServer *server); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 gboolean -gaflight_server_shutdown(GAFlightServer *server, GError **error); -GAFLIGHT_AVAILABLE_IN_5_0 +gaflight_server_shutdown(GAFlightServer *server, + GError **error); +GARROW_AVAILABLE_IN_5_0 gboolean -gaflight_server_wait(GAFlightServer *server, GError **error); +gaflight_server_wait(GAFlightServer *server, + GError **error); -GAFLIGHT_AVAILABLE_IN_5_0 +GARROW_AVAILABLE_IN_5_0 GList * gaflight_server_list_flights(GAFlightServer *server, GAFlightServerCallContext *context, GAFlightCriteria *criteria, GError **error); -GAFLIGHT_AVAILABLE_IN_9_0 +GARROW_AVAILABLE_IN_9_0 GAFlightInfo * gaflight_server_get_flight_info(GAFlightServer *server, GAFlightServerCallContext *context, GAFlightDescriptor *request, GError **error); -GAFLIGHT_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 GAFlightDataStream * gaflight_server_do_get(GAFlightServer *server, GAFlightServerCallContext *context, diff --git a/c_glib/arrow-flight-glib/server.hpp b/c_glib/arrow-flight-glib/server.hpp index ec4815751c8..6b273dc9e5a 100644 --- a/c_glib/arrow-flight-glib/server.hpp +++ b/c_glib/arrow-flight-glib/server.hpp @@ -23,52 +23,43 @@ #include -GAFLIGHT_EXTERN + arrow::flight::FlightDataStream * gaflight_data_stream_get_raw(GAFlightDataStream *stream); -GAFLIGHT_EXTERN GAFlightMessageReader * -gaflight_message_reader_new_raw(arrow::flight::FlightMessageReader *flight_reader, - gboolean is_owner); - -GAFLIGHT_EXTERN +gaflight_message_reader_new_raw( + arrow::flight::FlightMessageReader *flight_reader, + gboolean is_owner); arrow::flight::FlightMessageReader * gaflight_message_reader_get_raw(GAFlightMessageReader *reader); -GAFLIGHT_EXTERN + GAFlightServerCallContext * gaflight_server_call_context_new_raw( const arrow::flight::ServerCallContext *flight_call_context); - -GAFLIGHT_EXTERN const arrow::flight::ServerCallContext * gaflight_server_call_context_get_raw(GAFlightServerCallContext *call_context); -GAFLIGHT_EXTERN GAFlightServerAuthSender * -gaflight_server_auth_sender_new_raw(arrow::flight::ServerAuthSender *flight_sender); - -GAFLIGHT_EXTERN +gaflight_server_auth_sender_new_raw( + arrow::flight::ServerAuthSender *flight_sender); arrow::flight::ServerAuthSender * gaflight_server_auth_sender_get_raw(GAFlightServerAuthSender *sender); -GAFLIGHT_EXTERN GAFlightServerAuthReader * -gaflight_server_auth_reader_new_raw(arrow::flight::ServerAuthReader *flight_reader); - -GAFLIGHT_EXTERN +gaflight_server_auth_reader_new_raw( + arrow::flight::ServerAuthReader *flight_reader); arrow::flight::ServerAuthReader * gaflight_server_auth_reader_get_raw(GAFlightServerAuthReader *reader); -GAFLIGHT_EXTERN std::shared_ptr gaflight_server_auth_handler_get_raw(GAFlightServerAuthHandler *handler); -GAFLIGHT_EXTERN arrow::flight::FlightServerOptions * gaflight_server_options_get_raw(GAFlightServerOptions *options); + struct _GAFlightServableInterface { GTypeInterface parent_iface; @@ -76,38 +67,33 @@ struct _GAFlightServableInterface arrow::flight::FlightServerBase *(*get_raw)(GAFlightServable *servable); }; -GAFLIGHT_EXTERN arrow::flight::FlightServerBase * gaflight_servable_get_raw(GAFlightServable *servable); + namespace gaflight { class DataStream : public arrow::flight::FlightDataStream { public: - explicit DataStream(GAFlightDataStream *gastream) - : arrow::flight::FlightDataStream(), - gastream_(gastream) - { + explicit DataStream(GAFlightDataStream *gastream) : + arrow::flight::FlightDataStream(), + gastream_(gastream) { } - ~DataStream() override { g_object_unref(gastream_); } + ~DataStream() override { + g_object_unref(gastream_); + } - std::shared_ptr - schema() override - { + std::shared_ptr schema() override { auto stream = gaflight_data_stream_get_raw(gastream_); return stream->schema(); } - arrow::Result - GetSchemaPayload() override - { + arrow::Result GetSchemaPayload() override { auto stream = gaflight_data_stream_get_raw(gastream_); return stream->GetSchemaPayload(); } - arrow::Result - Next() override - { + arrow::Result Next() override { auto stream = gaflight_data_stream_get_raw(gastream_); return stream->Next(); } @@ -115,4 +101,4 @@ namespace gaflight { private: GAFlightDataStream *gastream_; }; -}; // namespace gaflight +}; diff --git a/c_glib/arrow-flight-glib/version.h.in b/c_glib/arrow-flight-glib/version.h.in deleted file mode 100644 index 4a42c7f5aa9..00000000000 --- a/c_glib/arrow-flight-glib/version.h.in +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#pragma once - -#include - -/** - * SECTION: version - * @section_id: version-macros - * @title: Version related macros - * @include: arrow-flight-glib/arrow-flight-glib.h - * - * Apache Arrow Flight GLib provides macros that can be used by C pre-processor. - * They are useful to check version related things at compile time. - */ - -/** - * GAFLIGHT_VERSION_MAJOR: - * - * The major version. - * - * Since: 17.0.0 - */ -#define GAFLIGHT_VERSION_MAJOR (@VERSION_MAJOR@) - -/** - * GAFLIGHT_VERSION_MINOR: - * - * The minor version. - * - * Since: 17.0.0 - */ -#define GAFLIGHT_VERSION_MINOR (@VERSION_MINOR@) - -/** - * GAFLIGHT_VERSION_MICRO: - * - * The micro version. - * - * Since: 17.0.0 - */ -#define GAFLIGHT_VERSION_MICRO (@VERSION_MICRO@) - -/** - * GAFLIGHT_VERSION_TAG: - * - * The version tag. Normally, it's an empty string. It's "SNAPSHOT" - * for snapshot version. - * - * Since: 17.0.0 - */ -#define GAFLIGHT_VERSION_TAG "@VERSION_TAG@" - -/** - * GAFLIGHT_VERSION_CHECK: - * @major: A major version to check for. - * @minor: A minor version to check for. - * @micro: A micro version to check for. - * - * You can use this macro in C pre-processor. - * - * Returns: %TRUE if the compile time Apache Arrow GLib version is the - * same as or newer than the passed version, %FALSE otherwise. - * - * Since: 17.0.0 - */ -#define GAFLIGHT_VERSION_CHECK(major, minor, micro) \ - (GAFLIGHT_VERSION_MAJOR > (major) || \ - (GAFLIGHT_VERSION_MAJOR == (major) && \ - GAFLIGHT_VERSION_MINOR > (minor)) || \ - (GAFLIGHT_VERSION_MAJOR == (major) && \ - GAFLIGHT_VERSION_MINOR == (minor) && \ - GAFLIGHT_VERSION_MICRO >= (micro))) - -/** - * GAFLIGHT_DISABLE_DEPRECATION_WARNINGS: - * - * If this macro is defined, no deprecated warnings are produced. - * - * You must define this macro before including the - * arrow-glib/arrow-glib.h header. - * - * Since: 17.0.0 - */ - -#ifdef GAFLIGHT_DISABLE_DEPRECATION_WARNINGS -# define GAFLIGHT_DEPRECATED -# define GAFLIGHT_DEPRECATED_FOR(function) -# define GAFLIGHT_UNAVAILABLE(major, minor) -#else -# define GAFLIGHT_DEPRECATED G_DEPRECATED -# define GAFLIGHT_DEPRECATED_FOR(function) G_DEPRECATED_FOR(function) -# define GAFLIGHT_UNAVAILABLE(major, minor) G_UNAVAILABLE(major, minor) -#endif - -@ENCODED_VERSIONS@ - -/** - * GAFLIGHT_VERSION_MIN_REQUIRED: - * - * You can use this macro for compile time API version check. - * - * This macro value must be one of the predefined version macros such - * as %GAFLIGHT_VERSION_0_10. - * - * If you use any functions that is defined by newer version than - * %GAFLIGHT_VERSION_MIN_REQUIRED, deprecated warnings are produced at - * compile time. - * - * You must define this macro before including the - * arrow-flight-glib/arrow-flight-glib.h header. - * - * Since: 17.0.0 - */ -#ifndef GAFLIGHT_VERSION_MIN_REQUIRED -# define GAFLIGHT_VERSION_MIN_REQUIRED GARROW_VERSION_MIN_REQUIRED -#endif - -/** - * GAFLIGHT_VERSION_MAX_ALLOWED: - * - * You can use this macro for compile time API version check. - * - * This macro value must be one of the predefined version macros such - * as %GAFLIGHT_VERSION_0_10. - * - * If you use any functions that is defined by newer version than - * %GAFLIGHT_VERSION_MAX_ALLOWED, deprecated warnings are produced at - * compile time. - * - * You must define this macro before including the - * arrow-flight-glib/arrow-flight-glib.h header. - * - * Since: 17.0.0 - */ -#ifndef GAFLIGHT_VERSION_MAX_ALLOWED -# define GAFLIGHT_VERSION_MAX_ALLOWED GARROW_VERSION_MAX_ALLOWED -#endif - -@VISIBILITY_MACROS@ - -@AVAILABILITY_MACROS@ diff --git a/c_glib/arrow-flight-sql-glib/arrow-flight-sql-glib.h b/c_glib/arrow-flight-sql-glib/arrow-flight-sql-glib.h index 94e72d06f2b..8ebe39aee57 100644 --- a/c_glib/arrow-flight-sql-glib/arrow-flight-sql-glib.h +++ b/c_glib/arrow-flight-sql-glib/arrow-flight-sql-glib.h @@ -19,7 +19,5 @@ #pragma once -#include - #include #include diff --git a/c_glib/arrow-flight-sql-glib/client.cpp b/c_glib/arrow-flight-sql-glib/client.cpp index cd0f477818b..8e1cf115497 100644 --- a/c_glib/arrow-flight-sql-glib/client.cpp +++ b/c_glib/arrow-flight-sql-glib/client.cpp @@ -37,8 +37,7 @@ G_BEGIN_DECLS * Since: 9.0.0 */ -struct GAFlightSQLPreparedStatementPrivate -{ +struct GAFlightSQLPreparedStatementPrivate { std::shared_ptr statement; GAFlightSQLClient *client; }; @@ -52,9 +51,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GAFlightSQLPreparedStatement, gaflightsql_prepared_statement, G_TYPE_OBJECT) -#define GAFLIGHTSQL_PREPARED_STATEMENT_GET_PRIVATE(object) \ - static_cast( \ - gaflightsql_prepared_statement_get_instance_private( \ +#define GAFLIGHTSQL_PREPARED_STATEMENT_GET_PRIVATE(object) \ + static_cast( \ + gaflightsql_prepared_statement_get_instance_private( \ GAFLIGHTSQL_PREPARED_STATEMENT(object))) static void @@ -123,11 +122,12 @@ static void gaflightsql_prepared_statement_init(GAFlightSQLPreparedStatement *object) { auto priv = GAFLIGHTSQL_PREPARED_STATEMENT_GET_PRIVATE(object); - new (&priv->statement) std::shared_ptr; + new(&priv->statement) std::shared_ptr; } static void -gaflightsql_prepared_statement_class_init(GAFlightSQLPreparedStatementClass *klass) +gaflightsql_prepared_statement_class_init( + GAFlightSQLPreparedStatementClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); @@ -137,11 +137,11 @@ gaflightsql_prepared_statement_class_init(GAFlightSQLPreparedStatementClass *kla gobject_class->get_property = gaflightsql_prepared_statement_get_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "statement", - nullptr, - nullptr, - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("statement", + nullptr, + nullptr, + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_STATEMENT, spec); /** @@ -151,13 +151,15 @@ gaflightsql_prepared_statement_class_init(GAFlightSQLPreparedStatementClass *kla * * Since: 14.0.0 */ - spec = g_param_spec_object( - "client", - nullptr, - nullptr, - GAFLIGHTSQL_TYPE_CLIENT, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property(gobject_class, PROP_PREPARED_STATEMENT_CLIENT, spec); + spec = g_param_spec_object("client", + nullptr, + nullptr, + GAFLIGHTSQL_TYPE_CLIENT, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property(gobject_class, + PROP_PREPARED_STATEMENT_CLIENT, + spec); } /** @@ -183,7 +185,9 @@ gaflightsql_prepared_statement_execute(GAFlightSQLPreparedStatement *statement, flight_options = gaflight_call_options_get_raw(options); } auto result = flight_sql_statement->Execute(*flight_options); - if (!garrow::check(error, result, "[flight-sql-prepared-statement][execute]")) { + if (!garrow::check(error, + result, + "[flight-sql-prepared-statement][execute]")) { return nullptr; } auto flight_info = std::move(*result); @@ -201,9 +205,10 @@ gaflightsql_prepared_statement_execute(GAFlightSQLPreparedStatement *statement, * Since: 14.0.0 */ gint64 -gaflightsql_prepared_statement_execute_update(GAFlightSQLPreparedStatement *statement, - GAFlightCallOptions *options, - GError **error) +gaflightsql_prepared_statement_execute_update( + GAFlightSQLPreparedStatement *statement, + GAFlightCallOptions *options, + GError **error) { auto flight_sql_statement = gaflightsql_prepared_statement_get_raw(statement); arrow::flight::FlightCallOptions flight_default_options; @@ -212,7 +217,9 @@ gaflightsql_prepared_statement_execute_update(GAFlightSQLPreparedStatement *stat flight_options = gaflight_call_options_get_raw(options); } auto result = flight_sql_statement->ExecuteUpdate(*flight_options); - if (!garrow::check(error, result, "[flight-sql-prepared-statement][execute-update]")) { + if (!garrow::check(error, + result, + "[flight-sql-prepared-statement][execute-update]")) { return 0; } return *result; @@ -244,7 +251,8 @@ gaflightsql_prepared_statement_get_parameter_schema( * Since: 14.0.0 */ GArrowSchema * -gaflightsql_prepared_statement_get_dataset_schema(GAFlightSQLPreparedStatement *statement) +gaflightsql_prepared_statement_get_dataset_schema( + GAFlightSQLPreparedStatement *statement) { auto flight_sql_statement = gaflightsql_prepared_statement_get_raw(statement); auto arrow_schema = flight_sql_statement->dataset_schema(); @@ -263,9 +271,10 @@ gaflightsql_prepared_statement_get_dataset_schema(GAFlightSQLPreparedStatement * * Since: 14.0.0 */ gboolean -gaflightsql_prepared_statement_set_record_batch(GAFlightSQLPreparedStatement *statement, - GArrowRecordBatch *record_batch, - GError **error) +gaflightsql_prepared_statement_set_record_batch( + GAFlightSQLPreparedStatement *statement, + GArrowRecordBatch *record_batch, + GError **error) { auto flight_sql_statement = gaflightsql_prepared_statement_get_raw(statement); auto arrow_record_batch = garrow_record_batch_get_raw(record_batch); @@ -341,8 +350,8 @@ gaflightsql_prepared_statement_is_closed(GAFlightSQLPreparedStatement *statement return flight_sql_statement->IsClosed(); } -struct GAFlightSQLClientPrivate -{ + +struct GAFlightSQLClientPrivate { arrow::flight::sql::FlightSqlClient *client; GAFlightClient *flight_client; }; @@ -352,11 +361,14 @@ enum { PROP_FLIGHT_CLIENT, }; -G_DEFINE_TYPE_WITH_PRIVATE(GAFlightSQLClient, gaflightsql_client, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GAFlightSQLClient, + gaflightsql_client, + G_TYPE_OBJECT) -#define GAFLIGHTSQL_CLIENT_GET_PRIVATE(object) \ - static_cast( \ - gaflightsql_client_get_instance_private(GAFLIGHTSQL_CLIENT(object))) +#define GAFLIGHTSQL_CLIENT_GET_PRIVATE(object) \ + static_cast( \ + gaflightsql_client_get_instance_private( \ + GAFLIGHTSQL_CLIENT(object))) static void gaflightsql_client_dispose(GObject *object) @@ -392,7 +404,8 @@ gaflightsql_client_set_property(GObject *object, switch (prop_id) { case PROP_CLIENT: priv->client = - static_cast(g_value_get_pointer(value)); + static_cast( + g_value_get_pointer(value)); break; case PROP_FLIGHT_CLIENT: priv->flight_client = GAFLIGHT_CLIENT(g_value_dup_object(value)); @@ -437,11 +450,11 @@ gaflightsql_client_class_init(GAFlightSQLClientClass *klass) gobject_class->get_property = gaflightsql_client_get_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "client", - "Client", - "The raw arrow::flight::sql::FlightSqlClient *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("client", + "Client", + "The raw arrow::flight::sql::FlightSqlClient *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_CLIENT, spec); /** @@ -451,12 +464,12 @@ gaflightsql_client_class_init(GAFlightSQLClientClass *klass) * * Since: 9.0.0 */ - spec = g_param_spec_object( - "flight-client", - "Flight client", - "The underlying Flight client", - GAFLIGHT_TYPE_CLIENT, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("flight-client", + "Flight client", + "The underlying Flight client", + GAFLIGHT_TYPE_CLIENT, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FLIGHT_CLIENT, spec); } @@ -472,7 +485,8 @@ GAFlightSQLClient * gaflightsql_client_new(GAFlightClient *client) { auto flight_client = gaflight_client_get_raw(client); - auto flight_sql_client = new arrow::flight::sql::FlightSqlClient(flight_client); + auto flight_sql_client = + new arrow::flight::sql::FlightSqlClient(flight_client); return gaflightsql_client_new_raw(flight_sql_client, client); } @@ -501,7 +515,9 @@ gaflightsql_client_execute(GAFlightSQLClient *client, flight_options = gaflight_call_options_get_raw(options); } auto result = flight_sql_client->Execute(*flight_options, query); - if (!garrow::check(error, result, "[flight-sql-client][execute]")) { + if (!garrow::check(error, + result, + "[flight-sql-client][execute]")) { return nullptr; } auto flight_info = std::move(*result); @@ -532,7 +548,9 @@ gaflightsql_client_execute_update(GAFlightSQLClient *client, flight_options = gaflight_call_options_get_raw(options); } auto result = flight_sql_client->ExecuteUpdate(*flight_options, query); - if (!garrow::check(error, result, "[flight-sql-client][execute-update]")) { + if (!garrow::check(error, + result, + "[flight-sql-client][execute-update]")) { return 0; } return *result; @@ -565,7 +583,9 @@ gaflightsql_client_do_get(GAFlightSQLClient *client, flight_options = gaflight_call_options_get_raw(options); } auto result = flight_sql_client->DoGet(*flight_options, *flight_ticket); - if (!garrow::check(error, result, "[flight-sql-client][do-get]")) { + if (!garrow::check(error, + result, + "[flight-sql-client][do-get]")) { return nullptr; } auto flight_reader = std::move(*result); @@ -597,26 +617,30 @@ gaflightsql_client_prepare(GAFlightSQLClient *client, flight_options = gaflight_call_options_get_raw(options); } auto result = flight_sql_client->Prepare(*flight_options, query); - if (!garrow::check(error, result, "[flight-sql-client][prepare]")) { + if (!garrow::check(error, + result, + "[flight-sql-client][prepare]")) { return nullptr; } auto flight_sql_statement = std::move(*result); - return gaflightsql_prepared_statement_new_raw(&flight_sql_statement, client); + return gaflightsql_prepared_statement_new_raw(&flight_sql_statement, + client); } + G_END_DECLS + GAFlightSQLPreparedStatement * gaflightsql_prepared_statement_new_raw( std::shared_ptr *flight_sql_statement, GAFlightSQLClient *client) { - return GAFLIGHTSQL_PREPARED_STATEMENT(g_object_new(GAFLIGHTSQL_TYPE_PREPARED_STATEMENT, - "statement", - flight_sql_statement, - "client", - client, - nullptr)); + return GAFLIGHTSQL_PREPARED_STATEMENT( + g_object_new(GAFLIGHTSQL_TYPE_PREPARED_STATEMENT, + "statement", flight_sql_statement, + "client", client, + nullptr)); } std::shared_ptr @@ -626,16 +650,17 @@ gaflightsql_prepared_statement_get_raw(GAFlightSQLPreparedStatement *statement) return priv->statement; } + GAFlightSQLClient * -gaflightsql_client_new_raw(arrow::flight::sql::FlightSqlClient *flight_sql_client, - GAFlightClient *client) +gaflightsql_client_new_raw( + arrow::flight::sql::FlightSqlClient *flight_sql_client, + GAFlightClient *client) { - return GAFLIGHTSQL_CLIENT(g_object_new(GAFLIGHTSQL_TYPE_CLIENT, - "client", - flight_sql_client, - "flight_client", - client, - nullptr)); + return GAFLIGHTSQL_CLIENT( + g_object_new(GAFLIGHTSQL_TYPE_CLIENT, + "client", flight_sql_client, + "flight_client", client, + nullptr)); } arrow::flight::sql::FlightSqlClient * diff --git a/c_glib/arrow-flight-sql-glib/client.h b/c_glib/arrow-flight-sql-glib/client.h index b9e9baf41a5..f2a025fef09 100644 --- a/c_glib/arrow-flight-sql-glib/client.h +++ b/c_glib/arrow-flight-sql-glib/client.h @@ -21,12 +21,11 @@ #include -#include - G_BEGIN_DECLS -#define GAFLIGHTSQL_TYPE_PREPARED_STATEMENT (gaflightsql_prepared_statement_get_type()) -GAFLIGHTSQL_AVAILABLE_IN_14_0 + +#define GAFLIGHTSQL_TYPE_PREPARED_STATEMENT \ + (gaflightsql_prepared_statement_get_type()) G_DECLARE_DERIVABLE_TYPE(GAFlightSQLPreparedStatement, gaflightsql_prepared_statement, GAFLIGHTSQL, @@ -37,90 +36,99 @@ struct _GAFlightSQLPreparedStatementClass GObjectClass parent_class; }; -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 GAFlightInfo * -gaflightsql_prepared_statement_execute(GAFlightSQLPreparedStatement *statement, - GAFlightCallOptions *options, - GError **error); +gaflightsql_prepared_statement_execute( + GAFlightSQLPreparedStatement *statement, + GAFlightCallOptions *options, + GError **error); -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 gint64 -gaflightsql_prepared_statement_execute_update(GAFlightSQLPreparedStatement *statement, - GAFlightCallOptions *options, - GError **error); +gaflightsql_prepared_statement_execute_update( + GAFlightSQLPreparedStatement *statement, + GAFlightCallOptions *options, + GError **error); -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 GArrowSchema * gaflightsql_prepared_statement_get_parameter_schema( GAFlightSQLPreparedStatement *statement); -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 GArrowSchema * gaflightsql_prepared_statement_get_dataset_schema( GAFlightSQLPreparedStatement *statement); -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 gboolean -gaflightsql_prepared_statement_set_record_batch(GAFlightSQLPreparedStatement *statement, - GArrowRecordBatch *record_batch, - GError **error); +gaflightsql_prepared_statement_set_record_batch( + GAFlightSQLPreparedStatement *statement, + GArrowRecordBatch *record_batch, + GError **error); -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 gboolean gaflightsql_prepared_statement_set_record_batch_reader( GAFlightSQLPreparedStatement *statement, GArrowRecordBatchReader *reader, GError **error); -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 gboolean -gaflightsql_prepared_statement_close(GAFlightSQLPreparedStatement *statement, - GAFlightCallOptions *options, - GError **error); +gaflightsql_prepared_statement_close( + GAFlightSQLPreparedStatement *statement, + GAFlightCallOptions *options, + GError **error); -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 gboolean -gaflightsql_prepared_statement_is_closed(GAFlightSQLPreparedStatement *statement); +gaflightsql_prepared_statement_is_closed( + GAFlightSQLPreparedStatement *statement); + #define GAFLIGHTSQL_TYPE_CLIENT (gaflightsql_client_get_type()) -GAFLIGHTSQL_AVAILABLE_IN_9_0 -G_DECLARE_DERIVABLE_TYPE( - GAFlightSQLClient, gaflightsql_client, GAFLIGHTSQL, CLIENT, GObject) +G_DECLARE_DERIVABLE_TYPE(GAFlightSQLClient, + gaflightsql_client, + GAFLIGHTSQL, + CLIENT, + GObject) struct _GAFlightSQLClientClass { GObjectClass parent_class; }; -GAFLIGHTSQL_AVAILABLE_IN_9_0 +GARROW_AVAILABLE_IN_9_0 GAFlightSQLClient * gaflightsql_client_new(GAFlightClient *client); -GAFLIGHTSQL_AVAILABLE_IN_9_0 +GARROW_AVAILABLE_IN_9_0 GAFlightInfo * gaflightsql_client_execute(GAFlightSQLClient *client, const gchar *query, GAFlightCallOptions *options, GError **error); -GAFLIGHTSQL_AVAILABLE_IN_13_0 +GARROW_AVAILABLE_IN_13_0 gint64 gaflightsql_client_execute_update(GAFlightSQLClient *client, const gchar *query, GAFlightCallOptions *options, GError **error); -GAFLIGHTSQL_AVAILABLE_IN_9_0 +GARROW_AVAILABLE_IN_9_0 GAFlightStreamReader * gaflightsql_client_do_get(GAFlightSQLClient *client, GAFlightTicket *ticket, GAFlightCallOptions *options, GError **error); -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 GAFlightSQLPreparedStatement * gaflightsql_client_prepare(GAFlightSQLClient *client, const gchar *query, GAFlightCallOptions *options, GError **error); + G_END_DECLS diff --git a/c_glib/arrow-flight-sql-glib/client.hpp b/c_glib/arrow-flight-sql-glib/client.hpp index 11f17478f64..09136f8819d 100644 --- a/c_glib/arrow-flight-sql-glib/client.hpp +++ b/c_glib/arrow-flight-sql-glib/client.hpp @@ -23,6 +23,7 @@ #include + GAFlightSQLPreparedStatement * gaflightsql_prepared_statement_new_raw( std::shared_ptr *flight_sql_statement, @@ -31,7 +32,8 @@ std::shared_ptr gaflightsql_prepared_statement_get_raw(GAFlightSQLPreparedStatement *statement); GAFlightSQLClient * -gaflightsql_client_new_raw(arrow::flight::sql::FlightSqlClient *flight_sql_client, - GAFlightClient *client); +gaflightsql_client_new_raw( + arrow::flight::sql::FlightSqlClient *flight_sql_client, + GAFlightClient *client); arrow::flight::sql::FlightSqlClient * gaflightsql_client_get_raw(GAFlightSQLClient *client); diff --git a/c_glib/arrow-flight-sql-glib/meson.build b/c_glib/arrow-flight-sql-glib/meson.build index d588ba4917c..f1ea6d67cb0 100644 --- a/c_glib/arrow-flight-sql-glib/meson.build +++ b/c_glib/arrow-flight-sql-glib/meson.build @@ -34,14 +34,6 @@ cpp_headers = files( 'server.hpp', ) -version_h = configure_file( - input: 'version.h.in', - output: 'version.h', - command: [python3, generate_version_header_py, '--library', 'GAFLIGHTSQL', '--version', version, '--input', '@INPUT@', '--output', '@OUTPUT@'], -) - -c_headers += version_h - headers = c_headers + cpp_headers install_headers(headers, subdir: 'arrow-flight-sql-glib') @@ -55,7 +47,6 @@ libarrow_flight_sql_glib = library('arrow-flight-sql-glib', dependencies: dependencies, implicit_include_directories: false, include_directories: base_include_directories, - cpp_args: ['-DGAFLIGHTSQL_COMPILATION'], soversion: so_version, version: library_version) arrow_flight_sql_glib = \ @@ -72,25 +63,27 @@ pkgconfig.generate(libarrow_flight_sql_glib, version: version) if have_gi - arrow_flight_sql_glib_gir_dependencies = \ - declare_dependency(sources: [arrow_glib_gir, arrow_flight_glib_gir]) - arrow_flight_sql_glib_gir = \ + flight_sql_glib_gir_dependencies = \ + declare_dependency(sources: [arrow_glib_gir, flight_glib_gir]) + flight_sql_glib_gir = \ gnome.generate_gir(libarrow_flight_sql_glib, - dependencies: arrow_flight_sql_glib_gir_dependencies, + dependencies: flight_sql_glib_gir_dependencies, export_packages: 'arrow-flight-sql-glib', extra_args: [ '--warn-all', '--include-uninstalled=./arrow-glib/Arrow-1.0.gir', '--include-uninstalled=./arrow-flight-glib/ArrowFlight-1.0.gir', ], + fatal_warnings: gi_fatal_warnings, header: 'arrow-flight-sql-glib/arrow-flight-sql-glib.h', identifier_prefix: 'GAFlightSQL', includes: [ 'Arrow-1.0', 'ArrowFlight-1.0', ], - kwargs: generate_gi_common_args, + install: true, namespace: 'ArrowFlightSQL', + nsversion: api_version, sources: sources + c_headers, symbol_prefix: 'gaflightsql') @@ -98,10 +91,10 @@ if have_gi gnome.generate_vapi('arrow-flight-sql-glib', install: true, packages: [ - arrow_flight_glib_vapi, + flight_glib_vapi, arrow_glib_vapi, 'gio-2.0', ], - sources: [arrow_flight_sql_glib_gir[0]]) + sources: [flight_sql_glib_gir[0]]) endif endif diff --git a/c_glib/arrow-flight-sql-glib/server.cpp b/c_glib/arrow-flight-sql-glib/server.cpp index bea916430b9..518b771732a 100644 --- a/c_glib/arrow-flight-sql-glib/server.cpp +++ b/c_glib/arrow-flight-sql-glib/server.cpp @@ -51,8 +51,8 @@ G_BEGIN_DECLS * Since: 9.0.0 */ -struct GAFlightSQLCommandPrivate -{ + +struct GAFlightSQLCommandPrivate { void *command; }; @@ -60,11 +60,14 @@ enum { PROP_COMMAND = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GAFlightSQLCommand, gaflightsql_command, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GAFlightSQLCommand, + gaflightsql_command, + G_TYPE_OBJECT) -#define GAFLIGHTSQL_COMMAND_GET_PRIVATE(object) \ - static_cast( \ - gaflightsql_command_get_instance_private(GAFLIGHTSQL_COMMAND(object))) +#define GAFLIGHTSQL_COMMAND_GET_PRIVATE(object) \ + static_cast( \ + gaflightsql_command_get_instance_private( \ + GAFLIGHTSQL_COMMAND(object))) static void gaflightsql_command_set_property(GObject *object, @@ -96,14 +99,15 @@ gaflightsql_command_class_init(GAFlightSQLCommandClass *klass) gobject_class->set_property = gaflightsql_command_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "command", - "Command", - "The raw command struct", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("command", + "Command", + "The raw command struct", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_COMMAND, spec); } + G_DEFINE_TYPE(GAFlightSQLStatementQuery, gaflightsql_statement_query, GAFLIGHTSQL_TYPE_COMMAND) @@ -133,6 +137,7 @@ gaflightsql_statement_query_get_query(GAFlightSQLStatementQuery *command) return statement_query->query.c_str(); } + G_DEFINE_TYPE(GAFlightSQLStatementUpdate, gaflightsql_statement_update, GAFLIGHTSQL_TYPE_COMMAND) @@ -162,12 +167,14 @@ gaflightsql_statement_update_get_query(GAFlightSQLStatementUpdate *command) return statement_update->query.c_str(); } + G_DEFINE_TYPE(GAFlightSQLPreparedStatementUpdate, gaflightsql_prepared_statement_update, GAFLIGHTSQL_TYPE_COMMAND) static void -gaflightsql_prepared_statement_update_init(GAFlightSQLPreparedStatementUpdate *object) +gaflightsql_prepared_statement_update_init( + GAFlightSQLPreparedStatementUpdate *object) { } @@ -195,13 +202,14 @@ gaflightsql_prepared_statement_update_get_handle( update->prepared_statement_handle.size()); } + G_DEFINE_TYPE(GAFlightSQLStatementQueryTicket, gaflightsql_statement_query_ticket, GAFLIGHTSQL_TYPE_COMMAND) -#define GAFLIGHTSQL_STATEMENT_QUERY_TICKET_GET_PRIVATE(object) \ - static_cast( \ - gaflightsql_statement_query_ticket_get_instance_private( \ +#define GAFLIGHTSQL_STATEMENT_QUERY_TICKET_GET_PRIVATE(object) \ + static_cast( \ + gaflightsql_statement_query_ticket_get_instance_private( \ GAFLIGHTSQL_STATEMENT_QUERY_TICKET(object))) static void @@ -210,7 +218,8 @@ gaflightsql_statement_query_ticket_init(GAFlightSQLStatementQueryTicket *object) } static void -gaflightsql_statement_query_ticket_class_init(GAFlightSQLStatementQueryTicketClass *klass) +gaflightsql_statement_query_ticket_class_init( + GAFlightSQLStatementQueryTicketClass *klass) { } @@ -225,14 +234,18 @@ gaflightsql_statement_query_ticket_class_init(GAFlightSQLStatementQueryTicketCla * Since: 9.0.0 */ GBytes * -gaflightsql_statement_query_ticket_generate_handle(const gchar *query, GError **error) +gaflightsql_statement_query_ticket_generate_handle(const gchar *query, + GError **error) { auto result = arrow::flight::sql::CreateStatementQueryTicket(query); - if (!garrow::check(error, result, "[flight-sql-statement-query-ticket][new]")) { + if (!garrow::check(error, + result, + "[flight-sql-statement-query-ticket][new]")) { return nullptr; } auto flight_sql_handle = std::move(*result); - return g_bytes_new(flight_sql_handle.data(), flight_sql_handle.size()); + return g_bytes_new(flight_sql_handle.data(), + flight_sql_handle.size()); } /** @@ -245,15 +258,17 @@ gaflightsql_statement_query_ticket_generate_handle(const gchar *query, GError ** * Since: 9.0.0 */ GBytes * -gaflightsql_statement_query_ticket_get_handle(GAFlightSQLStatementQueryTicket *command) +gaflightsql_statement_query_ticket_get_handle( + GAFlightSQLStatementQueryTicket *command) { - auto statement_query_ticket = gaflightsql_statement_query_ticket_get_raw(command); + auto statement_query_ticket = + gaflightsql_statement_query_ticket_get_raw(command); auto &handle = statement_query_ticket->statement_handle; return g_bytes_new_static(handle.data(), handle.size()); } -struct GAFlightSQLCreatePreparedStatementRequestPrivate -{ + +struct GAFlightSQLCreatePreparedStatementRequestPrivate { arrow::flight::sql::ActionCreatePreparedStatementRequest *request; }; @@ -265,9 +280,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GAFlightSQLCreatePreparedStatementRequest, gaflightsql_create_prepared_statement_request, G_TYPE_OBJECT) -#define GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_REQUEST_GET_PRIVATE(object) \ - static_cast( \ - gaflightsql_create_prepared_statement_request_get_instance_private( \ +#define GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_REQUEST_GET_PRIVATE(object) \ + static_cast( \ + gaflightsql_create_prepared_statement_request_get_instance_private( \ GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_REQUEST(object))) static void @@ -305,11 +320,11 @@ gaflightsql_create_prepared_statement_request_class_init( gaflightsql_create_prepared_statement_request_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "request", - nullptr, - nullptr, - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("request", + nullptr, + nullptr, + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_REQUEST, spec); } @@ -345,8 +360,8 @@ gaflightsql_create_prepared_statement_request_get_transaction_id( return priv->request->transaction_id.c_str(); } -struct GAFlightSQLCreatePreparedStatementResultPrivate -{ + +struct GAFlightSQLCreatePreparedStatementResultPrivate { arrow::flight::sql::ActionCreatePreparedStatementResult result; }; @@ -354,9 +369,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GAFlightSQLCreatePreparedStatementResult, gaflightsql_create_prepared_statement_result, G_TYPE_OBJECT) -#define GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(object) \ - static_cast( \ - gaflightsql_create_prepared_statement_result_get_instance_private( \ +#define GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(object) \ + static_cast( \ + gaflightsql_create_prepared_statement_result_get_instance_private( \ GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT(object))) static void @@ -364,8 +379,7 @@ gaflightsql_create_prepared_statement_result_finalize(GObject *object) { auto priv = GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(object); priv->result.~ActionCreatePreparedStatementResult(); - G_OBJECT_CLASS(gaflightsql_create_prepared_statement_result_parent_class) - ->finalize(object); + G_OBJECT_CLASS(gaflightsql_create_prepared_statement_result_parent_class)->finalize(object); } static void @@ -373,7 +387,7 @@ gaflightsql_create_prepared_statement_result_init( GAFlightSQLCreatePreparedStatementResult *object) { auto priv = GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(object); - new (&(priv->result)) arrow::flight::sql::ActionCreatePreparedStatementResult(); + new(&(priv->result)) arrow::flight::sql::ActionCreatePreparedStatementResult(); } static void @@ -381,7 +395,8 @@ gaflightsql_create_prepared_statement_result_class_init( GAFlightSQLCreatePreparedStatementResultClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = gaflightsql_create_prepared_statement_result_finalize; + gobject_class->finalize = + gaflightsql_create_prepared_statement_result_finalize; } /** @@ -395,7 +410,8 @@ GAFlightSQLCreatePreparedStatementResult * gaflightsql_create_prepared_statement_result_new(void) { return GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT( - g_object_new(GAFLIGHTSQL_TYPE_CREATE_PREPARED_STATEMENT_RESULT, nullptr)); + g_object_new(GAFLIGHTSQL_TYPE_CREATE_PREPARED_STATEMENT_RESULT, + nullptr)); } /** @@ -407,9 +423,11 @@ gaflightsql_create_prepared_statement_result_new(void) */ void gaflightsql_create_prepared_statement_result_set_dataset_schema( - GAFlightSQLCreatePreparedStatementResult *result, GArrowSchema *schema) + GAFlightSQLCreatePreparedStatementResult *result, + GArrowSchema *schema) { - auto priv = GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(result); + auto priv = + GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(result); priv->result.dataset_schema = garrow_schema_get_raw(schema); } @@ -425,7 +443,8 @@ GArrowSchema * gaflightsql_create_prepared_statement_result_get_dataset_schema( GAFlightSQLCreatePreparedStatementResult *result) { - auto priv = GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(result); + auto priv = + GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(result); if (!priv->result.dataset_schema) { return nullptr; } @@ -441,9 +460,11 @@ gaflightsql_create_prepared_statement_result_get_dataset_schema( */ void gaflightsql_create_prepared_statement_result_set_parameter_schema( - GAFlightSQLCreatePreparedStatementResult *result, GArrowSchema *schema) + GAFlightSQLCreatePreparedStatementResult *result, + GArrowSchema *schema) { - auto priv = GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(result); + auto priv = + GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(result); priv->result.parameter_schema = garrow_schema_get_raw(schema); } @@ -459,7 +480,8 @@ GArrowSchema * gaflightsql_create_prepared_statement_result_get_parameter_schema( GAFlightSQLCreatePreparedStatementResult *result) { - auto priv = GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(result); + auto priv = + GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(result); if (!priv->result.parameter_schema) { return nullptr; } @@ -475,9 +497,11 @@ gaflightsql_create_prepared_statement_result_get_parameter_schema( */ void gaflightsql_create_prepared_statement_result_set_handle( - GAFlightSQLCreatePreparedStatementResult *result, GBytes *handle) + GAFlightSQLCreatePreparedStatementResult *result, + GBytes *handle) { - auto priv = GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(result); + auto priv = + GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(result); size_t handle_size; auto handle_data = g_bytes_get_data(handle, &handle_size); priv->result.prepared_statement_handle = @@ -497,13 +521,14 @@ GBytes * gaflightsql_create_prepared_statement_result_get_handle( GAFlightSQLCreatePreparedStatementResult *result) { - auto priv = GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(result); + auto priv = + GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(result); return g_bytes_new_static(priv->result.prepared_statement_handle.data(), priv->result.prepared_statement_handle.length()); } -struct GAFlightSQLClosePreparedStatementRequestPrivate -{ + +struct GAFlightSQLClosePreparedStatementRequestPrivate { arrow::flight::sql::ActionClosePreparedStatementRequest *request; }; @@ -511,9 +536,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GAFlightSQLClosePreparedStatementRequest, gaflightsql_close_prepared_statement_request, G_TYPE_OBJECT) -#define GAFLIGHTSQL_CLOSE_PREPARED_STATEMENT_REQUEST_GET_PRIVATE(object) \ - static_cast( \ - gaflightsql_close_prepared_statement_request_get_instance_private( \ +#define GAFLIGHTSQL_CLOSE_PREPARED_STATEMENT_REQUEST_GET_PRIVATE(object) \ + static_cast( \ + gaflightsql_close_prepared_statement_request_get_instance_private( \ GAFLIGHTSQL_CLOSE_PREPARED_STATEMENT_REQUEST(object))) static void @@ -547,14 +572,15 @@ gaflightsql_close_prepared_statement_request_class_init( GAFlightSQLClosePreparedStatementRequestClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->set_property = gaflightsql_close_prepared_statement_request_set_property; + gobject_class->set_property = + gaflightsql_close_prepared_statement_request_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "request", - nullptr, - nullptr, - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("request", + nullptr, + nullptr, + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_REQUEST, spec); } @@ -576,23 +602,23 @@ gaflightsql_close_prepared_statement_request_get_handle( priv->request->prepared_statement_handle.length()); } + G_END_DECLS namespace gaflightsql { class Server : public arrow::flight::sql::FlightSqlServerBase { public: - explicit Server(GAFlightSQLServer *gaserver) - : FlightSqlServerBase(), - gaserver_(gaserver) - { + explicit Server(GAFlightSQLServer *gaserver) : + FlightSqlServerBase(), + gaserver_(gaserver) { } ~Server() override = default; arrow::Result> - GetFlightInfoStatement(const arrow::flight::ServerCallContext &context, - const arrow::flight::sql::StatementQuery &command, - const arrow::flight::FlightDescriptor &descriptor) override - { + GetFlightInfoStatement( + const arrow::flight::ServerCallContext& context, + const arrow::flight::sql::StatementQuery& command, + const arrow::flight::FlightDescriptor& descriptor) override { auto gacontext = gaflight_server_call_context_new_raw(&context); auto gacommand = gaflightsql_statement_query_new_raw(&command); auto gadescriptor = gaflight_descriptor_new_raw(&descriptor); @@ -607,20 +633,25 @@ namespace gaflightsql { g_object_unref(gacontext); if (gerror) { auto context = "[flight-sql-server][get-flight-info-statement]"; - return garrow_error_to_status(gerror, arrow::StatusCode::UnknownError, context); + return garrow_error_to_status(gerror, + arrow::StatusCode::UnknownError, + context); } - return std::make_unique(*gaflight_info_get_raw(gainfo)); + return std::make_unique( + *gaflight_info_get_raw(gainfo)); } arrow::Result> - DoGetStatement(const arrow::flight::ServerCallContext &context, - const arrow::flight::sql::StatementQueryTicket &command) override - { + DoGetStatement( + const arrow::flight::ServerCallContext &context, + const arrow::flight::sql::StatementQueryTicket& command) override { auto gacontext = gaflight_server_call_context_new_raw(&context); auto gacommand = gaflightsql_statement_query_ticket_new_raw(&command); GError *gerror = nullptr; - auto gastream = - gaflightsql_server_do_get_statement(gaserver_, gacontext, gacommand, &gerror); + auto gastream = gaflightsql_server_do_get_statement(gaserver_, + gacontext, + gacommand, + &gerror); g_object_unref(gacommand); g_object_unref(gacontext); if (gerror) { @@ -634,8 +665,7 @@ namespace gaflightsql { arrow::Result DoPutCommandStatementUpdate( const arrow::flight::ServerCallContext &context, - const arrow::flight::sql::StatementUpdate &command) override - { + const arrow::flight::sql::StatementUpdate &command) override { auto gacontext = gaflight_server_call_context_new_raw(&context); auto gacommand = gaflightsql_statement_update_new_raw(&command); GError *gerror = nullptr; @@ -659,8 +689,7 @@ namespace gaflightsql { DoPutPreparedStatementUpdate( const arrow::flight::ServerCallContext &context, const arrow::flight::sql::PreparedStatementUpdate &command, - arrow::flight::FlightMessageReader *reader) override - { + arrow::flight::FlightMessageReader *reader) override { auto gacontext = gaflight_server_call_context_new_raw(&context); auto gacommand = gaflightsql_prepared_statement_update_new_raw(&command); auto gareader = gaflight_message_reader_new_raw(reader, FALSE); @@ -686,21 +715,22 @@ namespace gaflightsql { arrow::Result CreatePreparedStatement( const arrow::flight::ServerCallContext &context, - const arrow::flight::sql::ActionCreatePreparedStatementRequest &request) override - { + const arrow::flight::sql::ActionCreatePreparedStatementRequest &request) override { auto gacontext = gaflight_server_call_context_new_raw(&context); auto garequest = gaflightsql_create_prepared_statement_request_new_raw(&request); GError *gerror = nullptr; - auto garesult = gaflightsql_server_create_prepared_statement(gaserver_, - gacontext, - garequest, - &gerror); + auto garesult = + gaflightsql_server_create_prepared_statement(gaserver_, + gacontext, + garequest, + &gerror); g_object_unref(garequest); g_object_unref(gacontext); if (gerror) { - return garrow_error_to_status(gerror, - arrow::StatusCode::UnknownError, - "[flight-sql-server][create-prepared-statement]"); + return garrow_error_to_status( + gerror, + arrow::StatusCode::UnknownError, + "[flight-sql-server][create-prepared-statement]"); } auto garesult_priv = GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_RESULT_GET_PRIVATE(garesult); @@ -712,8 +742,7 @@ namespace gaflightsql { arrow::Status ClosePreparedStatement( const arrow::flight::ServerCallContext &context, - const arrow::flight::sql::ActionClosePreparedStatementRequest &request) override - { + const arrow::flight::sql::ActionClosePreparedStatementRequest &request) override { auto gacontext = gaflight_server_call_context_new_raw(&context); auto garequest = gaflightsql_close_prepared_statement_request_new_raw(&request); GError *gerror = nullptr; @@ -724,9 +753,10 @@ namespace gaflightsql { g_object_unref(garequest); g_object_unref(gacontext); if (gerror) { - return garrow_error_to_status(gerror, - arrow::StatusCode::UnknownError, - "[flight-sql-server][close-prepared-statement]"); + return garrow_error_to_status( + gerror, + arrow::StatusCode::UnknownError, + "[flight-sql-server][close-prepared-statement]"); } else { return arrow::Status::OK(); } @@ -735,11 +765,10 @@ namespace gaflightsql { private: GAFlightSQLServer *gaserver_; }; -}; // namespace gaflightsql +}; G_BEGIN_DECLS -struct GAFlightSQLServerPrivate -{ +struct GAFlightSQLServerPrivate { gaflightsql::Server server; }; @@ -754,17 +783,18 @@ gaflightsql_server_servable_interface_init(GAFlightServableInterface *iface) iface->get_raw = gaflightsql_server_servable_get_raw; } -G_DEFINE_ABSTRACT_TYPE_WITH_CODE( - GAFlightSQLServer, - gaflightsql_server, - GAFLIGHT_TYPE_SERVER, - G_ADD_PRIVATE(GAFlightSQLServer); - G_IMPLEMENT_INTERFACE(GAFLIGHT_TYPE_SERVABLE, - gaflightsql_server_servable_interface_init)) +G_DEFINE_ABSTRACT_TYPE_WITH_CODE(GAFlightSQLServer, + gaflightsql_server, + GAFLIGHT_TYPE_SERVER, + G_ADD_PRIVATE(GAFlightSQLServer); + G_IMPLEMENT_INTERFACE( + GAFLIGHT_TYPE_SERVABLE, + gaflightsql_server_servable_interface_init)) -#define GAFLIGHTSQL_SERVER_GET_PRIVATE(object) \ - static_cast( \ - gaflightsql_server_get_instance_private(GAFLIGHTSQL_SERVER(object))) +#define GAFLIGHTSQL_SERVER_GET_PRIVATE(object) \ + static_cast( \ + gaflightsql_server_get_instance_private( \ + GAFLIGHTSQL_SERVER(object))) G_END_DECLS static arrow::flight::FlightServerBase * @@ -787,7 +817,7 @@ static void gaflightsql_server_init(GAFlightSQLServer *object) { auto priv = GAFLIGHTSQL_SERVER_GET_PRIVATE(object); - new (&(priv->server)) gaflightsql::Server(object); + new(&(priv->server)) gaflightsql::Server(object); } static void @@ -811,19 +841,26 @@ gaflightsql_server_class_init(GAFlightSQLServerClass *klass) * Since: 9.0.0 */ GAFlightInfo * -gaflightsql_server_get_flight_info_statement(GAFlightSQLServer *server, - GAFlightServerCallContext *context, - GAFlightSQLStatementQuery *command, - GAFlightDescriptor *descriptor, - GError **error) +gaflightsql_server_get_flight_info_statement( + GAFlightSQLServer *server, + GAFlightServerCallContext *context, + GAFlightSQLStatementQuery *command, + GAFlightDescriptor *descriptor, + GError **error) { auto klass = GAFLIGHTSQL_SERVER_GET_CLASS(server); if (!(klass && klass->get_flight_info_statement)) { - g_set_error(error, GARROW_ERROR, GARROW_ERROR_NOT_IMPLEMENTED, "not implemented"); + g_set_error(error, + GARROW_ERROR, + GARROW_ERROR_NOT_IMPLEMENTED, + "not implemented"); return NULL; } - return ( - *(klass->get_flight_info_statement))(server, context, command, descriptor, error); + return (*(klass->get_flight_info_statement))(server, + context, + command, + descriptor, + error); } /** @@ -846,7 +883,10 @@ gaflightsql_server_do_get_statement(GAFlightSQLServer *server, { auto klass = GAFLIGHTSQL_SERVER_GET_CLASS(server); if (!(klass && klass->do_get_statement)) { - g_set_error(error, GARROW_ERROR, GARROW_ERROR_NOT_IMPLEMENTED, "not implemented"); + g_set_error(error, + GARROW_ERROR, + GARROW_ERROR_NOT_IMPLEMENTED, + "not implemented"); return nullptr; } return (*(klass->do_get_statement))(server, context, ticket, error); @@ -864,14 +904,18 @@ gaflightsql_server_do_get_statement(GAFlightSQLServer *server, * Since: 13.0.0 */ gint64 -gaflightsql_server_do_put_command_statement_update(GAFlightSQLServer *server, - GAFlightServerCallContext *context, - GAFlightSQLStatementUpdate *command, - GError **error) +gaflightsql_server_do_put_command_statement_update( + GAFlightSQLServer *server, + GAFlightServerCallContext *context, + GAFlightSQLStatementUpdate *command, + GError **error) { auto klass = GAFLIGHTSQL_SERVER_GET_CLASS(server); if (!(klass && klass->do_put_command_statement_update)) { - g_set_error(error, GARROW_ERROR, GARROW_ERROR_NOT_IMPLEMENTED, "not implemented"); + g_set_error(error, + GARROW_ERROR, + GARROW_ERROR_NOT_IMPLEMENTED, + "not implemented"); return 0; } return klass->do_put_command_statement_update(server, context, command, error); @@ -899,10 +943,14 @@ gaflightsql_server_do_put_prepared_statement_update( { auto klass = GAFLIGHTSQL_SERVER_GET_CLASS(server); if (!(klass && klass->do_put_prepared_statement_update)) { - g_set_error(error, GARROW_ERROR, GARROW_ERROR_NOT_IMPLEMENTED, "not implemented"); + g_set_error(error, + GARROW_ERROR, + GARROW_ERROR_NOT_IMPLEMENTED, + "not implemented"); return 0; } - return klass->do_put_prepared_statement_update(server, context, command, reader, error); + return klass->do_put_prepared_statement_update( + server, context, command, reader, error); } /** @@ -928,7 +976,10 @@ gaflightsql_server_create_prepared_statement( { auto klass = GAFLIGHTSQL_SERVER_GET_CLASS(server); if (!(klass && klass->create_prepared_statement)) { - g_set_error(error, GARROW_ERROR, GARROW_ERROR_NOT_IMPLEMENTED, "not implemented"); + g_set_error(error, + GARROW_ERROR, + GARROW_ERROR_NOT_IMPLEMENTED, + "not implemented"); return nullptr; } return klass->create_prepared_statement(server, context, request, error); @@ -952,20 +1003,27 @@ gaflightsql_server_close_prepared_statement( { auto klass = GAFLIGHTSQL_SERVER_GET_CLASS(server); if (!(klass && klass->close_prepared_statement)) { - g_set_error(error, GARROW_ERROR, GARROW_ERROR_NOT_IMPLEMENTED, "not implemented"); + g_set_error(error, + GARROW_ERROR, + GARROW_ERROR_NOT_IMPLEMENTED, + "not implemented"); return; } return klass->close_prepared_statement(server, context, request, error); } + G_END_DECLS + GAFlightSQLStatementQuery * gaflightsql_statement_query_new_raw( const arrow::flight::sql::StatementQuery *flight_command) { return GAFLIGHTSQL_STATEMENT_QUERY( - g_object_new(GAFLIGHTSQL_TYPE_STATEMENT_QUERY, "command", flight_command, nullptr)); + g_object_new(GAFLIGHTSQL_TYPE_STATEMENT_QUERY, + "command", flight_command, + nullptr)); } const arrow::flight::sql::StatementQuery * @@ -975,12 +1033,15 @@ gaflightsql_statement_query_get_raw(GAFlightSQLStatementQuery *command) return static_cast(priv->command); } + GAFlightSQLStatementUpdate * gaflightsql_statement_update_new_raw( const arrow::flight::sql::StatementUpdate *flight_command) { return GAFLIGHTSQL_STATEMENT_UPDATE( - g_object_new(GAFLIGHTSQL_TYPE_STATEMENT_UPDATE, "command", flight_command, nullptr)); + g_object_new(GAFLIGHTSQL_TYPE_STATEMENT_UPDATE, + "command", flight_command, + nullptr)); } const arrow::flight::sql::StatementUpdate * @@ -990,50 +1051,54 @@ gaflightsql_statement_update_get_raw(GAFlightSQLStatementUpdate *command) return static_cast(priv->command); } + GAFlightSQLPreparedStatementUpdate * gaflightsql_prepared_statement_update_new_raw( const arrow::flight::sql::PreparedStatementUpdate *flight_command) { return GAFLIGHTSQL_PREPARED_STATEMENT_UPDATE( g_object_new(GAFLIGHTSQL_TYPE_PREPARED_STATEMENT_UPDATE, - "command", - flight_command, + "command", flight_command, nullptr)); } const arrow::flight::sql::PreparedStatementUpdate * -gaflightsql_prepared_statement_update_get_raw(GAFlightSQLPreparedStatementUpdate *command) +gaflightsql_prepared_statement_update_get_raw( + GAFlightSQLPreparedStatementUpdate *command) { auto priv = GAFLIGHTSQL_COMMAND_GET_PRIVATE(command); - return static_cast(priv->command); + return static_cast( + priv->command); } + GAFlightSQLStatementQueryTicket * gaflightsql_statement_query_ticket_new_raw( const arrow::flight::sql::StatementQueryTicket *flight_command) { return GAFLIGHTSQL_STATEMENT_QUERY_TICKET( g_object_new(GAFLIGHTSQL_TYPE_STATEMENT_QUERY_TICKET, - "command", - flight_command, + "command", flight_command, nullptr)); } const arrow::flight::sql::StatementQueryTicket * -gaflightsql_statement_query_ticket_get_raw(GAFlightSQLStatementQueryTicket *command) +gaflightsql_statement_query_ticket_get_raw( + GAFlightSQLStatementQueryTicket *command) { auto priv = GAFLIGHTSQL_COMMAND_GET_PRIVATE(command); - return static_cast(priv->command); + return static_cast( + priv->command); } + GAFlightSQLCreatePreparedStatementRequest * gaflightsql_create_prepared_statement_request_new_raw( const arrow::flight::sql::ActionCreatePreparedStatementRequest *flight_request) { return GAFLIGHTSQL_CREATE_PREPARED_STATEMENT_REQUEST( g_object_new(GAFLIGHTSQL_TYPE_CREATE_PREPARED_STATEMENT_REQUEST, - "request", - flight_request, + "request", flight_request, nullptr)); } @@ -1045,14 +1110,14 @@ gaflightsql_create_prepared_statement_request_get_raw( return priv->request; } + GAFlightSQLClosePreparedStatementRequest * gaflightsql_close_prepared_statement_request_new_raw( const arrow::flight::sql::ActionClosePreparedStatementRequest *flight_request) { return GAFLIGHTSQL_CLOSE_PREPARED_STATEMENT_REQUEST( g_object_new(GAFLIGHTSQL_TYPE_CLOSE_PREPARED_STATEMENT_REQUEST, - "request", - flight_request, + "request", flight_request, nullptr)); } diff --git a/c_glib/arrow-flight-sql-glib/server.h b/c_glib/arrow-flight-sql-glib/server.h index 8cf0aace776..106b6e40db3 100644 --- a/c_glib/arrow-flight-sql-glib/server.h +++ b/c_glib/arrow-flight-sql-glib/server.h @@ -21,21 +21,22 @@ #include -#include - G_BEGIN_DECLS + #define GAFLIGHTSQL_TYPE_COMMAND (gaflightsql_command_get_type()) -GAFLIGHTSQL_AVAILABLE_IN_9_0 -G_DECLARE_DERIVABLE_TYPE( - GAFlightSQLCommand, gaflightsql_command, GAFLIGHTSQL, COMMAND, GObject) +G_DECLARE_DERIVABLE_TYPE(GAFlightSQLCommand, + gaflightsql_command, + GAFLIGHTSQL, + COMMAND, + GObject) struct _GAFlightSQLCommandClass { GObjectClass parent_class; }; + #define GAFLIGHTSQL_TYPE_STATEMENT_QUERY (gaflightsql_statement_query_get_type()) -GAFLIGHTSQL_AVAILABLE_IN_9_0 G_DECLARE_DERIVABLE_TYPE(GAFlightSQLStatementQuery, gaflightsql_statement_query, GAFLIGHTSQL, @@ -46,12 +47,12 @@ struct _GAFlightSQLStatementQueryClass GAFlightSQLCommandClass parent_class; }; -GAFLIGHTSQL_AVAILABLE_IN_9_0 +GARROW_AVAILABLE_IN_9_0 const gchar * gaflightsql_statement_query_get_query(GAFlightSQLStatementQuery *command); + #define GAFLIGHTSQL_TYPE_STATEMENT_UPDATE (gaflightsql_statement_update_get_type()) -GAFLIGHTSQL_AVAILABLE_IN_13_0 G_DECLARE_DERIVABLE_TYPE(GAFlightSQLStatementUpdate, gaflightsql_statement_update, GAFLIGHTSQL, @@ -62,13 +63,13 @@ struct _GAFlightSQLStatementUpdateClass GAFlightSQLCommandClass parent_class; }; -GAFLIGHTSQL_AVAILABLE_IN_13_0 +GARROW_AVAILABLE_IN_13_0 const gchar * gaflightsql_statement_update_get_query(GAFlightSQLStatementUpdate *command); -#define GAFLIGHTSQL_TYPE_PREPARED_STATEMENT_UPDATE \ + +#define GAFLIGHTSQL_TYPE_PREPARED_STATEMENT_UPDATE \ (gaflightsql_prepared_statement_update_get_type()) -GAFLIGHTSQL_AVAILABLE_IN_14_0 G_DECLARE_DERIVABLE_TYPE(GAFlightSQLPreparedStatementUpdate, gaflightsql_prepared_statement_update, GAFLIGHTSQL, @@ -79,14 +80,14 @@ struct _GAFlightSQLPreparedStatementUpdateClass GAFlightSQLCommandClass parent_class; }; -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 GBytes * gaflightsql_prepared_statement_update_get_handle( GAFlightSQLPreparedStatementUpdate *command); -#define GAFLIGHTSQL_TYPE_STATEMENT_QUERY_TICKET \ + +#define GAFLIGHTSQL_TYPE_STATEMENT_QUERY_TICKET \ (gaflightsql_statement_query_ticket_get_type()) -GAFLIGHTSQL_AVAILABLE_IN_9_0 G_DECLARE_DERIVABLE_TYPE(GAFlightSQLStatementQueryTicket, gaflightsql_statement_query_ticket, GAFLIGHTSQL, @@ -97,16 +98,18 @@ struct _GAFlightSQLStatementQueryTicketClass GAFlightSQLCommandClass parent_class; }; -GAFLIGHTSQL_AVAILABLE_IN_9_0 +GARROW_AVAILABLE_IN_9_0 GBytes * -gaflightsql_statement_query_ticket_generate_handle(const gchar *query, GError **error); -GAFLIGHTSQL_AVAILABLE_IN_9_0 +gaflightsql_statement_query_ticket_generate_handle(const gchar *query, + GError **error); +GARROW_AVAILABLE_IN_9_0 GBytes * -gaflightsql_statement_query_ticket_get_handle(GAFlightSQLStatementQueryTicket *command); +gaflightsql_statement_query_ticket_get_handle( + GAFlightSQLStatementQueryTicket *command); -#define GAFLIGHTSQL_TYPE_CREATE_PREPARED_STATEMENT_REQUEST \ + +#define GAFLIGHTSQL_TYPE_CREATE_PREPARED_STATEMENT_REQUEST \ (gaflightsql_create_prepared_statement_request_get_type()) -GAFLIGHTSQL_AVAILABLE_IN_14_0 G_DECLARE_DERIVABLE_TYPE(GAFlightSQLCreatePreparedStatementRequest, gaflightsql_create_prepared_statement_request, GAFLIGHTSQL, @@ -117,19 +120,19 @@ struct _GAFlightSQLCreatePreparedStatementRequestClass GObjectClass parent_class; }; -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 const gchar * gaflightsql_create_prepared_statement_request_get_query( GAFlightSQLCreatePreparedStatementRequest *request); -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 const gchar * gaflightsql_create_prepared_statement_request_get_transaction_id( GAFlightSQLCreatePreparedStatementRequest *request); -#define GAFLIGHTSQL_TYPE_CREATE_PREPARED_STATEMENT_RESULT \ + +#define GAFLIGHTSQL_TYPE_CREATE_PREPARED_STATEMENT_RESULT \ (gaflightsql_create_prepared_statement_result_get_type()) -GAFLIGHTSQL_AVAILABLE_IN_14_0 G_DECLARE_DERIVABLE_TYPE(GAFlightSQLCreatePreparedStatementResult, gaflightsql_create_prepared_statement_result, GAFLIGHTSQL, @@ -140,37 +143,40 @@ struct _GAFlightSQLCreatePreparedStatementResultClass GObjectClass parent_class; }; -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 GAFlightSQLCreatePreparedStatementResult * gaflightsql_create_prepared_statement_result_new(void); -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 void gaflightsql_create_prepared_statement_result_set_dataset_schema( - GAFlightSQLCreatePreparedStatementResult *result, GArrowSchema *schema); -GAFLIGHTSQL_AVAILABLE_IN_14_0 + GAFlightSQLCreatePreparedStatementResult *result, + GArrowSchema *schema); +GARROW_AVAILABLE_IN_14_0 GArrowSchema * gaflightsql_create_prepared_statement_result_get_dataset_schema( GAFlightSQLCreatePreparedStatementResult *result); -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 void gaflightsql_create_prepared_statement_result_set_parameter_schema( - GAFlightSQLCreatePreparedStatementResult *result, GArrowSchema *schema); -GAFLIGHTSQL_AVAILABLE_IN_14_0 + GAFlightSQLCreatePreparedStatementResult *result, + GArrowSchema *schema); +GARROW_AVAILABLE_IN_14_0 GArrowSchema * gaflightsql_create_prepared_statement_result_get_parameter_schema( GAFlightSQLCreatePreparedStatementResult *result); -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 void gaflightsql_create_prepared_statement_result_set_handle( - GAFlightSQLCreatePreparedStatementResult *result, GBytes *handle); -GAFLIGHTSQL_AVAILABLE_IN_14_0 + GAFlightSQLCreatePreparedStatementResult *result, + GBytes *handle); +GARROW_AVAILABLE_IN_14_0 GBytes * gaflightsql_create_prepared_statement_result_get_handle( GAFlightSQLCreatePreparedStatementResult *result); -#define GAFLIGHTSQL_TYPE_CLOSE_PREPARED_STATEMENT_REQUEST \ + +#define GAFLIGHTSQL_TYPE_CLOSE_PREPARED_STATEMENT_REQUEST \ (gaflightsql_close_prepared_statement_request_get_type()) -GAFLIGHTSQL_AVAILABLE_IN_14_0 G_DECLARE_DERIVABLE_TYPE(GAFlightSQLClosePreparedStatementRequest, gaflightsql_close_prepared_statement_request, GAFLIGHTSQL, @@ -181,19 +187,22 @@ struct _GAFlightSQLClosePreparedStatementRequestClass GObjectClass parent_class; }; -GAFLIGHTSQL_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_14_0 GBytes * gaflightsql_close_prepared_statement_request_get_handle( GAFlightSQLClosePreparedStatementRequest *request); + #define GAFLIGHTSQL_TYPE_SERVER (gaflightsql_server_get_type()) -GAFLIGHTSQL_AVAILABLE_IN_9_0 -G_DECLARE_DERIVABLE_TYPE( - GAFlightSQLServer, gaflightsql_server, GAFLIGHTSQL, SERVER, GAFlightServer) +G_DECLARE_DERIVABLE_TYPE(GAFlightSQLServer, + gaflightsql_server, + GAFLIGHTSQL, + SERVER, + GAFlightServer) /** * GAFlightSQLServerClass: * @get_flight_info_statement: A virtual function to implement - * `GetFlightInfoStatement` API that gets a #GAFlightInfo for executing a + * `GetFlightInfoStatment` API that gets a #GAFlightInfo for executing a * SQL query. * @do_get_statement: A virtual function to implement `DoGetStatement` API * that gets a #GAFlightDataStream containing the query results. @@ -213,56 +222,64 @@ struct _GAFlightSQLServerClass { GAFlightServerClass parent_class; - GAFlightInfo *(*get_flight_info_statement)(GAFlightSQLServer *server, - GAFlightServerCallContext *context, - GAFlightSQLStatementQuery *command, - GAFlightDescriptor *descriptor, - GError **error); - GAFlightDataStream *(*do_get_statement)(GAFlightSQLServer *server, - GAFlightServerCallContext *context, - GAFlightSQLStatementQueryTicket *ticket, - GError **error); - gint64 (*do_put_command_statement_update)(GAFlightSQLServer *server, - GAFlightServerCallContext *context, - GAFlightSQLStatementUpdate *command, - GError **error); - gint64 (*do_put_prepared_statement_update)(GAFlightSQLServer *server, - GAFlightServerCallContext *context, - GAFlightSQLPreparedStatementUpdate *command, - GAFlightMessageReader *reader, - GError **error); + GAFlightInfo *(*get_flight_info_statement)( + GAFlightSQLServer *server, + GAFlightServerCallContext *context, + GAFlightSQLStatementQuery *command, + GAFlightDescriptor *descriptor, + GError **error); + GAFlightDataStream *(*do_get_statement)( + GAFlightSQLServer *server, + GAFlightServerCallContext *context, + GAFlightSQLStatementQueryTicket *ticket, + GError **error); + gint64 (*do_put_command_statement_update)( + GAFlightSQLServer *server, + GAFlightServerCallContext *context, + GAFlightSQLStatementUpdate *command, + GError **error); + gint64 (*do_put_prepared_statement_update)( + GAFlightSQLServer *server, + GAFlightServerCallContext *context, + GAFlightSQLPreparedStatementUpdate *command, + GAFlightMessageReader *reader, + GError **error); GAFlightSQLCreatePreparedStatementResult *(*create_prepared_statement)( GAFlightSQLServer *server, GAFlightServerCallContext *context, GAFlightSQLCreatePreparedStatementRequest *request, GError **error); - void (*close_prepared_statement)(GAFlightSQLServer *server, - GAFlightServerCallContext *context, - GAFlightSQLClosePreparedStatementRequest *request, - GError **error); + void (*close_prepared_statement)( + GAFlightSQLServer *server, + GAFlightServerCallContext *context, + GAFlightSQLClosePreparedStatementRequest *request, + GError **error); }; -GAFLIGHTSQL_AVAILABLE_IN_9_0 +GARROW_AVAILABLE_IN_9_0 GAFlightInfo * -gaflightsql_server_get_flight_info_statement(GAFlightSQLServer *server, - GAFlightServerCallContext *context, - GAFlightSQLStatementQuery *command, - GAFlightDescriptor *descriptor, - GError **error); -GAFLIGHTSQL_AVAILABLE_IN_9_0 +gaflightsql_server_get_flight_info_statement( + GAFlightSQLServer *server, + GAFlightServerCallContext *context, + GAFlightSQLStatementQuery *command, + GAFlightDescriptor *descriptor, + GError **error); +GARROW_AVAILABLE_IN_9_0 GAFlightDataStream * -gaflightsql_server_do_get_statement(GAFlightSQLServer *server, - GAFlightServerCallContext *context, - GAFlightSQLStatementQueryTicket *ticket, - GError **error); -GAFLIGHTSQL_AVAILABLE_IN_13_0 +gaflightsql_server_do_get_statement( + GAFlightSQLServer *server, + GAFlightServerCallContext *context, + GAFlightSQLStatementQueryTicket *ticket, + GError **error); +GARROW_AVAILABLE_IN_13_0 gint64 -gaflightsql_server_do_put_command_statement_update(GAFlightSQLServer *server, - GAFlightServerCallContext *context, - GAFlightSQLStatementUpdate *command, - GError **error); - -GAFLIGHTSQL_AVAILABLE_IN_14_0 +gaflightsql_server_do_put_command_statement_update( + GAFlightSQLServer *server, + GAFlightServerCallContext *context, + GAFlightSQLStatementUpdate *command, + GError **error); +/* We can restore this after we bump version to 14.0.0-SNAPSHOT. */ +/* GARROW_AVAILABLE_IN_14_0 */ gint64 gaflightsql_server_do_put_prepared_statement_update( GAFlightSQLServer *server, @@ -270,16 +287,16 @@ gaflightsql_server_do_put_prepared_statement_update( GAFlightSQLPreparedStatementUpdate *command, GAFlightMessageReader *reader, GError **error); - -GAFLIGHTSQL_AVAILABLE_IN_14_0 +/* We can restore this after we bump version to 14.0.0-SNAPSHOT. */ +/* GARROW_AVAILABLE_IN_14_0 */ GAFlightSQLCreatePreparedStatementResult * gaflightsql_server_create_prepared_statement( GAFlightSQLServer *server, GAFlightServerCallContext *context, GAFlightSQLCreatePreparedStatementRequest *request, GError **error); - -GAFLIGHTSQL_AVAILABLE_IN_14_0 +/* We can restore this after we bump version to 14.0.0-SNAPSHOT. */ +/* GARROW_AVAILABLE_IN_14_0 */ void gaflightsql_server_close_prepared_statement( GAFlightSQLServer *server, diff --git a/c_glib/arrow-flight-sql-glib/server.hpp b/c_glib/arrow-flight-sql-glib/server.hpp index acce6f971a4..bdecf054a4d 100644 --- a/c_glib/arrow-flight-sql-glib/server.hpp +++ b/c_glib/arrow-flight-sql-glib/server.hpp @@ -23,17 +23,20 @@ #include + GAFlightSQLStatementQuery * gaflightsql_statement_query_new_raw( const arrow::flight::sql::StatementQuery *flight_command); const arrow::flight::sql::StatementQuery * -gaflightsql_statement_query_get_raw(GAFlightSQLStatementQuery *command); +gaflightsql_statement_query_get_raw( + GAFlightSQLStatementQuery *command); GAFlightSQLStatementUpdate * gaflightsql_statement_update_new_raw( const arrow::flight::sql::StatementUpdate *flight_command); const arrow::flight::sql::StatementUpdate * -gaflightsql_statement_update_get_raw(GAFlightSQLStatementUpdate *command); +gaflightsql_statement_update_get_raw( + GAFlightSQLStatementUpdate *command); GAFlightSQLPreparedStatementUpdate * gaflightsql_prepared_statement_update_new_raw( @@ -46,7 +49,8 @@ GAFlightSQLStatementQueryTicket * gaflightsql_statement_query_ticket_new_raw( const arrow::flight::sql::StatementQueryTicket *flight_command); const arrow::flight::sql::StatementQueryTicket * -gaflightsql_statement_query_ticket_get_raw(GAFlightSQLStatementQueryTicket *command); +gaflightsql_statement_query_ticket_get_raw( + GAFlightSQLStatementQueryTicket *command); GAFlightSQLCreatePreparedStatementRequest * gaflightsql_create_prepared_statement_request_new_raw( diff --git a/c_glib/arrow-flight-sql-glib/version.h.in b/c_glib/arrow-flight-sql-glib/version.h.in deleted file mode 100644 index e4373109b90..00000000000 --- a/c_glib/arrow-flight-sql-glib/version.h.in +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#pragma once - -#include - -/** - * SECTION: version - * @section_id: version-macros - * @title: Version related macros - * @include: arrow-flight-sql-glib/arrow-flight-sql-glib.h - * - * Apache Arrow Flight SQL GLib provides macros that can be used by C pre-processor. - * They are useful to check version related things at compile time. - */ - -/** - * GAFLIGHTSQL_VERSION_MAJOR: - * - * The major version. - * - * Since: 17.0.0 - */ -#define GAFLIGHTSQL_VERSION_MAJOR (@VERSION_MAJOR@) - -/** - * GAFLIGHTSQL_VERSION_MINOR: - * - * The minor version. - * - * Since: 17.0.0 - */ -#define GAFLIGHTSQL_VERSION_MINOR (@VERSION_MINOR@) - -/** - * GAFLIGHTSQL_VERSION_MICRO: - * - * The micro version. - * - * Since: 17.0.0 - */ -#define GAFLIGHTSQL_VERSION_MICRO (@VERSION_MICRO@) - -/** - * GAFLIGHTSQL_VERSION_TAG: - * - * The version tag. Normally, it's an empty string. It's "SNAPSHOT" - * for snapshot version. - * - * Since: 17.0.0 - */ -#define GAFLIGHTSQL_VERSION_TAG "@VERSION_TAG@" - -/** - * GAFLIGHTSQL_VERSION_CHECK: - * @major: A major version to check for. - * @minor: A minor version to check for. - * @micro: A micro version to check for. - * - * You can use this macro in C pre-processor. - * - * Returns: %TRUE if the compile time Apache Arrow GLib version is the - * same as or newer than the passed version, %FALSE otherwise. - * - * Since: 17.0.0 - */ -#define GAFLIGHTSQL_VERSION_CHECK(major, minor, micro) \ - (GAFLIGHTSQL_VERSION_MAJOR > (major) || \ - (GAFLIGHTSQL_VERSION_MAJOR == (major) && \ - GAFLIGHTSQL_VERSION_MINOR > (minor)) || \ - (GAFLIGHTSQL_VERSION_MAJOR == (major) && \ - GAFLIGHTSQL_VERSION_MINOR == (minor) && \ - GAFLIGHTSQL_VERSION_MICRO >= (micro))) - -/** - * GAFLIGHTSQL_DISABLE_DEPRECATION_WARNINGS: - * - * If this macro is defined, no deprecated warnings are produced. - * - * You must define this macro before including the - * arrow-glib/arrow-glib.h header. - * - * Since: 17.0.0 - */ - -#ifdef GAFLIGHTSQL_DISABLE_DEPRECATION_WARNINGS -# define GAFLIGHTSQL_DEPRECATED -# define GAFLIGHTSQL_DEPRECATED_FOR(function) -# define GAFLIGHTSQL_UNAVAILABLE(major, minor) -#else -# define GAFLIGHTSQL_DEPRECATED G_DEPRECATED -# define GAFLIGHTSQL_DEPRECATED_FOR(function) G_DEPRECATED_FOR(function) -# define GAFLIGHTSQL_UNAVAILABLE(major, minor) G_UNAVAILABLE(major, minor) -#endif - -@ENCODED_VERSIONS@ - -/** - * GAFLIGHTSQL_VERSION_MIN_REQUIRED: - * - * You can use this macro for compile time API version check. - * - * This macro value must be one of the predefined version macros such - * as %GAFLIGHTSQL_VERSION_0_10. - * - * If you use any functions that is defined by newer version than - * %GAFLIGHTSQL_VERSION_MIN_REQUIRED, deprecated warnings are produced at - * compile time. - * - * You must define this macro before including the - * arrow-flight-sql-glib/arrow-flight-sql-glib.h header. - * - * Since: 17.0.0 - */ -#ifndef GAFLIGHTSQL_VERSION_MIN_REQUIRED -# define GAFLIGHTSQL_VERSION_MIN_REQUIRED GARROW_VERSION_MIN_REQUIRED -#endif - -/** - * GAFLIGHTSQL_VERSION_MAX_ALLOWED: - * - * You can use this macro for compile time API version check. - * - * This macro value must be one of the predefined version macros such - * as %GAFLIGHTSQL_VERSION_0_10. - * - * If you use any functions that is defined by newer version than - * %GAFLIGHTSQL_VERSION_MAX_ALLOWED, deprecated warnings are produced at - * compile time. - * - * You must define this macro before including the - * arrow-flight-sql-glib/arrow-flight-sql-glib.h header. - * - * Since: 17.0.0 - */ -#ifndef GAFLIGHTSQL_VERSION_MAX_ALLOWED -# define GAFLIGHTSQL_VERSION_MAX_ALLOWED GARROW_VERSION_MAX_ALLOWED -#endif - -@VISIBILITY_MACROS@ - -@AVAILABILITY_MACROS@ diff --git a/c_glib/arrow-glib/array-builder.cpp b/c_glib/arrow-glib/array-builder.cpp index 9b7c608ca8a..ee6ec69e983 100644 --- a/c_glib/arrow-glib/array-builder.cpp +++ b/c_glib/arrow-glib/array-builder.cpp @@ -81,7 +81,9 @@ garrow_array_builder_append_values(VALUE *values, for (gint64 j = 0; j < n_values; ++j) { valid_bytes[j] = chunked_is_valids[j]; } - auto status = append_function(values + offset, n_values, valid_bytes); + auto status = append_function(values + offset, + n_values, + valid_bytes); if (!garrow_error_check(error, status, context)) { return FALSE; } @@ -172,7 +174,8 @@ garrow_array_builder_append_values(GArrowArrayBuilder *builder, if (value) { size_t data_size; auto raw_data = g_bytes_get_data(value, &data_size); - strings.push_back(std::string(static_cast(raw_data), data_size)); + strings.push_back(std::string(static_cast(raw_data), + data_size)); if (valid_bytes) { valid_bytes_buffer[j] = is_valids[offset + j]; } @@ -199,17 +202,19 @@ garrow_array_builder_append_values(GArrowArrayBuilder *builder, template gboolean -garrow_array_builder_append_values(GArrowArrayBuilder *builder, - VALUE *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error, - const gchar *context, - GET_VALUE_FUNCTION get_value_function) +garrow_array_builder_append_values( + GArrowArrayBuilder *builder, + VALUE *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error, + const gchar *context, + GET_VALUE_FUNCTION get_value_function) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(builder)); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(builder)); if (is_valids_length > 0 && values_length != is_valids_length) { g_set_error(error, GARROW_ERROR, @@ -231,8 +236,8 @@ garrow_array_builder_append_values(GArrowArrayBuilder *builder, if (n_remains > 0) { ++n_loops; } - std::vector data(value_size * chunk_size); for (gint64 i = 0; i < n_loops; ++i) { + uint8_t data[value_size * chunk_size]; uint8_t *valid_bytes = nullptr; uint8_t valid_bytes_buffer[chunk_size]; if (is_valids_length > 0) { @@ -255,7 +260,9 @@ garrow_array_builder_append_values(GArrowArrayBuilder *builder, value = values[offset + j]; } if (value) { - get_value_function(data.data() + (value_size * j), value, value_size); + get_value_function(data + (value_size * j), + value, + value_size); } else { is_valid = false; if (!valid_bytes) { @@ -267,7 +274,7 @@ garrow_array_builder_append_values(GArrowArrayBuilder *builder, valid_bytes_buffer[j] = is_valid; } } - auto status = arrow_builder->AppendValues(data.data(), n_values, valid_bytes); + auto status = arrow_builder->AppendValues(data, n_values, valid_bytes); if (!garrow_error_check(error, status, context)) { return FALSE; } @@ -341,6 +348,7 @@ garrow_array_builder_append_values(GArrowArrayBuilder *builder, return TRUE; } + G_BEGIN_DECLS /** @@ -473,8 +481,7 @@ G_BEGIN_DECLS * #GArrowSparseUnionArray. */ -struct GArrowArrayBuilderPrivate -{ +struct GArrowArrayBuilderPrivate { std::shared_ptr array_builder; GList *children; }; @@ -488,9 +495,10 @@ G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowArrayBuilder, garrow_array_builder, G_TYPE_OBJECT) -#define GARROW_ARRAY_BUILDER_GET_PRIVATE(obj) \ - static_cast( \ - garrow_array_builder_get_instance_private(GARROW_ARRAY_BUILDER(obj))) +#define GARROW_ARRAY_BUILDER_GET_PRIVATE(obj) \ + static_cast( \ + garrow_array_builder_get_instance_private( \ + GARROW_ARRAY_BUILDER(obj))) static void garrow_array_builder_finalize(GObject *object) @@ -520,7 +528,8 @@ garrow_array_builder_set_property(GObject *object, switch (prop_id) { case PROP_ARRAY_BUILDER: priv->array_builder = - *static_cast *>(g_value_get_pointer(value)); + *static_cast *>( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -532,7 +541,7 @@ static void garrow_array_builder_init(GArrowArrayBuilder *builder) { auto priv = GARROW_ARRAY_BUILDER_GET_PRIVATE(builder); - new (&priv->array_builder) std::shared_ptr; + new(&priv->array_builder) std::shared_ptr; } static void @@ -540,16 +549,16 @@ garrow_array_builder_class_init(GArrowArrayBuilderClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_array_builder_finalize; - gobject_class->dispose = garrow_array_builder_dispose; + gobject_class->finalize = garrow_array_builder_finalize; + gobject_class->dispose = garrow_array_builder_dispose; gobject_class->set_property = garrow_array_builder_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "array-builder", - "Array builder", - "The raw std::shared_ptr", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("array-builder", + "Array builder", + "The raw std::shared_ptr", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_ARRAY_BUILDER, spec); } @@ -564,7 +573,8 @@ garrow_array_builder_new(const std::shared_ptr &type, if (!garrow_error_check(error, status, context)) { return nullptr; } - std::shared_ptr shared_arrow_builder(std::move(arrow_builder)); + std::shared_ptr + shared_arrow_builder(std::move(arrow_builder)); return garrow_array_builder_new_raw(&shared_arrow_builder); } @@ -690,7 +700,8 @@ garrow_array_builder_get_n_nulls(GArrowArrayBuilder *builder) * Since: 12.0.0 */ GArrowArrayBuilder * -garrow_array_builder_get_child(GArrowArrayBuilder *builder, gint i) +garrow_array_builder_get_child(GArrowArrayBuilder *builder, + gint i) { auto children = garrow_array_builder_get_children(builder); auto child = g_list_nth_data(children, i); @@ -734,7 +745,9 @@ garrow_array_builder_get_children(GArrowArrayBuilder *builder) * Since: 2.0.0 */ gboolean -garrow_array_builder_resize(GArrowArrayBuilder *builder, gint64 capacity, GError **error) +garrow_array_builder_resize(GArrowArrayBuilder *builder, + gint64 capacity, + GError **error) { auto arrow_builder = garrow_array_builder_get_raw(builder); auto status = arrow_builder->Resize(capacity); @@ -771,7 +784,8 @@ garrow_array_builder_reserve(GArrowArrayBuilder *builder, * Since: 3.0.0 */ gboolean -garrow_array_builder_append_null(GArrowArrayBuilder *builder, GError **error) +garrow_array_builder_append_null(GArrowArrayBuilder *builder, + GError **error) { auto arrow_builder = garrow_array_builder_get_raw(builder); auto status = arrow_builder->AppendNull(); @@ -792,7 +806,9 @@ garrow_array_builder_append_null(GArrowArrayBuilder *builder, GError **error) * Since: 3.0.0 */ gboolean -garrow_array_builder_append_nulls(GArrowArrayBuilder *builder, gint64 n, GError **error) +garrow_array_builder_append_nulls(GArrowArrayBuilder *builder, + gint64 n, + GError **error) { const gchar *context = "[array-builder][append-nulls]"; if (n < 0) { @@ -824,11 +840,14 @@ garrow_array_builder_append_nulls(GArrowArrayBuilder *builder, gint64 n, GError * Since: 3.0.0 */ gboolean -garrow_array_builder_append_empty_value(GArrowArrayBuilder *builder, GError **error) +garrow_array_builder_append_empty_value(GArrowArrayBuilder *builder, + GError **error) { auto arrow_builder = garrow_array_builder_get_raw(builder); auto status = arrow_builder->AppendEmptyValue(); - return garrow_error_check(error, status, "[array-builder][append-empty-value]"); + return garrow_error_check(error, + status, + "[array-builder][append-empty-value]"); } /** @@ -869,6 +888,7 @@ garrow_array_builder_append_empty_values(GArrowArrayBuilder *builder, return garrow_error_check(error, status, context); } + G_DEFINE_TYPE(GArrowNullArrayBuilder, garrow_null_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -893,8 +913,9 @@ garrow_null_array_builder_class_init(GArrowNullArrayBuilderClass *klass) GArrowNullArrayBuilder * garrow_null_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::null(), NULL, "[null-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::null(), + NULL, + "[null-array-builder][new]"); return GARROW_NULL_ARRAY_BUILDER(builder); } @@ -911,7 +932,8 @@ garrow_null_array_builder_new(void) * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_null_array_builder_append_null(GArrowNullArrayBuilder *builder, GError **error) +garrow_null_array_builder_append_null(GArrowNullArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -937,9 +959,12 @@ garrow_null_array_builder_append_nulls(GArrowNullArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowBooleanArrayBuilder, garrow_boolean_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -962,8 +987,9 @@ garrow_boolean_array_builder_class_init(GArrowBooleanArrayBuilderClass *klass) GArrowBooleanArrayBuilder * garrow_boolean_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::boolean(), NULL, "[boolean-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::boolean(), + NULL, + "[boolean-array-builder][new]"); return GARROW_BOOLEAN_ARRAY_BUILDER(builder); } @@ -1001,11 +1027,11 @@ garrow_boolean_array_builder_append_value(GArrowBooleanArrayBuilder *builder, gboolean value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - static_cast(value), - error, - "[boolean-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + static_cast(value), + error, + "[boolean-array-builder][append-value]"); } /** @@ -1035,18 +1061,18 @@ garrow_boolean_array_builder_append_values(GArrowBooleanArrayBuilder *builder, gint64 is_valids_length, GError **error) { - std::vector arrow_values(values_length); + guint8 arrow_values[values_length]; for (gint64 i = 0; i < values_length; ++i) { arrow_values[i] = values[i]; } - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - arrow_values.data(), - values_length, - is_valids, - is_valids_length, - error, - "[boolean-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + arrow_values, + values_length, + is_valids, + is_valids_length, + error, + "[boolean-array-builder][append-values]"); } /** @@ -1087,10 +1113,15 @@ garrow_boolean_array_builder_append_nulls(GArrowBooleanArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } -G_DEFINE_TYPE(GArrowIntArrayBuilder, garrow_int_array_builder, GARROW_TYPE_ARRAY_BUILDER) + +G_DEFINE_TYPE(GArrowIntArrayBuilder, + garrow_int_array_builder, + GARROW_TYPE_ARRAY_BUILDER) static void garrow_int_array_builder_init(GArrowIntArrayBuilder *builder) @@ -1113,10 +1144,11 @@ GArrowIntArrayBuilder * garrow_int_array_builder_new(void) { auto memory_pool = arrow::default_memory_pool(); - auto arrow_builder = std::static_pointer_cast( - std::make_shared(memory_pool)); - auto builder = - garrow_array_builder_new_raw(&arrow_builder, GARROW_TYPE_INT_ARRAY_BUILDER); + auto arrow_builder = + std::static_pointer_cast( + std::make_shared(memory_pool)); + auto builder = garrow_array_builder_new_raw(&arrow_builder, + GARROW_TYPE_INT_ARRAY_BUILDER); return GARROW_INT_ARRAY_BUILDER(builder); } @@ -1156,11 +1188,11 @@ garrow_int_array_builder_append_value(GArrowIntArrayBuilder *builder, gint64 value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[int-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[int-array-builder][append-value]"); } /** @@ -1190,14 +1222,14 @@ garrow_int_array_builder_append_values(GArrowIntArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - reinterpret_cast(values), - values_length, - is_valids, - is_valids_length, - error, - "[int-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + reinterpret_cast(values), + values_length, + is_valids, + is_valids_length, + error, + "[int-array-builder][append-values]"); } /** @@ -1213,7 +1245,8 @@ garrow_int_array_builder_append_values(GArrowIntArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_int_array_builder_append_null(GArrowIntArrayBuilder *builder, GError **error) +garrow_int_array_builder_append_null(GArrowIntArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -1239,9 +1272,12 @@ garrow_int_array_builder_append_nulls(GArrowIntArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowUIntArrayBuilder, garrow_uint_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -1267,10 +1303,11 @@ GArrowUIntArrayBuilder * garrow_uint_array_builder_new(void) { auto memory_pool = arrow::default_memory_pool(); - auto arrow_builder = std::static_pointer_cast( - std::make_shared(memory_pool)); - auto builder = - garrow_array_builder_new_raw(&arrow_builder, GARROW_TYPE_UINT_ARRAY_BUILDER); + auto arrow_builder = + std::static_pointer_cast( + std::make_shared(memory_pool)); + auto builder = garrow_array_builder_new_raw(&arrow_builder, + GARROW_TYPE_UINT_ARRAY_BUILDER); return GARROW_UINT_ARRAY_BUILDER(builder); } @@ -1310,11 +1347,11 @@ garrow_uint_array_builder_append_value(GArrowUIntArrayBuilder *builder, guint64 value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[uint-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[uint-array-builder][append-value]"); } /** @@ -1344,14 +1381,14 @@ garrow_uint_array_builder_append_values(GArrowUIntArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - reinterpret_cast(values), - values_length, - is_valids, - is_valids_length, - error, - "[uint-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + reinterpret_cast(values), + values_length, + is_valids, + is_valids_length, + error, + "[uint-array-builder][append-values]"); } /** @@ -1367,7 +1404,8 @@ garrow_uint_array_builder_append_values(GArrowUIntArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_uint_array_builder_append_null(GArrowUIntArrayBuilder *builder, GError **error) +garrow_uint_array_builder_append_null(GArrowUIntArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -1393,9 +1431,12 @@ garrow_uint_array_builder_append_nulls(GArrowUIntArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowInt8ArrayBuilder, garrow_int8_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -1418,8 +1459,9 @@ garrow_int8_array_builder_class_init(GArrowInt8ArrayBuilderClass *klass) GArrowInt8ArrayBuilder * garrow_int8_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::int8(), NULL, "[int8-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::int8(), + NULL, + "[int8-array-builder][new]"); return GARROW_INT8_ARRAY_BUILDER(builder); } @@ -1457,11 +1499,11 @@ garrow_int8_array_builder_append_value(GArrowInt8ArrayBuilder *builder, gint8 value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[int8-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[int8-array-builder][append-value]"); } /** @@ -1491,14 +1533,14 @@ garrow_int8_array_builder_append_values(GArrowInt8ArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[int8-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[int8-array-builder][append-values]"); } /** @@ -1512,7 +1554,8 @@ garrow_int8_array_builder_append_values(GArrowInt8ArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_int8_array_builder_append_null(GArrowInt8ArrayBuilder *builder, GError **error) +garrow_int8_array_builder_append_null(GArrowInt8ArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -1538,9 +1581,12 @@ garrow_int8_array_builder_append_nulls(GArrowInt8ArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowUInt8ArrayBuilder, garrow_uint8_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -1563,8 +1609,9 @@ garrow_uint8_array_builder_class_init(GArrowUInt8ArrayBuilderClass *klass) GArrowUInt8ArrayBuilder * garrow_uint8_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::uint8(), NULL, "[uint8-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::uint8(), + NULL, + "[uint8-array-builder][new]"); return GARROW_UINT8_ARRAY_BUILDER(builder); } @@ -1599,14 +1646,14 @@ garrow_uint8_array_builder_append(GArrowUInt8ArrayBuilder *builder, */ gboolean garrow_uint8_array_builder_append_value(GArrowUInt8ArrayBuilder *builder, - guint8 value, - GError **error) + guint8 value, + GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[uint8-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[uint8-array-builder][append-value]"); } /** @@ -1636,14 +1683,14 @@ garrow_uint8_array_builder_append_values(GArrowUInt8ArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[uint8-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[uint8-array-builder][append-values]"); } /** @@ -1657,7 +1704,8 @@ garrow_uint8_array_builder_append_values(GArrowUInt8ArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_uint8_array_builder_append_null(GArrowUInt8ArrayBuilder *builder, GError **error) +garrow_uint8_array_builder_append_null(GArrowUInt8ArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -1683,9 +1731,12 @@ garrow_uint8_array_builder_append_nulls(GArrowUInt8ArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowInt16ArrayBuilder, garrow_int16_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -1708,8 +1759,9 @@ garrow_int16_array_builder_class_init(GArrowInt16ArrayBuilderClass *klass) GArrowInt16ArrayBuilder * garrow_int16_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::int16(), NULL, "[int16-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::int16(), + NULL, + "[int16-array-builder][new]"); return GARROW_INT16_ARRAY_BUILDER(builder); } @@ -1747,11 +1799,11 @@ garrow_int16_array_builder_append_value(GArrowInt16ArrayBuilder *builder, gint16 value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[int16-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[int16-array-builder][append-value]"); } /** @@ -1781,14 +1833,14 @@ garrow_int16_array_builder_append_values(GArrowInt16ArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[int16-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[int16-array-builder][append-values]"); } /** @@ -1802,7 +1854,8 @@ garrow_int16_array_builder_append_values(GArrowInt16ArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_int16_array_builder_append_null(GArrowInt16ArrayBuilder *builder, GError **error) +garrow_int16_array_builder_append_null(GArrowInt16ArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -1828,9 +1881,12 @@ garrow_int16_array_builder_append_nulls(GArrowInt16ArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowUInt16ArrayBuilder, garrow_uint16_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -1853,8 +1909,9 @@ garrow_uint16_array_builder_class_init(GArrowUInt16ArrayBuilderClass *klass) GArrowUInt16ArrayBuilder * garrow_uint16_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::uint16(), NULL, "[uint16-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::uint16(), + NULL, + "[uint16-array-builder][new]"); return GARROW_UINT16_ARRAY_BUILDER(builder); } @@ -1892,11 +1949,11 @@ garrow_uint16_array_builder_append_value(GArrowUInt16ArrayBuilder *builder, guint16 value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[uint16-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[uint16-array-builder][append-value]"); } /** @@ -1926,14 +1983,14 @@ garrow_uint16_array_builder_append_values(GArrowUInt16ArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[uint16-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[uint16-array-builder][append-values]"); } /** @@ -1947,7 +2004,8 @@ garrow_uint16_array_builder_append_values(GArrowUInt16ArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_uint16_array_builder_append_null(GArrowUInt16ArrayBuilder *builder, GError **error) +garrow_uint16_array_builder_append_null(GArrowUInt16ArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -1973,9 +2031,12 @@ garrow_uint16_array_builder_append_nulls(GArrowUInt16ArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowInt32ArrayBuilder, garrow_int32_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -1998,8 +2059,9 @@ garrow_int32_array_builder_class_init(GArrowInt32ArrayBuilderClass *klass) GArrowInt32ArrayBuilder * garrow_int32_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::int32(), NULL, "[int32-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::int32(), + NULL, + "[int32-array-builder][new]"); return GARROW_INT32_ARRAY_BUILDER(builder); } @@ -2037,11 +2099,11 @@ garrow_int32_array_builder_append_value(GArrowInt32ArrayBuilder *builder, gint32 value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[int32-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[int32-array-builder][append-value]"); } /** @@ -2071,14 +2133,14 @@ garrow_int32_array_builder_append_values(GArrowInt32ArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[int32-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[int32-array-builder][append-values]"); } /** @@ -2092,7 +2154,8 @@ garrow_int32_array_builder_append_values(GArrowInt32ArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_int32_array_builder_append_null(GArrowInt32ArrayBuilder *builder, GError **error) +garrow_int32_array_builder_append_null(GArrowInt32ArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -2118,9 +2181,12 @@ garrow_int32_array_builder_append_nulls(GArrowInt32ArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowUInt32ArrayBuilder, garrow_uint32_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -2143,8 +2209,9 @@ garrow_uint32_array_builder_class_init(GArrowUInt32ArrayBuilderClass *klass) GArrowUInt32ArrayBuilder * garrow_uint32_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::uint32(), NULL, "[uint32-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::uint32(), + NULL, + "[uint32-array-builder][new]"); return GARROW_UINT32_ARRAY_BUILDER(builder); } @@ -2182,11 +2249,11 @@ garrow_uint32_array_builder_append_value(GArrowUInt32ArrayBuilder *builder, guint32 value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[uint32-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[uint32-array-builder][append-value]"); } /** @@ -2216,14 +2283,14 @@ garrow_uint32_array_builder_append_values(GArrowUInt32ArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[uint32-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[uint32-array-builder][append-values]"); } /** @@ -2237,7 +2304,8 @@ garrow_uint32_array_builder_append_values(GArrowUInt32ArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_uint32_array_builder_append_null(GArrowUInt32ArrayBuilder *builder, GError **error) +garrow_uint32_array_builder_append_null(GArrowUInt32ArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -2263,9 +2331,12 @@ garrow_uint32_array_builder_append_nulls(GArrowUInt32ArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowInt64ArrayBuilder, garrow_int64_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -2288,8 +2359,9 @@ garrow_int64_array_builder_class_init(GArrowInt64ArrayBuilderClass *klass) GArrowInt64ArrayBuilder * garrow_int64_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::int64(), NULL, "[int64-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::int64(), + NULL, + "[int64-array-builder][new]"); return GARROW_INT64_ARRAY_BUILDER(builder); } @@ -2327,11 +2399,11 @@ garrow_int64_array_builder_append_value(GArrowInt64ArrayBuilder *builder, gint64 value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[int64-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[int64-array-builder][append-value]"); } /** @@ -2361,14 +2433,14 @@ garrow_int64_array_builder_append_values(GArrowInt64ArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - reinterpret_cast(values), - values_length, - is_valids, - is_valids_length, - error, - "[int64-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + reinterpret_cast(values), + values_length, + is_valids, + is_valids_length, + error, + "[int64-array-builder][append-values]"); } /** @@ -2382,7 +2454,8 @@ garrow_int64_array_builder_append_values(GArrowInt64ArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_int64_array_builder_append_null(GArrowInt64ArrayBuilder *builder, GError **error) +garrow_int64_array_builder_append_null(GArrowInt64ArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -2408,9 +2481,12 @@ garrow_int64_array_builder_append_nulls(GArrowInt64ArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowUInt64ArrayBuilder, garrow_uint64_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -2433,8 +2509,9 @@ garrow_uint64_array_builder_class_init(GArrowUInt64ArrayBuilderClass *klass) GArrowUInt64ArrayBuilder * garrow_uint64_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::uint64(), NULL, "[uint64-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::uint64(), + NULL, + "[uint64-array-builder][new]"); return GARROW_UINT64_ARRAY_BUILDER(builder); } @@ -2451,8 +2528,8 @@ garrow_uint64_array_builder_new(void) */ gboolean garrow_uint64_array_builder_append(GArrowUInt64ArrayBuilder *builder, - guint64 value, - GError **error) + guint64 value, + GError **error) { return garrow_uint64_array_builder_append_value(builder, value, error); } @@ -2472,11 +2549,11 @@ garrow_uint64_array_builder_append_value(GArrowUInt64ArrayBuilder *builder, guint64 value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[uint64-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[uint64-array-builder][append-value]"); } /** @@ -2506,14 +2583,14 @@ garrow_uint64_array_builder_append_values(GArrowUInt64ArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - reinterpret_cast(values), - values_length, - is_valids, - is_valids_length, - error, - "[uint64-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + reinterpret_cast(values), + values_length, + is_valids, + is_valids_length, + error, + "[uint64-array-builder][append-values]"); } /** @@ -2527,7 +2604,8 @@ garrow_uint64_array_builder_append_values(GArrowUInt64ArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_uint64_array_builder_append_null(GArrowUInt64ArrayBuilder *builder, GError **error) +garrow_uint64_array_builder_append_null(GArrowUInt64ArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -2553,9 +2631,12 @@ garrow_uint64_array_builder_append_nulls(GArrowUInt64ArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowHalfFloatArrayBuilder, garrow_half_float_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -2566,7 +2647,8 @@ garrow_half_float_array_builder_init(GArrowHalfFloatArrayBuilder *builder) } static void -garrow_half_float_array_builder_class_init(GArrowHalfFloatArrayBuilderClass *klass) +garrow_half_float_array_builder_class_init( + GArrowHalfFloatArrayBuilderClass *klass) { } @@ -2597,15 +2679,16 @@ garrow_half_float_array_builder_new(void) * Since: 11.0.0 */ gboolean -garrow_half_float_array_builder_append_value(GArrowHalfFloatArrayBuilder *builder, - guint16 value, - GError **error) +garrow_half_float_array_builder_append_value( + GArrowHalfFloatArrayBuilder *builder, + guint16 value, + GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[half-float-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[half-float-array-builder][append-value]"); } /** @@ -2628,23 +2711,25 @@ garrow_half_float_array_builder_append_value(GArrowHalfFloatArrayBuilder *builde * Since: 11.0.0 */ gboolean -garrow_half_float_array_builder_append_values(GArrowHalfFloatArrayBuilder *builder, - const guint16 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error) +garrow_half_float_array_builder_append_values( + GArrowHalfFloatArrayBuilder *builder, + const guint16 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[half-float-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[half-float-array-builder][append-values]"); } + G_DEFINE_TYPE(GArrowFloatArrayBuilder, garrow_float_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -2667,8 +2752,9 @@ garrow_float_array_builder_class_init(GArrowFloatArrayBuilderClass *klass) GArrowFloatArrayBuilder * garrow_float_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::float32(), NULL, "[float-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::float32(), + NULL, + "[float-array-builder][new]"); return GARROW_FLOAT_ARRAY_BUILDER(builder); } @@ -2706,11 +2792,11 @@ garrow_float_array_builder_append_value(GArrowFloatArrayBuilder *builder, gfloat value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[float-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[float-array-builder][append-value]"); } /** @@ -2740,14 +2826,14 @@ garrow_float_array_builder_append_values(GArrowFloatArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[float-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[float-array-builder][append-values]"); } /** @@ -2761,7 +2847,8 @@ garrow_float_array_builder_append_values(GArrowFloatArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_float_array_builder_append_null(GArrowFloatArrayBuilder *builder, GError **error) +garrow_float_array_builder_append_null(GArrowFloatArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -2787,9 +2874,12 @@ garrow_float_array_builder_append_nulls(GArrowFloatArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowDoubleArrayBuilder, garrow_double_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -2812,8 +2902,9 @@ garrow_double_array_builder_class_init(GArrowDoubleArrayBuilderClass *klass) GArrowDoubleArrayBuilder * garrow_double_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::float64(), NULL, "[double-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::float64(), + NULL, + "[double-array-builder][new]"); return GARROW_DOUBLE_ARRAY_BUILDER(builder); } @@ -2851,11 +2942,11 @@ garrow_double_array_builder_append_value(GArrowDoubleArrayBuilder *builder, gdouble value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[double-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[double-array-builder][append-value]"); } /** @@ -2885,14 +2976,14 @@ garrow_double_array_builder_append_values(GArrowDoubleArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[double-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[double-array-builder][append-values]"); } /** @@ -2906,7 +2997,8 @@ garrow_double_array_builder_append_values(GArrowDoubleArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_double_array_builder_append_null(GArrowDoubleArrayBuilder *builder, GError **error) +garrow_double_array_builder_append_null(GArrowDoubleArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -2932,9 +3024,12 @@ garrow_double_array_builder_append_nulls(GArrowDoubleArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowBinaryArrayBuilder, garrow_binary_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -2957,8 +3052,9 @@ garrow_binary_array_builder_class_init(GArrowBinaryArrayBuilderClass *klass) GArrowBinaryArrayBuilder * garrow_binary_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::binary(), NULL, "[binary-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::binary(), + NULL, + "[binary-array-builder][new]"); return GARROW_BINARY_ARRAY_BUILDER(builder); } @@ -3000,10 +3096,13 @@ garrow_binary_array_builder_append_value(GArrowBinaryArrayBuilder *builder, gint32 length, GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto status = arrow_builder->Append(value, length); - return garrow_error_check(error, status, "[binary-array-builder][append-value]"); + return garrow_error_check(error, + status, + "[binary-array-builder][append-value]"); } /** @@ -3021,12 +3120,16 @@ garrow_binary_array_builder_append_value_bytes(GArrowBinaryArrayBuilder *builder GBytes *value, GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); gsize size; auto data = g_bytes_get_data(value, &size); - auto status = arrow_builder->Append(static_cast(data), size); - return garrow_error_check(error, status, "[binary-array-builder][append-value-bytes]"); + auto status = arrow_builder->Append(static_cast(data), + size); + return garrow_error_check(error, + status, + "[binary-array-builder][append-value-bytes]"); } /** @@ -3056,14 +3159,14 @@ garrow_binary_array_builder_append_values(GArrowBinaryArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[binary-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[binary-array-builder][append-values]"); } /** @@ -3077,7 +3180,8 @@ garrow_binary_array_builder_append_values(GArrowBinaryArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_binary_array_builder_append_null(GArrowBinaryArrayBuilder *builder, GError **error) +garrow_binary_array_builder_append_null(GArrowBinaryArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -3100,9 +3204,12 @@ garrow_binary_array_builder_append_nulls(GArrowBinaryArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowLargeBinaryArrayBuilder, garrow_large_binary_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -3150,10 +3257,13 @@ garrow_large_binary_array_builder_append_value(GArrowLargeBinaryArrayBuilder *bu gint64 length, GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto status = arrow_builder->Append(value, length); - return garrow_error_check(error, status, "[large-binary-array-builder][append-value]"); + return garrow_error_check(error, + status, + "[large-binary-array-builder][append-value]"); } /** @@ -3167,14 +3277,17 @@ garrow_large_binary_array_builder_append_value(GArrowLargeBinaryArrayBuilder *bu * Since: 0.16.0 */ gboolean -garrow_large_binary_array_builder_append_value_bytes( - GArrowLargeBinaryArrayBuilder *builder, GBytes *value, GError **error) +garrow_large_binary_array_builder_append_value_bytes(GArrowLargeBinaryArrayBuilder *builder, + GBytes *value, + GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); gsize size; gconstpointer data = g_bytes_get_data(value, &size); - auto status = arrow_builder->Append(static_cast(data), size); + auto status = arrow_builder->Append(static_cast(data), + size); return garrow_error_check(error, status, "[large-binary-array-builder][append-value-bytes]"); @@ -3207,14 +3320,14 @@ garrow_large_binary_array_builder_append_values(GArrowLargeBinaryArrayBuilder *b gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[large-binary-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[large-binary-array-builder][append-values]"); } /** @@ -3254,9 +3367,12 @@ garrow_large_binary_array_builder_append_nulls(GArrowLargeBinaryArrayBuilder *bu gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowStringArrayBuilder, garrow_string_array_builder, GARROW_TYPE_BINARY_ARRAY_BUILDER) @@ -3279,8 +3395,9 @@ garrow_string_array_builder_class_init(GArrowStringArrayBuilderClass *klass) GArrowStringArrayBuilder * garrow_string_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::utf8(), NULL, "[string-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::utf8(), + NULL, + "[string-array-builder][new]"); return GARROW_STRING_ARRAY_BUILDER(builder); } @@ -3339,10 +3456,11 @@ garrow_string_array_builder_append_string(GArrowStringArrayBuilder *builder, const gchar *value, GError **error) { - return garrow_string_array_builder_append_string_len(builder, - value, - static_cast(strlen(value)), - error); + return garrow_string_array_builder_append_string_len( + builder, + value, + static_cast(strlen(value)), + error); } /** @@ -3362,10 +3480,13 @@ garrow_string_array_builder_append_string_len(GArrowStringArrayBuilder *builder, gint32 length, GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto status = arrow_builder->Append(value, length); - return garrow_error_check(error, status, "[string-array-builder][append-string]"); + return garrow_error_check(error, + status, + "[string-array-builder][append-string]"); } /** @@ -3433,16 +3554,17 @@ garrow_string_array_builder_append_strings(GArrowStringArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[string-array-builder][append-strings]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[string-array-builder][append-strings]"); } + G_DEFINE_TYPE(GArrowLargeStringArrayBuilder, garrow_large_string_array_builder, GARROW_TYPE_LARGE_BINARY_ARRAY_BUILDER) @@ -3506,15 +3628,15 @@ garrow_large_string_array_builder_append_string(GArrowLargeStringArrayBuilder *b * * Since: 8.0.0 */ -gboolean -garrow_large_string_array_builder_append_string_len( +gboolean garrow_large_string_array_builder_append_string_len( GArrowLargeStringArrayBuilder *builder, const gchar *value, gint64 length, GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto status = arrow_builder->Append(value, length); return garrow_error_check(error, status, @@ -3548,22 +3670,24 @@ garrow_large_string_array_builder_append_strings(GArrowLargeStringArrayBuilder * gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[large-string-array-builder][append-strings]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[large-string-array-builder][append-strings]"); } + G_DEFINE_TYPE(GArrowFixedSizeBinaryArrayBuilder, garrow_fixed_size_binary_array_builder, GARROW_TYPE_ARRAY_BUILDER) static void -garrow_fixed_size_binary_array_builder_init(GArrowFixedSizeBinaryArrayBuilder *builder) +garrow_fixed_size_binary_array_builder_init( + GArrowFixedSizeBinaryArrayBuilder *builder) { } @@ -3580,12 +3704,14 @@ garrow_fixed_size_binary_array_builder_class_init( * Returns: A newly created #GArrowFixedSizeBinaryArrayBuilder. */ GArrowFixedSizeBinaryArrayBuilder * -garrow_fixed_size_binary_array_builder_new(GArrowFixedSizeBinaryDataType *data_type) +garrow_fixed_size_binary_array_builder_new( + GArrowFixedSizeBinaryDataType *data_type) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); - auto builder = garrow_array_builder_new(arrow_data_type, - NULL, - "[fixed-size-binary-array-builder][new]"); + auto builder = + garrow_array_builder_new(arrow_data_type, + NULL, + "[fixed-size-binary-array-builder][new]"); return GARROW_FIXED_SIZE_BINARY_ARRAY_BUILDER(builder); } @@ -3608,8 +3734,9 @@ garrow_fixed_size_binary_array_builder_append_value( GError **error) { const gchar *context = "[fixed-size-binary-array-builder][append-value]"; - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); arrow::Status status; if (value) { if (arrow_builder->byte_width() != length) { @@ -3641,11 +3768,14 @@ garrow_fixed_size_binary_array_builder_append_value( */ gboolean garrow_fixed_size_binary_array_builder_append_value_bytes( - GArrowFixedSizeBinaryArrayBuilder *builder, GBytes *value, GError **error) + GArrowFixedSizeBinaryArrayBuilder *builder, + GBytes *value, + GError **error) { const gchar *context = "[fixed-size-binary-array-builder][append-value-bytes]"; - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); gsize size; auto data = g_bytes_get_data(value, &size); @@ -3735,15 +3865,16 @@ garrow_fixed_size_binary_array_builder_append_values_packed( gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - is_valids, - is_valids_length, - error, - "[fixed-size-binary-array-builder][append-values-packed]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + is_valids, + is_valids_length, + error, + "[fixed-size-binary-array-builder][append-values-packed]"); } + G_DEFINE_TYPE(GArrowDate32ArrayBuilder, garrow_date32_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -3768,8 +3899,9 @@ garrow_date32_array_builder_class_init(GArrowDate32ArrayBuilderClass *klass) GArrowDate32ArrayBuilder * garrow_date32_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::date32(), NULL, "[date32-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::date32(), + NULL, + "[date32-array-builder][new]"); return GARROW_DATE32_ARRAY_BUILDER(builder); } @@ -3809,11 +3941,11 @@ garrow_date32_array_builder_append_value(GArrowDate32ArrayBuilder *builder, gint32 value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[date32-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[date32-array-builder][append-value]"); } /** @@ -3844,14 +3976,14 @@ garrow_date32_array_builder_append_values(GArrowDate32ArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[date32-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[date32-array-builder][append-values]"); } /** @@ -3867,7 +3999,8 @@ garrow_date32_array_builder_append_values(GArrowDate32ArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_date32_array_builder_append_null(GArrowDate32ArrayBuilder *builder, GError **error) +garrow_date32_array_builder_append_null(GArrowDate32ArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -3893,9 +4026,12 @@ garrow_date32_array_builder_append_nulls(GArrowDate32ArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowDate64ArrayBuilder, garrow_date64_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -3920,8 +4056,9 @@ garrow_date64_array_builder_class_init(GArrowDate64ArrayBuilderClass *klass) GArrowDate64ArrayBuilder * garrow_date64_array_builder_new(void) { - auto builder = - garrow_array_builder_new(arrow::date64(), NULL, "[date64-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow::date64(), + NULL, + "[date64-array-builder][new]"); return GARROW_DATE64_ARRAY_BUILDER(builder); } @@ -3961,11 +4098,11 @@ garrow_date64_array_builder_append_value(GArrowDate64ArrayBuilder *builder, gint64 value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[date64-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[date64-array-builder][append-value]"); } /** @@ -3996,14 +4133,14 @@ garrow_date64_array_builder_append_values(GArrowDate64ArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - reinterpret_cast(values), - values_length, - is_valids, - is_valids_length, - error, - "[date64-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + reinterpret_cast(values), + values_length, + is_valids, + is_valids_length, + error, + "[date64-array-builder][append-values]"); } /** @@ -4019,7 +4156,8 @@ garrow_date64_array_builder_append_values(GArrowDate64ArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_date64_array_builder_append_null(GArrowDate64ArrayBuilder *builder, GError **error) +garrow_date64_array_builder_append_null(GArrowDate64ArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -4045,9 +4183,12 @@ garrow_date64_array_builder_append_nulls(GArrowDate64ArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowTimestampArrayBuilder, garrow_timestamp_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -4074,8 +4215,9 @@ GArrowTimestampArrayBuilder * garrow_timestamp_array_builder_new(GArrowTimestampDataType *data_type) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); - auto builder = - garrow_array_builder_new(arrow_data_type, NULL, "[timestamp-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow_data_type, + NULL, + "[timestamp-array-builder][new]"); return GARROW_TIMESTAMP_ARRAY_BUILDER(builder); } @@ -4115,11 +4257,11 @@ garrow_timestamp_array_builder_append_value(GArrowTimestampArrayBuilder *builder gint64 value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[timestamp-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[timestamp-array-builder][append-value]"); } /** @@ -4150,14 +4292,14 @@ garrow_timestamp_array_builder_append_values(GArrowTimestampArrayBuilder *builde gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - reinterpret_cast(values), - values_length, - is_valids, - is_valids_length, - error, - "[timestamp-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + reinterpret_cast(values), + values_length, + is_valids, + is_valids_length, + error, + "[timestamp-array-builder][append-values]"); } /** @@ -4200,9 +4342,12 @@ garrow_timestamp_array_builder_append_nulls(GArrowTimestampArrayBuilder *builder gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowTime32ArrayBuilder, garrow_time32_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -4229,8 +4374,9 @@ GArrowTime32ArrayBuilder * garrow_time32_array_builder_new(GArrowTime32DataType *data_type) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); - auto builder = - garrow_array_builder_new(arrow_data_type, NULL, "[time32-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow_data_type, + NULL, + "[time32-array-builder][new]"); return GARROW_TIME32_ARRAY_BUILDER(builder); } @@ -4270,11 +4416,11 @@ garrow_time32_array_builder_append_value(GArrowTime32ArrayBuilder *builder, gint32 value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[time32-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[time32-array-builder][append-value]"); } /** @@ -4305,14 +4451,14 @@ garrow_time32_array_builder_append_values(GArrowTime32ArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[time32-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[time32-array-builder][append-values]"); } /** @@ -4328,7 +4474,8 @@ garrow_time32_array_builder_append_values(GArrowTime32ArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_time32_array_builder_append_null(GArrowTime32ArrayBuilder *builder, GError **error) +garrow_time32_array_builder_append_null(GArrowTime32ArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -4354,9 +4501,12 @@ garrow_time32_array_builder_append_nulls(GArrowTime32ArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowTime64ArrayBuilder, garrow_time64_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -4383,8 +4533,9 @@ GArrowTime64ArrayBuilder * garrow_time64_array_builder_new(GArrowTime64DataType *data_type) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); - auto builder = - garrow_array_builder_new(arrow_data_type, NULL, "[time64-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow_data_type, + NULL, + "[time64-array-builder][new]"); return GARROW_TIME64_ARRAY_BUILDER(builder); } @@ -4424,11 +4575,11 @@ garrow_time64_array_builder_append_value(GArrowTime64ArrayBuilder *builder, gint64 value, GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[time64-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[time64-array-builder][append-value]"); } /** @@ -4459,14 +4610,14 @@ garrow_time64_array_builder_append_values(GArrowTime64ArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - reinterpret_cast(values), - values_length, - is_valids, - is_valids_length, - error, - "[time64-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + reinterpret_cast(values), + values_length, + is_valids, + is_valids_length, + error, + "[time64-array-builder][append-values]"); } /** @@ -4482,7 +4633,8 @@ garrow_time64_array_builder_append_values(GArrowTime64ArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_time64_array_builder_append_null(GArrowTime64ArrayBuilder *builder, GError **error) +garrow_time64_array_builder_append_null(GArrowTime64ArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -4508,15 +4660,19 @@ garrow_time64_array_builder_append_nulls(GArrowTime64ArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } + G_DEFINE_TYPE(GArrowMonthIntervalArrayBuilder, garrow_month_interval_array_builder, GARROW_TYPE_ARRAY_BUILDER) static void -garrow_month_interval_array_builder_init(GArrowMonthIntervalArrayBuilder *builder) +garrow_month_interval_array_builder_init( + GArrowMonthIntervalArrayBuilder *builder) { } @@ -4553,15 +4709,16 @@ garrow_month_interval_array_builder_new(void) * Since: 8.0.0 */ gboolean -garrow_month_interval_array_builder_append_value(GArrowMonthIntervalArrayBuilder *builder, - gint32 value, - GError **error) +garrow_month_interval_array_builder_append_value( + GArrowMonthIntervalArrayBuilder *builder, + gint32 value, + GError **error) { - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - value, - error, - "[month-interval-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + value, + error, + "[month-interval-array-builder][append-value]"); } /** @@ -4592,22 +4749,24 @@ garrow_month_interval_array_builder_append_values( gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - values, - values_length, - is_valids, - is_valids_length, - error, - "[month-interval-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + values, + values_length, + is_valids, + is_valids_length, + error, + "[month-interval-array-builder][append-values]"); } + G_DEFINE_TYPE(GArrowDayTimeIntervalArrayBuilder, garrow_day_time_interval_array_builder, GARROW_TYPE_ARRAY_BUILDER) static void -garrow_day_time_interval_array_builder_init(GArrowDayTimeIntervalArrayBuilder *builder) +garrow_day_time_interval_array_builder_init( + GArrowDayTimeIntervalArrayBuilder *builder) { } @@ -4645,17 +4804,20 @@ garrow_day_time_interval_array_builder_new(void) */ gboolean garrow_day_time_interval_array_builder_append_value( - GArrowDayTimeIntervalArrayBuilder *builder, GArrowDayMillisecond *value, GError **error) + GArrowDayTimeIntervalArrayBuilder *builder, + GArrowDayMillisecond *value, + GError **error) { if (value) { auto arrow_day_millisecond = garrow_day_millisecond_get_raw(value); - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - *arrow_day_millisecond, - error, - "[day-time-interval-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + *arrow_day_millisecond, + error, + "[day-time-interval-array-builder][append-value]"); } else { - return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); + return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), + error); } } @@ -4687,8 +4849,9 @@ garrow_day_time_interval_array_builder_append_values( gint64 is_valids_length, GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); return garrow_array_builder_append_values( values, @@ -4717,6 +4880,7 @@ garrow_day_time_interval_array_builder_append_values( }); } + G_DEFINE_TYPE(GArrowMonthDayNanoIntervalArrayBuilder, garrow_month_day_nano_interval_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -4743,9 +4907,10 @@ garrow_month_day_nano_interval_array_builder_class_init( GArrowMonthDayNanoIntervalArrayBuilder * garrow_month_day_nano_interval_array_builder_new(void) { - auto builder = garrow_array_builder_new(arrow::month_day_nano_interval(), - NULL, - "[month-day-nano-interval-array-builder][new]"); + auto builder = + garrow_array_builder_new(arrow::month_day_nano_interval(), + NULL, + "[month-day-nano-interval-array-builder][new]"); return GARROW_MONTH_DAY_NANO_INTERVAL_ARRAY_BUILDER(builder); } @@ -4773,7 +4938,8 @@ garrow_month_day_nano_interval_array_builder_append_value( error, "[month-day-nano-interval-array-builder][append-value]"); } else { - return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); + return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), + error); } } @@ -4805,8 +4971,9 @@ garrow_month_day_nano_interval_array_builder_append_values( gint64 is_valids_length, GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); return garrow_array_builder_append_values( values, @@ -4835,6 +5002,7 @@ garrow_month_day_nano_interval_array_builder_append_values( }); } + G_DEFINE_TYPE(GArrowBinaryDictionaryArrayBuilder, garrow_binary_dictionary_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -4845,11 +5013,11 @@ garrow_binary_dictionary_array_builder_init(GArrowBinaryDictionaryArrayBuilder * } static void -garrow_binary_dictionary_array_builder_class_init( - GArrowBinaryDictionaryArrayBuilderClass *klass) +garrow_binary_dictionary_array_builder_class_init(GArrowBinaryDictionaryArrayBuilderClass *klass) { } + /** * garrow_binary_dictionary_array_builder_new: * @@ -4861,8 +5029,7 @@ GArrowBinaryDictionaryArrayBuilder * garrow_binary_dictionary_array_builder_new(void) { // We can use arrow:int8() for the index type of the following arrow_dict_type - // because arrow::MakeBuilder creates a dictionary builder with - // arrow::AdaptiveIntBuilder. + // because arrow::MakeBuilder creates a dictionary builder with arrow::AdaptiveIntBuilder. auto arrow_dict_type = arrow::dictionary(arrow::int8(), arrow::binary()); auto builder = garrow_array_builder_new(arrow_dict_type, nullptr, @@ -4883,8 +5050,8 @@ garrow_binary_dictionary_array_builder_new(void) * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_binary_dictionary_array_builder_append_null( - GArrowBinaryDictionaryArrayBuilder *builder, GError **error) +garrow_binary_dictionary_array_builder_append_null(GArrowBinaryDictionaryArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -4901,14 +5068,14 @@ garrow_binary_dictionary_array_builder_append_null( * Since: 2.0.0 */ gboolean -garrow_binary_dictionary_array_builder_append_value( - GArrowBinaryDictionaryArrayBuilder *builder, - const guint8 *value, - gint32 length, - GError **error) +garrow_binary_dictionary_array_builder_append_value(GArrowBinaryDictionaryArrayBuilder *builder, + const guint8 *value, + gint32 length, + GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto status = arrow_builder->Append(value, length); return garrow_error_check(error, status, @@ -4926,14 +5093,17 @@ garrow_binary_dictionary_array_builder_append_value( * Since: 2.0.0 */ gboolean -garrow_binary_dictionary_array_builder_append_value_bytes( - GArrowBinaryDictionaryArrayBuilder *builder, GBytes *value, GError **error) +garrow_binary_dictionary_array_builder_append_value_bytes(GArrowBinaryDictionaryArrayBuilder *builder, + GBytes *value, + GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); gsize size; auto data = g_bytes_get_data(value, &size); - auto status = arrow_builder->Append(static_cast(data), size); + auto status = arrow_builder->Append(static_cast(data), + size); return garrow_error_check(error, status, "[binary-dictionary-array-builder][append-value-bytes]"); @@ -4950,11 +5120,13 @@ garrow_binary_dictionary_array_builder_append_value_bytes( * Since: 2.0.0 */ gboolean -garrow_binary_dictionary_array_builder_append_array( - GArrowBinaryDictionaryArrayBuilder *builder, GArrowBinaryArray *array, GError **error) +garrow_binary_dictionary_array_builder_append_array(GArrowBinaryDictionaryArrayBuilder *builder, + GArrowBinaryArray *array, + GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto status = arrow_builder->AppendArray(*arrow_array); return garrow_error_check(error, @@ -4981,29 +5153,25 @@ garrow_binary_dictionary_array_builder_append_array( * Since: 2.0.0 */ gboolean -garrow_binary_dictionary_array_builder_append_indices( - GArrowBinaryDictionaryArrayBuilder *builder, - const gint64 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error) +garrow_binary_dictionary_array_builder_append_indices(GArrowBinaryDictionaryArrayBuilder *builder, + const gint64 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error) { static const char *context = "[binary-dictionary-array-builder][append-indices]"; - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); - auto append_function = [&arrow_builder](const gint64 *values, - gint64 values_length, - const uint8_t *valid_bytes) -> arrow::Status { - auto int64_t_values = reinterpret_cast(values); - return arrow_builder->AppendIndices(int64_t_values, values_length, valid_bytes); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto append_function = [&arrow_builder]( + const gint64 *values, + gint64 values_length, + const uint8_t *valid_bytes) -> arrow::Status { + return arrow_builder->AppendIndices(values, values_length, valid_bytes); }; - return garrow_array_builder_append_values(values, - values_length, - is_valids, - is_valids_length, - error, - context, + return garrow_array_builder_append_values(values, values_length, is_valids, + is_valids_length, error, context, append_function); } @@ -5011,16 +5179,15 @@ garrow_binary_dictionary_array_builder_append_indices( * garrow_binary_dictionary_array_builder_get_dictionary_length: * @builder: A #GArrowBinaryDictionaryArrayBuilder. * - * Returns: A number of entries in the dictionary. + * Returns: A number of entries in the dicitonary. * * Since: 2.0.0 */ -gint64 -garrow_binary_dictionary_array_builder_get_dictionary_length( - GArrowBinaryDictionaryArrayBuilder *builder) +gint64 garrow_binary_dictionary_array_builder_get_dictionary_length(GArrowBinaryDictionaryArrayBuilder *builder) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); return arrow_builder->dictionary_length(); } @@ -5036,15 +5203,15 @@ garrow_binary_dictionary_array_builder_get_dictionary_length( * Since: 2.0.0 */ gboolean -garrow_binary_dictionary_array_builder_finish_delta( - GArrowBinaryDictionaryArrayBuilder *builder, - GArrowArray **out_indices, - GArrowArray **out_delta, - GError **error) +garrow_binary_dictionary_array_builder_finish_delta(GArrowBinaryDictionaryArrayBuilder* builder, + GArrowArray **out_indices, + GArrowArray **out_delta, + GError **error) { static const char *context = "[binary-dictionary-array-builder][finish-delta]"; - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); std::shared_ptr arrow_indices, arrow_delta; auto status = arrow_builder->FinishDelta(&arrow_indices, &arrow_delta); if (!garrow_error_check(error, status, context)) { @@ -5066,11 +5233,13 @@ garrow_binary_dictionary_array_builder_finish_delta( * Since: 2.0.0 */ gboolean -garrow_binary_dictionary_array_builder_insert_memo_values( - GArrowBinaryDictionaryArrayBuilder *builder, GArrowBinaryArray *values, GError **error) +garrow_binary_dictionary_array_builder_insert_memo_values(GArrowBinaryDictionaryArrayBuilder *builder, + GArrowBinaryArray *values, + GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(values)); auto status = arrow_builder->InsertMemoValues(*arrow_array); return garrow_error_check(error, @@ -5087,14 +5256,15 @@ garrow_binary_dictionary_array_builder_insert_memo_values( * Since: 2.0.0 */ void -garrow_binary_dictionary_array_builder_reset_full( - GArrowBinaryDictionaryArrayBuilder *builder) +garrow_binary_dictionary_array_builder_reset_full(GArrowBinaryDictionaryArrayBuilder *builder) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); arrow_builder->ResetFull(); } + G_DEFINE_TYPE(GArrowStringDictionaryArrayBuilder, garrow_string_dictionary_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -5105,11 +5275,11 @@ garrow_string_dictionary_array_builder_init(GArrowStringDictionaryArrayBuilder * } static void -garrow_string_dictionary_array_builder_class_init( - GArrowStringDictionaryArrayBuilderClass *klass) +garrow_string_dictionary_array_builder_class_init(GArrowStringDictionaryArrayBuilderClass *klass) { } + /** * garrow_string_dictionary_array_builder_new: * @@ -5121,8 +5291,7 @@ GArrowStringDictionaryArrayBuilder * garrow_string_dictionary_array_builder_new(void) { // We can use arrow:int8() for the index type of the following arrow_dict_type - // because arrow::MakeBuilder creates a dictionary builder with - // arrow::AdaptiveIntBuilder. + // because arrow::MakeBuilder creates a dictionary builder with arrow::AdaptiveIntBuilder. auto arrow_dict_type = arrow::dictionary(arrow::int8(), arrow::utf8()); auto builder = garrow_array_builder_new(arrow_dict_type, nullptr, @@ -5143,8 +5312,8 @@ garrow_string_dictionary_array_builder_new(void) * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_string_dictionary_array_builder_append_null( - GArrowStringDictionaryArrayBuilder *builder, GError **error) +garrow_string_dictionary_array_builder_append_null(GArrowStringDictionaryArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -5160,12 +5329,15 @@ garrow_string_dictionary_array_builder_append_null( * Since: 2.0.0 */ gboolean -garrow_string_dictionary_array_builder_append_string( - GArrowStringDictionaryArrayBuilder *builder, const gchar *value, GError **error) +garrow_string_dictionary_array_builder_append_string(GArrowStringDictionaryArrayBuilder *builder, + const gchar *value, + GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); - auto status = arrow_builder->Append(value, static_cast(strlen(value))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto status = arrow_builder->Append(value, + static_cast(strlen(value))); return garrow_error_check(error, status, "[string-dictionary-array-builder][append-string]"); @@ -5182,11 +5354,13 @@ garrow_string_dictionary_array_builder_append_string( * Since: 2.0.0 */ gboolean -garrow_string_dictionary_array_builder_append_array( - GArrowStringDictionaryArrayBuilder *builder, GArrowStringArray *array, GError **error) +garrow_string_dictionary_array_builder_append_array(GArrowStringDictionaryArrayBuilder *builder, + GArrowStringArray *array, + GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto status = arrow_builder->AppendArray(*arrow_array); return garrow_error_check(error, @@ -5213,29 +5387,25 @@ garrow_string_dictionary_array_builder_append_array( * Since: 2.0.0 */ gboolean -garrow_string_dictionary_array_builder_append_indices( - GArrowStringDictionaryArrayBuilder *builder, - const gint64 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error) +garrow_string_dictionary_array_builder_append_indices(GArrowStringDictionaryArrayBuilder *builder, + const gint64 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error) { static const char *context = "[string-dictionary-array-builder][append-indices]"; - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); - auto append_function = [&arrow_builder](const gint64 *values, - gint64 values_length, - const uint8_t *valid_bytes) -> arrow::Status { - auto int64_t_values = reinterpret_cast(values); - return arrow_builder->AppendIndices(int64_t_values, values_length, valid_bytes); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto append_function = [&arrow_builder]( + const gint64 *values, + gint64 values_length, + const uint8_t *valid_bytes) -> arrow::Status { + return arrow_builder->AppendIndices(values, values_length, valid_bytes); }; - return garrow_array_builder_append_values(values, - values_length, - is_valids, - is_valids_length, - error, - context, + return garrow_array_builder_append_values(values, values_length, is_valids, + is_valids_length, error, context, append_function); } @@ -5243,16 +5413,15 @@ garrow_string_dictionary_array_builder_append_indices( * garrow_string_dictionary_array_builder_get_dictionary_length: * @builder: A #GArrowStringDictionaryArrayBuilder. * - * Returns: A number of entries in the dictionary. + * Returns: A number of entries in the dicitonary. * * Since: 2.0.0 */ -gint64 -garrow_string_dictionary_array_builder_get_dictionary_length( - GArrowStringDictionaryArrayBuilder *builder) +gint64 garrow_string_dictionary_array_builder_get_dictionary_length(GArrowStringDictionaryArrayBuilder *builder) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); return arrow_builder->dictionary_length(); } @@ -5268,15 +5437,15 @@ garrow_string_dictionary_array_builder_get_dictionary_length( * Since: 2.0.0 */ gboolean -garrow_string_dictionary_array_builder_finish_delta( - GArrowStringDictionaryArrayBuilder *builder, - GArrowArray **out_indices, - GArrowArray **out_delta, - GError **error) +garrow_string_dictionary_array_builder_finish_delta(GArrowStringDictionaryArrayBuilder* builder, + GArrowArray **out_indices, + GArrowArray **out_delta, + GError **error) { static const char *context = "[string-dictionary-array-builder][finish-delta]"; - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); std::shared_ptr arrow_indices, arrow_delta; auto status = arrow_builder->FinishDelta(&arrow_indices, &arrow_delta); if (!garrow_error_check(error, status, context)) { @@ -5298,11 +5467,13 @@ garrow_string_dictionary_array_builder_finish_delta( * Since: 2.0.0 */ gboolean -garrow_string_dictionary_array_builder_insert_memo_values( - GArrowStringDictionaryArrayBuilder *builder, GArrowStringArray *values, GError **error) +garrow_string_dictionary_array_builder_insert_memo_values(GArrowStringDictionaryArrayBuilder *builder, + GArrowStringArray *values, + GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(values)); auto status = arrow_builder->InsertMemoValues(*arrow_array); return garrow_error_check(error, @@ -5319,16 +5490,16 @@ garrow_string_dictionary_array_builder_insert_memo_values( * Since: 2.0.0 */ void -garrow_string_dictionary_array_builder_reset_full( - GArrowStringDictionaryArrayBuilder *builder) +garrow_string_dictionary_array_builder_reset_full(GArrowStringDictionaryArrayBuilder *builder) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); arrow_builder->ResetFull(); } -typedef struct GArrowListArrayBuilderPrivate_ -{ + +typedef struct GArrowListArrayBuilderPrivate_ { GArrowArrayBuilder *value_builder; } GArrowListArrayBuilderPrivate; @@ -5336,9 +5507,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowListArrayBuilder, garrow_list_array_builder, GARROW_TYPE_ARRAY_BUILDER) -#define GARROW_LIST_ARRAY_BUILDER_GET_PRIVATE(obj) \ - static_cast( \ - garrow_list_array_builder_get_instance_private(GARROW_LIST_ARRAY_BUILDER(obj))) +#define GARROW_LIST_ARRAY_BUILDER_GET_PRIVATE(obj) \ + static_cast( \ + garrow_list_array_builder_get_instance_private( \ + GARROW_LIST_ARRAY_BUILDER(obj))) static void garrow_list_array_builder_dispose(GObject *object) @@ -5376,7 +5548,8 @@ garrow_list_array_builder_class_init(GArrowListArrayBuilderClass *klass) * Returns: A newly created #GArrowListArrayBuilder. */ GArrowListArrayBuilder * -garrow_list_array_builder_new(GArrowListDataType *data_type, GError **error) +garrow_list_array_builder_new(GArrowListDataType *data_type, + GError **error) { if (!GARROW_IS_LIST_DATA_TYPE(data_type)) { g_set_error(error, @@ -5386,9 +5559,11 @@ garrow_list_array_builder_new(GArrowListDataType *data_type, GError **error) return NULL; } - auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); - auto builder = - garrow_array_builder_new(arrow_data_type, error, "[list-array-builder][new]"); + auto arrow_data_type = + garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); + auto builder = garrow_array_builder_new(arrow_data_type, + error, + "[list-array-builder][new]"); return GARROW_LIST_ARRAY_BUILDER(builder); } @@ -5439,7 +5614,8 @@ garrow_list_array_builder_new(GArrowListDataType *data_type, GError **error) * Use garrow_list_array_builder_append_value() instead. */ gboolean -garrow_list_array_builder_append(GArrowListArrayBuilder *builder, GError **error) +garrow_list_array_builder_append(GArrowListArrayBuilder *builder, + GError **error) { return garrow_list_array_builder_append_value(builder, error); } @@ -5490,10 +5666,12 @@ garrow_list_array_builder_append(GArrowListArrayBuilder *builder, GError **error * Since: 0.12.0 */ gboolean -garrow_list_array_builder_append_value(GArrowListArrayBuilder *builder, GError **error) +garrow_list_array_builder_append_value(GArrowListArrayBuilder *builder, + GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto status = arrow_builder->Append(); return garrow_error_check(error, status, "[list-array-builder][append-value]"); } @@ -5511,7 +5689,8 @@ garrow_list_array_builder_append_value(GArrowListArrayBuilder *builder, GError * * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_list_array_builder_append_null(GArrowListArrayBuilder *builder, GError **error) +garrow_list_array_builder_append_null(GArrowListArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -5527,16 +5706,17 @@ garrow_list_array_builder_get_value_builder(GArrowListArrayBuilder *builder) { auto priv = GARROW_LIST_ARRAY_BUILDER_GET_PRIVATE(builder); if (!priv->value_builder) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto arrow_value_builder = arrow_builder->value_builder(); priv->value_builder = garrow_array_builder_new_raw(arrow_value_builder); } return priv->value_builder; } -typedef struct GArrowLargeListArrayBuilderPrivate_ -{ + +typedef struct GArrowLargeListArrayBuilderPrivate_ { GArrowArrayBuilder *value_builder; } GArrowLargeListArrayBuilderPrivate; @@ -5544,10 +5724,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowLargeListArrayBuilder, garrow_large_list_array_builder, GARROW_TYPE_ARRAY_BUILDER) -#define GARROW_LARGE_LIST_ARRAY_BUILDER_GET_PRIVATE(obj) \ - static_cast( \ - garrow_large_list_array_builder_get_instance_private( \ - GARROW_LARGE_LIST_ARRAY_BUILDER(obj))) +#define GARROW_LARGE_LIST_ARRAY_BUILDER_GET_PRIVATE(obj) \ + static_cast( \ + garrow_large_list_array_builder_get_instance_private( \ + GARROW_LARGE_LIST_ARRAY_BUILDER(obj))) static void garrow_large_list_array_builder_dispose(GObject *object) @@ -5585,7 +5765,8 @@ garrow_large_list_array_builder_class_init(GArrowLargeListArrayBuilderClass *kla * Since: 0.16.0 */ GArrowLargeListArrayBuilder * -garrow_large_list_array_builder_new(GArrowLargeListDataType *data_type, GError **error) +garrow_large_list_array_builder_new(GArrowLargeListDataType *data_type, + GError **error) { if (!GARROW_IS_LARGE_LIST_DATA_TYPE(data_type)) { g_set_error(error, @@ -5595,9 +5776,11 @@ garrow_large_list_array_builder_new(GArrowLargeListDataType *data_type, GError * return NULL; } - auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); - auto builder = - garrow_array_builder_new(arrow_data_type, error, "[large-list-array-builder][new]"); + auto arrow_data_type = + garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); + auto builder = garrow_array_builder_new(arrow_data_type, + error, + "[large-list-array-builder][new]"); return GARROW_LARGE_LIST_ARRAY_BUILDER(builder); } @@ -5620,8 +5803,9 @@ gboolean garrow_large_list_array_builder_append_value(GArrowLargeListArrayBuilder *builder, GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto status = arrow_builder->Append(); return garrow_error_check(error, status, "[large-list-array-builder][append-value]"); } @@ -5660,21 +5844,24 @@ garrow_large_list_array_builder_get_value_builder(GArrowLargeListArrayBuilder *b { auto priv = GARROW_LARGE_LIST_ARRAY_BUILDER_GET_PRIVATE(builder); if (!priv->value_builder) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto arrow_value_builder = arrow_builder->value_builder(); priv->value_builder = garrow_array_builder_new_raw(arrow_value_builder); } return priv->value_builder; } + G_DEFINE_TYPE(GArrowStructArrayBuilder, garrow_struct_array_builder, GARROW_TYPE_ARRAY_BUILDER) -#define GARROW_STRUCT_ARRAY_BUILDER_GET_PRIVATE(obj) \ - static_cast( \ - garrow_struct_array_builder_get_instance_private(GARROW_STRUCT_ARRAY_BUILDER(obj))) +#define GARROW_STRUCT_ARRAY_BUILDER_GET_PRIVATE(obj) \ + static_cast( \ + garrow_struct_array_builder_get_instance_private( \ + GARROW_STRUCT_ARRAY_BUILDER(obj))) static void garrow_struct_array_builder_init(GArrowStructArrayBuilder *builder) @@ -5694,7 +5881,8 @@ garrow_struct_array_builder_class_init(GArrowStructArrayBuilderClass *klass) * Returns: A newly created #GArrowStructArrayBuilder. */ GArrowStructArrayBuilder * -garrow_struct_array_builder_new(GArrowStructDataType *data_type, GError **error) +garrow_struct_array_builder_new(GArrowStructDataType *data_type, + GError **error) { if (!GARROW_IS_STRUCT_DATA_TYPE(data_type)) { g_set_error(error, @@ -5705,8 +5893,9 @@ garrow_struct_array_builder_new(GArrowStructDataType *data_type, GError **error) } auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); - auto builder = - garrow_array_builder_new(arrow_data_type, error, "[struct-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow_data_type, + error, + "[struct-array-builder][new]"); return GARROW_STRUCT_ARRAY_BUILDER(builder); } @@ -5732,7 +5921,8 @@ garrow_struct_array_builder_new(GArrowStructDataType *data_type, GError **error) * Use garrow_struct_array_builder_append_value() instead. */ gboolean -garrow_struct_array_builder_append(GArrowStructArrayBuilder *builder, GError **error) +garrow_struct_array_builder_append(GArrowStructArrayBuilder *builder, + GError **error) { return garrow_struct_array_builder_append_value(builder, error); } @@ -5761,10 +5951,13 @@ gboolean garrow_struct_array_builder_append_value(GArrowStructArrayBuilder *builder, GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto status = arrow_builder->Append(); - return garrow_error_check(error, status, "[struct-array-builder][append-value]"); + return garrow_error_check(error, + status, + "[struct-array-builder][append-value]"); } /** @@ -5780,7 +5973,8 @@ garrow_struct_array_builder_append_value(GArrowStructArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_struct_array_builder_append_null(GArrowStructArrayBuilder *builder, GError **error) +garrow_struct_array_builder_append_null(GArrowStructArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -5796,7 +5990,8 @@ garrow_struct_array_builder_append_null(GArrowStructArrayBuilder *builder, GErro * Use garrow_array_builder_get_child() instead. */ GArrowArrayBuilder * -garrow_struct_array_builder_get_field_builder(GArrowStructArrayBuilder *builder, gint i) +garrow_struct_array_builder_get_field_builder(GArrowStructArrayBuilder *builder, + gint i) { return garrow_array_builder_get_child(GARROW_ARRAY_BUILDER(builder), i); } @@ -5817,8 +6012,8 @@ garrow_struct_array_builder_get_field_builders(GArrowStructArrayBuilder *builder return garrow_array_builder_get_children(GARROW_ARRAY_BUILDER(builder)); } -typedef struct GArrowMapArrayBuilderPrivate_ -{ + +typedef struct GArrowMapArrayBuilderPrivate_ { GArrowArrayBuilder *key_builder; GArrowArrayBuilder *item_builder; GArrowArrayBuilder *value_builder; @@ -5828,9 +6023,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowMapArrayBuilder, garrow_map_array_builder, GARROW_TYPE_ARRAY_BUILDER) -#define GARROW_MAP_ARRAY_BUILDER_GET_PRIVATE(object) \ - static_cast( \ - garrow_map_array_builder_get_instance_private(GARROW_MAP_ARRAY_BUILDER(object))) +#define GARROW_MAP_ARRAY_BUILDER_GET_PRIVATE(object) \ + static_cast( \ + garrow_map_array_builder_get_instance_private( \ + GARROW_MAP_ARRAY_BUILDER(object))) static void garrow_map_array_builder_dispose(GObject *object) @@ -5879,7 +6075,8 @@ garrow_map_array_builder_class_init(GArrowMapArrayBuilderClass *klass) * Since: 0.17.0 */ GArrowMapArrayBuilder * -garrow_map_array_builder_new(GArrowMapDataType *data_type, GError **error) +garrow_map_array_builder_new(GArrowMapDataType *data_type, + GError **error) { if (!GARROW_IS_MAP_DATA_TYPE(data_type)) { g_set_error(error, @@ -5890,8 +6087,9 @@ garrow_map_array_builder_new(GArrowMapDataType *data_type, GError **error) } auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); - auto builder = - garrow_array_builder_new(arrow_data_type, error, "[map-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow_data_type, + error, + "[map-array-builder][new]"); if (builder) { return GARROW_MAP_ARRAY_BUILDER(builder); } else { @@ -5909,12 +6107,16 @@ garrow_map_array_builder_new(GArrowMapDataType *data_type, GError **error) * Since: 0.17.0 */ gboolean -garrow_map_array_builder_append_value(GArrowMapArrayBuilder *builder, GError **error) +garrow_map_array_builder_append_value(GArrowMapArrayBuilder *builder, + GError **error) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto status = arrow_builder->Append(); - return garrow::check(error, status, "[map-array-builder][append-value]"); + return garrow::check(error, + status, + "[map-array-builder][append-value]"); } /** @@ -5944,14 +6146,14 @@ garrow_map_array_builder_append_values(GArrowMapArrayBuilder *builder, gint64 is_valids_length, GError **error) { - return garrow_array_builder_append_values( - GARROW_ARRAY_BUILDER(builder), - reinterpret_cast(offsets), - offsets_length, - is_valids, - is_valids_length, - error, - "[map-array-builder][append-values]"); + return garrow_array_builder_append_values + (GARROW_ARRAY_BUILDER(builder), + reinterpret_cast(offsets), + offsets_length, + is_valids, + is_valids_length, + error, + "[map-array-builder][append-values]"); } /** @@ -5967,7 +6169,8 @@ garrow_map_array_builder_append_values(GArrowMapArrayBuilder *builder, * Use garrow_array_builder_append_null() instead. */ gboolean -garrow_map_array_builder_append_null(GArrowMapArrayBuilder *builder, GError **error) +garrow_map_array_builder_append_null(GArrowMapArrayBuilder *builder, + GError **error) { return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } @@ -5993,7 +6196,9 @@ garrow_map_array_builder_append_nulls(GArrowMapArrayBuilder *builder, gint64 n, GError **error) { - return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), n, error); + return garrow_array_builder_append_nulls(GARROW_ARRAY_BUILDER(builder), + n, + error); } /** @@ -6009,8 +6214,9 @@ garrow_map_array_builder_get_key_builder(GArrowMapArrayBuilder *builder) { auto priv = GARROW_MAP_ARRAY_BUILDER_GET_PRIVATE(builder); if (!priv->key_builder) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto arrow_key_builder = arrow_builder->key_builder(); priv->key_builder = garrow_array_builder_new_raw(arrow_key_builder); } @@ -6030,8 +6236,9 @@ garrow_map_array_builder_get_item_builder(GArrowMapArrayBuilder *builder) { auto priv = GARROW_MAP_ARRAY_BUILDER_GET_PRIVATE(builder); if (!priv->item_builder) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto arrow_item_builder = arrow_builder->item_builder(); priv->item_builder = garrow_array_builder_new_raw(arrow_item_builder); } @@ -6054,14 +6261,16 @@ garrow_map_array_builder_get_value_builder(GArrowMapArrayBuilder *builder) { auto priv = GARROW_MAP_ARRAY_BUILDER_GET_PRIVATE(builder); if (!priv->value_builder) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto arrow_value_builder = arrow_builder->value_builder(); priv->value_builder = garrow_array_builder_new_raw(arrow_value_builder); } return priv->value_builder; } + G_DEFINE_TYPE(GArrowDecimal128ArrayBuilder, garrow_decimal128_array_builder, GARROW_TYPE_FIXED_SIZE_BINARY_ARRAY_BUILDER) @@ -6088,8 +6297,9 @@ GArrowDecimal128ArrayBuilder * garrow_decimal128_array_builder_new(GArrowDecimal128DataType *data_type) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); - auto builder = - garrow_array_builder_new(arrow_data_type, NULL, "[decimal128-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow_data_type, + NULL, + "[decimal128-array-builder][new]"); return GARROW_DECIMAL128_ARRAY_BUILDER(builder); } @@ -6131,13 +6341,14 @@ garrow_decimal128_array_builder_append_value(GArrowDecimal128ArrayBuilder *build { if (value) { auto arrow_decimal = garrow_decimal128_get_raw(value); - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - *arrow_decimal, - error, - "[decimal128-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + *arrow_decimal, + error, + "[decimal128-array-builder][append-value]"); } else { - return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); + return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), + error); } } @@ -6161,12 +6372,13 @@ garrow_decimal128_array_builder_append_value(GArrowDecimal128ArrayBuilder *build * Since: 3.0.0 */ gboolean -garrow_decimal128_array_builder_append_values(GArrowDecimal128ArrayBuilder *builder, - GArrowDecimal128 **values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error) +garrow_decimal128_array_builder_append_values( + GArrowDecimal128ArrayBuilder *builder, + GArrowDecimal128 **values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error) { return garrow_array_builder_append_values( GARROW_ARRAY_BUILDER(builder), @@ -6203,6 +6415,7 @@ garrow_decimal128_array_builder_append_null(GArrowDecimal128ArrayBuilder *builde return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); } + G_DEFINE_TYPE(GArrowDecimal256ArrayBuilder, garrow_decimal256_array_builder, GARROW_TYPE_FIXED_SIZE_BINARY_ARRAY_BUILDER) @@ -6229,8 +6442,9 @@ GArrowDecimal256ArrayBuilder * garrow_decimal256_array_builder_new(GArrowDecimal256DataType *data_type) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); - auto builder = - garrow_array_builder_new(arrow_data_type, NULL, "[decimal256-array-builder][new]"); + auto builder = garrow_array_builder_new(arrow_data_type, + NULL, + "[decimal256-array-builder][new]"); return GARROW_DECIMAL256_ARRAY_BUILDER(builder); } @@ -6251,13 +6465,14 @@ garrow_decimal256_array_builder_append_value(GArrowDecimal256ArrayBuilder *build { if (value) { auto arrow_decimal = garrow_decimal256_get_raw(value); - return garrow_array_builder_append_value( - GARROW_ARRAY_BUILDER(builder), - *arrow_decimal, - error, - "[decimal256-array-builder][append-value]"); + return garrow_array_builder_append_value + (GARROW_ARRAY_BUILDER(builder), + *arrow_decimal, + error, + "[decimal256-array-builder][append-value]"); } else { - return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), error); + return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder), + error); } } @@ -6281,12 +6496,13 @@ garrow_decimal256_array_builder_append_value(GArrowDecimal256ArrayBuilder *build * Since: 3.0.0 */ gboolean -garrow_decimal256_array_builder_append_values(GArrowDecimal256ArrayBuilder *builder, - GArrowDecimal256 **values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error) +garrow_decimal256_array_builder_append_values( + GArrowDecimal256ArrayBuilder *builder, + GArrowDecimal256 **values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error) { return garrow_array_builder_append_values( GARROW_ARRAY_BUILDER(builder), @@ -6302,6 +6518,7 @@ garrow_decimal256_array_builder_append_values(GArrowDecimal256ArrayBuilder *buil }); } + G_DEFINE_ABSTRACT_TYPE(GArrowUnionArrayBuilder, garrow_union_array_builder, GARROW_TYPE_ARRAY_BUILDER) @@ -6331,8 +6548,9 @@ garrow_union_array_builder_append_child(GArrowUnionArrayBuilder *builder, GArrowArrayBuilder *child, const gchar *field_name) { - auto arrow_builder = std::static_pointer_cast( - garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); + auto arrow_builder = + std::static_pointer_cast( + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder))); auto arrow_child = garrow_array_builder_get_raw(child); if (!field_name) { field_name = ""; @@ -6366,7 +6584,8 @@ garrow_union_array_builder_append_value(GArrowUnionArrayBuilder *builder, gint8 value, GError **error) { - auto arrow_builder = garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder)); + auto arrow_builder = + garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder)); arrow::Status status; if (GARROW_IS_DENSE_UNION_ARRAY_BUILDER(builder)) { auto arrow_union_builder = @@ -6377,9 +6596,12 @@ garrow_union_array_builder_append_value(GArrowUnionArrayBuilder *builder, std::static_pointer_cast(arrow_builder); status = arrow_union_builder->Append(value); } - return garrow_error_check(error, status, "[union-array-builder][append-value]"); + return garrow_error_check(error, + status, + "[union-array-builder][append-value]"); } + G_END_DECLS template GArrowArrayBuilder * @@ -6393,8 +6615,9 @@ garrow_union_array_builder_new(GArrowUnionDataType *data_type, return garrow_array_builder_new(arrow_data_type, error, context); } else { auto memory_pool = arrow::default_memory_pool(); - auto arrow_builder = std::static_pointer_cast( - std::make_shared(memory_pool)); + auto arrow_builder = + std::static_pointer_cast( + std::make_shared(memory_pool)); return garrow_array_builder_new_raw(&arrow_builder, builder_gtype); } } @@ -6428,19 +6651,22 @@ garrow_dense_union_array_builder_class_init(GArrowDenseUnionArrayBuilderClass *k * Since: 12.0.0 */ GArrowDenseUnionArrayBuilder * -garrow_dense_union_array_builder_new(GArrowDenseUnionDataType *data_type, GError **error) +garrow_dense_union_array_builder_new(GArrowDenseUnionDataType *data_type, + GError **error) { - auto builder = garrow_union_array_builder_new( - GARROW_UNION_DATA_TYPE(data_type), - GARROW_TYPE_DENSE_UNION_ARRAY_BUILDER, - "[dense-union-array-builder][new]", - error); + auto builder = + garrow_union_array_builder_new( + GARROW_UNION_DATA_TYPE(data_type), + GARROW_TYPE_DENSE_UNION_ARRAY_BUILDER, + "[dense-union-array-builder][new]", + error); if (!builder) { return nullptr; } return GARROW_DENSE_UNION_ARRAY_BUILDER(builder); } + G_DEFINE_TYPE(GArrowSparseUnionArrayBuilder, garrow_sparse_union_array_builder, GARROW_TYPE_UNION_ARRAY_BUILDER) @@ -6470,19 +6696,21 @@ garrow_sparse_union_array_builder_class_init(GArrowSparseUnionArrayBuilderClass */ GArrowSparseUnionArrayBuilder * garrow_sparse_union_array_builder_new(GArrowSparseUnionDataType *data_type, - GError **error) + GError **error) { - auto builder = garrow_union_array_builder_new( - GARROW_UNION_DATA_TYPE(data_type), - GARROW_TYPE_SPARSE_UNION_ARRAY_BUILDER, - "[sparse-union-array-builder][new]", - error); + auto builder = + garrow_union_array_builder_new( + GARROW_UNION_DATA_TYPE(data_type), + GARROW_TYPE_SPARSE_UNION_ARRAY_BUILDER, + "[sparse-union-array-builder][new]", + error); if (!builder) { return nullptr; } return GARROW_SPARSE_UNION_ARRAY_BUILDER(builder); } + G_END_DECLS GArrowArrayBuilder * @@ -6590,17 +6818,18 @@ garrow_array_builder_new_raw(std::shared_ptr *arrow_builder case arrow::Type::type::DICTIONARY: { auto dict_type = - std::static_pointer_cast((*arrow_builder)->type()); + std::static_pointer_cast( + (*arrow_builder)->type()); switch (dict_type->value_type()->id()) { - case arrow::Type::type::BINARY: - type = GARROW_TYPE_BINARY_DICTIONARY_ARRAY_BUILDER; - break; - case arrow::Type::type::STRING: - type = GARROW_TYPE_STRING_DICTIONARY_ARRAY_BUILDER; - break; - default: - type = GARROW_TYPE_ARRAY_BUILDER; - break; + case arrow::Type::type::BINARY: + type = GARROW_TYPE_BINARY_DICTIONARY_ARRAY_BUILDER; + break; + case arrow::Type::type::STRING: + type = GARROW_TYPE_STRING_DICTIONARY_ARRAY_BUILDER; + break; + default: + type = GARROW_TYPE_ARRAY_BUILDER; + break; } } break; @@ -6617,18 +6846,18 @@ garrow_array_builder_new_raw(std::shared_ptr *arrow_builder } auto builder = - GARROW_ARRAY_BUILDER(g_object_new(type, "array-builder", arrow_builder, NULL)); + GARROW_ARRAY_BUILDER(g_object_new(type, + "array-builder", arrow_builder, + NULL)); return builder; } GArrowArrayBuilder * -garrow_array_builder_new_raw(arrow::ArrayBuilder *arrow_builder, GType type) +garrow_array_builder_new_raw(arrow::ArrayBuilder *arrow_builder, + GType type) { - struct NothingDeleter - { - void - operator()(arrow::ArrayBuilder *arrow_builder) - { + struct NothingDeleter { + void operator()(arrow::ArrayBuilder *arrow_builder) { } }; std::shared_ptr arrow_shared_builder(arrow_builder, diff --git a/c_glib/arrow-glib/array-builder.h b/c_glib/arrow-glib/array-builder.h index 6a0d0154833..56b4cc71b6f 100644 --- a/c_glib/arrow-glib/array-builder.h +++ b/c_glib/arrow-glib/array-builder.h @@ -26,72 +26,65 @@ G_BEGIN_DECLS #define GARROW_TYPE_ARRAY_BUILDER (garrow_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowArrayBuilder, garrow_array_builder, GARROW, ARRAY_BUILDER, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowArrayBuilder, + garrow_array_builder, + GARROW, + ARRAY_BUILDER, + GObject) struct _GArrowArrayBuilderClass { GObjectClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowDataType * garrow_array_builder_get_value_data_type(GArrowArrayBuilder *builder); +GArrowType garrow_array_builder_get_value_type(GArrowArrayBuilder *builder); -GARROW_AVAILABLE_IN_ALL -GArrowType -garrow_array_builder_get_value_type(GArrowArrayBuilder *builder); - -GARROW_AVAILABLE_IN_ALL -GArrowArray * -garrow_array_builder_finish(GArrowArrayBuilder *builder, GError **error); +GArrowArray *garrow_array_builder_finish(GArrowArrayBuilder *builder, + GError **error); GARROW_AVAILABLE_IN_2_0 -void -garrow_array_builder_reset(GArrowArrayBuilder *builder); +void garrow_array_builder_reset(GArrowArrayBuilder *builder); GARROW_AVAILABLE_IN_2_0 -gint64 -garrow_array_builder_get_capacity(GArrowArrayBuilder *builder); +gint64 garrow_array_builder_get_capacity(GArrowArrayBuilder *builder); GARROW_AVAILABLE_IN_2_0 -gint64 -garrow_array_builder_get_length(GArrowArrayBuilder *builder); +gint64 garrow_array_builder_get_length(GArrowArrayBuilder *builder); GARROW_AVAILABLE_IN_2_0 -gint64 -garrow_array_builder_get_n_nulls(GArrowArrayBuilder *builder); +gint64 garrow_array_builder_get_n_nulls(GArrowArrayBuilder *builder); GARROW_AVAILABLE_IN_12_0 GArrowArrayBuilder * -garrow_array_builder_get_child(GArrowArrayBuilder *builder, gint i); +garrow_array_builder_get_child(GArrowArrayBuilder *builder, + gint i); GARROW_AVAILABLE_IN_12_0 GList * garrow_array_builder_get_children(GArrowArrayBuilder *builder); GARROW_AVAILABLE_IN_2_0 -gboolean -garrow_array_builder_resize(GArrowArrayBuilder *builder, gint64 capacity, GError **error); +gboolean garrow_array_builder_resize(GArrowArrayBuilder *builder, + gint64 capacity, + GError **error); GARROW_AVAILABLE_IN_2_0 -gboolean -garrow_array_builder_reserve(GArrowArrayBuilder *builder, - gint64 additional_capacity, - GError **error); +gboolean garrow_array_builder_reserve(GArrowArrayBuilder *builder, + gint64 additional_capacity, + GError **error); GARROW_AVAILABLE_IN_3_0 -gboolean -garrow_array_builder_append_null(GArrowArrayBuilder *builder, GError **error); +gboolean garrow_array_builder_append_null(GArrowArrayBuilder *builder, + GError **error); GARROW_AVAILABLE_IN_3_0 -gboolean -garrow_array_builder_append_nulls(GArrowArrayBuilder *builder, gint64 n, GError **error); +gboolean garrow_array_builder_append_nulls(GArrowArrayBuilder *builder, + gint64 n, + GError **error); GARROW_AVAILABLE_IN_3_0 -gboolean -garrow_array_builder_append_empty_value(GArrowArrayBuilder *builder, GError **error); +gboolean garrow_array_builder_append_empty_value(GArrowArrayBuilder *builder, + GError **error); GARROW_AVAILABLE_IN_3_0 -gboolean -garrow_array_builder_append_empty_values(GArrowArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_array_builder_append_empty_values(GArrowArrayBuilder *builder, + gint64 n, + GError **error); #define GARROW_TYPE_NULL_ARRAY_BUILDER (garrow_null_array_builder_get_type()) -GARROW_AVAILABLE_IN_0_13 G_DECLARE_DERIVABLE_TYPE(GArrowNullArrayBuilder, garrow_null_array_builder, GARROW, @@ -103,24 +96,23 @@ struct _GArrowNullArrayBuilderClass }; GARROW_AVAILABLE_IN_0_13 -GArrowNullArrayBuilder * -garrow_null_array_builder_new(void); +GArrowNullArrayBuilder *garrow_null_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) GARROW_AVAILABLE_IN_0_13 -gboolean -garrow_null_array_builder_append_null(GArrowNullArrayBuilder *builder, GError **error); +gboolean garrow_null_array_builder_append_null(GArrowNullArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) GARROW_AVAILABLE_IN_0_13 -gboolean -garrow_null_array_builder_append_nulls(GArrowNullArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_null_array_builder_append_nulls(GArrowNullArrayBuilder *builder, + gint64 n, + GError **error); #endif -#define GARROW_TYPE_BOOLEAN_ARRAY_BUILDER (garrow_boolean_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_BOOLEAN_ARRAY_BUILDER \ + (garrow_boolean_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowBooleanArrayBuilder, garrow_boolean_array_builder, GARROW, @@ -131,46 +123,36 @@ struct _GArrowBooleanArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowBooleanArrayBuilder * -garrow_boolean_array_builder_new(void); +GArrowBooleanArrayBuilder *garrow_boolean_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_boolean_array_builder_append_value) -gboolean -garrow_boolean_array_builder_append(GArrowBooleanArrayBuilder *builder, - gboolean value, - GError **error); +gboolean garrow_boolean_array_builder_append(GArrowBooleanArrayBuilder *builder, + gboolean value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_boolean_array_builder_append_value(GArrowBooleanArrayBuilder *builder, - gboolean value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_boolean_array_builder_append_values(GArrowBooleanArrayBuilder *builder, - const gboolean *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_boolean_array_builder_append_value(GArrowBooleanArrayBuilder *builder, + gboolean value, + GError **error); +gboolean garrow_boolean_array_builder_append_values(GArrowBooleanArrayBuilder *builder, + const gboolean *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_boolean_array_builder_append_null(GArrowBooleanArrayBuilder *builder, - GError **error); +gboolean garrow_boolean_array_builder_append_null(GArrowBooleanArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_boolean_array_builder_append_nulls(GArrowBooleanArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_boolean_array_builder_append_nulls(GArrowBooleanArrayBuilder *builder, + gint64 n, + GError **error); #endif + #define GARROW_TYPE_INT_ARRAY_BUILDER (garrow_int_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowIntArrayBuilder, garrow_int_array_builder, GARROW, @@ -181,47 +163,36 @@ struct _GArrowIntArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowIntArrayBuilder * -garrow_int_array_builder_new(void); +GArrowIntArrayBuilder *garrow_int_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_int_array_builder_append_value) -gboolean -garrow_int_array_builder_append(GArrowIntArrayBuilder *builder, - gint64 value, - GError **error); +gboolean garrow_int_array_builder_append(GArrowIntArrayBuilder *builder, + gint64 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_int_array_builder_append_value(GArrowIntArrayBuilder *builder, - gint64 value, - GError **error); -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_int_array_builder_append_values(GArrowIntArrayBuilder *builder, - const gint64 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_int_array_builder_append_value(GArrowIntArrayBuilder *builder, + gint64 value, + GError **error); +gboolean garrow_int_array_builder_append_values(GArrowIntArrayBuilder *builder, + const gint64 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_int_array_builder_append_null(GArrowIntArrayBuilder *builder, GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_int_array_builder_append_null(GArrowIntArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_int_array_builder_append_nulls(GArrowIntArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_int_array_builder_append_nulls(GArrowIntArrayBuilder *builder, + gint64 n, + GError **error); #endif + #define GARROW_TYPE_UINT_ARRAY_BUILDER (garrow_uint_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowUIntArrayBuilder, garrow_uint_array_builder, GARROW, @@ -232,48 +203,36 @@ struct _GArrowUIntArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowUIntArrayBuilder * -garrow_uint_array_builder_new(void); +GArrowUIntArrayBuilder *garrow_uint_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_uint_array_builder_append_value) -gboolean -garrow_uint_array_builder_append(GArrowUIntArrayBuilder *builder, - guint64 value, - GError **error); +gboolean garrow_uint_array_builder_append(GArrowUIntArrayBuilder *builder, + guint64 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_uint_array_builder_append_value(GArrowUIntArrayBuilder *builder, - guint64 value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_uint_array_builder_append_values(GArrowUIntArrayBuilder *builder, - const guint64 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_uint_array_builder_append_value(GArrowUIntArrayBuilder *builder, + guint64 value, + GError **error); +gboolean garrow_uint_array_builder_append_values(GArrowUIntArrayBuilder *builder, + const guint64 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_uint_array_builder_append_null(GArrowUIntArrayBuilder *builder, GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_uint_array_builder_append_null(GArrowUIntArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_uint_array_builder_append_nulls(GArrowUIntArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_uint_array_builder_append_nulls(GArrowUIntArrayBuilder *builder, + gint64 n, + GError **error); #endif + #define GARROW_TYPE_INT8_ARRAY_BUILDER (garrow_int8_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowInt8ArrayBuilder, garrow_int8_array_builder, GARROW, @@ -284,48 +243,36 @@ struct _GArrowInt8ArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowInt8ArrayBuilder * -garrow_int8_array_builder_new(void); +GArrowInt8ArrayBuilder *garrow_int8_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_int8_array_builder_append_value) -gboolean -garrow_int8_array_builder_append(GArrowInt8ArrayBuilder *builder, - gint8 value, - GError **error); +gboolean garrow_int8_array_builder_append(GArrowInt8ArrayBuilder *builder, + gint8 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_int8_array_builder_append_value(GArrowInt8ArrayBuilder *builder, - gint8 value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_int8_array_builder_append_values(GArrowInt8ArrayBuilder *builder, - const gint8 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_int8_array_builder_append_value(GArrowInt8ArrayBuilder *builder, + gint8 value, + GError **error); +gboolean garrow_int8_array_builder_append_values(GArrowInt8ArrayBuilder *builder, + const gint8 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_int8_array_builder_append_null(GArrowInt8ArrayBuilder *builder, GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_int8_array_builder_append_null(GArrowInt8ArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_int8_array_builder_append_nulls(GArrowInt8ArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_int8_array_builder_append_nulls(GArrowInt8ArrayBuilder *builder, + gint64 n, + GError **error); #endif + #define GARROW_TYPE_UINT8_ARRAY_BUILDER (garrow_uint8_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowUInt8ArrayBuilder, garrow_uint8_array_builder, GARROW, @@ -336,48 +283,36 @@ struct _GArrowUInt8ArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowUInt8ArrayBuilder * -garrow_uint8_array_builder_new(void); +GArrowUInt8ArrayBuilder *garrow_uint8_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_uint8_array_builder_append_value) -gboolean -garrow_uint8_array_builder_append(GArrowUInt8ArrayBuilder *builder, - guint8 value, - GError **error); +gboolean garrow_uint8_array_builder_append(GArrowUInt8ArrayBuilder *builder, + guint8 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_uint8_array_builder_append_value(GArrowUInt8ArrayBuilder *builder, - guint8 value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_uint8_array_builder_append_values(GArrowUInt8ArrayBuilder *builder, - const guint8 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_uint8_array_builder_append_value(GArrowUInt8ArrayBuilder *builder, + guint8 value, + GError **error); +gboolean garrow_uint8_array_builder_append_values(GArrowUInt8ArrayBuilder *builder, + const guint8 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_uint8_array_builder_append_null(GArrowUInt8ArrayBuilder *builder, GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_uint8_array_builder_append_null(GArrowUInt8ArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_uint8_array_builder_append_nulls(GArrowUInt8ArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_uint8_array_builder_append_nulls(GArrowUInt8ArrayBuilder *builder, + gint64 n, + GError **error); #endif + #define GARROW_TYPE_INT16_ARRAY_BUILDER (garrow_int16_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowInt16ArrayBuilder, garrow_int16_array_builder, GARROW, @@ -388,46 +323,37 @@ struct _GArrowInt16ArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowInt16ArrayBuilder * -garrow_int16_array_builder_new(void); +GArrowInt16ArrayBuilder *garrow_int16_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED GARROW_DEPRECATED_IN_0_12_FOR(garrow_int16_array_builder_append_value) -gboolean -garrow_int16_array_builder_append(GArrowInt16ArrayBuilder *builder, - gint16 value, - GError **error); +gboolean garrow_int16_array_builder_append(GArrowInt16ArrayBuilder *builder, + gint16 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_int16_array_builder_append_value(GArrowInt16ArrayBuilder *builder, - gint16 value, - GError **error); -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_int16_array_builder_append_values(GArrowInt16ArrayBuilder *builder, - const gint16 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_int16_array_builder_append_value(GArrowInt16ArrayBuilder *builder, + gint16 value, + GError **error); +gboolean garrow_int16_array_builder_append_values(GArrowInt16ArrayBuilder *builder, + const gint16 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_int16_array_builder_append_null(GArrowInt16ArrayBuilder *builder, GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_int16_array_builder_append_null(GArrowInt16ArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_int16_array_builder_append_nulls(GArrowInt16ArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_int16_array_builder_append_nulls(GArrowInt16ArrayBuilder *builder, + gint64 n, + GError **error); #endif -#define GARROW_TYPE_UINT16_ARRAY_BUILDER (garrow_uint16_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_UINT16_ARRAY_BUILDER \ + (garrow_uint16_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowUInt16ArrayBuilder, garrow_uint16_array_builder, GARROW, @@ -438,49 +364,36 @@ struct _GArrowUInt16ArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowUInt16ArrayBuilder * -garrow_uint16_array_builder_new(void); +GArrowUInt16ArrayBuilder *garrow_uint16_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_uint16_array_builder_append_value) -gboolean -garrow_uint16_array_builder_append(GArrowUInt16ArrayBuilder *builder, - guint16 value, - GError **error); +gboolean garrow_uint16_array_builder_append(GArrowUInt16ArrayBuilder *builder, + guint16 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_uint16_array_builder_append_value(GArrowUInt16ArrayBuilder *builder, - guint16 value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_uint16_array_builder_append_values(GArrowUInt16ArrayBuilder *builder, - const guint16 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_uint16_array_builder_append_value(GArrowUInt16ArrayBuilder *builder, + guint16 value, + GError **error); +gboolean garrow_uint16_array_builder_append_values(GArrowUInt16ArrayBuilder *builder, + const guint16 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_uint16_array_builder_append_null(GArrowUInt16ArrayBuilder *builder, - GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_uint16_array_builder_append_null(GArrowUInt16ArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_uint16_array_builder_append_nulls(GArrowUInt16ArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_uint16_array_builder_append_nulls(GArrowUInt16ArrayBuilder *builder, + gint64 n, + GError **error); #endif + #define GARROW_TYPE_INT32_ARRAY_BUILDER (garrow_int32_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowInt32ArrayBuilder, garrow_int32_array_builder, GARROW, @@ -491,48 +404,37 @@ struct _GArrowInt32ArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowInt32ArrayBuilder * -garrow_int32_array_builder_new(void); +GArrowInt32ArrayBuilder *garrow_int32_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_int32_array_builder_append_value) -gboolean -garrow_int32_array_builder_append(GArrowInt32ArrayBuilder *builder, - gint32 value, - GError **error); +gboolean garrow_int32_array_builder_append(GArrowInt32ArrayBuilder *builder, + gint32 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_int32_array_builder_append_value(GArrowInt32ArrayBuilder *builder, - gint32 value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_int32_array_builder_append_values(GArrowInt32ArrayBuilder *builder, - const gint32 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_int32_array_builder_append_value(GArrowInt32ArrayBuilder *builder, + gint32 value, + GError **error); +gboolean garrow_int32_array_builder_append_values(GArrowInt32ArrayBuilder *builder, + const gint32 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_int32_array_builder_append_null(GArrowInt32ArrayBuilder *builder, GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_int32_array_builder_append_null(GArrowInt32ArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_int32_array_builder_append_nulls(GArrowInt32ArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_int32_array_builder_append_nulls(GArrowInt32ArrayBuilder *builder, + gint64 n, + GError **error); #endif -#define GARROW_TYPE_UINT32_ARRAY_BUILDER (garrow_uint32_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_UINT32_ARRAY_BUILDER \ + (garrow_uint32_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowUInt32ArrayBuilder, garrow_uint32_array_builder, GARROW, @@ -543,49 +445,36 @@ struct _GArrowUInt32ArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowUInt32ArrayBuilder * -garrow_uint32_array_builder_new(void); +GArrowUInt32ArrayBuilder *garrow_uint32_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_uint32_array_builder_append_value) -gboolean -garrow_uint32_array_builder_append(GArrowUInt32ArrayBuilder *builder, - guint32 value, - GError **error); +gboolean garrow_uint32_array_builder_append(GArrowUInt32ArrayBuilder *builder, + guint32 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_uint32_array_builder_append_value(GArrowUInt32ArrayBuilder *builder, - guint32 value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_uint32_array_builder_append_values(GArrowUInt32ArrayBuilder *builder, - const guint32 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_uint32_array_builder_append_value(GArrowUInt32ArrayBuilder *builder, + guint32 value, + GError **error); +gboolean garrow_uint32_array_builder_append_values(GArrowUInt32ArrayBuilder *builder, + const guint32 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_uint32_array_builder_append_null(GArrowUInt32ArrayBuilder *builder, - GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_uint32_array_builder_append_null(GArrowUInt32ArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_uint32_array_builder_append_nulls(GArrowUInt32ArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_uint32_array_builder_append_nulls(GArrowUInt32ArrayBuilder *builder, + gint64 n, + GError **error); #endif + #define GARROW_TYPE_INT64_ARRAY_BUILDER (garrow_int64_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowInt64ArrayBuilder, garrow_int64_array_builder, GARROW, @@ -596,48 +485,37 @@ struct _GArrowInt64ArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowInt64ArrayBuilder * -garrow_int64_array_builder_new(void); +GArrowInt64ArrayBuilder *garrow_int64_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_int64_array_builder_append_value) -gboolean -garrow_int64_array_builder_append(GArrowInt64ArrayBuilder *builder, - gint64 value, - GError **error); +gboolean garrow_int64_array_builder_append(GArrowInt64ArrayBuilder *builder, + gint64 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_int64_array_builder_append_value(GArrowInt64ArrayBuilder *builder, - gint64 value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_int64_array_builder_append_values(GArrowInt64ArrayBuilder *builder, - const gint64 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_int64_array_builder_append_value(GArrowInt64ArrayBuilder *builder, + gint64 value, + GError **error); +gboolean garrow_int64_array_builder_append_values(GArrowInt64ArrayBuilder *builder, + const gint64 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_int64_array_builder_append_null(GArrowInt64ArrayBuilder *builder, GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_int64_array_builder_append_null(GArrowInt64ArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_int64_array_builder_append_nulls(GArrowInt64ArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_int64_array_builder_append_nulls(GArrowInt64ArrayBuilder *builder, + gint64 n, + GError **error); #endif -#define GARROW_TYPE_UINT64_ARRAY_BUILDER (garrow_uint64_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_UINT64_ARRAY_BUILDER \ + (garrow_uint64_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowUInt64ArrayBuilder, garrow_uint64_array_builder, GARROW, @@ -648,49 +526,37 @@ struct _GArrowUInt64ArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowUInt64ArrayBuilder * -garrow_uint64_array_builder_new(void); +GArrowUInt64ArrayBuilder *garrow_uint64_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_uint64_array_builder_append_value) -gboolean -garrow_uint64_array_builder_append(GArrowUInt64ArrayBuilder *builder, - guint64 value, - GError **error); +gboolean garrow_uint64_array_builder_append(GArrowUInt64ArrayBuilder *builder, + guint64 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_uint64_array_builder_append_value(GArrowUInt64ArrayBuilder *builder, - guint64 value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_uint64_array_builder_append_values(GArrowUInt64ArrayBuilder *builder, - const guint64 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_uint64_array_builder_append_value(GArrowUInt64ArrayBuilder *builder, + guint64 value, + GError **error); +gboolean garrow_uint64_array_builder_append_values(GArrowUInt64ArrayBuilder *builder, + const guint64 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_uint64_array_builder_append_null(GArrowUInt64ArrayBuilder *builder, - GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_uint64_array_builder_append_null(GArrowUInt64ArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_uint64_array_builder_append_nulls(GArrowUInt64ArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_uint64_array_builder_append_nulls(GArrowUInt64ArrayBuilder *builder, + gint64 n, + GError **error); #endif -#define GARROW_TYPE_HALF_FLOAT_ARRAY_BUILDER (garrow_half_float_array_builder_get_type()) -GARROW_AVAILABLE_IN_11_0 + +#define GARROW_TYPE_HALF_FLOAT_ARRAY_BUILDER \ + (garrow_half_float_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowHalfFloatArrayBuilder, garrow_half_float_array_builder, GARROW, @@ -707,20 +573,21 @@ garrow_half_float_array_builder_new(void); GARROW_AVAILABLE_IN_11_0 gboolean -garrow_half_float_array_builder_append_value(GArrowHalfFloatArrayBuilder *builder, - guint16 value, - GError **error); +garrow_half_float_array_builder_append_value( + GArrowHalfFloatArrayBuilder *builder, + guint16 value, + GError **error); GARROW_AVAILABLE_IN_11_0 -gboolean -garrow_half_float_array_builder_append_values(GArrowHalfFloatArrayBuilder *builder, - const guint16 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_half_float_array_builder_append_values( + GArrowHalfFloatArrayBuilder *builder, + const guint16 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); + #define GARROW_TYPE_FLOAT_ARRAY_BUILDER (garrow_float_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowFloatArrayBuilder, garrow_float_array_builder, GARROW, @@ -731,48 +598,37 @@ struct _GArrowFloatArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowFloatArrayBuilder * -garrow_float_array_builder_new(void); +GArrowFloatArrayBuilder *garrow_float_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_float_array_builder_append_value) -gboolean -garrow_float_array_builder_append(GArrowFloatArrayBuilder *builder, - gfloat value, - GError **error); +gboolean garrow_float_array_builder_append(GArrowFloatArrayBuilder *builder, + gfloat value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_float_array_builder_append_value(GArrowFloatArrayBuilder *builder, - gfloat value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_float_array_builder_append_values(GArrowFloatArrayBuilder *builder, - const gfloat *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_float_array_builder_append_value(GArrowFloatArrayBuilder *builder, + gfloat value, + GError **error); +gboolean garrow_float_array_builder_append_values(GArrowFloatArrayBuilder *builder, + const gfloat *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_float_array_builder_append_null(GArrowFloatArrayBuilder *builder, GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_float_array_builder_append_null(GArrowFloatArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_float_array_builder_append_nulls(GArrowFloatArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_float_array_builder_append_nulls(GArrowFloatArrayBuilder *builder, + gint64 n, + GError **error); #endif -#define GARROW_TYPE_DOUBLE_ARRAY_BUILDER (garrow_double_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_DOUBLE_ARRAY_BUILDER \ + (garrow_double_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowDoubleArrayBuilder, garrow_double_array_builder, GARROW, @@ -783,49 +639,37 @@ struct _GArrowDoubleArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowDoubleArrayBuilder * -garrow_double_array_builder_new(void); +GArrowDoubleArrayBuilder *garrow_double_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_double_array_builder_append_value) -gboolean -garrow_double_array_builder_append(GArrowDoubleArrayBuilder *builder, - gdouble value, - GError **error); +gboolean garrow_double_array_builder_append(GArrowDoubleArrayBuilder *builder, + gdouble value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_double_array_builder_append_value(GArrowDoubleArrayBuilder *builder, - gdouble value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_double_array_builder_append_values(GArrowDoubleArrayBuilder *builder, - const gdouble *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_double_array_builder_append_value(GArrowDoubleArrayBuilder *builder, + gdouble value, + GError **error); +gboolean garrow_double_array_builder_append_values(GArrowDoubleArrayBuilder *builder, + const gdouble *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_double_array_builder_append_null(GArrowDoubleArrayBuilder *builder, - GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_double_array_builder_append_null(GArrowDoubleArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_double_array_builder_append_nulls(GArrowDoubleArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_double_array_builder_append_nulls(GArrowDoubleArrayBuilder *builder, + gint64 n, + GError **error); #endif -#define GARROW_TYPE_BINARY_ARRAY_BUILDER (garrow_binary_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_BINARY_ARRAY_BUILDER \ + (garrow_binary_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowBinaryArrayBuilder, garrow_binary_array_builder, GARROW, @@ -836,56 +680,45 @@ struct _GArrowBinaryArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowBinaryArrayBuilder * -garrow_binary_array_builder_new(void); +GArrowBinaryArrayBuilder *garrow_binary_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_binary_array_builder_append_value) -gboolean -garrow_binary_array_builder_append(GArrowBinaryArrayBuilder *builder, - const guint8 *value, - gint32 length, - GError **error); +gboolean garrow_binary_array_builder_append(GArrowBinaryArrayBuilder *builder, + const guint8 *value, + gint32 length, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_binary_array_builder_append_value(GArrowBinaryArrayBuilder *builder, - const guint8 *value, - gint32 length, - GError **error); +gboolean garrow_binary_array_builder_append_value(GArrowBinaryArrayBuilder *builder, + const guint8 *value, + gint32 length, + GError **error); GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_binary_array_builder_append_value_bytes(GArrowBinaryArrayBuilder *builder, - GBytes *value, - GError **error); +gboolean garrow_binary_array_builder_append_value_bytes(GArrowBinaryArrayBuilder *builder, + GBytes *value, + GError **error); GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_binary_array_builder_append_values(GArrowBinaryArrayBuilder *builder, - GBytes **values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_binary_array_builder_append_values(GArrowBinaryArrayBuilder *builder, + GBytes **values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_binary_array_builder_append_null(GArrowBinaryArrayBuilder *builder, - GError **error); - +gboolean garrow_binary_array_builder_append_null(GArrowBinaryArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_binary_array_builder_append_nulls(GArrowBinaryArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_binary_array_builder_append_nulls(GArrowBinaryArrayBuilder *builder, + gint64 n, + GError **error); #endif -#define GARROW_TYPE_LARGE_BINARY_ARRAY_BUILDER \ + +#define GARROW_TYPE_LARGE_BINARY_ARRAY_BUILDER \ (garrow_large_binary_array_builder_get_type()) -GARROW_AVAILABLE_IN_0_16 G_DECLARE_DERIVABLE_TYPE(GArrowLargeBinaryArrayBuilder, garrow_large_binary_array_builder, GARROW, @@ -897,42 +730,38 @@ struct _GArrowLargeBinaryArrayBuilderClass }; GARROW_AVAILABLE_IN_0_16 -GArrowLargeBinaryArrayBuilder * -garrow_large_binary_array_builder_new(void); +GArrowLargeBinaryArrayBuilder *garrow_large_binary_array_builder_new(void); GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_large_binary_array_builder_append_value(GArrowLargeBinaryArrayBuilder *builder, - const guint8 *value, - gint64 length, - GError **error); +gboolean garrow_large_binary_array_builder_append_value(GArrowLargeBinaryArrayBuilder *builder, + const guint8 *value, + gint64 length, + GError **error); GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_large_binary_array_builder_append_value_bytes( - GArrowLargeBinaryArrayBuilder *builder, GBytes *value, GError **error); +gboolean garrow_large_binary_array_builder_append_value_bytes(GArrowLargeBinaryArrayBuilder *builder, + GBytes *value, + GError **error); GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_large_binary_array_builder_append_values(GArrowLargeBinaryArrayBuilder *builder, - GBytes **values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_large_binary_array_builder_append_values(GArrowLargeBinaryArrayBuilder *builder, + GBytes **values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_large_binary_array_builder_append_null(GArrowLargeBinaryArrayBuilder *builder, - GError **error); +gboolean garrow_large_binary_array_builder_append_null(GArrowLargeBinaryArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_large_binary_array_builder_append_nulls(GArrowLargeBinaryArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_large_binary_array_builder_append_nulls(GArrowLargeBinaryArrayBuilder *builder, + gint64 n, + GError **error); #endif -#define GARROW_TYPE_STRING_ARRAY_BUILDER (garrow_string_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_STRING_ARRAY_BUILDER \ + (garrow_string_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowStringArrayBuilder, garrow_string_array_builder, GARROW, @@ -943,31 +772,25 @@ struct _GArrowStringArrayBuilderClass GArrowBinaryArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowStringArrayBuilder * -garrow_string_array_builder_new(void); +GArrowStringArrayBuilder *garrow_string_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_string_array_builder_append_value) -gboolean -garrow_string_array_builder_append(GArrowStringArrayBuilder *builder, - const gchar *value, - GError **error); +gboolean garrow_string_array_builder_append(GArrowStringArrayBuilder *builder, + const gchar *value, + GError **error); #endif #ifndef GARROW_DISABLE_DEPRECATED GARROW_DEPRECATED_IN_0_16_FOR(garrow_string_array_builder_append_string) GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_string_array_builder_append_value(GArrowStringArrayBuilder *builder, - const gchar *value, - GError **error); +gboolean garrow_string_array_builder_append_value(GArrowStringArrayBuilder *builder, + const gchar *value, + GError **error); #endif GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_string_array_builder_append_string(GArrowStringArrayBuilder *builder, - const gchar *value, - GError **error); +gboolean garrow_string_array_builder_append_string(GArrowStringArrayBuilder *builder, + const gchar *value, + GError **error); GARROW_AVAILABLE_IN_8_0 gboolean @@ -977,28 +800,25 @@ garrow_string_array_builder_append_string_len(GArrowStringArrayBuilder *builder, GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_16_FOR(garrow_string_array_builder_append_strings) -gboolean -garrow_string_array_builder_append_values(GArrowStringArrayBuilder *builder, - const gchar **values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_string_array_builder_append_values(GArrowStringArrayBuilder *builder, + const gchar **values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #endif GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_string_array_builder_append_strings(GArrowStringArrayBuilder *builder, - const gchar **values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_string_array_builder_append_strings(GArrowStringArrayBuilder *builder, + const gchar **values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); + -#define GARROW_TYPE_LARGE_STRING_ARRAY_BUILDER \ +#define GARROW_TYPE_LARGE_STRING_ARRAY_BUILDER \ (garrow_large_string_array_builder_get_type()) -GARROW_AVAILABLE_IN_0_16 G_DECLARE_DERIVABLE_TYPE(GArrowLargeStringArrayBuilder, garrow_large_string_array_builder, GARROW, @@ -1010,32 +830,28 @@ struct _GArrowLargeStringArrayBuilderClass }; GARROW_AVAILABLE_IN_0_16 -GArrowLargeStringArrayBuilder * -garrow_large_string_array_builder_new(void); +GArrowLargeStringArrayBuilder *garrow_large_string_array_builder_new(void); GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_large_string_array_builder_append_string(GArrowLargeStringArrayBuilder *builder, - const gchar *value, - GError **error); +gboolean garrow_large_string_array_builder_append_string(GArrowLargeStringArrayBuilder *builder, + const gchar *value, + GError **error); GARROW_AVAILABLE_IN_8_0 -gboolean -garrow_large_string_array_builder_append_string_len( +gboolean garrow_large_string_array_builder_append_string_len( GArrowLargeStringArrayBuilder *builder, const gchar *value, gint64 length, GError **error); GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_large_string_array_builder_append_strings(GArrowLargeStringArrayBuilder *builder, - const gchar **values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_large_string_array_builder_append_strings(GArrowLargeStringArrayBuilder *builder, + const gchar **values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); + -#define GARROW_TYPE_FIXED_SIZE_BINARY_ARRAY_BUILDER \ +#define GARROW_TYPE_FIXED_SIZE_BINARY_ARRAY_BUILDER \ (garrow_fixed_size_binary_array_builder_get_type()) -GARROW_AVAILABLE_IN_3_0 G_DECLARE_DERIVABLE_TYPE(GArrowFixedSizeBinaryArrayBuilder, garrow_fixed_size_binary_array_builder, GARROW, @@ -1048,7 +864,8 @@ struct _GArrowFixedSizeBinaryArrayBuilderClass GARROW_AVAILABLE_IN_3_0 GArrowFixedSizeBinaryArrayBuilder * -garrow_fixed_size_binary_array_builder_new(GArrowFixedSizeBinaryDataType *data_type); +garrow_fixed_size_binary_array_builder_new( + GArrowFixedSizeBinaryDataType *data_type); GARROW_AVAILABLE_IN_3_0 gboolean @@ -1060,7 +877,9 @@ garrow_fixed_size_binary_array_builder_append_value( GARROW_AVAILABLE_IN_3_0 gboolean garrow_fixed_size_binary_array_builder_append_value_bytes( - GArrowFixedSizeBinaryArrayBuilder *builder, GBytes *value, GError **error); + GArrowFixedSizeBinaryArrayBuilder *builder, + GBytes *value, + GError **error); GARROW_AVAILABLE_IN_3_0 gboolean garrow_fixed_size_binary_array_builder_append_values( @@ -1079,8 +898,8 @@ garrow_fixed_size_binary_array_builder_append_values_packed( gint64 is_valids_length, GError **error); -#define GARROW_TYPE_DATE32_ARRAY_BUILDER (garrow_date32_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL +#define GARROW_TYPE_DATE32_ARRAY_BUILDER \ + (garrow_date32_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowDate32ArrayBuilder, garrow_date32_array_builder, GARROW, @@ -1091,49 +910,37 @@ struct _GArrowDate32ArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowDate32ArrayBuilder * -garrow_date32_array_builder_new(void); +GArrowDate32ArrayBuilder *garrow_date32_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_date32_array_builder_append_value) -gboolean -garrow_date32_array_builder_append(GArrowDate32ArrayBuilder *builder, - gint32 value, - GError **error); +gboolean garrow_date32_array_builder_append(GArrowDate32ArrayBuilder *builder, + gint32 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_date32_array_builder_append_value(GArrowDate32ArrayBuilder *builder, - gint32 value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_date32_array_builder_append_values(GArrowDate32ArrayBuilder *builder, - const gint32 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_date32_array_builder_append_value(GArrowDate32ArrayBuilder *builder, + gint32 value, + GError **error); +gboolean garrow_date32_array_builder_append_values(GArrowDate32ArrayBuilder *builder, + const gint32 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_date32_array_builder_append_null(GArrowDate32ArrayBuilder *builder, - GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_date32_array_builder_append_null(GArrowDate32ArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_date32_array_builder_append_nulls(GArrowDate32ArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_date32_array_builder_append_nulls(GArrowDate32ArrayBuilder *builder, + gint64 n, + GError **error); #endif -#define GARROW_TYPE_DATE64_ARRAY_BUILDER (garrow_date64_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_DATE64_ARRAY_BUILDER \ + (garrow_date64_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowDate64ArrayBuilder, garrow_date64_array_builder, GARROW, @@ -1144,49 +951,37 @@ struct _GArrowDate64ArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowDate64ArrayBuilder * -garrow_date64_array_builder_new(void); +GArrowDate64ArrayBuilder *garrow_date64_array_builder_new(void); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_date64_array_builder_append_value) -gboolean -garrow_date64_array_builder_append(GArrowDate64ArrayBuilder *builder, - gint64 value, - GError **error); +gboolean garrow_date64_array_builder_append(GArrowDate64ArrayBuilder *builder, + gint64 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_date64_array_builder_append_value(GArrowDate64ArrayBuilder *builder, - gint64 value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_date64_array_builder_append_values(GArrowDate64ArrayBuilder *builder, - const gint64 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_date64_array_builder_append_value(GArrowDate64ArrayBuilder *builder, + gint64 value, + GError **error); +gboolean garrow_date64_array_builder_append_values(GArrowDate64ArrayBuilder *builder, + const gint64 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_date64_array_builder_append_null(GArrowDate64ArrayBuilder *builder, - GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_date64_array_builder_append_null(GArrowDate64ArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_date64_array_builder_append_nulls(GArrowDate64ArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_date64_array_builder_append_nulls(GArrowDate64ArrayBuilder *builder, + gint64 n, + GError **error); #endif -#define GARROW_TYPE_TIMESTAMP_ARRAY_BUILDER (garrow_timestamp_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_TIMESTAMP_ARRAY_BUILDER \ + (garrow_timestamp_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowTimestampArrayBuilder, garrow_timestamp_array_builder, GARROW, @@ -1197,49 +992,38 @@ struct _GArrowTimestampArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowTimestampArrayBuilder * garrow_timestamp_array_builder_new(GArrowTimestampDataType *data_type); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_timestamp_array_builder_append_value) -gboolean -garrow_timestamp_array_builder_append(GArrowTimestampArrayBuilder *builder, - gint64 value, - GError **error); +gboolean garrow_timestamp_array_builder_append(GArrowTimestampArrayBuilder *builder, + gint64 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_timestamp_array_builder_append_value(GArrowTimestampArrayBuilder *builder, - gint64 value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_timestamp_array_builder_append_values(GArrowTimestampArrayBuilder *builder, - const gint64 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_timestamp_array_builder_append_value(GArrowTimestampArrayBuilder *builder, + gint64 value, + GError **error); +gboolean garrow_timestamp_array_builder_append_values(GArrowTimestampArrayBuilder *builder, + const gint64 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_timestamp_array_builder_append_null(GArrowTimestampArrayBuilder *builder, - GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_timestamp_array_builder_append_null(GArrowTimestampArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_timestamp_array_builder_append_nulls(GArrowTimestampArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_timestamp_array_builder_append_nulls(GArrowTimestampArrayBuilder *builder, + gint64 n, + GError **error); #endif -#define GARROW_TYPE_TIME32_ARRAY_BUILDER (garrow_time32_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_TIME32_ARRAY_BUILDER \ + (garrow_time32_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowTime32ArrayBuilder, garrow_time32_array_builder, GARROW, @@ -1250,49 +1034,37 @@ struct _GArrowTime32ArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowTime32ArrayBuilder * -garrow_time32_array_builder_new(GArrowTime32DataType *data_type); +GArrowTime32ArrayBuilder *garrow_time32_array_builder_new(GArrowTime32DataType *data_type); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_time32_array_builder_append_value) -gboolean -garrow_time32_array_builder_append(GArrowTime32ArrayBuilder *builder, - gint32 value, - GError **error); +gboolean garrow_time32_array_builder_append(GArrowTime32ArrayBuilder *builder, + gint32 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_time32_array_builder_append_value(GArrowTime32ArrayBuilder *builder, - gint32 value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_time32_array_builder_append_values(GArrowTime32ArrayBuilder *builder, - const gint32 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_time32_array_builder_append_value(GArrowTime32ArrayBuilder *builder, + gint32 value, + GError **error); +gboolean garrow_time32_array_builder_append_values(GArrowTime32ArrayBuilder *builder, + const gint32 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_time32_array_builder_append_null(GArrowTime32ArrayBuilder *builder, - GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_time32_array_builder_append_null(GArrowTime32ArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_time32_array_builder_append_nulls(GArrowTime32ArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_time32_array_builder_append_nulls(GArrowTime32ArrayBuilder *builder, + gint64 n, + GError **error); #endif -#define GARROW_TYPE_TIME64_ARRAY_BUILDER (garrow_time64_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_TIME64_ARRAY_BUILDER \ + (garrow_time64_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowTime64ArrayBuilder, garrow_time64_array_builder, GARROW, @@ -1303,50 +1075,37 @@ struct _GArrowTime64ArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowTime64ArrayBuilder * -garrow_time64_array_builder_new(GArrowTime64DataType *data_type); +GArrowTime64ArrayBuilder *garrow_time64_array_builder_new(GArrowTime64DataType *data_type); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_time64_array_builder_append_value) -gboolean -garrow_time64_array_builder_append(GArrowTime64ArrayBuilder *builder, - gint64 value, - GError **error); +gboolean garrow_time64_array_builder_append(GArrowTime64ArrayBuilder *builder, + gint64 value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_time64_array_builder_append_value(GArrowTime64ArrayBuilder *builder, - gint64 value, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_time64_array_builder_append_values(GArrowTime64ArrayBuilder *builder, - const gint64 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +gboolean garrow_time64_array_builder_append_value(GArrowTime64ArrayBuilder *builder, + gint64 value, + GError **error); +gboolean garrow_time64_array_builder_append_values(GArrowTime64ArrayBuilder *builder, + const gint64 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_time64_array_builder_append_null(GArrowTime64ArrayBuilder *builder, - GError **error); - -GARROW_AVAILABLE_IN_ALL +gboolean garrow_time64_array_builder_append_null(GArrowTime64ArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) -gboolean -garrow_time64_array_builder_append_nulls(GArrowTime64ArrayBuilder *builder, - gint64 n, - GError **error); +gboolean garrow_time64_array_builder_append_nulls(GArrowTime64ArrayBuilder *builder, + gint64 n, + GError **error); #endif -#define GARROW_TYPE_MONTH_INTERVAL_ARRAY_BUILDER \ + +#define GARROW_TYPE_MONTH_INTERVAL_ARRAY_BUILDER \ (garrow_month_interval_array_builder_get_type()) -GARROW_AVAILABLE_IN_8_0 G_DECLARE_DERIVABLE_TYPE(GArrowMonthIntervalArrayBuilder, garrow_month_interval_array_builder, GARROW, @@ -1363,9 +1122,10 @@ garrow_month_interval_array_builder_new(void); GARROW_AVAILABLE_IN_8_0 gboolean -garrow_month_interval_array_builder_append_value(GArrowMonthIntervalArrayBuilder *builder, - gint32 value, - GError **error); +garrow_month_interval_array_builder_append_value( + GArrowMonthIntervalArrayBuilder *builder, + gint32 value, + GError **error); GARROW_AVAILABLE_IN_8_0 gboolean garrow_month_interval_array_builder_append_values( @@ -1376,9 +1136,9 @@ garrow_month_interval_array_builder_append_values( gint64 is_valids_length, GError **error); -#define GARROW_TYPE_DAY_TIME_INTERVAL_ARRAY_BUILDER \ + +#define GARROW_TYPE_DAY_TIME_INTERVAL_ARRAY_BUILDER \ (garrow_day_time_interval_array_builder_get_type()) -GARROW_AVAILABLE_IN_8_0 G_DECLARE_DERIVABLE_TYPE(GArrowDayTimeIntervalArrayBuilder, garrow_day_time_interval_array_builder, GARROW, @@ -1409,9 +1169,9 @@ garrow_day_time_interval_array_builder_append_values( gint64 is_valids_length, GError **error); -#define GARROW_TYPE_MONTH_DAY_NANO_INTERVAL_ARRAY_BUILDER \ + +#define GARROW_TYPE_MONTH_DAY_NANO_INTERVAL_ARRAY_BUILDER \ (garrow_month_day_nano_interval_array_builder_get_type()) -GARROW_AVAILABLE_IN_8_0 G_DECLARE_DERIVABLE_TYPE(GArrowMonthDayNanoIntervalArrayBuilder, garrow_month_day_nano_interval_array_builder, GARROW, @@ -1442,9 +1202,8 @@ garrow_month_day_nano_interval_array_builder_append_values( gint64 is_valids_length, GError **error); -#define GARROW_TYPE_BINARY_DICTIONARY_ARRAY_BUILDER \ - (garrow_binary_dictionary_array_builder_get_type()) -GARROW_AVAILABLE_IN_2_0 + +#define GARROW_TYPE_BINARY_DICTIONARY_ARRAY_BUILDER (garrow_binary_dictionary_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowBinaryDictionaryArrayBuilder, garrow_binary_dictionary_array_builder, GARROW, @@ -1462,56 +1221,53 @@ garrow_binary_dictionary_array_builder_new(void); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) GARROW_AVAILABLE_IN_2_0 gboolean -garrow_binary_dictionary_array_builder_append_null( - GArrowBinaryDictionaryArrayBuilder *builder, GError **error); +garrow_binary_dictionary_array_builder_append_null(GArrowBinaryDictionaryArrayBuilder *builder, + GError **error); #endif GARROW_AVAILABLE_IN_2_0 gboolean -garrow_binary_dictionary_array_builder_append_value( - GArrowBinaryDictionaryArrayBuilder *builder, - const guint8 *value, - gint32 length, - GError **error); +garrow_binary_dictionary_array_builder_append_value(GArrowBinaryDictionaryArrayBuilder *builder, + const guint8 *value, + gint32 length, + GError **error); GARROW_AVAILABLE_IN_2_0 gboolean -garrow_binary_dictionary_array_builder_append_value_bytes( - GArrowBinaryDictionaryArrayBuilder *builder, GBytes *value, GError **error); +garrow_binary_dictionary_array_builder_append_value_bytes(GArrowBinaryDictionaryArrayBuilder *builder, + GBytes *value, + GError **error); GARROW_AVAILABLE_IN_2_0 gboolean -garrow_binary_dictionary_array_builder_append_array( - GArrowBinaryDictionaryArrayBuilder *builder, GArrowBinaryArray *array, GError **error); +garrow_binary_dictionary_array_builder_append_array(GArrowBinaryDictionaryArrayBuilder *builder, + GArrowBinaryArray *array, + GError **error); GARROW_AVAILABLE_IN_2_0 gboolean -garrow_binary_dictionary_array_builder_append_indices( - GArrowBinaryDictionaryArrayBuilder *builder, - const gint64 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +garrow_binary_dictionary_array_builder_append_indices(GArrowBinaryDictionaryArrayBuilder *builder, + const gint64 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); GARROW_AVAILABLE_IN_2_0 gint64 -garrow_binary_dictionary_array_builder_get_dictionary_length( - GArrowBinaryDictionaryArrayBuilder *builder); +garrow_binary_dictionary_array_builder_get_dictionary_length(GArrowBinaryDictionaryArrayBuilder *builder); GARROW_AVAILABLE_IN_2_0 gboolean -garrow_binary_dictionary_array_builder_finish_delta( - GArrowBinaryDictionaryArrayBuilder *builder, - GArrowArray **out_indices, - GArrowArray **out_delta, - GError **error); +garrow_binary_dictionary_array_builder_finish_delta(GArrowBinaryDictionaryArrayBuilder* builder, + GArrowArray **out_indices, + GArrowArray **out_delta, + GError **error); GARROW_AVAILABLE_IN_2_0 gboolean -garrow_binary_dictionary_array_builder_insert_memo_values( - GArrowBinaryDictionaryArrayBuilder *builder, GArrowBinaryArray *values, GError **error); +garrow_binary_dictionary_array_builder_insert_memo_values(GArrowBinaryDictionaryArrayBuilder *builder, + GArrowBinaryArray *values, + GError **error); GARROW_AVAILABLE_IN_2_0 void -garrow_binary_dictionary_array_builder_reset_full( - GArrowBinaryDictionaryArrayBuilder *builder); +garrow_binary_dictionary_array_builder_reset_full(GArrowBinaryDictionaryArrayBuilder *builder); -#define GARROW_TYPE_STRING_DICTIONARY_ARRAY_BUILDER \ - (garrow_string_dictionary_array_builder_get_type()) -GARROW_AVAILABLE_IN_2_0 + +#define GARROW_TYPE_STRING_DICTIONARY_ARRAY_BUILDER (garrow_string_dictionary_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowStringDictionaryArrayBuilder, garrow_string_dictionary_array_builder, GARROW, @@ -1529,48 +1285,47 @@ garrow_string_dictionary_array_builder_new(void); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) GARROW_AVAILABLE_IN_2_0 gboolean -garrow_string_dictionary_array_builder_append_null( - GArrowStringDictionaryArrayBuilder *builder, GError **error); +garrow_string_dictionary_array_builder_append_null(GArrowStringDictionaryArrayBuilder *builder, + GError **error); #endif GARROW_AVAILABLE_IN_2_0 gboolean -garrow_string_dictionary_array_builder_append_string( - GArrowStringDictionaryArrayBuilder *builder, const gchar *value, GError **error); +garrow_string_dictionary_array_builder_append_string(GArrowStringDictionaryArrayBuilder *builder, + const gchar *value, + GError **error); GARROW_AVAILABLE_IN_2_0 gboolean -garrow_string_dictionary_array_builder_append_array( - GArrowStringDictionaryArrayBuilder *builder, GArrowStringArray *array, GError **error); +garrow_string_dictionary_array_builder_append_array(GArrowStringDictionaryArrayBuilder *builder, + GArrowStringArray *array, + GError **error); GARROW_AVAILABLE_IN_2_0 gboolean -garrow_string_dictionary_array_builder_append_indices( - GArrowStringDictionaryArrayBuilder *builder, - const gint64 *values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +garrow_string_dictionary_array_builder_append_indices(GArrowStringDictionaryArrayBuilder *builder, + const gint64 *values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); GARROW_AVAILABLE_IN_2_0 gint64 -garrow_string_dictionary_array_builder_get_dictionary_length( - GArrowStringDictionaryArrayBuilder *builder); +garrow_string_dictionary_array_builder_get_dictionary_length(GArrowStringDictionaryArrayBuilder *builder); GARROW_AVAILABLE_IN_2_0 gboolean -garrow_string_dictionary_array_builder_finish_delta( - GArrowStringDictionaryArrayBuilder *builder, - GArrowArray **out_indices, - GArrowArray **out_delta, - GError **error); +garrow_string_dictionary_array_builder_finish_delta(GArrowStringDictionaryArrayBuilder* builder, + GArrowArray **out_indices, + GArrowArray **out_delta, + GError **error); GARROW_AVAILABLE_IN_2_0 gboolean -garrow_string_dictionary_array_builder_insert_memo_values( - GArrowStringDictionaryArrayBuilder *builder, GArrowStringArray *values, GError **error); +garrow_string_dictionary_array_builder_insert_memo_values(GArrowStringDictionaryArrayBuilder *builder, + GArrowStringArray *values, + GError **error); GARROW_AVAILABLE_IN_2_0 void -garrow_string_dictionary_array_builder_reset_full( - GArrowStringDictionaryArrayBuilder *builder); +garrow_string_dictionary_array_builder_reset_full(GArrowStringDictionaryArrayBuilder *builder); + #define GARROW_TYPE_LIST_ARRAY_BUILDER (garrow_list_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowListArrayBuilder, garrow_list_array_builder, GARROW, @@ -1581,32 +1336,27 @@ struct _GArrowListArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowListArrayBuilder * -garrow_list_array_builder_new(GArrowListDataType *data_type, GError **error); +GArrowListArrayBuilder *garrow_list_array_builder_new(GArrowListDataType *data_type, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_list_array_builder_append_value) -gboolean -garrow_list_array_builder_append(GArrowListArrayBuilder *builder, GError **error); +gboolean garrow_list_array_builder_append(GArrowListArrayBuilder *builder, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_list_array_builder_append_value(GArrowListArrayBuilder *builder, GError **error); +gboolean garrow_list_array_builder_append_value(GArrowListArrayBuilder *builder, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_list_array_builder_append_null(GArrowListArrayBuilder *builder, GError **error); +gboolean garrow_list_array_builder_append_null(GArrowListArrayBuilder *builder, + GError **error); #endif -GARROW_AVAILABLE_IN_ALL -GArrowArrayBuilder * -garrow_list_array_builder_get_value_builder(GArrowListArrayBuilder *builder); +GArrowArrayBuilder *garrow_list_array_builder_get_value_builder(GArrowListArrayBuilder *builder); + #define GARROW_TYPE_LARGE_LIST_ARRAY_BUILDER (garrow_large_list_array_builder_get_type()) -GARROW_AVAILABLE_IN_0_16 G_DECLARE_DERIVABLE_TYPE(GArrowLargeListArrayBuilder, garrow_large_list_array_builder, GARROW, @@ -1618,25 +1368,23 @@ struct _GArrowLargeListArrayBuilderClass }; GARROW_AVAILABLE_IN_0_16 -GArrowLargeListArrayBuilder * -garrow_large_list_array_builder_new(GArrowLargeListDataType *data_type, GError **error); +GArrowLargeListArrayBuilder *garrow_large_list_array_builder_new(GArrowLargeListDataType *data_type, + GError **error); GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_large_list_array_builder_append_value(GArrowLargeListArrayBuilder *builder, - GError **error); +gboolean garrow_large_list_array_builder_append_value(GArrowLargeListArrayBuilder *builder, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_large_list_array_builder_append_null(GArrowLargeListArrayBuilder *builder, - GError **error); +gboolean garrow_large_list_array_builder_append_null(GArrowLargeListArrayBuilder *builder, + GError **error); #endif GARROW_AVAILABLE_IN_0_16 -GArrowArrayBuilder * -garrow_large_list_array_builder_get_value_builder(GArrowLargeListArrayBuilder *builder); +GArrowArrayBuilder *garrow_large_list_array_builder_get_value_builder(GArrowLargeListArrayBuilder *builder); -#define GARROW_TYPE_STRUCT_ARRAY_BUILDER (garrow_struct_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_STRUCT_ARRAY_BUILDER \ + (garrow_struct_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowStructArrayBuilder, garrow_struct_array_builder, GARROW, @@ -1647,42 +1395,36 @@ struct _GArrowStructArrayBuilderClass GArrowArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowStructArrayBuilder * -garrow_struct_array_builder_new(GArrowStructDataType *data_type, GError **error); +GArrowStructArrayBuilder *garrow_struct_array_builder_new(GArrowStructDataType *data_type, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_struct_array_builder_append_value) -gboolean -garrow_struct_array_builder_append(GArrowStructArrayBuilder *builder, GError **error); +gboolean garrow_struct_array_builder_append(GArrowStructArrayBuilder *builder, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_struct_array_builder_append_value(GArrowStructArrayBuilder *builder, - GError **error); +gboolean garrow_struct_array_builder_append_value(GArrowStructArrayBuilder *builder, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) -gboolean -garrow_struct_array_builder_append_null(GArrowStructArrayBuilder *builder, - GError **error); +gboolean garrow_struct_array_builder_append_null(GArrowStructArrayBuilder *builder, + GError **error); #endif #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_12_0_FOR(garrow_array_builder_get_child) GArrowArrayBuilder * -garrow_struct_array_builder_get_field_builder(GArrowStructArrayBuilder *builder, gint i); - -GARROW_AVAILABLE_IN_ALL +garrow_struct_array_builder_get_field_builder(GArrowStructArrayBuilder *builder, + gint i); GARROW_DEPRECATED_IN_12_0_FOR(garrow_array_builder_get_children) GList * garrow_struct_array_builder_get_field_builders(GArrowStructArrayBuilder *builder); #endif -#define GARROW_TYPE_MAP_ARRAY_BUILDER (garrow_map_array_builder_get_type()) -GARROW_AVAILABLE_IN_0_17 + +#define GARROW_TYPE_MAP_ARRAY_BUILDER \ + (garrow_map_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowMapArrayBuilder, garrow_map_array_builder, GARROW, @@ -1694,11 +1436,12 @@ struct _GArrowMapArrayBuilderClass }; GARROW_AVAILABLE_IN_0_17 -GArrowMapArrayBuilder * -garrow_map_array_builder_new(GArrowMapDataType *data_type, GError **error); +GArrowMapArrayBuilder *garrow_map_array_builder_new(GArrowMapDataType *data_type, + GError **error); GARROW_AVAILABLE_IN_0_17 gboolean -garrow_map_array_builder_append_value(GArrowMapArrayBuilder *builder, GError **error); +garrow_map_array_builder_append_value(GArrowMapArrayBuilder *builder, + GError **error); GARROW_AVAILABLE_IN_0_17 gboolean garrow_map_array_builder_append_values(GArrowMapArrayBuilder *builder, @@ -1711,7 +1454,8 @@ garrow_map_array_builder_append_values(GArrowMapArrayBuilder *builder, GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) GARROW_AVAILABLE_IN_0_17 gboolean -garrow_map_array_builder_append_null(GArrowMapArrayBuilder *builder, GError **error); +garrow_map_array_builder_append_null(GArrowMapArrayBuilder *builder, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_nulls) GARROW_AVAILABLE_IN_0_17 gboolean @@ -1729,8 +1473,8 @@ GARROW_AVAILABLE_IN_0_17 GArrowArrayBuilder * garrow_map_array_builder_get_value_builder(GArrowMapArrayBuilder *builder); + #define GARROW_TYPE_DECIMAL128_ARRAY_BUILDER (garrow_decimal128_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowDecimal128ArrayBuilder, garrow_decimal128_array_builder, GARROW, @@ -1741,41 +1485,36 @@ struct _GArrowDecimal128ArrayBuilderClass GArrowFixedSizeBinaryArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowDecimal128ArrayBuilder * -garrow_decimal128_array_builder_new(GArrowDecimal128DataType *data_type); +GArrowDecimal128ArrayBuilder *garrow_decimal128_array_builder_new(GArrowDecimal128DataType *data_type); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_decimal128_array_builder_append_value) -gboolean -garrow_decimal128_array_builder_append(GArrowDecimal128ArrayBuilder *builder, - GArrowDecimal128 *value, - GError **error); +gboolean garrow_decimal128_array_builder_append(GArrowDecimal128ArrayBuilder *builder, + GArrowDecimal128 *value, + GError **error); #endif GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_decimal128_array_builder_append_value(GArrowDecimal128ArrayBuilder *builder, - GArrowDecimal128 *value, - GError **error); +gboolean garrow_decimal128_array_builder_append_value(GArrowDecimal128ArrayBuilder *builder, + GArrowDecimal128 *value, + GError **error); GARROW_AVAILABLE_IN_3_0 gboolean -garrow_decimal128_array_builder_append_values(GArrowDecimal128ArrayBuilder *builder, - GArrowDecimal128 **values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +garrow_decimal128_array_builder_append_values( + GArrowDecimal128ArrayBuilder *builder, + GArrowDecimal128 **values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_builder_append_null) GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_decimal128_array_builder_append_null(GArrowDecimal128ArrayBuilder *builder, - GError **error); +gboolean garrow_decimal128_array_builder_append_null(GArrowDecimal128ArrayBuilder *builder, + GError **error); #endif + #define GARROW_TYPE_DECIMAL256_ARRAY_BUILDER (garrow_decimal256_array_builder_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowDecimal256ArrayBuilder, garrow_decimal256_array_builder, GARROW, @@ -1786,26 +1525,25 @@ struct _GArrowDecimal256ArrayBuilderClass GArrowFixedSizeBinaryArrayBuilderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowDecimal256ArrayBuilder * -garrow_decimal256_array_builder_new(GArrowDecimal256DataType *data_type); +GArrowDecimal256ArrayBuilder *garrow_decimal256_array_builder_new(GArrowDecimal256DataType *data_type); GARROW_AVAILABLE_IN_3_0 -gboolean -garrow_decimal256_array_builder_append_value(GArrowDecimal256ArrayBuilder *builder, - GArrowDecimal256 *value, - GError **error); +gboolean garrow_decimal256_array_builder_append_value(GArrowDecimal256ArrayBuilder *builder, + GArrowDecimal256 *value, + GError **error); GARROW_AVAILABLE_IN_3_0 gboolean -garrow_decimal256_array_builder_append_values(GArrowDecimal256ArrayBuilder *builder, - GArrowDecimal256 **values, - gint64 values_length, - const gboolean *is_valids, - gint64 is_valids_length, - GError **error); +garrow_decimal256_array_builder_append_values( + GArrowDecimal256ArrayBuilder *builder, + GArrowDecimal256 **values, + gint64 values_length, + const gboolean *is_valids, + gint64 is_valids_length, + GError **error); -#define GARROW_TYPE_UNION_ARRAY_BUILDER (garrow_union_array_builder_get_type()) -GARROW_AVAILABLE_IN_12_0 + +#define GARROW_TYPE_UNION_ARRAY_BUILDER \ + (garrow_union_array_builder_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowUnionArrayBuilder, garrow_union_array_builder, GARROW, @@ -1828,9 +1566,9 @@ garrow_union_array_builder_append_value(GArrowUnionArrayBuilder *builder, gint8 value, GError **error); -#define GARROW_TYPE_DENSE_UNION_ARRAY_BUILDER \ + +#define GARROW_TYPE_DENSE_UNION_ARRAY_BUILDER \ (garrow_dense_union_array_builder_get_type()) -GARROW_AVAILABLE_IN_12_0 G_DECLARE_DERIVABLE_TYPE(GArrowDenseUnionArrayBuilder, garrow_dense_union_array_builder, GARROW, @@ -1843,11 +1581,12 @@ struct _GArrowDenseUnionArrayBuilderClass GARROW_AVAILABLE_IN_12_0 GArrowDenseUnionArrayBuilder * -garrow_dense_union_array_builder_new(GArrowDenseUnionDataType *data_type, GError **error); +garrow_dense_union_array_builder_new(GArrowDenseUnionDataType *data_type, + GError **error); -#define GARROW_TYPE_SPARSE_UNION_ARRAY_BUILDER \ + +#define GARROW_TYPE_SPARSE_UNION_ARRAY_BUILDER \ (garrow_sparse_union_array_builder_get_type()) -GARROW_AVAILABLE_IN_12_0 G_DECLARE_DERIVABLE_TYPE(GArrowSparseUnionArrayBuilder, garrow_sparse_union_array_builder, GARROW, @@ -1863,4 +1602,5 @@ GArrowSparseUnionArrayBuilder * garrow_sparse_union_array_builder_new(GArrowSparseUnionDataType *data_type, GError **error); + G_END_DECLS diff --git a/c_glib/arrow-glib/array-builder.hpp b/c_glib/arrow-glib/array-builder.hpp index 561099f1479..89b91ac5798 100644 --- a/c_glib/arrow-glib/array-builder.hpp +++ b/c_glib/arrow-glib/array-builder.hpp @@ -24,9 +24,9 @@ GArrowArrayBuilder * garrow_array_builder_new_raw(std::shared_ptr *arrow_builder, - GType type = G_TYPE_INVALID); + GType type=G_TYPE_INVALID); GArrowArrayBuilder * garrow_array_builder_new_raw(arrow::ArrayBuilder *arrow_builder, - GType type = G_TYPE_INVALID); + GType type=G_TYPE_INVALID); std::shared_ptr garrow_array_builder_get_raw(GArrowArrayBuilder *builder); diff --git a/c_glib/arrow-glib/arrow-glib.h b/c_glib/arrow-glib/arrow-glib.h index 7ba20882610..a1ea90f7d6b 100644 --- a/c_glib/arrow-glib/arrow-glib.h +++ b/c_glib/arrow-glib/arrow-glib.h @@ -19,8 +19,7 @@ #pragma once -#include - +#include #include #include diff --git a/c_glib/arrow-glib/basic-array-definition.h b/c_glib/arrow-glib/basic-array-definition.h index 2fa67c09c1c..d504422b666 100644 --- a/c_glib/arrow-glib/basic-array-definition.h +++ b/c_glib/arrow-glib/basic-array-definition.h @@ -19,24 +19,27 @@ #pragma once -#include - -#include +#include G_BEGIN_DECLS #define GARROW_TYPE_ARRAY (garrow_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowArray, garrow_array, GARROW, ARRAY, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowArray, + garrow_array, + GARROW, + ARRAY, + GObject) struct _GArrowArrayClass { GObjectClass parent_class; }; #define GARROW_TYPE_EXTENSION_ARRAY (garrow_extension_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowExtensionArray, garrow_extension_array, GARROW, EXTENSION_ARRAY, GArrowArray) +G_DECLARE_DERIVABLE_TYPE(GArrowExtensionArray, + garrow_extension_array, + GARROW, + EXTENSION_ARRAY, + GArrowArray) struct _GArrowExtensionArrayClass { GArrowArrayClass parent_class; diff --git a/c_glib/arrow-glib/basic-array.cpp b/c_glib/arrow-glib/basic-array.cpp index f102a252467..c0860662c03 100644 --- a/c_glib/arrow-glib/basic-array.cpp +++ b/c_glib/arrow-glib/basic-array.cpp @@ -157,16 +157,16 @@ G_BEGIN_DECLS * you need to use #GArrowTime64ArrayBuilder to create a new array. * * #GArrowMonthIntervalArray is a class for the month intarval array. - * It can store zero or more date data. If you don't have Arrow format - * data, you need to use #GArrowMonthIntervalArrayBuilder to create a + * It can store zero or more date data. If you don't have Arrow format + * data, you need to use #GArrowMonthIntervalArrayBuilder to create a * new array. * * #GArrowDayTimeIntervalArray is a class for the day time intarval array. - * It can store zero or more date data. If you don't have Arrow format - * data, you need to use #GArrowDayTimeIntervalArrayBuilder to create a + * It can store zero or more date data. If you don't have Arrow format + * data, you need to use #GArrowDayTimeIntervalArrayBuilder to create a * new array. * - * #GArrowMonthDayNanoIntervalArray is a class for the month day nano + * #GArrowMonthDayNanoIntervalArray is a class for the month day nano * intarval array. It can store zero or more date data. If you don't * have Arrow format data, you need to use #GArrowMonthDayNanoIntervalArray * to create a new array. @@ -185,8 +185,7 @@ G_BEGIN_DECLS * extension types. */ -typedef struct GArrowEqualOptionsPrivate_ -{ +typedef struct GArrowEqualOptionsPrivate_ { gboolean approx; arrow::EqualOptions options; } GArrowEqualOptionsPrivate; @@ -197,11 +196,14 @@ enum { PROP_ABSOLUTE_TOLERANCE, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowEqualOptions, garrow_equal_options, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowEqualOptions, + garrow_equal_options, + G_TYPE_OBJECT) -#define GARROW_EQUAL_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_equal_options_get_instance_private(GARROW_EQUAL_OPTIONS(object))) +#define GARROW_EQUAL_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_equal_options_get_instance_private( \ + GARROW_EQUAL_OPTIONS(object))) static void garrow_equal_options_finalize(GObject *object) @@ -264,7 +266,7 @@ garrow_equal_options_init(GArrowEqualOptions *object) { auto priv = GARROW_EQUAL_OPTIONS_GET_PRIVATE(object); priv->approx = FALSE; - new (&priv->options) arrow::EqualOptions; + new(&priv->options) arrow::EqualOptions; priv->options = arrow::EqualOptions::Defaults(); } @@ -272,7 +274,7 @@ static void garrow_equal_options_class_init(GArrowEqualOptionsClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_equal_options_finalize; + gobject_class->finalize = garrow_equal_options_finalize; gobject_class->set_property = garrow_equal_options_set_property; gobject_class->get_property = garrow_equal_options_get_property; @@ -354,8 +356,8 @@ garrow_equal_options_is_approx(GArrowEqualOptions *options) return priv->approx; } -typedef struct GArrowArrayPrivate_ -{ + +typedef struct GArrowArrayPrivate_ { std::shared_ptr array; GArrowDataType *value_data_type; GArrowBuffer *null_bitmap; @@ -377,15 +379,20 @@ enum { PROP_PARENT, }; -G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowArray, garrow_array, G_TYPE_OBJECT) +G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowArray, + garrow_array, + G_TYPE_OBJECT) -#define GARROW_ARRAY_GET_PRIVATE(obj) \ - static_cast(garrow_array_get_instance_private(GARROW_ARRAY(obj))) +#define GARROW_ARRAY_GET_PRIVATE(obj) \ + static_cast( \ + garrow_array_get_instance_private( \ + GARROW_ARRAY(obj))) G_END_DECLS template const typename T::c_type * -garrow_array_get_values_raw(std::shared_ptr arrow_array, gint64 *length) +garrow_array_get_values_raw(std::shared_ptr arrow_array, + gint64 *length) { auto arrow_specific_array = std::static_pointer_cast::ArrayType>(arrow_array); @@ -505,7 +512,7 @@ static void garrow_array_init(GArrowArray *object) { auto priv = GARROW_ARRAY_GET_PRIVATE(object); - new (&priv->array) std::shared_ptr; + new(&priv->array) std::shared_ptr; } static void @@ -513,57 +520,57 @@ garrow_array_class_init(GArrowArrayClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_array_dispose; - gobject_class->finalize = garrow_array_finalize; + gobject_class->dispose = garrow_array_dispose; + gobject_class->finalize = garrow_array_finalize; gobject_class->set_property = garrow_array_set_property; gobject_class->get_property = garrow_array_get_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "array", - "Array", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("array", + "Array", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_ARRAY, spec); - spec = g_param_spec_object( - "value-data-type", - "Value data type", - "The data type of each value", - GARROW_TYPE_DATA_TYPE, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("value-data-type", + "Value data type", + "The data type of each value", + GARROW_TYPE_DATA_TYPE, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE_DATA_TYPE, spec); - spec = g_param_spec_object( - "null-bitmap", - "NULL bitmap", - "The NULL bitmap", - GARROW_TYPE_BUFFER, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("null-bitmap", + "NULL bitmap", + "The NULL bitmap", + GARROW_TYPE_BUFFER, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_NULL_BITMAP, spec); - spec = g_param_spec_object( - "buffer1", - "Buffer1", - "The first buffer", - GARROW_TYPE_BUFFER, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("buffer1", + "Buffer1", + "The first buffer", + GARROW_TYPE_BUFFER, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_BUFFER1, spec); - spec = g_param_spec_object( - "buffer2", - "Buffer2", - "The second buffer", - GARROW_TYPE_BUFFER, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("buffer2", + "Buffer2", + "The second buffer", + GARROW_TYPE_BUFFER, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_BUFFER2, spec); - spec = g_param_spec_object( - "parent", - "Parent", - "The parent array", - GARROW_TYPE_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("parent", + "Parent", + "The parent array", + GARROW_TYPE_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_PARENT, spec); } @@ -582,11 +589,14 @@ garrow_array_class_init(GArrowArrayClass *klass) * Since: 6.0.0 */ GArrowArray * -garrow_array_import(gpointer c_abi_array, GArrowDataType *data_type, GError **error) +garrow_array_import(gpointer c_abi_array, + GArrowDataType *data_type, + GError **error) { auto arrow_data_type = garrow_data_type_get_raw(data_type); auto arrow_array_result = - arrow::ImportArray(static_cast(c_abi_array), arrow_data_type); + arrow::ImportArray(static_cast(c_abi_array), + arrow_data_type); if (garrow::check(error, arrow_array_result, "[array][import]")) { return garrow_array_new_raw(&(*arrow_array_result)); } else { @@ -625,7 +635,8 @@ garrow_array_export(GArrowArray *array, static_cast(*c_abi_array), static_cast(*c_abi_schema)); } else { - status = arrow::ExportArray(*arrow_array, static_cast(*c_abi_array)); + status = arrow::ExportArray(*arrow_array, + static_cast(*c_abi_array)); } if (garrow::check(error, status, "[array][export]")) { return true; @@ -890,15 +901,15 @@ garrow_array_get_value_type(GArrowArray *array) * values with the base #GArrowArray. */ GArrowArray * -garrow_array_slice(GArrowArray *array, gint64 offset, gint64 length) +garrow_array_slice(GArrowArray *array, + gint64 offset, + gint64 length) { const auto arrow_array = garrow_array_get_raw(array); auto arrow_sub_array = arrow_array->Slice(offset, length); return garrow_array_new_raw(&arrow_sub_array, - "array", - &arrow_sub_array, - "parent", - array, + "array", &arrow_sub_array, + "parent", array, NULL); } @@ -935,7 +946,9 @@ garrow_array_to_string(GArrowArray *array, GError **error) * Since: 0.15.0 */ GArrowArray * -garrow_array_view(GArrowArray *array, GArrowDataType *return_type, GError **error) +garrow_array_view(GArrowArray *array, + GArrowDataType *return_type, + GError **error) { auto arrow_array_raw = garrow_array_get_raw(array); auto arrow_return_type = garrow_data_type_get_raw(return_type); @@ -966,7 +979,8 @@ garrow_array_diff_unified(GArrowArray *array, GArrowArray *other_array) const auto arrow_array = garrow_array_get_raw(array); const auto arrow_other_array = garrow_array_get_raw(other_array); std::stringstream diff; - arrow_array->Equals(arrow_other_array, arrow::EqualOptions().diff_sink(&diff)); + arrow_array->Equals(arrow_other_array, + arrow::EqualOptions().diff_sink(&diff)); auto string = diff.str(); if (string.empty()) { return NULL; @@ -987,7 +1001,9 @@ garrow_array_diff_unified(GArrowArray *array, GArrowArray *other_array) * Since: 4.0.0 */ GArrowArray * -garrow_array_concatenate(GArrowArray *array, GList *other_arrays, GError **error) +garrow_array_concatenate(GArrowArray *array, + GList *other_arrays, + GError **error) { if (!other_arrays) { g_object_ref(array); @@ -1000,14 +1016,19 @@ garrow_array_concatenate(GArrowArray *array, GList *other_arrays, GError **error arrow_arrays.push_back(garrow_array_get_raw(other_array)); } auto arrow_concatenated_array = arrow::Concatenate(arrow_arrays); - if (garrow::check(error, arrow_concatenated_array, "[array][concatenate]")) { + if (garrow::check(error, + arrow_concatenated_array, + "[array][concatenate]")) { return garrow_array_new_raw(&(*arrow_concatenated_array)); } else { return NULL; } } -G_DEFINE_TYPE(GArrowNullArray, garrow_null_array, GARROW_TYPE_ARRAY) + +G_DEFINE_TYPE(GArrowNullArray, + garrow_null_array, + GARROW_TYPE_ARRAY) static void garrow_null_array_init(GArrowNullArray *object) @@ -1034,7 +1055,10 @@ garrow_null_array_new(gint64 length) return GARROW_NULL_ARRAY(array); } -G_DEFINE_TYPE(GArrowPrimitiveArray, garrow_primitive_array, GARROW_TYPE_ARRAY) + +G_DEFINE_TYPE(GArrowPrimitiveArray, + garrow_primitive_array, + GARROW_TYPE_ARRAY) G_END_DECLS template @@ -1051,14 +1075,12 @@ garrow_primitive_array_new(gint64 length, arrow_data, arrow_bitmap, n_nulls); - auto arrow_array = std::static_pointer_cast(arrow_specific_array); + auto arrow_array = + std::static_pointer_cast(arrow_specific_array); return garrow_array_new_raw(&arrow_array, - "array", - &arrow_array, - "null-bitmap", - null_bitmap, - "buffer1", - data, + "array", &arrow_array, + "null-bitmap", null_bitmap, + "buffer1", data, NULL); }; @@ -1079,14 +1101,12 @@ garrow_primitive_array_new(GArrowDataType *data_type, arrow_data, arrow_bitmap, n_nulls); - auto arrow_array = std::static_pointer_cast(arrow_specific_array); + auto arrow_array = + std::static_pointer_cast(arrow_specific_array); return garrow_array_new_raw(&arrow_array, - "array", - &arrow_array, - "null-bitmap", - null_bitmap, - "buffer1", - data, + "array", &arrow_array, + "null-bitmap", null_bitmap, + "buffer1", data, NULL); }; G_BEGIN_DECLS @@ -1139,7 +1159,10 @@ garrow_primitive_array_get_data_buffer(GArrowPrimitiveArray *array) return garrow_buffer_new_raw(&arrow_data); } -G_DEFINE_TYPE(GArrowBooleanArray, garrow_boolean_array, GARROW_TYPE_PRIMITIVE_ARRAY) + +G_DEFINE_TYPE(GArrowBooleanArray, + garrow_boolean_array, + GARROW_TYPE_PRIMITIVE_ARRAY) static void garrow_boolean_array_init(GArrowBooleanArray *object) @@ -1172,8 +1195,10 @@ garrow_boolean_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = - garrow_primitive_array_new(length, data, null_bitmap, n_nulls); + auto array = garrow_primitive_array_new(length, + data, + null_bitmap, + n_nulls); return GARROW_BOOLEAN_ARRAY(array); } @@ -1185,7 +1210,8 @@ garrow_boolean_array_new(gint64 length, * Returns: The @i-th value. */ gboolean -garrow_boolean_array_get_value(GArrowBooleanArray *array, gint64 i) +garrow_boolean_array_get_value(GArrowBooleanArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -1202,10 +1228,12 @@ garrow_boolean_array_get_value(GArrowBooleanArray *array, gint64 i) * It should be freed with g_free() when no longer needed. */ gboolean * -garrow_boolean_array_get_values(GArrowBooleanArray *array, gint64 *length) +garrow_boolean_array_get_values(GArrowBooleanArray *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto arrow_boolean_array = std::static_pointer_cast(arrow_array); + auto arrow_boolean_array = + std::static_pointer_cast(arrow_array); *length = arrow_boolean_array->length(); auto values = static_cast(g_new(gboolean, *length)); for (gint64 i = 0; i < *length; ++i) { @@ -1214,7 +1242,10 @@ garrow_boolean_array_get_values(GArrowBooleanArray *array, gint64 *length) return values; } -G_DEFINE_TYPE(GArrowNumericArray, garrow_numeric_array, GARROW_TYPE_PRIMITIVE_ARRAY) + +G_DEFINE_TYPE(GArrowNumericArray, + garrow_numeric_array, + GARROW_TYPE_PRIMITIVE_ARRAY) static void garrow_numeric_array_init(GArrowNumericArray *object) @@ -1226,7 +1257,10 @@ garrow_numeric_array_class_init(GArrowNumericArrayClass *klass) { } -G_DEFINE_TYPE(GArrowInt8Array, garrow_int8_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowInt8Array, + garrow_int8_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_int8_array_init(GArrowInt8Array *object) @@ -1259,8 +1293,10 @@ garrow_int8_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = - garrow_primitive_array_new(length, data, null_bitmap, n_nulls); + auto array = garrow_primitive_array_new(length, + data, + null_bitmap, + n_nulls); return GARROW_INT8_ARRAY(array); } @@ -1272,7 +1308,8 @@ garrow_int8_array_new(gint64 length, * Returns: The @i-th value. */ gint8 -garrow_int8_array_get_value(GArrowInt8Array *array, gint64 i) +garrow_int8_array_get_value(GArrowInt8Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -1286,13 +1323,16 @@ garrow_int8_array_get_value(GArrowInt8Array *array, gint64 i) * Returns: (array length=length): The raw values. */ const gint8 * -garrow_int8_array_get_values(GArrowInt8Array *array, gint64 *length) +garrow_int8_array_get_values(GArrowInt8Array *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return garrow_array_get_values_raw(arrow_array, length); } -G_DEFINE_TYPE(GArrowUInt8Array, garrow_uint8_array, GARROW_TYPE_NUMERIC_ARRAY) +G_DEFINE_TYPE(GArrowUInt8Array, + garrow_uint8_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_uint8_array_init(GArrowUInt8Array *object) @@ -1325,8 +1365,10 @@ garrow_uint8_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = - garrow_primitive_array_new(length, data, null_bitmap, n_nulls); + auto array = garrow_primitive_array_new(length, + data, + null_bitmap, + n_nulls); return GARROW_UINT8_ARRAY(array); } @@ -1338,7 +1380,8 @@ garrow_uint8_array_new(gint64 length, * Returns: The @i-th value. */ guint8 -garrow_uint8_array_get_value(GArrowUInt8Array *array, gint64 i) +garrow_uint8_array_get_value(GArrowUInt8Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -1352,13 +1395,17 @@ garrow_uint8_array_get_value(GArrowUInt8Array *array, gint64 i) * Returns: (array length=length): The raw values. */ const guint8 * -garrow_uint8_array_get_values(GArrowUInt8Array *array, gint64 *length) +garrow_uint8_array_get_values(GArrowUInt8Array *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return garrow_array_get_values_raw(arrow_array, length); } -G_DEFINE_TYPE(GArrowInt16Array, garrow_int16_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowInt16Array, + garrow_int16_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_int16_array_init(GArrowInt16Array *object) @@ -1391,8 +1438,10 @@ garrow_int16_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = - garrow_primitive_array_new(length, data, null_bitmap, n_nulls); + auto array = garrow_primitive_array_new(length, + data, + null_bitmap, + n_nulls); return GARROW_INT16_ARRAY(array); } @@ -1404,7 +1453,8 @@ garrow_int16_array_new(gint64 length, * Returns: The @i-th value. */ gint16 -garrow_int16_array_get_value(GArrowInt16Array *array, gint64 i) +garrow_int16_array_get_value(GArrowInt16Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -1418,13 +1468,17 @@ garrow_int16_array_get_value(GArrowInt16Array *array, gint64 i) * Returns: (array length=length): The raw values. */ const gint16 * -garrow_int16_array_get_values(GArrowInt16Array *array, gint64 *length) +garrow_int16_array_get_values(GArrowInt16Array *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return garrow_array_get_values_raw(arrow_array, length); } -G_DEFINE_TYPE(GArrowUInt16Array, garrow_uint16_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowUInt16Array, + garrow_uint16_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_uint16_array_init(GArrowUInt16Array *object) @@ -1457,8 +1511,10 @@ garrow_uint16_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = - garrow_primitive_array_new(length, data, null_bitmap, n_nulls); + auto array = garrow_primitive_array_new(length, + data, + null_bitmap, + n_nulls); return GARROW_UINT16_ARRAY(array); } @@ -1470,7 +1526,8 @@ garrow_uint16_array_new(gint64 length, * Returns: The @i-th value. */ guint16 -garrow_uint16_array_get_value(GArrowUInt16Array *array, gint64 i) +garrow_uint16_array_get_value(GArrowUInt16Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -1484,13 +1541,17 @@ garrow_uint16_array_get_value(GArrowUInt16Array *array, gint64 i) * Returns: (array length=length): The raw values. */ const guint16 * -garrow_uint16_array_get_values(GArrowUInt16Array *array, gint64 *length) +garrow_uint16_array_get_values(GArrowUInt16Array *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return garrow_array_get_values_raw(arrow_array, length); } -G_DEFINE_TYPE(GArrowInt32Array, garrow_int32_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowInt32Array, + garrow_int32_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_int32_array_init(GArrowInt32Array *object) @@ -1523,8 +1584,10 @@ garrow_int32_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = - garrow_primitive_array_new(length, data, null_bitmap, n_nulls); + auto array = garrow_primitive_array_new(length, + data, + null_bitmap, + n_nulls); return GARROW_INT32_ARRAY(array); } @@ -1536,7 +1599,8 @@ garrow_int32_array_new(gint64 length, * Returns: The @i-th value. */ gint32 -garrow_int32_array_get_value(GArrowInt32Array *array, gint64 i) +garrow_int32_array_get_value(GArrowInt32Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -1550,13 +1614,17 @@ garrow_int32_array_get_value(GArrowInt32Array *array, gint64 i) * Returns: (array length=length): The raw values. */ const gint32 * -garrow_int32_array_get_values(GArrowInt32Array *array, gint64 *length) +garrow_int32_array_get_values(GArrowInt32Array *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return garrow_array_get_values_raw(arrow_array, length); } -G_DEFINE_TYPE(GArrowUInt32Array, garrow_uint32_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowUInt32Array, + garrow_uint32_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_uint32_array_init(GArrowUInt32Array *object) @@ -1589,8 +1657,10 @@ garrow_uint32_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = - garrow_primitive_array_new(length, data, null_bitmap, n_nulls); + auto array = garrow_primitive_array_new(length, + data, + null_bitmap, + n_nulls); return GARROW_UINT32_ARRAY(array); } @@ -1602,7 +1672,8 @@ garrow_uint32_array_new(gint64 length, * Returns: The @i-th value. */ guint32 -garrow_uint32_array_get_value(GArrowUInt32Array *array, gint64 i) +garrow_uint32_array_get_value(GArrowUInt32Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -1616,13 +1687,17 @@ garrow_uint32_array_get_value(GArrowUInt32Array *array, gint64 i) * Returns: (array length=length): The raw values. */ const guint32 * -garrow_uint32_array_get_values(GArrowUInt32Array *array, gint64 *length) +garrow_uint32_array_get_values(GArrowUInt32Array *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return garrow_array_get_values_raw(arrow_array, length); } -G_DEFINE_TYPE(GArrowInt64Array, garrow_int64_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowInt64Array, + garrow_int64_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_int64_array_init(GArrowInt64Array *object) @@ -1655,8 +1730,10 @@ garrow_int64_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = - garrow_primitive_array_new(length, data, null_bitmap, n_nulls); + auto array = garrow_primitive_array_new(length, + data, + null_bitmap, + n_nulls); return GARROW_INT64_ARRAY(array); } @@ -1668,7 +1745,8 @@ garrow_int64_array_new(gint64 length, * Returns: The @i-th value. */ gint64 -garrow_int64_array_get_value(GArrowInt64Array *array, gint64 i) +garrow_int64_array_get_value(GArrowInt64Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -1682,14 +1760,19 @@ garrow_int64_array_get_value(GArrowInt64Array *array, gint64 i) * Returns: (array length=length): The raw values. */ const gint64 * -garrow_int64_array_get_values(GArrowInt64Array *array, gint64 *length) +garrow_int64_array_get_values(GArrowInt64Array *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto values = garrow_array_get_values_raw(arrow_array, length); + auto values = + garrow_array_get_values_raw(arrow_array, length); return reinterpret_cast(values); } -G_DEFINE_TYPE(GArrowUInt64Array, garrow_uint64_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowUInt64Array, + garrow_uint64_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_uint64_array_init(GArrowUInt64Array *object) @@ -1722,8 +1805,10 @@ garrow_uint64_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = - garrow_primitive_array_new(length, data, null_bitmap, n_nulls); + auto array = garrow_primitive_array_new(length, + data, + null_bitmap, + n_nulls); return GARROW_UINT64_ARRAY(array); } @@ -1735,7 +1820,8 @@ garrow_uint64_array_new(gint64 length, * Returns: The @i-th value. */ guint64 -garrow_uint64_array_get_value(GArrowUInt64Array *array, gint64 i) +garrow_uint64_array_get_value(GArrowUInt64Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -1749,14 +1835,19 @@ garrow_uint64_array_get_value(GArrowUInt64Array *array, gint64 i) * Returns: (array length=length): The raw values. */ const guint64 * -garrow_uint64_array_get_values(GArrowUInt64Array *array, gint64 *length) +garrow_uint64_array_get_values(GArrowUInt64Array *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto values = garrow_array_get_values_raw(arrow_array, length); + auto values = + garrow_array_get_values_raw(arrow_array, length); return reinterpret_cast(values); } -G_DEFINE_TYPE(GArrowHalfFloatArray, garrow_half_float_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowHalfFloatArray, + garrow_half_float_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_half_float_array_init(GArrowHalfFloatArray *object) @@ -1789,8 +1880,10 @@ garrow_half_float_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = - garrow_primitive_array_new(length, data, null_bitmap, n_nulls); + auto array = garrow_primitive_array_new(length, + data, + null_bitmap, + n_nulls); return GARROW_HALF_FLOAT_ARRAY(array); } @@ -1804,7 +1897,8 @@ garrow_half_float_array_new(gint64 length, * Since: 11.0.0 */ guint16 -garrow_half_float_array_get_value(GArrowHalfFloatArray *array, gint64 i) +garrow_half_float_array_get_value(GArrowHalfFloatArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return std::static_pointer_cast(arrow_array)->Value(i); @@ -1820,13 +1914,17 @@ garrow_half_float_array_get_value(GArrowHalfFloatArray *array, gint64 i) * Since: 11.0.0 */ const guint16 * -garrow_half_float_array_get_values(GArrowHalfFloatArray *array, gint64 *length) +garrow_half_float_array_get_values(GArrowHalfFloatArray *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return garrow_array_get_values_raw(arrow_array, length); } -G_DEFINE_TYPE(GArrowFloatArray, garrow_float_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowFloatArray, + garrow_float_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_float_array_init(GArrowFloatArray *object) @@ -1859,8 +1957,10 @@ garrow_float_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = - garrow_primitive_array_new(length, data, null_bitmap, n_nulls); + auto array = garrow_primitive_array_new(length, + data, + null_bitmap, + n_nulls); return GARROW_FLOAT_ARRAY(array); } @@ -1872,7 +1972,8 @@ garrow_float_array_new(gint64 length, * Returns: The @i-th value. */ gfloat -garrow_float_array_get_value(GArrowFloatArray *array, gint64 i) +garrow_float_array_get_value(GArrowFloatArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -1886,13 +1987,17 @@ garrow_float_array_get_value(GArrowFloatArray *array, gint64 i) * Returns: (array length=length): The raw values. */ const gfloat * -garrow_float_array_get_values(GArrowFloatArray *array, gint64 *length) +garrow_float_array_get_values(GArrowFloatArray *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return garrow_array_get_values_raw(arrow_array, length); } -G_DEFINE_TYPE(GArrowDoubleArray, garrow_double_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowDoubleArray, + garrow_double_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_double_array_init(GArrowDoubleArray *object) @@ -1925,8 +2030,10 @@ garrow_double_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = - garrow_primitive_array_new(length, data, null_bitmap, n_nulls); + auto array = garrow_primitive_array_new(length, + data, + null_bitmap, + n_nulls); return GARROW_DOUBLE_ARRAY(array); } @@ -1938,7 +2045,8 @@ garrow_double_array_new(gint64 length, * Returns: The @i-th value. */ gdouble -garrow_double_array_get_value(GArrowDoubleArray *array, gint64 i) +garrow_double_array_get_value(GArrowDoubleArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -1952,12 +2060,14 @@ garrow_double_array_get_value(GArrowDoubleArray *array, gint64 i) * Returns: (array length=length): The raw values. */ const gdouble * -garrow_double_array_get_values(GArrowDoubleArray *array, gint64 *length) +garrow_double_array_get_values(GArrowDoubleArray *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return garrow_array_get_values_raw(arrow_array, length); } + G_END_DECLS template GArrowArray * @@ -1970,30 +2080,30 @@ garrow_base_binary_array_new(gint64 length, const auto arrow_value_offsets = garrow_buffer_get_raw(value_offsets); const auto arrow_value_data = garrow_buffer_get_raw(value_data); const auto arrow_null_bitmap = garrow_buffer_get_raw(null_bitmap); - auto arrow_binary_array = std::make_shared(length, - arrow_value_offsets, - arrow_value_data, - arrow_null_bitmap, - n_nulls); - auto arrow_array = std::static_pointer_cast(arrow_binary_array); + auto arrow_binary_array = + std::make_shared(length, + arrow_value_offsets, + arrow_value_data, + arrow_null_bitmap, + n_nulls); + auto arrow_array = + std::static_pointer_cast(arrow_binary_array); return garrow_array_new_raw(&arrow_array, - "array", - &arrow_array, - "null-bitmap", - null_bitmap, - "buffer1", - value_offsets, - "buffer2", - value_data, + "array", &arrow_array, + "null-bitmap", null_bitmap, + "buffer1", value_offsets, + "buffer2", value_data, NULL); }; template GBytes * -garrow_base_binary_array_get_value(GArrowArray *array, gint64 i) +garrow_base_binary_array_get_value(GArrowArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(array); - auto arrow_binary_array = std::static_pointer_cast(arrow_array); + auto arrow_binary_array = + std::static_pointer_cast(arrow_array); auto view = arrow_binary_array->GetView(i); return g_bytes_new_static(view.data(), view.length()); }; @@ -2009,7 +2119,8 @@ garrow_base_binary_array_get_data_buffer(GArrowArray *array) } auto arrow_array = garrow_array_get_raw(array); - auto arrow_binary_array = std::static_pointer_cast(arrow_array); + auto arrow_binary_array = + std::static_pointer_cast(arrow_array); auto arrow_data = arrow_binary_array->value_data(); return garrow_buffer_new_raw(&arrow_data); }; @@ -2025,13 +2136,16 @@ garrow_base_binary_array_get_offsets_buffer(GArrowArray *array) } auto arrow_array = garrow_array_get_raw(array); - auto arrow_binary_array = std::static_pointer_cast(arrow_array); + auto arrow_binary_array = + std::static_pointer_cast(arrow_array); auto arrow_offsets = arrow_binary_array->value_offsets(); return garrow_buffer_new_raw(&arrow_offsets); }; G_BEGIN_DECLS -G_DEFINE_TYPE(GArrowBinaryArray, garrow_binary_array, GARROW_TYPE_ARRAY) +G_DEFINE_TYPE(GArrowBinaryArray, + garrow_binary_array, + GARROW_TYPE_ARRAY) static void garrow_binary_array_init(GArrowBinaryArray *object) @@ -2066,11 +2180,12 @@ garrow_binary_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto binary_array = garrow_base_binary_array_new(length, - value_offsets, - value_data, - null_bitmap, - n_nulls); + auto binary_array = + garrow_base_binary_array_new(length, + value_offsets, + value_data, + null_bitmap, + n_nulls); return GARROW_BINARY_ARRAY(binary_array); } @@ -2082,9 +2197,11 @@ garrow_binary_array_new(gint64 length, * Returns: (transfer full): The @i-th value. */ GBytes * -garrow_binary_array_get_value(GArrowBinaryArray *array, gint64 i) +garrow_binary_array_get_value(GArrowBinaryArray *array, + gint64 i) { - return garrow_base_binary_array_get_value(GARROW_ARRAY(array), i); + return garrow_base_binary_array_get_value( + GARROW_ARRAY(array), i); } /** @@ -2129,7 +2246,10 @@ garrow_binary_array_get_offsets_buffer(GArrowBinaryArray *array) GARROW_ARRAY(array)); } -G_DEFINE_TYPE(GArrowLargeBinaryArray, garrow_large_binary_array, GARROW_TYPE_ARRAY) + +G_DEFINE_TYPE(GArrowLargeBinaryArray, + garrow_large_binary_array, + GARROW_TYPE_ARRAY) static void garrow_large_binary_array_init(GArrowLargeBinaryArray *object) @@ -2183,10 +2303,11 @@ garrow_large_binary_array_new(gint64 length, * Since: 0.16.0 */ GBytes * -garrow_large_binary_array_get_value(GArrowLargeBinaryArray *array, gint64 i) +garrow_large_binary_array_get_value(GArrowLargeBinaryArray *array, + gint64 i) { - return garrow_base_binary_array_get_value(GARROW_ARRAY(array), - i); + return garrow_base_binary_array_get_value( + GARROW_ARRAY(array), i); } /** @@ -2235,19 +2356,24 @@ garrow_large_binary_array_get_offsets_buffer(GArrowLargeBinaryArray *array) GARROW_ARRAY(array)); } + G_END_DECLS template gchar * -garrow_base_string_array_get_value(GArrowArray *array, gint64 i) +garrow_base_string_array_get_value(GArrowArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(array); - auto arrow_string_array = std::static_pointer_cast(arrow_array); + auto arrow_string_array = + std::static_pointer_cast(arrow_array); auto view = arrow_string_array->GetView(i); return g_strndup(view.data(), view.length()); }; G_BEGIN_DECLS -G_DEFINE_TYPE(GArrowStringArray, garrow_string_array, GARROW_TYPE_BINARY_ARRAY) +G_DEFINE_TYPE(GArrowStringArray, + garrow_string_array, + GARROW_TYPE_BINARY_ARRAY) static void garrow_string_array_init(GArrowStringArray *object) @@ -2282,11 +2408,12 @@ garrow_string_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto string_array = garrow_base_binary_array_new(length, - value_offsets, - value_data, - null_bitmap, - n_nulls); + auto string_array = + garrow_base_binary_array_new(length, + value_offsets, + value_data, + null_bitmap, + n_nulls); return GARROW_STRING_ARRAY(string_array); } @@ -2298,11 +2425,14 @@ garrow_string_array_new(gint64 length, * Returns: The @i-th UTF-8 encoded string. */ gchar * -garrow_string_array_get_string(GArrowStringArray *array, gint64 i) +garrow_string_array_get_string(GArrowStringArray *array, + gint64 i) { - return garrow_base_string_array_get_value(GARROW_ARRAY(array), i); + return garrow_base_string_array_get_value( + GARROW_ARRAY(array), i); } + G_DEFINE_TYPE(GArrowLargeStringArray, garrow_large_string_array, GARROW_TYPE_LARGE_BINARY_ARRAY) @@ -2359,13 +2489,17 @@ garrow_large_string_array_new(gint64 length, * Since: 0.16.0 */ gchar * -garrow_large_string_array_get_string(GArrowLargeStringArray *array, gint64 i) +garrow_large_string_array_get_string(GArrowLargeStringArray *array, + gint64 i) { - return garrow_base_string_array_get_value(GARROW_ARRAY(array), - i); + return garrow_base_string_array_get_value( + GARROW_ARRAY(array), i); } -G_DEFINE_TYPE(GArrowDate32Array, garrow_date32_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowDate32Array, + garrow_date32_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_date32_array_init(GArrowDate32Array *object) @@ -2398,8 +2532,10 @@ garrow_date32_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = - garrow_primitive_array_new(length, data, null_bitmap, n_nulls); + auto array = garrow_primitive_array_new(length, + data, + null_bitmap, + n_nulls); return GARROW_DATE32_ARRAY(array); } @@ -2413,7 +2549,8 @@ garrow_date32_array_new(gint64 length, * Since: 0.7.0 */ gint32 -garrow_date32_array_get_value(GArrowDate32Array *array, gint64 i) +garrow_date32_array_get_value(GArrowDate32Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -2429,13 +2566,17 @@ garrow_date32_array_get_value(GArrowDate32Array *array, gint64 i) * Since: 0.7.0 */ const gint32 * -garrow_date32_array_get_values(GArrowDate32Array *array, gint64 *length) +garrow_date32_array_get_values(GArrowDate32Array *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return garrow_array_get_values_raw(arrow_array, length); } -G_DEFINE_TYPE(GArrowDate64Array, garrow_date64_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowDate64Array, + garrow_date64_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_date64_array_init(GArrowDate64Array *object) @@ -2468,8 +2609,10 @@ garrow_date64_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = - garrow_primitive_array_new(length, data, null_bitmap, n_nulls); + auto array = garrow_primitive_array_new(length, + data, + null_bitmap, + n_nulls); return GARROW_DATE64_ARRAY(array); } @@ -2483,7 +2626,8 @@ garrow_date64_array_new(gint64 length, * Since: 0.7.0 */ gint64 -garrow_date64_array_get_value(GArrowDate64Array *array, gint64 i) +garrow_date64_array_get_value(GArrowDate64Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -2499,14 +2643,19 @@ garrow_date64_array_get_value(GArrowDate64Array *array, gint64 i) * Since: 0.7.0 */ const gint64 * -garrow_date64_array_get_values(GArrowDate64Array *array, gint64 *length) +garrow_date64_array_get_values(GArrowDate64Array *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto values = garrow_array_get_values_raw(arrow_array, length); + auto values = + garrow_array_get_values_raw(arrow_array, length); return reinterpret_cast(values); } -G_DEFINE_TYPE(GArrowTimestampArray, garrow_timestamp_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowTimestampArray, + garrow_timestamp_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_timestamp_array_init(GArrowTimestampArray *object) @@ -2560,7 +2709,8 @@ garrow_timestamp_array_new(GArrowTimestampDataType *data_type, * Since: 0.7.0 */ gint64 -garrow_timestamp_array_get_value(GArrowTimestampArray *array, gint64 i) +garrow_timestamp_array_get_value(GArrowTimestampArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -2576,14 +2726,19 @@ garrow_timestamp_array_get_value(GArrowTimestampArray *array, gint64 i) * Since: 0.7.0 */ const gint64 * -garrow_timestamp_array_get_values(GArrowTimestampArray *array, gint64 *length) +garrow_timestamp_array_get_values(GArrowTimestampArray *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto values = garrow_array_get_values_raw(arrow_array, length); + auto values = + garrow_array_get_values_raw(arrow_array, length); return reinterpret_cast(values); } -G_DEFINE_TYPE(GArrowTime32Array, garrow_time32_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowTime32Array, + garrow_time32_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_time32_array_init(GArrowTime32Array *object) @@ -2618,11 +2773,12 @@ garrow_time32_array_new(GArrowTime32DataType *data_type, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = garrow_primitive_array_new(GARROW_DATA_TYPE(data_type), - length, - data, - null_bitmap, - n_nulls); + auto array = + garrow_primitive_array_new(GARROW_DATA_TYPE(data_type), + length, + data, + null_bitmap, + n_nulls); return GARROW_TIME32_ARRAY(array); } @@ -2636,7 +2792,8 @@ garrow_time32_array_new(GArrowTime32DataType *data_type, * Since: 0.7.0 */ gint32 -garrow_time32_array_get_value(GArrowTime32Array *array, gint64 i) +garrow_time32_array_get_value(GArrowTime32Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -2652,13 +2809,17 @@ garrow_time32_array_get_value(GArrowTime32Array *array, gint64 i) * Since: 0.7.0 */ const gint32 * -garrow_time32_array_get_values(GArrowTime32Array *array, gint64 *length) +garrow_time32_array_get_values(GArrowTime32Array *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return garrow_array_get_values_raw(arrow_array, length); } -G_DEFINE_TYPE(GArrowTime64Array, garrow_time64_array, GARROW_TYPE_NUMERIC_ARRAY) + +G_DEFINE_TYPE(GArrowTime64Array, + garrow_time64_array, + GARROW_TYPE_NUMERIC_ARRAY) static void garrow_time64_array_init(GArrowTime64Array *object) @@ -2693,11 +2854,12 @@ garrow_time64_array_new(GArrowTime64DataType *data_type, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = garrow_primitive_array_new(GARROW_DATA_TYPE(data_type), - length, - data, - null_bitmap, - n_nulls); + auto array = + garrow_primitive_array_new(GARROW_DATA_TYPE(data_type), + length, + data, + null_bitmap, + n_nulls); return GARROW_TIME64_ARRAY(array); } @@ -2711,7 +2873,8 @@ garrow_time64_array_new(GArrowTime64DataType *data_type, * Since: 0.7.0 */ gint64 -garrow_time64_array_get_value(GArrowTime64Array *array, gint64 i) +garrow_time64_array_get_value(GArrowTime64Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -2727,13 +2890,16 @@ garrow_time64_array_get_value(GArrowTime64Array *array, gint64 i) * Since: 0.7.0 */ const gint64 * -garrow_time64_array_get_values(GArrowTime64Array *array, gint64 *length) +garrow_time64_array_get_values(GArrowTime64Array *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto values = garrow_array_get_values_raw(arrow_array, length); + auto values = + garrow_array_get_values_raw(arrow_array, length); return reinterpret_cast(values); } + G_DEFINE_TYPE(GArrowMonthIntervalArray, garrow_month_interval_array, GARROW_TYPE_NUMERIC_ARRAY) @@ -2786,7 +2952,8 @@ garrow_month_interval_array_new(gint64 length, * Since: 8.0.0 */ gint32 -garrow_month_interval_array_get_value(GArrowMonthIntervalArray *array, gint64 i) +garrow_month_interval_array_get_value(GArrowMonthIntervalArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); return static_cast(arrow_array.get())->Value(i); @@ -2802,12 +2969,15 @@ garrow_month_interval_array_get_value(GArrowMonthIntervalArray *array, gint64 i) * Since: 8.0.0 */ const gint32 * -garrow_month_interval_array_get_values(GArrowMonthIntervalArray *array, gint64 *length) +garrow_month_interval_array_get_values(GArrowMonthIntervalArray *array, + gint64 *length) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - return garrow_array_get_values_raw(arrow_array, length); + return garrow_array_get_values_raw( + arrow_array, length); } + G_DEFINE_TYPE(GArrowDayTimeIntervalArray, garrow_day_time_interval_array, GARROW_TYPE_PRIMITIVE_ARRAY) @@ -2843,10 +3013,11 @@ garrow_day_time_interval_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = garrow_primitive_array_new(length, - data, - null_bitmap, - n_nulls); + auto array = garrow_primitive_array_new( + length, + data, + null_bitmap, + n_nulls); return GARROW_DAY_TIME_INTERVAL_ARRAY(array); } @@ -2860,7 +3031,8 @@ garrow_day_time_interval_array_new(gint64 length, * Since: 8.0.0 */ GArrowDayMillisecond * -garrow_day_time_interval_array_get_value(GArrowDayTimeIntervalArray *array, gint64 i) +garrow_day_time_interval_array_get_value(GArrowDayTimeIntervalArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto arrow_day_time_interval_array = @@ -2898,12 +3070,14 @@ garrow_day_time_interval_array_get_values(GArrowDayTimeIntervalArray *array) return g_list_reverse(values); } + G_DEFINE_TYPE(GArrowMonthDayNanoIntervalArray, garrow_month_day_nano_interval_array, GARROW_TYPE_PRIMITIVE_ARRAY) static void -garrow_month_day_nano_interval_array_init(GArrowMonthDayNanoIntervalArray *object) +garrow_month_day_nano_interval_array_init( + GArrowMonthDayNanoIntervalArray *object) { } @@ -2934,10 +3108,11 @@ garrow_month_day_nano_interval_array_new(gint64 length, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto array = garrow_primitive_array_new(length, - data, - null_bitmap, - n_nulls); + auto array = garrow_primitive_array_new( + length, + data, + null_bitmap, + n_nulls); return GARROW_MONTH_DAY_NANO_INTERVAL_ARRAY(array); } @@ -2951,8 +3126,9 @@ garrow_month_day_nano_interval_array_new(gint64 length, * Since: 8.0.0 */ GArrowMonthDayNano * -garrow_month_day_nano_interval_array_get_value(GArrowMonthDayNanoIntervalArray *array, - gint64 i) +garrow_month_day_nano_interval_array_get_value( + GArrowMonthDayNanoIntervalArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto arrow_month_day_nano_interval_array = @@ -2971,7 +3147,8 @@ garrow_month_day_nano_interval_array_get_value(GArrowMonthDayNanoIntervalArray * * Since: 8.0.0 */ GList * -garrow_month_day_nano_interval_array_get_values(GArrowMonthDayNanoIntervalArray *array) +garrow_month_day_nano_interval_array_get_values( + GArrowMonthDayNanoIntervalArray *array) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto arrow_month_day_nano_interval_array = @@ -2990,6 +3167,7 @@ garrow_month_day_nano_interval_array_get_values(GArrowMonthDayNanoIntervalArray return g_list_reverse(values); } + G_DEFINE_TYPE(GArrowFixedSizeBinaryArray, garrow_fixed_size_binary_array, GARROW_TYPE_PRIMITIVE_ARRAY) @@ -3027,11 +3205,12 @@ garrow_fixed_size_binary_array_new(GArrowFixedSizeBinaryDataType *data_type, gint64 n_nulls) { auto array = - garrow_primitive_array_new(GARROW_DATA_TYPE(data_type), - length, - data, - null_bitmap, - n_nulls); + garrow_primitive_array_new( + GARROW_DATA_TYPE(data_type), + length, + data, + null_bitmap, + n_nulls); return GARROW_FIXED_SIZE_BINARY_ARRAY(array); } @@ -3062,13 +3241,15 @@ garrow_fixed_size_binary_array_get_byte_width(GArrowFixedSizeBinaryArray *array) * Since: 3.0.0 */ GBytes * -garrow_fixed_size_binary_array_get_value(GArrowFixedSizeBinaryArray *array, gint64 i) +garrow_fixed_size_binary_array_get_value(GArrowFixedSizeBinaryArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto arrow_binary_array = std::static_pointer_cast(arrow_array); auto value = arrow_binary_array->GetValue(i); - return g_bytes_new_static(value, arrow_binary_array->byte_width()); + return g_bytes_new_static(value, + arrow_binary_array->byte_width()); } /** @@ -3087,9 +3268,11 @@ garrow_fixed_size_binary_array_get_values_bytes(GArrowFixedSizeBinaryArray *arra std::static_pointer_cast(arrow_array); auto value = arrow_binary_array->raw_values(); return g_bytes_new_static(value, - arrow_binary_array->byte_width() * arrow_array->length()); + arrow_binary_array->byte_width() * + arrow_array->length()); } + G_DEFINE_TYPE(GArrowDecimal128Array, garrow_decimal128_array, GARROW_TYPE_FIXED_SIZE_BINARY_ARRAY) @@ -3115,7 +3298,8 @@ garrow_decimal128_array_class_init(GArrowDecimal128ArrayClass *klass) * Since: 0.10.0 */ gchar * -garrow_decimal128_array_format_value(GArrowDecimal128Array *array, gint64 i) +garrow_decimal128_array_format_value(GArrowDecimal128Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto arrow_decimal128_array = @@ -3134,7 +3318,8 @@ garrow_decimal128_array_format_value(GArrowDecimal128Array *array, gint64 i) * Since: 0.10.0 */ GArrowDecimal128 * -garrow_decimal128_array_get_value(GArrowDecimal128Array *array, gint64 i) +garrow_decimal128_array_get_value(GArrowDecimal128Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto arrow_decimal128_array = @@ -3144,6 +3329,7 @@ garrow_decimal128_array_get_value(GArrowDecimal128Array *array, gint64 i) return garrow_decimal128_new_raw(&arrow_decimal128); } + G_DEFINE_TYPE(GArrowDecimal256Array, garrow_decimal256_array, GARROW_TYPE_FIXED_SIZE_BINARY_ARRAY) @@ -3169,7 +3355,8 @@ garrow_decimal256_array_class_init(GArrowDecimal256ArrayClass *klass) * Since: 3.0.0 */ gchar * -garrow_decimal256_array_format_value(GArrowDecimal256Array *array, gint64 i) +garrow_decimal256_array_format_value(GArrowDecimal256Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto arrow_decimal256_array = @@ -3188,7 +3375,8 @@ garrow_decimal256_array_format_value(GArrowDecimal256Array *array, gint64 i) * Since: 3.0.0 */ GArrowDecimal256 * -garrow_decimal256_array_get_value(GArrowDecimal256Array *array, gint64 i) +garrow_decimal256_array_get_value(GArrowDecimal256Array *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto arrow_decimal256_array = @@ -3198,8 +3386,8 @@ garrow_decimal256_array_get_value(GArrowDecimal256Array *array, gint64 i) return garrow_decimal256_new_raw(&arrow_decimal256); } -typedef struct GArrowExtensionArrayPrivate_ -{ + +typedef struct GArrowExtensionArrayPrivate_ { GArrowArray *storage; } GArrowExtensionArrayPrivate; @@ -3211,9 +3399,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowExtensionArray, garrow_extension_array, GARROW_TYPE_ARRAY) -#define GARROW_EXTENSION_ARRAY_GET_PRIVATE(obj) \ - static_cast( \ - garrow_extension_array_get_instance_private(GARROW_EXTENSION_ARRAY(obj))) +#define GARROW_EXTENSION_ARRAY_GET_PRIVATE(obj) \ + static_cast( \ + garrow_extension_array_get_instance_private( \ + GARROW_EXTENSION_ARRAY(obj))) static void garrow_extension_array_dispose(GObject *object) @@ -3274,17 +3463,17 @@ garrow_extension_array_class_init(GArrowExtensionArrayClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_extension_array_dispose; + gobject_class->dispose = garrow_extension_array_dispose; gobject_class->set_property = garrow_extension_array_set_property; gobject_class->get_property = garrow_extension_array_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "storage", - "storage", - "The storage array", - GARROW_TYPE_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("storage", + "storage", + "The storage array", + GARROW_TYPE_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_STORAGE, spec); } @@ -3309,6 +3498,7 @@ garrow_extension_array_get_storage(GArrowExtensionArray *array) return garrow_array_new_raw(&(array_priv->array)); } + G_END_DECLS arrow::EqualOptions * @@ -3321,7 +3511,9 @@ garrow_equal_options_get_raw(GArrowEqualOptions *equal_options) GArrowArray * garrow_array_new_raw(std::shared_ptr *arrow_array) { - return garrow_array_new_raw(arrow_array, "array", arrow_array, NULL); + return garrow_array_new_raw(arrow_array, + "array", arrow_array, + NULL); } GArrowArray * @@ -3331,7 +3523,9 @@ garrow_array_new_raw(std::shared_ptr *arrow_array, { va_list args; va_start(args, first_property_name); - auto array = garrow_array_new_raw_valist(arrow_array, first_property_name, args); + auto array = garrow_array_new_raw_valist(arrow_array, + first_property_name, + args); va_end(args); return array; } @@ -3468,15 +3662,19 @@ garrow_array_new_raw_valist(std::shared_ptr *arrow_array, type = GARROW_TYPE_ARRAY; break; } - return GARROW_ARRAY(g_object_new_valist(type, first_property_name, args)); + return GARROW_ARRAY(g_object_new_valist(type, + first_property_name, + args)); } GArrowExtensionArray * garrow_extension_array_new_raw(std::shared_ptr *arrow_array, GArrowArray *storage) { - auto array = - garrow_array_new_raw(arrow_array, "array", arrow_array, "storage", storage, NULL); + auto array = garrow_array_new_raw(arrow_array, + "array", arrow_array, + "storage", storage, + NULL); return GARROW_EXTENSION_ARRAY(array); } diff --git a/c_glib/arrow-glib/basic-array.h b/c_glib/arrow-glib/basic-array.h index 95679aa37c5..1a846c2320a 100644 --- a/c_glib/arrow-glib/basic-array.h +++ b/c_glib/arrow-glib/basic-array.h @@ -27,9 +27,11 @@ G_BEGIN_DECLS #define GARROW_TYPE_EQUAL_OPTIONS (garrow_equal_options_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowEqualOptions, garrow_equal_options, GARROW, EQUAL_OPTIONS, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowEqualOptions, + garrow_equal_options, + GARROW, + EQUAL_OPTIONS, + GObject) struct _GArrowEqualOptionsClass { GObjectClass parent_class; @@ -42,9 +44,12 @@ GARROW_AVAILABLE_IN_5_0 gboolean garrow_equal_options_is_approx(GArrowEqualOptions *options); + GARROW_AVAILABLE_IN_6_0 GArrowArray * -garrow_array_import(gpointer c_abi_array, GArrowDataType *data_type, GError **error); +garrow_array_import(gpointer c_abi_array, + GArrowDataType *data_type, + GError **error); GARROW_AVAILABLE_IN_6_0 gboolean @@ -53,103 +58,75 @@ garrow_array_export(GArrowArray *array, gpointer *c_abi_schema, GError **error); -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_array_equal(GArrowArray *array, GArrowArray *other_array); +gboolean garrow_array_equal (GArrowArray *array, + GArrowArray *other_array); GARROW_AVAILABLE_IN_5_0 -gboolean -garrow_array_equal_options(GArrowArray *array, - GArrowArray *other_array, - GArrowEqualOptions *options); -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_array_equal_approx(GArrowArray *array, GArrowArray *other_array); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_array_equal_range(GArrowArray *array, - gint64 start_index, - GArrowArray *other_array, - gint64 other_start_index, - gint64 end_index, - GArrowEqualOptions *options); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_array_is_null(GArrowArray *array, gint64 i); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_array_is_valid(GArrowArray *array, gint64 i); - -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_array_get_length(GArrowArray *array); - -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_array_get_offset(GArrowArray *array); - -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_array_get_n_nulls(GArrowArray *array); - -GARROW_AVAILABLE_IN_ALL -GArrowBuffer * -garrow_array_get_null_bitmap(GArrowArray *array); - -GARROW_AVAILABLE_IN_ALL -GArrowDataType * -garrow_array_get_value_data_type(GArrowArray *array); - -GARROW_AVAILABLE_IN_ALL -GArrowType -garrow_array_get_value_type(GArrowArray *array); - -GARROW_AVAILABLE_IN_ALL -GArrowArray * -garrow_array_slice(GArrowArray *array, gint64 offset, gint64 length); - -GARROW_AVAILABLE_IN_ALL -gchar * -garrow_array_to_string(GArrowArray *array, GError **error); - +gboolean garrow_array_equal_options(GArrowArray *array, + GArrowArray *other_array, + GArrowEqualOptions *options); +gboolean garrow_array_equal_approx(GArrowArray *array, + GArrowArray *other_array); +gboolean garrow_array_equal_range (GArrowArray *array, + gint64 start_index, + GArrowArray *other_array, + gint64 other_start_index, + gint64 end_index, + GArrowEqualOptions *options); + +gboolean garrow_array_is_null (GArrowArray *array, + gint64 i); +gboolean garrow_array_is_valid (GArrowArray *array, + gint64 i); +gint64 garrow_array_get_length (GArrowArray *array); +gint64 garrow_array_get_offset (GArrowArray *array); +gint64 garrow_array_get_n_nulls (GArrowArray *array); +GArrowBuffer *garrow_array_get_null_bitmap(GArrowArray *array); +GArrowDataType *garrow_array_get_value_data_type(GArrowArray *array); +GArrowType garrow_array_get_value_type(GArrowArray *array); +GArrowArray *garrow_array_slice (GArrowArray *array, + gint64 offset, + gint64 length); +gchar *garrow_array_to_string (GArrowArray *array, + GError **error); GARROW_AVAILABLE_IN_0_15 -GArrowArray * -garrow_array_view(GArrowArray *array, GArrowDataType *return_type, GError **error); - +GArrowArray *garrow_array_view(GArrowArray *array, + GArrowDataType *return_type, + GError **error); GARROW_AVAILABLE_IN_0_15 -gchar * -garrow_array_diff_unified(GArrowArray *array, GArrowArray *other_array); - +gchar *garrow_array_diff_unified(GArrowArray *array, + GArrowArray *other_array); GARROW_AVAILABLE_IN_4_0 -GArrowArray * -garrow_array_concatenate(GArrowArray *array, GList *other_arrays, GError **error); +GArrowArray *garrow_array_concatenate(GArrowArray *array, + GList *other_arrays, + GError **error); + #define GARROW_TYPE_NULL_ARRAY (garrow_null_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowNullArray, garrow_null_array, GARROW, NULL_ARRAY, GArrowArray) +G_DECLARE_DERIVABLE_TYPE(GArrowNullArray, + garrow_null_array, + GARROW, + NULL_ARRAY, + GArrowArray) struct _GArrowNullArrayClass { GArrowArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowNullArray * -garrow_null_array_new(gint64 length); +GArrowNullArray *garrow_null_array_new(gint64 length); + #define GARROW_TYPE_PRIMITIVE_ARRAY (garrow_primitive_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowPrimitiveArray, garrow_primitive_array, GARROW, PRIMITIVE_ARRAY, GArrowArray) +G_DECLARE_DERIVABLE_TYPE(GArrowPrimitiveArray, + garrow_primitive_array, + GARROW, + PRIMITIVE_ARRAY, + GArrowArray) struct _GArrowPrimitiveArrayClass { GArrowArrayClass parent_class; }; #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_1_0_FOR(garrow_primitive_array_get_data_buffer) GArrowBuffer * garrow_primitive_array_get_buffer(GArrowPrimitiveArray *array); @@ -158,233 +135,217 @@ GARROW_AVAILABLE_IN_1_0 GArrowBuffer * garrow_primitive_array_get_data_buffer(GArrowPrimitiveArray *array); + #define GARROW_TYPE_BOOLEAN_ARRAY (garrow_boolean_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowBooleanArray, garrow_boolean_array, GARROW, BOOLEAN_ARRAY, GArrowPrimitiveArray) +G_DECLARE_DERIVABLE_TYPE(GArrowBooleanArray, + garrow_boolean_array, + GARROW, + BOOLEAN_ARRAY, + GArrowPrimitiveArray) struct _GArrowBooleanArrayClass { GArrowPrimitiveArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowBooleanArray * -garrow_boolean_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowBooleanArray *garrow_boolean_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_boolean_array_get_value(GArrowBooleanArray *array, gint64 i); - -GARROW_AVAILABLE_IN_ALL -gboolean * -garrow_boolean_array_get_values(GArrowBooleanArray *array, gint64 *length); +gboolean garrow_boolean_array_get_value (GArrowBooleanArray *array, + gint64 i); +gboolean *garrow_boolean_array_get_values(GArrowBooleanArray *array, + gint64 *length); #define GARROW_TYPE_NUMERIC_ARRAY (garrow_numeric_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowNumericArray, garrow_numeric_array, GARROW, NUMERIC_ARRAY, GArrowPrimitiveArray) +G_DECLARE_DERIVABLE_TYPE(GArrowNumericArray, + garrow_numeric_array, + GARROW, + NUMERIC_ARRAY, + GArrowPrimitiveArray) struct _GArrowNumericArrayClass { GArrowPrimitiveArrayClass parent_class; }; + #define GARROW_TYPE_INT8_ARRAY (garrow_int8_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowInt8Array, garrow_int8_array, GARROW, INT8_ARRAY, GArrowNumericArray) +G_DECLARE_DERIVABLE_TYPE(GArrowInt8Array, + garrow_int8_array, + GARROW, + INT8_ARRAY, + GArrowNumericArray) struct _GArrowInt8ArrayClass { GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowInt8Array * -garrow_int8_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowInt8Array *garrow_int8_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -gint8 -garrow_int8_array_get_value(GArrowInt8Array *array, gint64 i); +gint8 garrow_int8_array_get_value(GArrowInt8Array *array, + gint64 i); +const gint8 *garrow_int8_array_get_values(GArrowInt8Array *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const gint8 * -garrow_int8_array_get_values(GArrowInt8Array *array, gint64 *length); #define GARROW_TYPE_UINT8_ARRAY (garrow_uint8_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowUInt8Array, garrow_uint8_array, GARROW, UINT8_ARRAY, GArrowNumericArray) +G_DECLARE_DERIVABLE_TYPE(GArrowUInt8Array, + garrow_uint8_array, + GARROW, + UINT8_ARRAY, + GArrowNumericArray) struct _GArrowUInt8ArrayClass { GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowUInt8Array * -garrow_uint8_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowUInt8Array *garrow_uint8_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -guint8 -garrow_uint8_array_get_value(GArrowUInt8Array *array, gint64 i); +guint8 garrow_uint8_array_get_value(GArrowUInt8Array *array, + gint64 i); +const guint8 *garrow_uint8_array_get_values(GArrowUInt8Array *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const guint8 * -garrow_uint8_array_get_values(GArrowUInt8Array *array, gint64 *length); #define GARROW_TYPE_INT16_ARRAY (garrow_int16_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowInt16Array, garrow_int16_array, GARROW, INT16_ARRAY, GArrowNumericArray) +G_DECLARE_DERIVABLE_TYPE(GArrowInt16Array, + garrow_int16_array, + GARROW, + INT16_ARRAY, + GArrowNumericArray) struct _GArrowInt16ArrayClass { GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowInt16Array * -garrow_int16_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowInt16Array *garrow_int16_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -gint16 -garrow_int16_array_get_value(GArrowInt16Array *array, gint64 i); +gint16 garrow_int16_array_get_value(GArrowInt16Array *array, + gint64 i); +const gint16 *garrow_int16_array_get_values(GArrowInt16Array *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const gint16 * -garrow_int16_array_get_values(GArrowInt16Array *array, gint64 *length); #define GARROW_TYPE_UINT16_ARRAY (garrow_uint16_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowUInt16Array, garrow_uint16_array, GARROW, UINT16_ARRAY, GArrowNumericArray) +G_DECLARE_DERIVABLE_TYPE(GArrowUInt16Array, + garrow_uint16_array, + GARROW, + UINT16_ARRAY, + GArrowNumericArray) struct _GArrowUInt16ArrayClass { GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowUInt16Array * -garrow_uint16_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowUInt16Array *garrow_uint16_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -guint16 -garrow_uint16_array_get_value(GArrowUInt16Array *array, gint64 i); +guint16 garrow_uint16_array_get_value(GArrowUInt16Array *array, + gint64 i); +const guint16 *garrow_uint16_array_get_values(GArrowUInt16Array *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const guint16 * -garrow_uint16_array_get_values(GArrowUInt16Array *array, gint64 *length); #define GARROW_TYPE_INT32_ARRAY (garrow_int32_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowInt32Array, garrow_int32_array, GARROW, INT32_ARRAY, GArrowNumericArray) +G_DECLARE_DERIVABLE_TYPE(GArrowInt32Array, + garrow_int32_array, + GARROW, + INT32_ARRAY, + GArrowNumericArray) struct _GArrowInt32ArrayClass { GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowInt32Array * -garrow_int32_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowInt32Array *garrow_int32_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -gint32 -garrow_int32_array_get_value(GArrowInt32Array *array, gint64 i); +gint32 garrow_int32_array_get_value(GArrowInt32Array *array, + gint64 i); +const gint32 *garrow_int32_array_get_values(GArrowInt32Array *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const gint32 * -garrow_int32_array_get_values(GArrowInt32Array *array, gint64 *length); #define GARROW_TYPE_UINT32_ARRAY (garrow_uint32_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowUInt32Array, garrow_uint32_array, GARROW, UINT32_ARRAY, GArrowNumericArray) +G_DECLARE_DERIVABLE_TYPE(GArrowUInt32Array, + garrow_uint32_array, + GARROW, + UINT32_ARRAY, + GArrowNumericArray) struct _GArrowUInt32ArrayClass { GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowUInt32Array * -garrow_uint32_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowUInt32Array *garrow_uint32_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -guint32 -garrow_uint32_array_get_value(GArrowUInt32Array *array, gint64 i); +guint32 garrow_uint32_array_get_value(GArrowUInt32Array *array, + gint64 i); +const guint32 *garrow_uint32_array_get_values(GArrowUInt32Array *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const guint32 * -garrow_uint32_array_get_values(GArrowUInt32Array *array, gint64 *length); #define GARROW_TYPE_INT64_ARRAY (garrow_int64_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowInt64Array, garrow_int64_array, GARROW, INT64_ARRAY, GArrowNumericArray) +G_DECLARE_DERIVABLE_TYPE(GArrowInt64Array, + garrow_int64_array, + GARROW, + INT64_ARRAY, + GArrowNumericArray) struct _GArrowInt64ArrayClass { GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowInt64Array * -garrow_int64_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowInt64Array *garrow_int64_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_int64_array_get_value(GArrowInt64Array *array, gint64 i); +gint64 garrow_int64_array_get_value(GArrowInt64Array *array, + gint64 i); +const gint64 *garrow_int64_array_get_values(GArrowInt64Array *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const gint64 * -garrow_int64_array_get_values(GArrowInt64Array *array, gint64 *length); #define GARROW_TYPE_UINT64_ARRAY (garrow_uint64_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowUInt64Array, garrow_uint64_array, GARROW, UINT64_ARRAY, GArrowNumericArray) +G_DECLARE_DERIVABLE_TYPE(GArrowUInt64Array, + garrow_uint64_array, + GARROW, + UINT64_ARRAY, + GArrowNumericArray) struct _GArrowUInt64ArrayClass { GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowUInt64Array * -garrow_uint64_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowUInt64Array *garrow_uint64_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -guint64 -garrow_uint64_array_get_value(GArrowUInt64Array *array, gint64 i); +guint64 garrow_uint64_array_get_value(GArrowUInt64Array *array, + gint64 i); +const guint64 *garrow_uint64_array_get_values(GArrowUInt64Array *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const guint64 * -garrow_uint64_array_get_values(GArrowUInt64Array *array, gint64 *length); #define GARROW_TYPE_HALF_FLOAT_ARRAY (garrow_half_float_array_get_type()) -GARROW_AVAILABLE_IN_11_0 G_DECLARE_DERIVABLE_TYPE(GArrowHalfFloatArray, garrow_half_float_array, GARROW, @@ -395,6 +356,7 @@ struct _GArrowHalfFloatArrayClass GArrowNumericArrayClass parent_class; }; + GARROW_AVAILABLE_IN_11_0 GArrowHalfFloatArray * garrow_half_float_array_new(gint64 length, @@ -404,96 +366,87 @@ garrow_half_float_array_new(gint64 length, GARROW_AVAILABLE_IN_11_0 guint16 -garrow_half_float_array_get_value(GArrowHalfFloatArray *array, gint64 i); +garrow_half_float_array_get_value(GArrowHalfFloatArray *array, + gint64 i); GARROW_AVAILABLE_IN_11_0 -const guint16 * -garrow_half_float_array_get_values(GArrowHalfFloatArray *array, gint64 *length); +const guint16* +garrow_half_float_array_get_values(GArrowHalfFloatArray *array, + gint64 *length); + #define GARROW_TYPE_FLOAT_ARRAY (garrow_float_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowFloatArray, garrow_float_array, GARROW, FLOAT_ARRAY, GArrowNumericArray) +G_DECLARE_DERIVABLE_TYPE(GArrowFloatArray, + garrow_float_array, + GARROW, + FLOAT_ARRAY, + GArrowNumericArray) struct _GArrowFloatArrayClass { GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowFloatArray * -garrow_float_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowFloatArray *garrow_float_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -gfloat -garrow_float_array_get_value(GArrowFloatArray *array, gint64 i); +gfloat garrow_float_array_get_value(GArrowFloatArray *array, + gint64 i); +const gfloat *garrow_float_array_get_values(GArrowFloatArray *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const gfloat * -garrow_float_array_get_values(GArrowFloatArray *array, gint64 *length); #define GARROW_TYPE_DOUBLE_ARRAY (garrow_double_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowDoubleArray, garrow_double_array, GARROW, DOUBLE_ARRAY, GArrowNumericArray) +G_DECLARE_DERIVABLE_TYPE(GArrowDoubleArray, + garrow_double_array, + GARROW, + DOUBLE_ARRAY, + GArrowNumericArray) struct _GArrowDoubleArrayClass { GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowDoubleArray * -garrow_double_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowDoubleArray *garrow_double_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -gdouble -garrow_double_array_get_value(GArrowDoubleArray *array, gint64 i); +gdouble garrow_double_array_get_value(GArrowDoubleArray *array, + gint64 i); +const gdouble *garrow_double_array_get_values(GArrowDoubleArray *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const gdouble * -garrow_double_array_get_values(GArrowDoubleArray *array, gint64 *length); #define GARROW_TYPE_BINARY_ARRAY (garrow_binary_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowBinaryArray, garrow_binary_array, GARROW, BINARY_ARRAY, GArrowArray) +G_DECLARE_DERIVABLE_TYPE(GArrowBinaryArray, + garrow_binary_array, + GARROW, + BINARY_ARRAY, + GArrowArray) struct _GArrowBinaryArrayClass { GArrowArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowBinaryArray * -garrow_binary_array_new(gint64 length, - GArrowBuffer *value_offsets, - GArrowBuffer *value_data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -GARROW_AVAILABLE_IN_ALL -GBytes * -garrow_binary_array_get_value(GArrowBinaryArray *array, gint64 i); +GArrowBinaryArray *garrow_binary_array_new(gint64 length, + GArrowBuffer *value_offsets, + GArrowBuffer *value_data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); +GBytes *garrow_binary_array_get_value(GArrowBinaryArray *array, + gint64 i); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_1_0_FOR(garrow_binary_array_get_data_buffer) -GArrowBuffer * -garrow_binary_array_get_buffer(GArrowBinaryArray *array); +GArrowBuffer *garrow_binary_array_get_buffer(GArrowBinaryArray *array); #endif GARROW_AVAILABLE_IN_1_0 -GArrowBuffer * -garrow_binary_array_get_data_buffer(GArrowBinaryArray *array); +GArrowBuffer *garrow_binary_array_get_data_buffer(GArrowBinaryArray *array); +GArrowBuffer *garrow_binary_array_get_offsets_buffer(GArrowBinaryArray *array); -GARROW_AVAILABLE_IN_ALL -GArrowBuffer * -garrow_binary_array_get_offsets_buffer(GArrowBinaryArray *array); #define GARROW_TYPE_LARGE_BINARY_ARRAY (garrow_large_binary_array_get_type()) -GARROW_AVAILABLE_IN_0_16 G_DECLARE_DERIVABLE_TYPE(GArrowLargeBinaryArray, garrow_large_binary_array, GARROW, @@ -505,16 +458,15 @@ struct _GArrowLargeBinaryArrayClass }; GARROW_AVAILABLE_IN_0_16 -GArrowLargeBinaryArray * -garrow_large_binary_array_new(gint64 length, - GArrowBuffer *value_offsets, - GArrowBuffer *value_data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowLargeBinaryArray *garrow_large_binary_array_new(gint64 length, + GArrowBuffer *value_offsets, + GArrowBuffer *value_data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); GARROW_AVAILABLE_IN_0_16 -GBytes * -garrow_large_binary_array_get_value(GArrowLargeBinaryArray *array, gint64 i); +GBytes *garrow_large_binary_array_get_value(GArrowLargeBinaryArray *array, + gint64 i); #ifndef GARROW_DISABLE_DEPRECATED GARROW_DEPRECATED_IN_1_0_FOR(garrow_large_binary_array_get_data_buffer) GARROW_AVAILABLE_IN_0_16 @@ -524,34 +476,32 @@ garrow_large_binary_array_get_buffer(GArrowLargeBinaryArray *array); GARROW_AVAILABLE_IN_1_0 GArrowBuffer * garrow_large_binary_array_get_data_buffer(GArrowLargeBinaryArray *array); - GARROW_AVAILABLE_IN_0_16 -GArrowBuffer * -garrow_large_binary_array_get_offsets_buffer(GArrowLargeBinaryArray *array); +GArrowBuffer *garrow_large_binary_array_get_offsets_buffer(GArrowLargeBinaryArray *array); + #define GARROW_TYPE_STRING_ARRAY (garrow_string_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowStringArray, garrow_string_array, GARROW, STRING_ARRAY, GArrowBinaryArray) +G_DECLARE_DERIVABLE_TYPE(GArrowStringArray, + garrow_string_array, + GARROW, + STRING_ARRAY, + GArrowBinaryArray) struct _GArrowStringArrayClass { GArrowBinaryArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowStringArray * -garrow_string_array_new(gint64 length, - GArrowBuffer *value_offsets, - GArrowBuffer *value_data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowStringArray *garrow_string_array_new(gint64 length, + GArrowBuffer *value_offsets, + GArrowBuffer *value_data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +gchar *garrow_string_array_get_string(GArrowStringArray *array, + gint64 i); -GARROW_AVAILABLE_IN_ALL -gchar * -garrow_string_array_get_string(GArrowStringArray *array, gint64 i); #define GARROW_TYPE_LARGE_STRING_ARRAY (garrow_large_string_array_get_type()) -GARROW_AVAILABLE_IN_0_16 G_DECLARE_DERIVABLE_TYPE(GArrowLargeStringArray, garrow_large_string_array, GARROW, @@ -563,67 +513,62 @@ struct _GArrowLargeStringArrayClass }; GARROW_AVAILABLE_IN_0_16 -GArrowLargeStringArray * -garrow_large_string_array_new(gint64 length, - GArrowBuffer *value_offsets, - GArrowBuffer *value_data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowLargeStringArray *garrow_large_string_array_new(gint64 length, + GArrowBuffer *value_offsets, + GArrowBuffer *value_data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); GARROW_AVAILABLE_IN_0_16 -gchar * -garrow_large_string_array_get_string(GArrowLargeStringArray *array, gint64 i); +gchar *garrow_large_string_array_get_string(GArrowLargeStringArray *array, + gint64 i); + #define GARROW_TYPE_DATE32_ARRAY (garrow_date32_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowDate32Array, garrow_date32_array, GARROW, DATE32_ARRAY, GArrowNumericArray) +G_DECLARE_DERIVABLE_TYPE(GArrowDate32Array, + garrow_date32_array, + GARROW, + DATE32_ARRAY, + GArrowNumericArray) struct _GArrowDate32ArrayClass { GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowDate32Array * -garrow_date32_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowDate32Array *garrow_date32_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -gint32 -garrow_date32_array_get_value(GArrowDate32Array *array, gint64 i); +gint32 garrow_date32_array_get_value(GArrowDate32Array *array, + gint64 i); +const gint32 *garrow_date32_array_get_values(GArrowDate32Array *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const gint32 * -garrow_date32_array_get_values(GArrowDate32Array *array, gint64 *length); #define GARROW_TYPE_DATE64_ARRAY (garrow_date64_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowDate64Array, garrow_date64_array, GARROW, DATE64_ARRAY, GArrowNumericArray) +G_DECLARE_DERIVABLE_TYPE(GArrowDate64Array, + garrow_date64_array, + GARROW, + DATE64_ARRAY, + GArrowNumericArray) struct _GArrowDate64ArrayClass { GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowDate64Array * -garrow_date64_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowDate64Array *garrow_date64_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_date64_array_get_value(GArrowDate64Array *array, gint64 i); +gint64 garrow_date64_array_get_value(GArrowDate64Array *array, + gint64 i); +const gint64 *garrow_date64_array_get_values(GArrowDate64Array *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const gint64 * -garrow_date64_array_get_values(GArrowDate64Array *array, gint64 *length); #define GARROW_TYPE_TIMESTAMP_ARRAY (garrow_timestamp_array_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowTimestampArray, garrow_timestamp_array, GARROW, @@ -634,74 +579,66 @@ struct _GArrowTimestampArrayClass GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowTimestampArray * -garrow_timestamp_array_new(GArrowTimestampDataType *data_type, - gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowTimestampArray *garrow_timestamp_array_new(GArrowTimestampDataType *data_type, + gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_timestamp_array_get_value(GArrowTimestampArray *array, gint64 i); +gint64 garrow_timestamp_array_get_value(GArrowTimestampArray *array, + gint64 i); +const gint64 *garrow_timestamp_array_get_values(GArrowTimestampArray *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const gint64 * -garrow_timestamp_array_get_values(GArrowTimestampArray *array, gint64 *length); #define GARROW_TYPE_TIME32_ARRAY (garrow_time32_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowTime32Array, garrow_time32_array, GARROW, TIME32_ARRAY, GArrowNumericArray) +G_DECLARE_DERIVABLE_TYPE(GArrowTime32Array, + garrow_time32_array, + GARROW, + TIME32_ARRAY, + GArrowNumericArray) struct _GArrowTime32ArrayClass { GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowTime32Array * -garrow_time32_array_new(GArrowTime32DataType *data_type, - gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowTime32Array *garrow_time32_array_new(GArrowTime32DataType *data_type, + gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -gint32 -garrow_time32_array_get_value(GArrowTime32Array *array, gint64 i); +gint32 garrow_time32_array_get_value(GArrowTime32Array *array, + gint64 i); +const gint32 *garrow_time32_array_get_values(GArrowTime32Array *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const gint32 * -garrow_time32_array_get_values(GArrowTime32Array *array, gint64 *length); #define GARROW_TYPE_TIME64_ARRAY (garrow_time64_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowTime64Array, garrow_time64_array, GARROW, TIME64_ARRAY, GArrowNumericArray) +G_DECLARE_DERIVABLE_TYPE(GArrowTime64Array, + garrow_time64_array, + GARROW, + TIME64_ARRAY, + GArrowNumericArray) struct _GArrowTime64ArrayClass { GArrowNumericArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowTime64Array * -garrow_time64_array_new(GArrowTime64DataType *data_type, - gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowTime64Array *garrow_time64_array_new(GArrowTime64DataType *data_type, + gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_time64_array_get_value(GArrowTime64Array *array, gint64 i); +gint64 garrow_time64_array_get_value(GArrowTime64Array *array, + gint64 i); +const gint64 *garrow_time64_array_get_values(GArrowTime64Array *array, + gint64 *length); -GARROW_AVAILABLE_IN_ALL -const gint64 * -garrow_time64_array_get_values(GArrowTime64Array *array, gint64 *length); -#define GARROW_TYPE_MONTH_INTERVAL_ARRAY (garrow_month_interval_array_get_type()) -GARROW_AVAILABLE_IN_8_0 +#define GARROW_TYPE_MONTH_INTERVAL_ARRAY \ + (garrow_month_interval_array_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowMonthIntervalArray, garrow_month_interval_array, GARROW, @@ -720,14 +657,16 @@ garrow_month_interval_array_new(gint64 length, gint64 n_nulls); GARROW_AVAILABLE_IN_8_0 gint32 -garrow_month_interval_array_get_value(GArrowMonthIntervalArray *array, gint64 i); - +garrow_month_interval_array_get_value(GArrowMonthIntervalArray *array, + gint64 i); GARROW_AVAILABLE_IN_8_0 const gint32 * -garrow_month_interval_array_get_values(GArrowMonthIntervalArray *array, gint64 *length); +garrow_month_interval_array_get_values(GArrowMonthIntervalArray *array, + gint64 *length); -#define GARROW_TYPE_DAY_TIME_INTERVAL_ARRAY (garrow_day_time_interval_array_get_type()) -GARROW_AVAILABLE_IN_8_0 + +#define GARROW_TYPE_DAY_TIME_INTERVAL_ARRAY \ + (garrow_day_time_interval_array_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowDayTimeIntervalArray, garrow_day_time_interval_array, GARROW, @@ -746,15 +685,15 @@ garrow_day_time_interval_array_new(gint64 length, gint64 n_nulls); GARROW_AVAILABLE_IN_8_0 GArrowDayMillisecond * -garrow_day_time_interval_array_get_value(GArrowDayTimeIntervalArray *array, gint64 i); - +garrow_day_time_interval_array_get_value(GArrowDayTimeIntervalArray *array, + gint64 i); GARROW_AVAILABLE_IN_8_0 GList * garrow_day_time_interval_array_get_values(GArrowDayTimeIntervalArray *array); -#define GARROW_TYPE_MONTH_DAY_NANO_INTERVAL_ARRAY \ + +#define GARROW_TYPE_MONTH_DAY_NANO_INTERVAL_ARRAY \ (garrow_month_day_nano_interval_array_get_type()) -GARROW_AVAILABLE_IN_8_0 G_DECLARE_DERIVABLE_TYPE(GArrowMonthDayNanoIntervalArray, garrow_month_day_nano_interval_array, GARROW, @@ -773,14 +712,16 @@ garrow_month_day_nano_interval_array_new(gint64 length, gint64 n_nulls); GARROW_AVAILABLE_IN_8_0 GArrowMonthDayNano * -garrow_month_day_nano_interval_array_get_value(GArrowMonthDayNanoIntervalArray *array, - gint64 i); +garrow_month_day_nano_interval_array_get_value( + GArrowMonthDayNanoIntervalArray *array, + gint64 i); GARROW_AVAILABLE_IN_8_0 GList * -garrow_month_day_nano_interval_array_get_values(GArrowMonthDayNanoIntervalArray *array); +garrow_month_day_nano_interval_array_get_values( + GArrowMonthDayNanoIntervalArray *array); + #define GARROW_TYPE_FIXED_SIZE_BINARY_ARRAY (garrow_fixed_size_binary_array_get_type()) -GARROW_AVAILABLE_IN_3_0 G_DECLARE_DERIVABLE_TYPE(GArrowFixedSizeBinaryArray, garrow_fixed_size_binary_array, GARROW, @@ -801,17 +742,16 @@ garrow_fixed_size_binary_array_new(GArrowFixedSizeBinaryDataType *data_type, GARROW_AVAILABLE_IN_3_0 gint32 garrow_fixed_size_binary_array_get_byte_width(GArrowFixedSizeBinaryArray *array); - GARROW_AVAILABLE_IN_3_0 GBytes * -garrow_fixed_size_binary_array_get_value(GArrowFixedSizeBinaryArray *array, gint64 i); - +garrow_fixed_size_binary_array_get_value(GArrowFixedSizeBinaryArray *array, + gint64 i); GARROW_AVAILABLE_IN_3_0 GBytes * garrow_fixed_size_binary_array_get_values_bytes(GArrowFixedSizeBinaryArray *array); + #define GARROW_TYPE_DECIMAL128_ARRAY (garrow_decimal128_array_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowDecimal128Array, garrow_decimal128_array, GARROW, @@ -822,16 +762,12 @@ struct _GArrowDecimal128ArrayClass GArrowFixedSizeBinaryArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -gchar * -garrow_decimal128_array_format_value(GArrowDecimal128Array *array, gint64 i); - -GARROW_AVAILABLE_IN_ALL -GArrowDecimal128 * -garrow_decimal128_array_get_value(GArrowDecimal128Array *array, gint64 i); +gchar *garrow_decimal128_array_format_value(GArrowDecimal128Array *array, + gint64 i); +GArrowDecimal128 *garrow_decimal128_array_get_value(GArrowDecimal128Array *array, + gint64 i); #define GARROW_TYPE_DECIMAL256_ARRAY (garrow_decimal256_array_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowDecimal256Array, garrow_decimal256_array, GARROW, @@ -842,16 +778,15 @@ struct _GArrowDecimal256ArrayClass GArrowFixedSizeBinaryArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -gchar * -garrow_decimal256_array_format_value(GArrowDecimal256Array *array, gint64 i); +gchar *garrow_decimal256_array_format_value(GArrowDecimal256Array *array, + gint64 i); +GArrowDecimal256 *garrow_decimal256_array_get_value(GArrowDecimal256Array *array, + gint64 i); -GARROW_AVAILABLE_IN_ALL -GArrowDecimal256 * -garrow_decimal256_array_get_value(GArrowDecimal256Array *array, gint64 i); GARROW_AVAILABLE_IN_3_0 GArrowArray * garrow_extension_array_get_storage(GArrowExtensionArray *array); + G_END_DECLS diff --git a/c_glib/arrow-glib/basic-array.hpp b/c_glib/arrow-glib/basic-array.hpp index b2a7ed6ae07..3ef1c196976 100644 --- a/c_glib/arrow-glib/basic-array.hpp +++ b/c_glib/arrow-glib/basic-array.hpp @@ -23,40 +23,28 @@ #include -GARROW_EXTERN arrow::EqualOptions * garrow_equal_options_get_raw(GArrowEqualOptions *equal_options); -GARROW_EXTERN GArrowArray * garrow_array_new_raw(std::shared_ptr *arrow_array); - -GARROW_EXTERN GArrowArray * garrow_array_new_raw(std::shared_ptr *arrow_array, const gchar *first_property_name, ...); - -GARROW_EXTERN GArrowArray * garrow_array_new_raw_valist(std::shared_ptr *arrow_array, const gchar *first_property_name, va_list args); - -GARROW_EXTERN GArrowExtensionArray * garrow_extension_array_new_raw(std::shared_ptr *arrow_array, GArrowArray *storage); - -GARROW_EXTERN std::shared_ptr garrow_array_get_raw(GArrowArray *array); template inline std::shared_ptr::ArrayType> -garrow_array_get_raw(GArrowArray *array) -{ +garrow_array_get_raw(GArrowArray *array) { auto arrow_array = garrow_array_get_raw(array); - return std::static_pointer_cast::ArrayType>( - arrow_array); + return std::static_pointer_cast::ArrayType>(arrow_array); } diff --git a/c_glib/arrow-glib/basic-data-type.cpp b/c_glib/arrow-glib/basic-data-type.cpp index d1c06000065..98b2c921045 100644 --- a/c_glib/arrow-glib/basic-data-type.cpp +++ b/c_glib/arrow-glib/basic-data-type.cpp @@ -125,8 +125,7 @@ G_BEGIN_DECLS * data types. */ -struct GArrowDataTypePrivate -{ +struct GArrowDataTypePrivate { std::shared_ptr data_type; }; @@ -134,11 +133,14 @@ enum { PROP_DATA_TYPE = 1 }; -G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowDataType, garrow_data_type, G_TYPE_OBJECT) +G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowDataType, + garrow_data_type, + G_TYPE_OBJECT) -#define GARROW_DATA_TYPE_GET_PRIVATE(obj) \ - static_cast( \ - garrow_data_type_get_instance_private(GARROW_DATA_TYPE(obj))) +#define GARROW_DATA_TYPE_GET_PRIVATE(obj) \ + static_cast( \ + garrow_data_type_get_instance_private( \ + GARROW_DATA_TYPE(obj))) static void garrow_data_type_finalize(GObject *object) @@ -163,7 +165,8 @@ garrow_data_type_set_property(GObject *object, { auto data_type = g_value_get_pointer(value); if (data_type) { - priv->data_type = *static_cast *>(data_type); + priv->data_type = + *static_cast *>(data_type); } } break; @@ -190,7 +193,7 @@ static void garrow_data_type_init(GArrowDataType *object) { auto priv = GARROW_DATA_TYPE_GET_PRIVATE(object); - new (&priv->data_type) std::shared_ptr; + new(&priv->data_type) std::shared_ptr; } static void @@ -201,15 +204,15 @@ garrow_data_type_class_init(GArrowDataTypeClass *klass) gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_data_type_finalize; + gobject_class->finalize = garrow_data_type_finalize; gobject_class->set_property = garrow_data_type_set_property; gobject_class->get_property = garrow_data_type_get_property; - spec = g_param_spec_pointer( - "data-type", - "Data type", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("data-type", + "Data type", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_DATA_TYPE, spec); } @@ -274,7 +277,8 @@ garrow_data_type_export(GArrowDataType *data_type, GError **error) * otherwise. */ gboolean -garrow_data_type_equal(GArrowDataType *data_type, GArrowDataType *other_data_type) +garrow_data_type_equal(GArrowDataType *data_type, + GArrowDataType *other_data_type) { const auto arrow_data_type = garrow_data_type_get_raw(data_type); const auto arrow_other_data_type = garrow_data_type_get_raw(other_data_type); @@ -328,6 +332,7 @@ garrow_data_type_get_name(GArrowDataType *data_type) return g_strdup(name.c_str()); } + G_DEFINE_ABSTRACT_TYPE(GArrowFixedWidthDataType, garrow_fixed_width_data_type, GARROW_TYPE_DATA_TYPE) @@ -351,13 +356,17 @@ garrow_fixed_width_data_type_class_init(GArrowFixedWidthDataTypeClass *klass) gint garrow_fixed_width_data_type_get_bit_width(GArrowFixedWidthDataType *data_type) { - const auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); + const auto arrow_data_type = + garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); const auto arrow_fixed_width_type = std::static_pointer_cast(arrow_data_type); return arrow_fixed_width_type->bit_width(); } -G_DEFINE_TYPE(GArrowNullDataType, garrow_null_data_type, GARROW_TYPE_DATA_TYPE) + +G_DEFINE_TYPE(GArrowNullDataType, + garrow_null_data_type, + GARROW_TYPE_DATA_TYPE) static void garrow_null_data_type_init(GArrowNullDataType *object) @@ -379,11 +388,14 @@ garrow_null_data_type_new(void) { auto arrow_data_type = arrow::null(); - GArrowNullDataType *data_type = GARROW_NULL_DATA_TYPE( - g_object_new(GARROW_TYPE_NULL_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowNullDataType *data_type = + GARROW_NULL_DATA_TYPE(g_object_new(GARROW_TYPE_NULL_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } + G_DEFINE_TYPE(GArrowBooleanDataType, garrow_boolean_data_type, GARROW_TYPE_FIXED_WIDTH_DATA_TYPE) @@ -408,11 +420,14 @@ garrow_boolean_data_type_new(void) { auto arrow_data_type = arrow::boolean(); - GArrowBooleanDataType *data_type = GARROW_BOOLEAN_DATA_TYPE( - g_object_new(GARROW_TYPE_BOOLEAN_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowBooleanDataType *data_type = + GARROW_BOOLEAN_DATA_TYPE(g_object_new(GARROW_TYPE_BOOLEAN_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } + G_DEFINE_ABSTRACT_TYPE(GArrowNumericDataType, garrow_numeric_data_type, GARROW_TYPE_FIXED_WIDTH_DATA_TYPE) @@ -427,6 +442,7 @@ garrow_numeric_data_type_class_init(GArrowNumericDataTypeClass *klass) { } + G_DEFINE_ABSTRACT_TYPE(GArrowIntegerDataType, garrow_integer_data_type, GARROW_TYPE_NUMERIC_DATA_TYPE) @@ -452,13 +468,16 @@ garrow_integer_data_type_class_init(GArrowIntegerDataTypeClass *klass) gboolean garrow_integer_data_type_is_signed(GArrowIntegerDataType *data_type) { - const auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); + const auto arrow_data_type = + garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); const auto arrow_integer_type = std::static_pointer_cast(arrow_data_type); return arrow_integer_type->is_signed(); } -G_DEFINE_TYPE(GArrowInt8DataType, garrow_int8_data_type, GARROW_TYPE_INTEGER_DATA_TYPE) +G_DEFINE_TYPE(GArrowInt8DataType, + garrow_int8_data_type, + GARROW_TYPE_INTEGER_DATA_TYPE) static void garrow_int8_data_type_init(GArrowInt8DataType *object) @@ -480,12 +499,17 @@ garrow_int8_data_type_new(void) { auto arrow_data_type = arrow::int8(); - GArrowInt8DataType *data_type = GARROW_INT8_DATA_TYPE( - g_object_new(GARROW_TYPE_INT8_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowInt8DataType *data_type = + GARROW_INT8_DATA_TYPE(g_object_new(GARROW_TYPE_INT8_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } -G_DEFINE_TYPE(GArrowUInt8DataType, garrow_uint8_data_type, GARROW_TYPE_INTEGER_DATA_TYPE) + +G_DEFINE_TYPE(GArrowUInt8DataType, + garrow_uint8_data_type, + GARROW_TYPE_INTEGER_DATA_TYPE) static void garrow_uint8_data_type_init(GArrowUInt8DataType *object) @@ -507,12 +531,17 @@ garrow_uint8_data_type_new(void) { auto arrow_data_type = arrow::uint8(); - GArrowUInt8DataType *data_type = GARROW_UINT8_DATA_TYPE( - g_object_new(GARROW_TYPE_UINT8_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowUInt8DataType *data_type = + GARROW_UINT8_DATA_TYPE(g_object_new(GARROW_TYPE_UINT8_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } -G_DEFINE_TYPE(GArrowInt16DataType, garrow_int16_data_type, GARROW_TYPE_INTEGER_DATA_TYPE) + +G_DEFINE_TYPE(GArrowInt16DataType, + garrow_int16_data_type, + GARROW_TYPE_INTEGER_DATA_TYPE) static void garrow_int16_data_type_init(GArrowInt16DataType *object) @@ -534,11 +563,14 @@ garrow_int16_data_type_new(void) { auto arrow_data_type = arrow::int16(); - GArrowInt16DataType *data_type = GARROW_INT16_DATA_TYPE( - g_object_new(GARROW_TYPE_INT16_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowInt16DataType *data_type = + GARROW_INT16_DATA_TYPE(g_object_new(GARROW_TYPE_INT16_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } + G_DEFINE_TYPE(GArrowUInt16DataType, garrow_uint16_data_type, GARROW_TYPE_INTEGER_DATA_TYPE) @@ -563,12 +595,17 @@ garrow_uint16_data_type_new(void) { auto arrow_data_type = arrow::uint16(); - GArrowUInt16DataType *data_type = GARROW_UINT16_DATA_TYPE( - g_object_new(GARROW_TYPE_UINT16_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowUInt16DataType *data_type = + GARROW_UINT16_DATA_TYPE(g_object_new(GARROW_TYPE_UINT16_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } -G_DEFINE_TYPE(GArrowInt32DataType, garrow_int32_data_type, GARROW_TYPE_INTEGER_DATA_TYPE) + +G_DEFINE_TYPE(GArrowInt32DataType, + garrow_int32_data_type, + GARROW_TYPE_INTEGER_DATA_TYPE) static void garrow_int32_data_type_init(GArrowInt32DataType *object) @@ -590,11 +627,14 @@ garrow_int32_data_type_new(void) { auto arrow_data_type = arrow::int32(); - GArrowInt32DataType *data_type = GARROW_INT32_DATA_TYPE( - g_object_new(GARROW_TYPE_INT32_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowInt32DataType *data_type = + GARROW_INT32_DATA_TYPE(g_object_new(GARROW_TYPE_INT32_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } + G_DEFINE_TYPE(GArrowUInt32DataType, garrow_uint32_data_type, GARROW_TYPE_INTEGER_DATA_TYPE) @@ -619,12 +659,17 @@ garrow_uint32_data_type_new(void) { auto arrow_data_type = arrow::uint32(); - GArrowUInt32DataType *data_type = GARROW_UINT32_DATA_TYPE( - g_object_new(GARROW_TYPE_UINT32_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowUInt32DataType *data_type = + GARROW_UINT32_DATA_TYPE(g_object_new(GARROW_TYPE_UINT32_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } -G_DEFINE_TYPE(GArrowInt64DataType, garrow_int64_data_type, GARROW_TYPE_INTEGER_DATA_TYPE) + +G_DEFINE_TYPE(GArrowInt64DataType, + garrow_int64_data_type, + GARROW_TYPE_INTEGER_DATA_TYPE) static void garrow_int64_data_type_init(GArrowInt64DataType *object) @@ -646,11 +691,14 @@ garrow_int64_data_type_new(void) { auto arrow_data_type = arrow::int64(); - GArrowInt64DataType *data_type = GARROW_INT64_DATA_TYPE( - g_object_new(GARROW_TYPE_INT64_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowInt64DataType *data_type = + GARROW_INT64_DATA_TYPE(g_object_new(GARROW_TYPE_INT64_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } + G_DEFINE_TYPE(GArrowUInt64DataType, garrow_uint64_data_type, GARROW_TYPE_INTEGER_DATA_TYPE) @@ -675,11 +723,14 @@ garrow_uint64_data_type_new(void) { auto arrow_data_type = arrow::uint64(); - GArrowUInt64DataType *data_type = GARROW_UINT64_DATA_TYPE( - g_object_new(GARROW_TYPE_UINT64_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowUInt64DataType *data_type = + GARROW_UINT64_DATA_TYPE(g_object_new(GARROW_TYPE_UINT64_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } + G_DEFINE_ABSTRACT_TYPE(GArrowFloatingPointDataType, garrow_floating_point_data_type, GARROW_TYPE_NUMERIC_DATA_TYPE) @@ -694,6 +745,7 @@ garrow_floating_point_data_type_class_init(GArrowFloatingPointDataTypeClass *kla { } + G_DEFINE_TYPE(GArrowHalfFloatDataType, garrow_half_float_data_type, GARROW_TYPE_FLOATING_POINT_DATA_TYPE) @@ -719,11 +771,14 @@ GArrowHalfFloatDataType * garrow_half_float_data_type_new(void) { auto arrow_data_type = arrow::float16(); - auto data_type = GARROW_HALF_FLOAT_DATA_TYPE( - g_object_new(GARROW_TYPE_HALF_FLOAT_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + auto data_type = + GARROW_HALF_FLOAT_DATA_TYPE(g_object_new(GARROW_TYPE_HALF_FLOAT_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } + G_DEFINE_TYPE(GArrowFloatDataType, garrow_float_data_type, GARROW_TYPE_FLOATING_POINT_DATA_TYPE) @@ -748,11 +803,14 @@ garrow_float_data_type_new(void) { auto arrow_data_type = arrow::float32(); - GArrowFloatDataType *data_type = GARROW_FLOAT_DATA_TYPE( - g_object_new(GARROW_TYPE_FLOAT_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowFloatDataType *data_type = + GARROW_FLOAT_DATA_TYPE(g_object_new(GARROW_TYPE_FLOAT_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } + G_DEFINE_TYPE(GArrowDoubleDataType, garrow_double_data_type, GARROW_TYPE_FLOATING_POINT_DATA_TYPE) @@ -777,12 +835,17 @@ garrow_double_data_type_new(void) { auto arrow_data_type = arrow::float64(); - GArrowDoubleDataType *data_type = GARROW_DOUBLE_DATA_TYPE( - g_object_new(GARROW_TYPE_DOUBLE_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowDoubleDataType *data_type = + GARROW_DOUBLE_DATA_TYPE(g_object_new(GARROW_TYPE_DOUBLE_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } -G_DEFINE_TYPE(GArrowBinaryDataType, garrow_binary_data_type, GARROW_TYPE_DATA_TYPE) + +G_DEFINE_TYPE(GArrowBinaryDataType, + garrow_binary_data_type, + GARROW_TYPE_DATA_TYPE) static void garrow_binary_data_type_init(GArrowBinaryDataType *object) @@ -804,11 +867,14 @@ garrow_binary_data_type_new(void) { auto arrow_data_type = arrow::binary(); - GArrowBinaryDataType *data_type = GARROW_BINARY_DATA_TYPE( - g_object_new(GARROW_TYPE_BINARY_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowBinaryDataType *data_type = + GARROW_BINARY_DATA_TYPE(g_object_new(GARROW_TYPE_BINARY_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } + G_DEFINE_TYPE(GArrowFixedSizeBinaryDataType, garrow_fixed_size_binary_data_type, GARROW_TYPE_FIXED_WIDTH_DATA_TYPE) @@ -836,11 +902,10 @@ garrow_fixed_size_binary_data_type_new(gint32 byte_width) { auto arrow_fixed_size_binary_data_type = arrow::fixed_size_binary(byte_width); - auto fixed_size_binary_data_type = GARROW_FIXED_SIZE_BINARY_DATA_TYPE( - g_object_new(GARROW_TYPE_FIXED_SIZE_BINARY_DATA_TYPE, - "data-type", - &arrow_fixed_size_binary_data_type, - NULL)); + auto fixed_size_binary_data_type = + GARROW_FIXED_SIZE_BINARY_DATA_TYPE(g_object_new(GARROW_TYPE_FIXED_SIZE_BINARY_DATA_TYPE, + "data-type", &arrow_fixed_size_binary_data_type, + NULL)); return fixed_size_binary_data_type; } @@ -853,15 +918,16 @@ garrow_fixed_size_binary_data_type_new(gint32 byte_width) * Since: 0.12.0 */ gint32 -garrow_fixed_size_binary_data_type_get_byte_width( - GArrowFixedSizeBinaryDataType *data_type) +garrow_fixed_size_binary_data_type_get_byte_width(GArrowFixedSizeBinaryDataType *data_type) { - const auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); + const auto arrow_data_type = + garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); const auto arrow_fixed_size_binary_type = std::static_pointer_cast(arrow_data_type); return arrow_fixed_size_binary_type->byte_width(); } + G_DEFINE_TYPE(GArrowLargeBinaryDataType, garrow_large_binary_data_type, GARROW_TYPE_DATA_TYPE) @@ -890,13 +956,15 @@ garrow_large_binary_data_type_new(void) GArrowLargeBinaryDataType *data_type = GARROW_LARGE_BINARY_DATA_TYPE(g_object_new(GARROW_TYPE_LARGE_BINARY_DATA_TYPE, - "data-type", - &arrow_data_type, + "data-type", &arrow_data_type, NULL)); return data_type; } -G_DEFINE_TYPE(GArrowStringDataType, garrow_string_data_type, GARROW_TYPE_DATA_TYPE) + +G_DEFINE_TYPE(GArrowStringDataType, + garrow_string_data_type, + GARROW_TYPE_DATA_TYPE) static void garrow_string_data_type_init(GArrowStringDataType *object) @@ -918,11 +986,14 @@ garrow_string_data_type_new(void) { auto arrow_data_type = arrow::utf8(); - GArrowStringDataType *data_type = GARROW_STRING_DATA_TYPE( - g_object_new(GARROW_TYPE_STRING_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowStringDataType *data_type = + GARROW_STRING_DATA_TYPE(g_object_new(GARROW_TYPE_STRING_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } + G_DEFINE_TYPE(GArrowLargeStringDataType, garrow_large_string_data_type, GARROW_TYPE_DATA_TYPE) @@ -951,12 +1022,12 @@ garrow_large_string_data_type_new(void) GArrowLargeStringDataType *data_type = GARROW_LARGE_STRING_DATA_TYPE(g_object_new(GARROW_TYPE_LARGE_STRING_DATA_TYPE, - "data-type", - &arrow_data_type, + "data-type", &arrow_data_type, NULL)); return data_type; } + G_DEFINE_ABSTRACT_TYPE(GArrowTemporalDataType, garrow_temporal_data_type, GARROW_TYPE_FIXED_WIDTH_DATA_TYPE) @@ -971,6 +1042,7 @@ garrow_temporal_data_type_class_init(GArrowTemporalDataTypeClass *klass) { } + G_DEFINE_TYPE(GArrowDate32DataType, garrow_date32_data_type, GARROW_TYPE_TEMPORAL_DATA_TYPE) @@ -998,11 +1070,14 @@ garrow_date32_data_type_new(void) { auto arrow_data_type = arrow::date32(); - GArrowDate32DataType *data_type = GARROW_DATE32_DATA_TYPE( - g_object_new(GARROW_TYPE_DATE32_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowDate32DataType *data_type = + GARROW_DATE32_DATA_TYPE(g_object_new(GARROW_TYPE_DATE32_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } + G_DEFINE_TYPE(GArrowDate64DataType, garrow_date64_data_type, GARROW_TYPE_TEMPORAL_DATA_TYPE) @@ -1030,13 +1105,15 @@ garrow_date64_data_type_new(void) { auto arrow_data_type = arrow::date64(); - GArrowDate64DataType *data_type = GARROW_DATE64_DATA_TYPE( - g_object_new(GARROW_TYPE_DATE64_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowDate64DataType *data_type = + GARROW_DATE64_DATA_TYPE(g_object_new(GARROW_TYPE_DATE64_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } -struct GArrowTimestampDataTypePrivate -{ + +struct GArrowTimestampDataTypePrivate { GTimeZone *time_zone; }; @@ -1048,9 +1125,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowTimestampDataType, garrow_timestamp_data_type, GARROW_TYPE_TEMPORAL_DATA_TYPE) -#define GARROW_TIMESTAMP_DATA_TYPE_GET_PRIVATE(object) \ - static_cast( \ - garrow_timestamp_data_type_get_instance_private(GARROW_TIMESTAMP_DATA_TYPE(object))) +#define GARROW_TIMESTAMP_DATA_TYPE_GET_PRIVATE(object) \ + static_cast( \ + garrow_timestamp_data_type_get_instance_private( \ + GARROW_TIMESTAMP_DATA_TYPE(object))) static void garrow_timestamp_data_type_dispose(GObject *object) @@ -1110,7 +1188,7 @@ static void garrow_timestamp_data_type_class_init(GArrowTimestampDataTypeClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_timestamp_data_type_dispose; + gobject_class->dispose = garrow_timestamp_data_type_dispose; gobject_class->set_property = garrow_timestamp_data_type_set_property; gobject_class->get_property = garrow_timestamp_data_type_get_property; @@ -1122,12 +1200,12 @@ garrow_timestamp_data_type_class_init(GArrowTimestampDataTypeClass *klass) * * Since: 16.0.0 */ - spec = g_param_spec_boxed( - "time-zone", - "Time zone", - "The time zone of this data type", - G_TYPE_TIME_ZONE, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_boxed("time-zone", + "Time zone", + "The time zone of this data type", + G_TYPE_TIME_ZONE, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_TIME_ZONE, spec); } @@ -1144,7 +1222,8 @@ garrow_timestamp_data_type_class_init(GArrowTimestampDataTypeClass *klass) * Since: 0.7.0 */ GArrowTimestampDataType * -garrow_timestamp_data_type_new(GArrowTimeUnit unit, GTimeZone *time_zone) +garrow_timestamp_data_type_new(GArrowTimeUnit unit, + GTimeZone *time_zone) { auto arrow_unit = garrow_time_unit_to_raw(unit); std::string arrow_timezone; @@ -1156,10 +1235,8 @@ garrow_timestamp_data_type_new(GArrowTimeUnit unit, GTimeZone *time_zone) auto arrow_data_type = arrow::timestamp(arrow_unit, arrow_timezone); auto data_type = GARROW_TIMESTAMP_DATA_TYPE(g_object_new(GARROW_TYPE_TIMESTAMP_DATA_TYPE, - "data-type", - &arrow_data_type, - "time-zone", - time_zone, + "data-type", &arrow_data_type, + "time-zone", time_zone, NULL)); return data_type; } @@ -1175,12 +1252,14 @@ garrow_timestamp_data_type_new(GArrowTimeUnit unit, GTimeZone *time_zone) GArrowTimeUnit garrow_timestamp_data_type_get_unit(GArrowTimestampDataType *data_type) { - const auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); + const auto arrow_data_type = + garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); const auto arrow_timestamp_data_type = std::static_pointer_cast(arrow_data_type); return garrow_time_unit_from_raw(arrow_timestamp_data_type->unit()); } + G_DEFINE_ABSTRACT_TYPE(GArrowTimeDataType, garrow_time_data_type, GARROW_TYPE_TEMPORAL_DATA_TYPE) @@ -1206,13 +1285,17 @@ garrow_time_data_type_class_init(GArrowTimeDataTypeClass *klass) GArrowTimeUnit garrow_time_data_type_get_unit(GArrowTimeDataType *time_data_type) { - const auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(time_data_type)); + const auto arrow_data_type = + garrow_data_type_get_raw(GARROW_DATA_TYPE(time_data_type)); const auto arrow_time_data_type = std::static_pointer_cast(arrow_data_type); return garrow_time_unit_from_raw(arrow_time_data_type->unit()); } -G_DEFINE_TYPE(GArrowTime32DataType, garrow_time32_data_type, GARROW_TYPE_TIME_DATA_TYPE) + +G_DEFINE_TYPE(GArrowTime32DataType, + garrow_time32_data_type, + GARROW_TYPE_TIME_DATA_TYPE) static void garrow_time32_data_type_init(GArrowTime32DataType *object) @@ -1270,12 +1353,17 @@ garrow_time32_data_type_new(GArrowTimeUnit unit, GError **error) auto arrow_unit = garrow_time_unit_to_raw(unit); auto arrow_data_type = arrow::time32(arrow_unit); - auto data_type = GARROW_TIME32_DATA_TYPE( - g_object_new(GARROW_TYPE_TIME32_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + auto data_type = + GARROW_TIME32_DATA_TYPE(g_object_new(GARROW_TYPE_TIME32_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } -G_DEFINE_TYPE(GArrowTime64DataType, garrow_time64_data_type, GARROW_TYPE_TIME_DATA_TYPE) + +G_DEFINE_TYPE(GArrowTime64DataType, + garrow_time64_data_type, + GARROW_TYPE_TIME_DATA_TYPE) static void garrow_time64_data_type_init(GArrowTime64DataType *object) @@ -1333,11 +1421,14 @@ garrow_time64_data_type_new(GArrowTimeUnit unit, GError **error) auto arrow_unit = garrow_time_unit_to_raw(unit); auto arrow_data_type = arrow::time64(arrow_unit); - auto data_type = GARROW_TIME64_DATA_TYPE( - g_object_new(GARROW_TYPE_TIME64_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + auto data_type = + GARROW_TIME64_DATA_TYPE(g_object_new(GARROW_TYPE_TIME64_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } + G_DEFINE_ABSTRACT_TYPE(GArrowIntervalDataType, garrow_interval_data_type, GARROW_TYPE_TEMPORAL_DATA_TYPE) @@ -1369,6 +1460,7 @@ garrow_interval_data_type_get_interval_type(GArrowIntervalDataType *type) return garrow_interval_type_from_raw(arrow_interval_type->interval_type()); } + G_DEFINE_TYPE(GArrowMonthIntervalDataType, garrow_month_interval_data_type, GARROW_TYPE_INTERVAL_DATA_TYPE) @@ -1378,7 +1470,8 @@ garrow_month_interval_data_type_init(GArrowMonthIntervalDataType *object) } static void -garrow_month_interval_data_type_class_init(GArrowMonthIntervalDataTypeClass *klass) +garrow_month_interval_data_type_class_init( + GArrowMonthIntervalDataTypeClass *klass) { } @@ -1395,12 +1488,12 @@ garrow_month_interval_data_type_new(void) auto arrow_data_type = arrow::month_interval(); auto data_type = g_object_new(GARROW_TYPE_MONTH_INTERVAL_DATA_TYPE, - "data-type", - &arrow_data_type, + "data-type", &arrow_data_type, NULL); return GARROW_MONTH_INTERVAL_DATA_TYPE(data_type); } + G_DEFINE_TYPE(GArrowDayTimeIntervalDataType, garrow_day_time_interval_data_type, GARROW_TYPE_INTERVAL_DATA_TYPE) @@ -1411,7 +1504,8 @@ garrow_day_time_interval_data_type_init(GArrowDayTimeIntervalDataType *object) } static void -garrow_day_time_interval_data_type_class_init(GArrowDayTimeIntervalDataTypeClass *klass) +garrow_day_time_interval_data_type_class_init( + GArrowDayTimeIntervalDataTypeClass *klass) { } @@ -1428,18 +1522,19 @@ garrow_day_time_interval_data_type_new(void) auto arrow_data_type = arrow::day_time_interval(); auto data_type = g_object_new(GARROW_TYPE_DAY_TIME_INTERVAL_DATA_TYPE, - "data-type", - &arrow_data_type, + "data-type", &arrow_data_type, NULL); return GARROW_DAY_TIME_INTERVAL_DATA_TYPE(data_type); } + G_DEFINE_TYPE(GArrowMonthDayNanoIntervalDataType, garrow_month_day_nano_interval_data_type, GARROW_TYPE_INTERVAL_DATA_TYPE) static void -garrow_month_day_nano_interval_data_type_init(GArrowMonthDayNanoIntervalDataType *object) +garrow_month_day_nano_interval_data_type_init( + GArrowMonthDayNanoIntervalDataType *object) { } @@ -1462,12 +1557,12 @@ garrow_month_day_nano_interval_data_type_new(void) auto arrow_data_type = arrow::month_day_nano_interval(); auto data_type = g_object_new(GARROW_TYPE_MONTH_DAY_NANO_INTERVAL_DATA_TYPE, - "data-type", - &arrow_data_type, + "data-type", &arrow_data_type, NULL); return GARROW_MONTH_DAY_NANO_INTERVAL_DATA_TYPE(data_type); } + G_DEFINE_ABSTRACT_TYPE(GArrowDecimalDataType, garrow_decimal_data_type, GARROW_TYPE_FIXED_SIZE_BINARY_DATA_TYPE) @@ -1498,7 +1593,9 @@ garrow_decimal_data_type_class_init(GArrowDecimalDataTypeClass *klass) * Since: 0.10.0 */ GArrowDecimalDataType * -garrow_decimal_data_type_new(gint32 precision, gint32 scale, GError **error) +garrow_decimal_data_type_new(gint32 precision, + gint32 scale, + GError **error) { if (precision <= garrow_decimal128_data_type_max_precision()) { return GARROW_DECIMAL_DATA_TYPE( @@ -1545,6 +1642,7 @@ garrow_decimal_data_type_get_scale(GArrowDecimalDataType *decimal_data_type) return arrow_decimal_type->scale(); } + G_DEFINE_TYPE(GArrowDecimal128DataType, garrow_decimal128_data_type, GARROW_TYPE_DECIMAL_DATA_TYPE) @@ -1584,20 +1682,25 @@ garrow_decimal128_data_type_max_precision() * Since: 0.12.0 */ GArrowDecimal128DataType * -garrow_decimal128_data_type_new(gint32 precision, gint32 scale, GError **error) +garrow_decimal128_data_type_new(gint32 precision, + gint32 scale, + GError **error) { auto arrow_data_type_result = arrow::Decimal128Type::Make(precision, scale); - if (garrow::check(error, arrow_data_type_result, "[decimal128-data-type][new]")) { + if (garrow::check(error, + arrow_data_type_result, + "[decimal128-data-type][new]")) { auto arrow_data_type = *arrow_data_type_result; - return GARROW_DECIMAL128_DATA_TYPE(g_object_new(GARROW_TYPE_DECIMAL128_DATA_TYPE, - "data-type", - &arrow_data_type, - NULL)); + return GARROW_DECIMAL128_DATA_TYPE( + g_object_new(GARROW_TYPE_DECIMAL128_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); } else { return NULL; } } + G_DEFINE_TYPE(GArrowDecimal256DataType, garrow_decimal256_data_type, GARROW_TYPE_DECIMAL_DATA_TYPE) @@ -1637,22 +1740,26 @@ garrow_decimal256_data_type_max_precision() * Since: 3.0.0 */ GArrowDecimal256DataType * -garrow_decimal256_data_type_new(gint32 precision, gint32 scale, GError **error) +garrow_decimal256_data_type_new(gint32 precision, + gint32 scale, + GError **error) { auto arrow_data_type_result = arrow::Decimal256Type::Make(precision, scale); - if (garrow::check(error, arrow_data_type_result, "[decimal256-data-type][new]")) { + if (garrow::check(error, + arrow_data_type_result, + "[decimal256-data-type][new]")) { auto arrow_data_type = *arrow_data_type_result; - return GARROW_DECIMAL256_DATA_TYPE(g_object_new(GARROW_TYPE_DECIMAL256_DATA_TYPE, - "data-type", - &arrow_data_type, - NULL)); + return GARROW_DECIMAL256_DATA_TYPE( + g_object_new(GARROW_TYPE_DECIMAL256_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); } else { return NULL; } } -typedef struct GArrowExtensionDataTypePrivate_ -{ + +typedef struct GArrowExtensionDataTypePrivate_ { GArrowDataType *storage_data_type; } GArrowExtensionDataTypePrivate; @@ -1664,9 +1771,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowExtensionDataType, garrow_extension_data_type, GARROW_TYPE_DATA_TYPE) -#define GARROW_EXTENSION_DATA_TYPE_GET_PRIVATE(obj) \ - static_cast( \ - garrow_extension_data_type_get_instance_private(GARROW_EXTENSION_DATA_TYPE(obj))) +#define GARROW_EXTENSION_DATA_TYPE_GET_PRIVATE(obj) \ + static_cast( \ + garrow_extension_data_type_get_instance_private( \ + GARROW_EXTENSION_DATA_TYPE(obj))) static void garrow_extension_data_type_dispose(GObject *object) @@ -1726,17 +1834,17 @@ static void garrow_extension_data_type_class_init(GArrowExtensionDataTypeClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_extension_data_type_dispose; + gobject_class->dispose = garrow_extension_data_type_dispose; gobject_class->set_property = garrow_extension_data_type_set_property; gobject_class->get_property = garrow_extension_data_type_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "storage-data-type", - "Storage data type", - "The underlying GArrowDataType", - GARROW_TYPE_DATA_TYPE, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("storage-data-type", + "Storage data type", + "The underlying GArrowDataType", + GARROW_TYPE_DATA_TYPE, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_STORAGE_DATA_TYPE, spec); } @@ -1753,8 +1861,9 @@ garrow_extension_data_type_class_init(GArrowExtensionDataTypeClass *klass) gchar * garrow_extension_data_type_get_extension_name(GArrowExtensionDataType *data_type) { - auto arrow_data_type = std::static_pointer_cast( - garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type))); + auto arrow_data_type = + std::static_pointer_cast( + garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type))); const auto name = arrow_data_type->extension_name(); return g_strdup(name.c_str()); } @@ -1774,8 +1883,8 @@ garrow_extension_data_type_wrap_array(GArrowExtensionDataType *data_type, { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_storage = garrow_array_get_raw(storage); - auto arrow_extension_array = - arrow::ExtensionType::WrapArray(arrow_data_type, arrow_storage); + auto arrow_extension_array = arrow::ExtensionType::WrapArray(arrow_data_type, + arrow_storage); auto array = garrow_extension_array_new_raw(&arrow_extension_array, storage); return GARROW_EXTENSION_ARRAY(array); } @@ -1797,39 +1906,39 @@ garrow_extension_data_type_wrap_chunked_array(GArrowExtensionDataType *data_type auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_storage = garrow_chunked_array_get_raw(storage); auto arrow_extension_chunked_array = - arrow::ExtensionType::WrapArray(arrow_data_type, arrow_storage); + arrow::ExtensionType::WrapArray(arrow_data_type, + arrow_storage); return garrow_chunked_array_new_raw(&arrow_extension_chunked_array); } -G_END_DECLS static std::shared_ptr -garrow_extension_data_type_get_storage_data_type_raw(GArrowExtensionDataType *data_type) +garrow_extension_data_type_get_storage_data_type_raw( + GArrowExtensionDataType *data_type) { auto priv = GARROW_EXTENSION_DATA_TYPE_GET_PRIVATE(data_type); return garrow_data_type_get_raw(priv->storage_data_type); } +G_END_DECLS + namespace garrow { - GExtensionType::GExtensionType(GArrowExtensionDataType *garrow_data_type) - : arrow::ExtensionType( - garrow_extension_data_type_get_storage_data_type_raw(garrow_data_type)), - garrow_data_type_(garrow_data_type) - { + GExtensionType::GExtensionType(GArrowExtensionDataType *garrow_data_type) : + arrow::ExtensionType( + garrow_extension_data_type_get_storage_data_type_raw(garrow_data_type)), + garrow_data_type_(garrow_data_type) { g_object_ref(garrow_data_type_); } - GExtensionType::~GExtensionType() { g_object_unref(garrow_data_type_); } + GExtensionType::~GExtensionType() { + g_object_unref(garrow_data_type_); + } - GArrowExtensionDataType * - GExtensionType::garrow_data_type() const - { + GArrowExtensionDataType *GExtensionType::garrow_data_type() const { return garrow_data_type_; } - std::string - GExtensionType::extension_name() const - { + std::string GExtensionType::extension_name() const { auto klass = GARROW_EXTENSION_DATA_TYPE_GET_CLASS(garrow_data_type_); auto c_name = klass->get_extension_name(garrow_data_type_); std::string name(c_name); @@ -1837,37 +1946,35 @@ namespace garrow { return name; } - bool - GExtensionType::ExtensionEquals(const arrow::ExtensionType &other) const - { + bool GExtensionType::ExtensionEquals(const arrow::ExtensionType& other) const { if (extension_name() != other.extension_name()) { return false; } auto klass = GARROW_EXTENSION_DATA_TYPE_GET_CLASS(garrow_data_type_); auto garrow_other_data_type = - static_cast(other).garrow_data_type_; - return klass->equal(garrow_data_type_, garrow_other_data_type); + static_cast(other).garrow_data_type_; + return klass->equal(garrow_data_type_, + garrow_other_data_type); } std::shared_ptr - GExtensionType::MakeArray(std::shared_ptr data) const - { + GExtensionType::MakeArray(std::shared_ptr data) const { return std::make_shared(data); } arrow::Result> GExtensionType::Deserialize(std::shared_ptr storage_data_type, - const std::string &serialized_data) const - { + const std::string& serialized_data) const { auto klass = GARROW_EXTENSION_DATA_TYPE_GET_CLASS(garrow_data_type_); auto garrow_storage_data_type = garrow_data_type_new_raw(&storage_data_type); - GBytes *g_serialized_data = - g_bytes_new_static(serialized_data.data(), serialized_data.size()); + GBytes *g_serialized_data = g_bytes_new_static(serialized_data.data(), + serialized_data.size()); GError *error = NULL; - auto garrow_deserialized_data_type = klass->deserialize(garrow_data_type_, - garrow_storage_data_type, - g_serialized_data, - &error); + auto garrow_deserialized_data_type = + klass->deserialize(garrow_data_type_, + garrow_storage_data_type, + g_serialized_data, + &error); g_bytes_unref(g_serialized_data); g_object_unref(garrow_storage_data_type); if (error) { @@ -1876,35 +1983,34 @@ namespace garrow { "[extension-type][deserialize]"); } - auto deserialized_data_type = garrow_data_type_get_raw(garrow_deserialized_data_type); + auto deserialized_data_type = + garrow_data_type_get_raw(garrow_deserialized_data_type); g_object_unref(garrow_deserialized_data_type); return deserialized_data_type; } std::string - GExtensionType::Serialize() const - { + GExtensionType::Serialize() const { auto klass = GARROW_EXTENSION_DATA_TYPE_GET_CLASS(garrow_data_type_); auto g_bytes = klass->serialize(garrow_data_type_); gsize raw_data_size = 0; auto raw_data = g_bytes_get_data(g_bytes, &raw_data_size); - std::string data(static_cast(raw_data), raw_data_size); + std::string data(static_cast(raw_data), + raw_data_size); g_bytes_unref(g_bytes); return data; } - GType - GExtensionType::array_gtype() const - { + GType GExtensionType::array_gtype() const { auto klass = GARROW_EXTENSION_DATA_TYPE_GET_CLASS(garrow_data_type_); return klass->get_array_gtype(garrow_data_type_); } -} // namespace garrow +} G_BEGIN_DECLS -typedef struct GArrowExtensionDataTypeRegistryPrivate_ -{ + +typedef struct GArrowExtensionDataTypeRegistryPrivate_ { std::shared_ptr registry; } GArrowExtensionDataTypeRegistryPrivate; @@ -1916,9 +2022,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowExtensionDataTypeRegistry, garrow_extension_data_type_registry, G_TYPE_OBJECT) -#define GARROW_EXTENSION_DATA_TYPE_REGISTRY_GET_PRIVATE(obj) \ - static_cast( \ - garrow_extension_data_type_registry_get_instance_private( \ +#define GARROW_EXTENSION_DATA_TYPE_REGISTRY_GET_PRIVATE(obj) \ + static_cast( \ + garrow_extension_data_type_registry_get_instance_private( \ GARROW_EXTENSION_DATA_TYPE_REGISTRY(obj))) static void @@ -1941,8 +2047,8 @@ garrow_extension_data_type_registry_set_property(GObject *object, switch (prop_id) { case PROP_REGISTRY: - priv->registry = *static_cast *>( - g_value_get_pointer(value)); + priv->registry = + *static_cast *>(g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -1954,24 +2060,23 @@ static void garrow_extension_data_type_registry_init(GArrowExtensionDataTypeRegistry *object) { auto priv = GARROW_EXTENSION_DATA_TYPE_REGISTRY_GET_PRIVATE(object); - new (&priv->registry) std::shared_ptr; + new(&priv->registry) std::shared_ptr; } static void -garrow_extension_data_type_registry_class_init( - GArrowExtensionDataTypeRegistryClass *klass) +garrow_extension_data_type_registry_class_init(GArrowExtensionDataTypeRegistryClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_extension_data_type_registry_finalize; + gobject_class->finalize = garrow_extension_data_type_registry_finalize; gobject_class->set_property = garrow_extension_data_type_registry_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "registry", - "Registry", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("registry", + "Registry", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_REGISTRY, spec); } @@ -2002,9 +2107,10 @@ garrow_extension_data_type_registry_default(void) * Since: 3.0.0 */ gboolean -garrow_extension_data_type_registry_register(GArrowExtensionDataTypeRegistry *registry, - GArrowExtensionDataType *data_type, - GError **error) +garrow_extension_data_type_registry_register( + GArrowExtensionDataTypeRegistry *registry, + GArrowExtensionDataType *data_type, + GError **error) { const gchar *context = "[extension-data-type-registry][register]"; auto klass = GARROW_EXTENSION_DATA_TYPE_GET_CLASS(data_type); @@ -2040,8 +2146,9 @@ garrow_extension_data_type_registry_register(GArrowExtensionDataTypeRegistry *re } auto arrow_registry = garrow_extension_data_type_registry_get_raw(registry); - auto arrow_data_type = std::static_pointer_cast( - garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type))); + auto arrow_data_type = + std::static_pointer_cast( + garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type))); auto status = arrow_registry->RegisterType(arrow_data_type); return garrow::check(error, status, context); } @@ -2060,13 +2167,16 @@ garrow_extension_data_type_registry_register(GArrowExtensionDataTypeRegistry *re * Since: 3.0.0 */ gboolean -garrow_extension_data_type_registry_unregister(GArrowExtensionDataTypeRegistry *registry, - const gchar *name, - GError **error) +garrow_extension_data_type_registry_unregister( + GArrowExtensionDataTypeRegistry *registry, + const gchar *name, + GError **error) { auto arrow_registry = garrow_extension_data_type_registry_get_raw(registry); auto status = arrow_registry->UnregisterType(name); - return garrow::check(error, status, "[extension-data-type-registry][unregister]"); + return garrow::check(error, + status, + "[extension-data-type-registry][unregister]"); } /** @@ -2080,8 +2190,9 @@ garrow_extension_data_type_registry_unregister(GArrowExtensionDataTypeRegistry * * Since: 3.0.0 */ GArrowExtensionDataType * -garrow_extension_data_type_registry_lookup(GArrowExtensionDataTypeRegistry *registry, - const gchar *name) +garrow_extension_data_type_registry_lookup( + GArrowExtensionDataTypeRegistry *registry, + const gchar *name) { auto arrow_registry = garrow_extension_data_type_registry_get_raw(registry); auto arrow_extension_data_type = arrow_registry->GetType(name); @@ -2094,6 +2205,7 @@ garrow_extension_data_type_registry_lookup(GArrowExtensionDataTypeRegistry *regi return GARROW_EXTENSION_DATA_TYPE(data_type); } + G_END_DECLS GArrowDataType * @@ -2227,7 +2339,9 @@ garrow_data_type_new_raw(std::shared_ptr *arrow_data_type) type = GARROW_TYPE_DATA_TYPE; break; } - data_type = GARROW_DATA_TYPE(g_object_new(type, "data-type", arrow_data_type, NULL)); + data_type = GARROW_DATA_TYPE(g_object_new(type, + "data-type", arrow_data_type, + NULL)); return data_type; } @@ -2237,8 +2351,8 @@ garrow_data_type_get_raw(GArrowDataType *data_type) auto priv = GARROW_DATA_TYPE_GET_PRIVATE(data_type); if (!priv->data_type && g_type_is_a(G_OBJECT_TYPE(data_type), GARROW_TYPE_EXTENSION_DATA_TYPE)) { - priv->data_type = - std::make_shared(GARROW_EXTENSION_DATA_TYPE(data_type)); + priv->data_type = std::make_shared( + GARROW_EXTENSION_DATA_TYPE(data_type)); } return priv->data_type; } @@ -2248,14 +2362,14 @@ garrow_extension_data_type_registry_new_raw( std::shared_ptr *arrow_registry) { auto registry = g_object_new(GARROW_TYPE_EXTENSION_DATA_TYPE_REGISTRY, - "registry", - arrow_registry, + "registry", arrow_registry, NULL); return GARROW_EXTENSION_DATA_TYPE_REGISTRY(registry); } std::shared_ptr -garrow_extension_data_type_registry_get_raw(GArrowExtensionDataTypeRegistry *registry) +garrow_extension_data_type_registry_get_raw( + GArrowExtensionDataTypeRegistry *registry) { auto priv = GARROW_EXTENSION_DATA_TYPE_REGISTRY_GET_PRIVATE(registry); return priv->registry; diff --git a/c_glib/arrow-glib/basic-data-type.h b/c_glib/arrow-glib/basic-data-type.h index 77180018c9b..f1c5af409c9 100644 --- a/c_glib/arrow-glib/basic-data-type.h +++ b/c_glib/arrow-glib/basic-data-type.h @@ -28,8 +28,11 @@ G_BEGIN_DECLS #define GARROW_TYPE_DATA_TYPE (garrow_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowDataType, garrow_data_type, GARROW, DATA_TYPE, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowDataType, + garrow_data_type, + GARROW, + DATA_TYPE, + GObject) struct _GArrowDataTypeClass { GObjectClass parent_class; @@ -37,30 +40,24 @@ struct _GArrowDataTypeClass GARROW_AVAILABLE_IN_6_0 GArrowDataType * -garrow_data_type_import(gpointer c_abi_schema, GError **error); +garrow_data_type_import(gpointer c_abi_schema, + GError **error); GARROW_AVAILABLE_IN_6_0 gpointer -garrow_data_type_export(GArrowDataType *data_type, GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_data_type_equal(GArrowDataType *data_type, GArrowDataType *other_data_type); - -GARROW_AVAILABLE_IN_ALL -gchar * -garrow_data_type_to_string(GArrowDataType *data_type); - -GARROW_AVAILABLE_IN_ALL -GArrowType -garrow_data_type_get_id(GArrowDataType *data_type); +garrow_data_type_export(GArrowDataType *data_type, + GError **error); +gboolean garrow_data_type_equal (GArrowDataType *data_type, + GArrowDataType *other_data_type); +gchar *garrow_data_type_to_string (GArrowDataType *data_type); +GArrowType garrow_data_type_get_id (GArrowDataType *data_type); GARROW_AVAILABLE_IN_3_0 gchar * garrow_data_type_get_name(GArrowDataType *data_type); + #define GARROW_TYPE_FIXED_WIDTH_DATA_TYPE (garrow_fixed_width_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowFixedWidthDataType, garrow_fixed_width_data_type, GARROW, @@ -71,29 +68,28 @@ struct _GArrowFixedWidthDataTypeClass GArrowDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -gint -garrow_fixed_width_data_type_get_bit_width(GArrowFixedWidthDataType *data_type); +gint garrow_fixed_width_data_type_get_bit_width(GArrowFixedWidthDataType *data_type); /* TODO: -GList *garrow_fixed_width_data_type_get_buffer_layout(GArrowFixedWidthDataType -*data_type); +GList *garrow_fixed_width_data_type_get_buffer_layout(GArrowFixedWidthDataType *data_type); */ -#define GARROW_TYPE_NULL_DATA_TYPE (garrow_null_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowNullDataType, garrow_null_data_type, GARROW, NULL_DATA_TYPE, GArrowDataType) + +#define GARROW_TYPE_NULL_DATA_TYPE \ + (garrow_null_data_type_get_type()) +G_DECLARE_DERIVABLE_TYPE(GArrowNullDataType, + garrow_null_data_type, + GARROW, + NULL_DATA_TYPE, + GArrowDataType) struct _GArrowNullDataTypeClass { GArrowDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowNullDataType * -garrow_null_data_type_new(void); +GArrowNullDataType *garrow_null_data_type_new (void); + #define GARROW_TYPE_BOOLEAN_DATA_TYPE (garrow_boolean_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowBooleanDataType, garrow_boolean_data_type, GARROW, @@ -104,12 +100,10 @@ struct _GArrowBooleanDataTypeClass GArrowFixedWidthDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowBooleanDataType * -garrow_boolean_data_type_new(void); +GArrowBooleanDataType *garrow_boolean_data_type_new (void); + #define GARROW_TYPE_NUMERIC_DATA_TYPE (garrow_numeric_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowNumericDataType, garrow_numeric_data_type, GARROW, @@ -120,8 +114,8 @@ struct _GArrowNumericDataTypeClass GArrowFixedWidthDataTypeClass parent_class; }; + #define GARROW_TYPE_INTEGER_DATA_TYPE (garrow_integer_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowIntegerDataType, garrow_integer_data_type, GARROW, @@ -133,11 +127,9 @@ struct _GArrowIntegerDataTypeClass }; GARROW_AVAILABLE_IN_0_16 -gboolean -garrow_integer_data_type_is_signed(GArrowIntegerDataType *data_type); +gboolean garrow_integer_data_type_is_signed(GArrowIntegerDataType *data_type); #define GARROW_TYPE_INT8_DATA_TYPE (garrow_int8_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowInt8DataType, garrow_int8_data_type, GARROW, @@ -148,12 +140,10 @@ struct _GArrowInt8DataTypeClass GArrowIntegerDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowInt8DataType * -garrow_int8_data_type_new(void); +GArrowInt8DataType *garrow_int8_data_type_new (void); + #define GARROW_TYPE_UINT8_DATA_TYPE (garrow_uint8_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowUInt8DataType, garrow_uint8_data_type, GARROW, @@ -164,12 +154,10 @@ struct _GArrowUInt8DataTypeClass GArrowIntegerDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowUInt8DataType * -garrow_uint8_data_type_new(void); +GArrowUInt8DataType *garrow_uint8_data_type_new (void); + #define GARROW_TYPE_INT16_DATA_TYPE (garrow_int16_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowInt16DataType, garrow_int16_data_type, GARROW, @@ -180,12 +168,10 @@ struct _GArrowInt16DataTypeClass GArrowIntegerDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowInt16DataType * -garrow_int16_data_type_new(void); +GArrowInt16DataType *garrow_int16_data_type_new (void); + #define GARROW_TYPE_UINT16_DATA_TYPE (garrow_uint16_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowUInt16DataType, garrow_uint16_data_type, GARROW, @@ -196,12 +182,10 @@ struct _GArrowUInt16DataTypeClass GArrowIntegerDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowUInt16DataType * -garrow_uint16_data_type_new(void); +GArrowUInt16DataType *garrow_uint16_data_type_new (void); + #define GARROW_TYPE_INT32_DATA_TYPE (garrow_int32_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowInt32DataType, garrow_int32_data_type, GARROW, @@ -212,12 +196,10 @@ struct _GArrowInt32DataTypeClass GArrowIntegerDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowInt32DataType * -garrow_int32_data_type_new(void); +GArrowInt32DataType *garrow_int32_data_type_new (void); + #define GARROW_TYPE_UINT32_DATA_TYPE (garrow_uint32_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowUInt32DataType, garrow_uint32_data_type, GARROW, @@ -228,12 +210,10 @@ struct _GArrowUInt32DataTypeClass GArrowIntegerDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowUInt32DataType * -garrow_uint32_data_type_new(void); +GArrowUInt32DataType *garrow_uint32_data_type_new (void); + #define GARROW_TYPE_INT64_DATA_TYPE (garrow_int64_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowInt64DataType, garrow_int64_data_type, GARROW, @@ -244,12 +224,10 @@ struct _GArrowInt64DataTypeClass GArrowIntegerDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowInt64DataType * -garrow_int64_data_type_new(void); +GArrowInt64DataType *garrow_int64_data_type_new (void); + #define GARROW_TYPE_UINT64_DATA_TYPE (garrow_uint64_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowUInt64DataType, garrow_uint64_data_type, GARROW, @@ -260,12 +238,11 @@ struct _GArrowUInt64DataTypeClass GArrowIntegerDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowUInt64DataType * -garrow_uint64_data_type_new(void); +GArrowUInt64DataType *garrow_uint64_data_type_new (void); -#define GARROW_TYPE_FLOATING_POINT_DATA_TYPE (garrow_floating_point_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_FLOATING_POINT_DATA_TYPE \ + (garrow_floating_point_data_type_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowFloatingPointDataType, garrow_floating_point_data_type, GARROW, @@ -276,8 +253,8 @@ struct _GArrowFloatingPointDataTypeClass GArrowNumericDataTypeClass parent_class; }; + #define GARROW_TYPE_HALF_FLOAT_DATA_TYPE (garrow_half_float_data_type_get_type()) -GARROW_AVAILABLE_IN_11_0 G_DECLARE_DERIVABLE_TYPE(GArrowHalfFloatDataType, garrow_half_float_data_type, GARROW, @@ -289,11 +266,10 @@ struct _GArrowHalfFloatDataTypeClass }; GARROW_AVAILABLE_IN_11_0 -GArrowHalfFloatDataType * -garrow_half_float_data_type_new(void); +GArrowHalfFloatDataType *garrow_half_float_data_type_new(void); + #define GARROW_TYPE_FLOAT_DATA_TYPE (garrow_float_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowFloatDataType, garrow_float_data_type, GARROW, @@ -304,12 +280,10 @@ struct _GArrowFloatDataTypeClass GArrowFloatingPointDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowFloatDataType * -garrow_float_data_type_new(void); +GArrowFloatDataType *garrow_float_data_type_new (void); + #define GARROW_TYPE_DOUBLE_DATA_TYPE (garrow_double_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowDoubleDataType, garrow_double_data_type, GARROW, @@ -320,26 +294,24 @@ struct _GArrowDoubleDataTypeClass GArrowFloatingPointDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowDoubleDataType * -garrow_double_data_type_new(void); +GArrowDoubleDataType *garrow_double_data_type_new (void); + #define GARROW_TYPE_BINARY_DATA_TYPE (garrow_binary_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowBinaryDataType, garrow_binary_data_type, GARROW, BINARY_DATA_TYPE, GArrowDataType) +G_DECLARE_DERIVABLE_TYPE(GArrowBinaryDataType, + garrow_binary_data_type, + GARROW, + BINARY_DATA_TYPE, + GArrowDataType) struct _GArrowBinaryDataTypeClass { GArrowDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowBinaryDataType * -garrow_binary_data_type_new(void); +GArrowBinaryDataType *garrow_binary_data_type_new (void); -#define GARROW_TYPE_FIXED_SIZE_BINARY_DATA_TYPE \ - (garrow_fixed_size_binary_data_type_get_type()) -GARROW_AVAILABLE_IN_0_12 + +#define GARROW_TYPE_FIXED_SIZE_BINARY_DATA_TYPE (garrow_fixed_size_binary_data_type_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowFixedSizeBinaryDataType, garrow_fixed_size_binary_data_type, GARROW, @@ -355,11 +327,10 @@ GArrowFixedSizeBinaryDataType * garrow_fixed_size_binary_data_type_new(gint32 byte_width); GARROW_AVAILABLE_IN_0_12 gint32 -garrow_fixed_size_binary_data_type_get_byte_width( - GArrowFixedSizeBinaryDataType *data_type); +garrow_fixed_size_binary_data_type_get_byte_width(GArrowFixedSizeBinaryDataType *data_type); + #define GARROW_TYPE_LARGE_BINARY_DATA_TYPE (garrow_large_binary_data_type_get_type()) -GARROW_AVAILABLE_IN_0_17 G_DECLARE_DERIVABLE_TYPE(GArrowLargeBinaryDataType, garrow_large_binary_data_type, GARROW, @@ -371,11 +342,10 @@ struct _GArrowLargeBinaryDataTypeClass }; GARROW_AVAILABLE_IN_0_17 -GArrowLargeBinaryDataType * -garrow_large_binary_data_type_new(void); +GArrowLargeBinaryDataType *garrow_large_binary_data_type_new(void); + #define GARROW_TYPE_STRING_DATA_TYPE (garrow_string_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowStringDataType, garrow_string_data_type, GARROW, @@ -386,12 +356,10 @@ struct _GArrowStringDataTypeClass GArrowBinaryDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowStringDataType * -garrow_string_data_type_new(void); +GArrowStringDataType *garrow_string_data_type_new (void); + #define GARROW_TYPE_LARGE_STRING_DATA_TYPE (garrow_large_string_data_type_get_type()) -GARROW_AVAILABLE_IN_0_17 G_DECLARE_DERIVABLE_TYPE(GArrowLargeStringDataType, garrow_large_string_data_type, GARROW, @@ -403,11 +371,10 @@ struct _GArrowLargeStringDataTypeClass }; GARROW_AVAILABLE_IN_0_17 -GArrowLargeStringDataType * -garrow_large_string_data_type_new(void); +GArrowLargeStringDataType *garrow_large_string_data_type_new(void); + #define GARROW_TYPE_TEMPORAL_DATA_TYPE (garrow_temporal_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowTemporalDataType, garrow_temporal_data_type, GARROW, @@ -418,8 +385,8 @@ struct _GArrowTemporalDataTypeClass GArrowFixedWidthDataTypeClass parent_class; }; + #define GARROW_TYPE_DATE32_DATA_TYPE (garrow_date32_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowDate32DataType, garrow_date32_data_type, GARROW, @@ -430,12 +397,10 @@ struct _GArrowDate32DataTypeClass GArrowTemporalDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowDate32DataType * -garrow_date32_data_type_new(void); +GArrowDate32DataType *garrow_date32_data_type_new (void); + #define GARROW_TYPE_DATE64_DATA_TYPE (garrow_date64_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowDate64DataType, garrow_date64_data_type, GARROW, @@ -446,12 +411,10 @@ struct _GArrowDate64DataTypeClass GArrowTemporalDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowDate64DataType * -garrow_date64_data_type_new(void); +GArrowDate64DataType *garrow_date64_data_type_new (void); + #define GARROW_TYPE_TIMESTAMP_DATA_TYPE (garrow_timestamp_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowTimestampDataType, garrow_timestamp_data_type, GARROW, @@ -462,16 +425,14 @@ struct _GArrowTimestampDataTypeClass GArrowTemporalDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowTimestampDataType * -garrow_timestamp_data_type_new(GArrowTimeUnit unit, GTimeZone *time_zone); - -GARROW_AVAILABLE_IN_ALL +garrow_timestamp_data_type_new(GArrowTimeUnit unit, + GTimeZone *time_zone); GArrowTimeUnit garrow_timestamp_data_type_get_unit(GArrowTimestampDataType *data_type); + #define GARROW_TYPE_TIME_DATA_TYPE (garrow_time_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowTimeDataType, garrow_time_data_type, GARROW, @@ -482,12 +443,10 @@ struct _GArrowTimeDataTypeClass GArrowTemporalDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowTimeUnit -garrow_time_data_type_get_unit(GArrowTimeDataType *time_data_type); +GArrowTimeUnit garrow_time_data_type_get_unit (GArrowTimeDataType *time_data_type); + #define GARROW_TYPE_TIME32_DATA_TYPE (garrow_time32_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowTime32DataType, garrow_time32_data_type, GARROW, @@ -498,12 +457,11 @@ struct _GArrowTime32DataTypeClass GArrowTimeDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowTime32DataType * -garrow_time32_data_type_new(GArrowTimeUnit unit, GError **error); +GArrowTime32DataType *garrow_time32_data_type_new (GArrowTimeUnit unit, + GError **error); + #define GARROW_TYPE_TIME64_DATA_TYPE (garrow_time64_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowTime64DataType, garrow_time64_data_type, GARROW, @@ -514,12 +472,11 @@ struct _GArrowTime64DataTypeClass GArrowTimeDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowTime64DataType * -garrow_time64_data_type_new(GArrowTimeUnit unit, GError **error); +GArrowTime64DataType *garrow_time64_data_type_new (GArrowTimeUnit unit, + GError **error); + #define GARROW_TYPE_INTERVAL_DATA_TYPE (garrow_interval_data_type_get_type()) -GARROW_AVAILABLE_IN_7_0 G_DECLARE_DERIVABLE_TYPE(GArrowIntervalDataType, garrow_interval_data_type, GARROW, @@ -534,8 +491,9 @@ GARROW_AVAILABLE_IN_7_0 GArrowIntervalType garrow_interval_data_type_get_interval_type(GArrowIntervalDataType *type); -#define GARROW_TYPE_MONTH_INTERVAL_DATA_TYPE (garrow_month_interval_data_type_get_type()) -GARROW_AVAILABLE_IN_7_0 + +#define GARROW_TYPE_MONTH_INTERVAL_DATA_TYPE \ + (garrow_month_interval_data_type_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowMonthIntervalDataType, garrow_month_interval_data_type, GARROW, @@ -550,9 +508,9 @@ GARROW_AVAILABLE_IN_7_0 GArrowMonthIntervalDataType * garrow_month_interval_data_type_new(void); -#define GARROW_TYPE_DAY_TIME_INTERVAL_DATA_TYPE \ + +#define GARROW_TYPE_DAY_TIME_INTERVAL_DATA_TYPE \ (garrow_day_time_interval_data_type_get_type()) -GARROW_AVAILABLE_IN_7_0 G_DECLARE_DERIVABLE_TYPE(GArrowDayTimeIntervalDataType, garrow_day_time_interval_data_type, GARROW, @@ -567,9 +525,9 @@ GARROW_AVAILABLE_IN_7_0 GArrowDayTimeIntervalDataType * garrow_day_time_interval_data_type_new(void); -#define GARROW_TYPE_MONTH_DAY_NANO_INTERVAL_DATA_TYPE \ + +#define GARROW_TYPE_MONTH_DAY_NANO_INTERVAL_DATA_TYPE \ (garrow_month_day_nano_interval_data_type_get_type()) -GARROW_AVAILABLE_IN_7_0 G_DECLARE_DERIVABLE_TYPE(GArrowMonthDayNanoIntervalDataType, garrow_month_day_nano_interval_data_type, GARROW, @@ -584,8 +542,8 @@ GARROW_AVAILABLE_IN_7_0 GArrowMonthDayNanoIntervalDataType * garrow_month_day_nano_interval_data_type_new(void); + #define GARROW_TYPE_DECIMAL_DATA_TYPE (garrow_decimal_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowDecimalDataType, garrow_decimal_data_type, GARROW, @@ -596,20 +554,13 @@ struct _GArrowDecimalDataTypeClass GArrowFixedSizeBinaryDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowDecimalDataType * garrow_decimal_data_type_new(gint32 precision, gint32 scale, GError **error); +gint32 garrow_decimal_data_type_get_precision(GArrowDecimalDataType *decimal_data_type); +gint32 garrow_decimal_data_type_get_scale(GArrowDecimalDataType *decimal_data_type); -GARROW_AVAILABLE_IN_ALL -gint32 -garrow_decimal_data_type_get_precision(GArrowDecimalDataType *decimal_data_type); - -GARROW_AVAILABLE_IN_ALL -gint32 -garrow_decimal_data_type_get_scale(GArrowDecimalDataType *decimal_data_type); #define GARROW_TYPE_DECIMAL128_DATA_TYPE (garrow_decimal128_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowDecimal128DataType, garrow_decimal128_data_type, GARROW, @@ -628,8 +579,8 @@ GARROW_AVAILABLE_IN_0_12 GArrowDecimal128DataType * garrow_decimal128_data_type_new(gint32 precision, gint32 scale, GError **error); + #define GARROW_TYPE_DECIMAL256_DATA_TYPE (garrow_decimal256_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowDecimal256DataType, garrow_decimal256_data_type, GARROW, @@ -649,7 +600,6 @@ GArrowDecimal256DataType * garrow_decimal256_data_type_new(gint32 precision, gint32 scale, GError **error); #define GARROW_TYPE_EXTENSION_DATA_TYPE (garrow_extension_data_type_get_type()) -GARROW_AVAILABLE_IN_3_0 G_DECLARE_DERIVABLE_TYPE(GArrowExtensionDataType, garrow_extension_data_type, GARROW, @@ -698,9 +648,9 @@ GArrowChunkedArray * garrow_extension_data_type_wrap_chunked_array(GArrowExtensionDataType *data_type, GArrowChunkedArray *storage); -#define GARROW_TYPE_EXTENSION_DATA_TYPE_REGISTRY \ + +#define GARROW_TYPE_EXTENSION_DATA_TYPE_REGISTRY \ (garrow_extension_data_type_registry_get_type()) -GARROW_AVAILABLE_IN_3_0 G_DECLARE_DERIVABLE_TYPE(GArrowExtensionDataTypeRegistry, garrow_extension_data_type_registry, GARROW, @@ -717,17 +667,20 @@ garrow_extension_data_type_registry_default(void); GARROW_AVAILABLE_IN_3_0 gboolean -garrow_extension_data_type_registry_register(GArrowExtensionDataTypeRegistry *registry, - GArrowExtensionDataType *data_type, - GError **error); +garrow_extension_data_type_registry_register( + GArrowExtensionDataTypeRegistry *registry, + GArrowExtensionDataType *data_type, + GError **error); GARROW_AVAILABLE_IN_3_0 gboolean -garrow_extension_data_type_registry_unregister(GArrowExtensionDataTypeRegistry *registry, - const gchar *name, - GError **error); +garrow_extension_data_type_registry_unregister( + GArrowExtensionDataTypeRegistry *registry, + const gchar *name, + GError **error); GARROW_AVAILABLE_IN_3_0 GArrowExtensionDataType * -garrow_extension_data_type_registry_lookup(GArrowExtensionDataTypeRegistry *registry, - const gchar *name); +garrow_extension_data_type_registry_lookup( + GArrowExtensionDataTypeRegistry *registry, + const gchar *name); G_END_DECLS diff --git a/c_glib/arrow-glib/basic-data-type.hpp b/c_glib/arrow-glib/basic-data-type.hpp index c4d61359030..ff1fe5e28f2 100644 --- a/c_glib/arrow-glib/basic-data-type.hpp +++ b/c_glib/arrow-glib/basic-data-type.hpp @@ -32,7 +32,8 @@ GArrowExtensionDataTypeRegistry * garrow_extension_data_type_registry_new_raw( std::shared_ptr *arrow_registry); std::shared_ptr -garrow_extension_data_type_registry_get_raw(GArrowExtensionDataTypeRegistry *registry); +garrow_extension_data_type_registry_get_raw( + GArrowExtensionDataTypeRegistry *registry); namespace garrow { class GExtensionType : public arrow::ExtensionType { @@ -46,18 +47,16 @@ namespace garrow { GType array_gtype() const; - std::string - extension_name() const override; + std::string extension_name() const override; - bool - ExtensionEquals(const arrow::ExtensionType &other) const override; + bool ExtensionEquals(const arrow::ExtensionType& other) const override; std::shared_ptr MakeArray(std::shared_ptr data) const override; arrow::Result> Deserialize(std::shared_ptr storage_data_type, - const std::string &serialized_data) const override; + const std::string& serialized_data) const override; std::string Serialize() const override; @@ -65,4 +64,4 @@ namespace garrow { private: GArrowExtensionDataType *garrow_data_type_; }; -} // namespace garrow +} diff --git a/c_glib/arrow-glib/buffer.cpp b/c_glib/arrow-glib/buffer.cpp index c5ca418f63f..58f47518c82 100644 --- a/c_glib/arrow-glib/buffer.cpp +++ b/c_glib/arrow-glib/buffer.cpp @@ -38,8 +38,7 @@ G_BEGIN_DECLS * #GArrowResizableBuffer is mutable and resizable. */ -typedef struct GArrowBufferPrivate_ -{ +typedef struct GArrowBufferPrivate_ { std::shared_ptr buffer; GBytes *data; GArrowBuffer *parent; @@ -53,9 +52,10 @@ enum { G_DEFINE_TYPE_WITH_PRIVATE(GArrowBuffer, garrow_buffer, G_TYPE_OBJECT) -#define GARROW_BUFFER_GET_PRIVATE(obj) \ - static_cast( \ - garrow_buffer_get_instance_private(GARROW_BUFFER(obj))) +#define GARROW_BUFFER_GET_PRIVATE(obj) \ + static_cast( \ + garrow_buffer_get_instance_private( \ + GARROW_BUFFER(obj))) static void garrow_buffer_dispose(GObject *object) @@ -132,7 +132,7 @@ static void garrow_buffer_init(GArrowBuffer *object) { auto priv = GARROW_BUFFER_GET_PRIVATE(object); - new (&priv->buffer) std::shared_ptr; + new(&priv->buffer) std::shared_ptr; } static void @@ -142,32 +142,32 @@ garrow_buffer_class_init(GArrowBufferClass *klass) auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_buffer_dispose; - gobject_class->finalize = garrow_buffer_finalize; + gobject_class->dispose = garrow_buffer_dispose; + gobject_class->finalize = garrow_buffer_finalize; gobject_class->set_property = garrow_buffer_set_property; gobject_class->get_property = garrow_buffer_get_property; - spec = g_param_spec_pointer( - "buffer", - "Buffer", - "The raw std::shared_ptr *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("buffer", + "Buffer", + "The raw std::shared_ptr *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_BUFFER, spec); - spec = g_param_spec_boxed( - "data", - "Data", - "The raw data passed as GBytes *", - G_TYPE_BYTES, - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_boxed("data", + "Data", + "The raw data passed as GBytes *", + G_TYPE_BYTES, + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_DATA, spec); - spec = g_param_spec_object( - "parent", - "Parent", - "The parent GArrowBuffer *", - GARROW_TYPE_BUFFER, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("parent", + "Parent", + "The parent GArrowBuffer *", + GARROW_TYPE_BUFFER, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_PARENT, spec); } @@ -203,7 +203,8 @@ garrow_buffer_new_bytes(GBytes *data) size_t data_size; auto raw_data = g_bytes_get_data(data, &data_size); auto arrow_buffer = - std::make_shared(static_cast(raw_data), data_size); + std::make_shared(static_cast(raw_data), + data_size); return garrow_buffer_new_raw_bytes(&arrow_buffer, data); } @@ -296,7 +297,8 @@ garrow_buffer_get_data(GArrowBuffer *buffer) } auto arrow_buffer = garrow_buffer_get_raw(buffer); - auto data = g_bytes_new_static(arrow_buffer->data(), arrow_buffer->size()); + auto data = g_bytes_new_static(arrow_buffer->data(), + arrow_buffer->size()); return data; } @@ -305,7 +307,7 @@ garrow_buffer_get_data(GArrowBuffer *buffer) * @buffer: A #GArrowBuffer. * * Returns: (transfer full) (nullable): The data of the buffer. If the - * buffer is immutable, it returns %NULL. The data is owned by the + * buffer is imutable, it returns %NULL. The data is owned by the * buffer. You should not free the data. * * Since: 0.3.0 @@ -324,7 +326,8 @@ garrow_buffer_get_mutable_data(GArrowBuffer *buffer) return priv->data; } - return g_bytes_new_static(arrow_buffer->mutable_data(), arrow_buffer->size()); + return g_bytes_new_static(arrow_buffer->mutable_data(), + arrow_buffer->size()); } /** @@ -382,7 +385,10 @@ garrow_buffer_get_parent(GArrowBuffer *buffer) * Since: 0.3.0 */ GArrowBuffer * -garrow_buffer_copy(GArrowBuffer *buffer, gint64 start, gint64 size, GError **error) +garrow_buffer_copy(GArrowBuffer *buffer, + gint64 start, + gint64 size, + GError **error) { auto arrow_buffer = garrow_buffer_get_raw(buffer); auto maybe_copied_buffer = arrow_buffer->CopySlice(start, size); @@ -410,11 +416,16 @@ GArrowBuffer * garrow_buffer_slice(GArrowBuffer *buffer, gint64 offset, gint64 size) { auto arrow_parent_buffer = garrow_buffer_get_raw(buffer); - auto arrow_buffer = std::make_shared(arrow_parent_buffer, offset, size); + auto arrow_buffer = std::make_shared(arrow_parent_buffer, + offset, + size); return garrow_buffer_new_raw_parent(&arrow_buffer, buffer); } -G_DEFINE_TYPE(GArrowMutableBuffer, garrow_mutable_buffer, GARROW_TYPE_BUFFER) + +G_DEFINE_TYPE(GArrowMutableBuffer, + garrow_mutable_buffer, + GARROW_TYPE_BUFFER) static void garrow_mutable_buffer_init(GArrowMutableBuffer *object) @@ -478,13 +489,19 @@ garrow_mutable_buffer_new_bytes(GBytes *data) * Since: 0.3.0 */ GArrowMutableBuffer * -garrow_mutable_buffer_slice(GArrowMutableBuffer *buffer, gint64 offset, gint64 size) +garrow_mutable_buffer_slice(GArrowMutableBuffer *buffer, + gint64 offset, + gint64 size) { auto arrow_parent_buffer = garrow_buffer_get_raw(GARROW_BUFFER(buffer)); auto arrow_mutable_buffer = - std::make_shared(arrow_parent_buffer, offset, size); - auto arrow_buffer = std::static_pointer_cast(arrow_mutable_buffer); - auto sliced_buffer = garrow_buffer_new_raw_parent(&arrow_buffer, GARROW_BUFFER(buffer)); + std::make_shared(arrow_parent_buffer, + offset, + size); + auto arrow_buffer = + std::static_pointer_cast(arrow_mutable_buffer); + auto sliced_buffer = garrow_buffer_new_raw_parent(&arrow_buffer, + GARROW_BUFFER(buffer)); return GARROW_MUTABLE_BUFFER(sliced_buffer); } @@ -526,7 +543,10 @@ garrow_mutable_buffer_set_data(GArrowMutableBuffer *buffer, return TRUE; } -G_DEFINE_TYPE(GArrowResizableBuffer, garrow_resizable_buffer, GARROW_TYPE_MUTABLE_BUFFER) + +G_DEFINE_TYPE(GArrowResizableBuffer, + garrow_resizable_buffer, + GARROW_TYPE_MUTABLE_BUFFER) static void garrow_resizable_buffer_init(GArrowResizableBuffer *object) @@ -548,17 +568,20 @@ garrow_resizable_buffer_class_init(GArrowResizableBufferClass *klass) * Since: 0.10.0 */ GArrowResizableBuffer * -garrow_resizable_buffer_new(gint64 initial_size, GError **error) +garrow_resizable_buffer_new(gint64 initial_size, + GError **error) { auto maybe_buffer = arrow::AllocateResizableBuffer(initial_size); if (garrow::check(error, maybe_buffer, "[resizable-buffer][new]")) { - auto arrow_buffer = std::shared_ptr(*std::move(maybe_buffer)); + auto arrow_buffer = std::shared_ptr( + *std::move(maybe_buffer)); return garrow_resizable_buffer_new_raw(&arrow_buffer); } else { return NULL; } } + /** * garrow_resizable_buffer_resize: * @buffer: A #GArrowResizableBuffer. @@ -603,6 +626,7 @@ garrow_resizable_buffer_reserve(GArrowResizableBuffer *buffer, return garrow_error_check(error, status, "[resizable-buffer][capacity]"); } + G_END_DECLS GArrowBuffer * @@ -612,10 +636,13 @@ garrow_buffer_new_raw(std::shared_ptr *arrow_buffer) } GArrowBuffer * -garrow_buffer_new_raw_bytes(std::shared_ptr *arrow_buffer, GBytes *data) +garrow_buffer_new_raw_bytes(std::shared_ptr *arrow_buffer, + GBytes *data) { - auto buffer = GARROW_BUFFER( - g_object_new(GARROW_TYPE_BUFFER, "buffer", arrow_buffer, "data", data, NULL)); + auto buffer = GARROW_BUFFER(g_object_new(GARROW_TYPE_BUFFER, + "buffer", arrow_buffer, + "data", data, + NULL)); return buffer; } @@ -623,8 +650,10 @@ GArrowBuffer * garrow_buffer_new_raw_parent(std::shared_ptr *arrow_buffer, GArrowBuffer *parent) { - auto buffer = GARROW_BUFFER( - g_object_new(G_OBJECT_TYPE(parent), "buffer", arrow_buffer, "parent", parent, NULL)); + auto buffer = GARROW_BUFFER(g_object_new(G_OBJECT_TYPE(parent), + "buffer", arrow_buffer, + "parent", parent, + NULL)); return buffer; } @@ -648,15 +677,19 @@ GArrowMutableBuffer * garrow_mutable_buffer_new_raw_bytes(std::shared_ptr *arrow_buffer, GBytes *data) { - auto buffer = GARROW_MUTABLE_BUFFER( - g_object_new(GARROW_TYPE_MUTABLE_BUFFER, "buffer", arrow_buffer, "data", data, NULL)); + auto buffer = GARROW_MUTABLE_BUFFER(g_object_new(GARROW_TYPE_MUTABLE_BUFFER, + "buffer", arrow_buffer, + "data", data, + NULL)); return buffer; } GArrowResizableBuffer * garrow_resizable_buffer_new_raw(std::shared_ptr *arrow_buffer) { - auto buffer = GARROW_RESIZABLE_BUFFER( - g_object_new(GARROW_TYPE_RESIZABLE_BUFFER, "buffer", arrow_buffer, NULL)); + auto buffer = + GARROW_RESIZABLE_BUFFER(g_object_new(GARROW_TYPE_RESIZABLE_BUFFER, + "buffer", arrow_buffer, + NULL)); return buffer; } diff --git a/c_glib/arrow-glib/buffer.h b/c_glib/arrow-glib/buffer.h index 29308e935ab..a176071f252 100644 --- a/c_glib/arrow-glib/buffer.h +++ b/c_glib/arrow-glib/buffer.h @@ -19,101 +19,70 @@ #pragma once -#include - -#include +#include G_BEGIN_DECLS #define GARROW_TYPE_BUFFER (garrow_buffer_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowBuffer, garrow_buffer, GARROW, BUFFER, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowBuffer, + garrow_buffer, + GARROW, + BUFFER, + GObject) struct _GArrowBufferClass { GObjectClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowBuffer * -garrow_buffer_new(const guint8 *data, gint64 size); - -GARROW_AVAILABLE_IN_ALL -GArrowBuffer * -garrow_buffer_new_bytes(GBytes *data); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_buffer_equal(GArrowBuffer *buffer, GArrowBuffer *other_buffer); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_buffer_equal_n_bytes(GArrowBuffer *buffer, - GArrowBuffer *other_buffer, - gint64 n_bytes); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_buffer_is_mutable(GArrowBuffer *buffer); - -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_buffer_get_capacity(GArrowBuffer *buffer); - -GARROW_AVAILABLE_IN_ALL -GBytes * -garrow_buffer_get_data(GArrowBuffer *buffer); +GArrowBuffer *garrow_buffer_new (const guint8 *data, + gint64 size); +GArrowBuffer *garrow_buffer_new_bytes (GBytes *data); +gboolean garrow_buffer_equal (GArrowBuffer *buffer, + GArrowBuffer *other_buffer); +gboolean garrow_buffer_equal_n_bytes(GArrowBuffer *buffer, + GArrowBuffer *other_buffer, + gint64 n_bytes); +gboolean garrow_buffer_is_mutable (GArrowBuffer *buffer); +gint64 garrow_buffer_get_capacity (GArrowBuffer *buffer); +GBytes *garrow_buffer_get_data (GArrowBuffer *buffer); +GBytes *garrow_buffer_get_mutable_data(GArrowBuffer *buffer); +gint64 garrow_buffer_get_size (GArrowBuffer *buffer); +GArrowBuffer *garrow_buffer_get_parent (GArrowBuffer *buffer); + +GArrowBuffer *garrow_buffer_copy (GArrowBuffer *buffer, + gint64 start, + gint64 size, + GError **error); +GArrowBuffer *garrow_buffer_slice (GArrowBuffer *buffer, + gint64 offset, + gint64 size); -GARROW_AVAILABLE_IN_ALL -GBytes * -garrow_buffer_get_mutable_data(GArrowBuffer *buffer); - -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_buffer_get_size(GArrowBuffer *buffer); - -GARROW_AVAILABLE_IN_ALL -GArrowBuffer * -garrow_buffer_get_parent(GArrowBuffer *buffer); - -GARROW_AVAILABLE_IN_ALL -GArrowBuffer * -garrow_buffer_copy(GArrowBuffer *buffer, gint64 start, gint64 size, GError **error); - -GARROW_AVAILABLE_IN_ALL -GArrowBuffer * -garrow_buffer_slice(GArrowBuffer *buffer, gint64 offset, gint64 size); #define GARROW_TYPE_MUTABLE_BUFFER (garrow_mutable_buffer_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowMutableBuffer, garrow_mutable_buffer, GARROW, MUTABLE_BUFFER, GArrowBuffer) +G_DECLARE_DERIVABLE_TYPE(GArrowMutableBuffer, + garrow_mutable_buffer, + GARROW, + MUTABLE_BUFFER, + GArrowBuffer) struct _GArrowMutableBufferClass { GArrowBufferClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowMutableBuffer * -garrow_mutable_buffer_new(guint8 *data, gint64 size); - -GARROW_AVAILABLE_IN_ALL -GArrowMutableBuffer * -garrow_mutable_buffer_new_bytes(GBytes *data); +GArrowMutableBuffer *garrow_mutable_buffer_new (guint8 *data, + gint64 size); +GArrowMutableBuffer *garrow_mutable_buffer_new_bytes(GBytes *data); +GArrowMutableBuffer *garrow_mutable_buffer_slice(GArrowMutableBuffer *buffer, + gint64 offset, + gint64 size); +gboolean garrow_mutable_buffer_set_data(GArrowMutableBuffer *buffer, + gint64 offset, + const guint8 *data, + gint64 size, + GError **error); -GARROW_AVAILABLE_IN_ALL -GArrowMutableBuffer * -garrow_mutable_buffer_slice(GArrowMutableBuffer *buffer, gint64 offset, gint64 size); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_mutable_buffer_set_data(GArrowMutableBuffer *buffer, - gint64 offset, - const guint8 *data, - gint64 size, - GError **error); #define GARROW_TYPE_RESIZABLE_BUFFER (garrow_resizable_buffer_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowResizableBuffer, garrow_resizable_buffer, GARROW, @@ -124,20 +93,14 @@ struct _GArrowResizableBufferClass GArrowMutableBufferClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowResizableBuffer * -garrow_resizable_buffer_new(gint64 initial_size, GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_resizable_buffer_resize(GArrowResizableBuffer *buffer, - gint64 new_size, - GError **error); -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_resizable_buffer_reserve(GArrowResizableBuffer *buffer, - gint64 new_capacity, - GError **error); +GArrowResizableBuffer *garrow_resizable_buffer_new(gint64 initial_size, + GError **error); +gboolean garrow_resizable_buffer_resize(GArrowResizableBuffer *buffer, + gint64 new_size, + GError **error); +gboolean garrow_resizable_buffer_reserve(GArrowResizableBuffer *buffer, + gint64 new_capacity, + GError **error); G_END_DECLS diff --git a/c_glib/arrow-glib/buffer.hpp b/c_glib/arrow-glib/buffer.hpp index 7e4d7ecee1c..34a28be46cf 100644 --- a/c_glib/arrow-glib/buffer.hpp +++ b/c_glib/arrow-glib/buffer.hpp @@ -23,32 +23,21 @@ #include -GARROW_EXTERN GArrowBuffer * garrow_buffer_new_raw(std::shared_ptr *arrow_buffer); - -GARROW_EXTERN GArrowBuffer * -garrow_buffer_new_raw_bytes(std::shared_ptr *arrow_buffer, GBytes *data); - -GARROW_EXTERN +garrow_buffer_new_raw_bytes(std::shared_ptr *arrow_buffer, + GBytes *data); GArrowBuffer * garrow_buffer_new_raw_parent(std::shared_ptr *arrow_buffer, GArrowBuffer *parent); - -GARROW_EXTERN std::shared_ptr garrow_buffer_get_raw(GArrowBuffer *buffer); -GARROW_EXTERN GArrowMutableBuffer * garrow_mutable_buffer_new_raw(std::shared_ptr *arrow_buffer); - -GARROW_EXTERN GArrowMutableBuffer * garrow_mutable_buffer_new_raw_bytes(std::shared_ptr *arrow_buffer, GBytes *data); - -GARROW_EXTERN GArrowResizableBuffer * garrow_resizable_buffer_new_raw(std::shared_ptr *arrow_buffer); diff --git a/c_glib/arrow-glib/chunked-array-definition.h b/c_glib/arrow-glib/chunked-array-definition.h index 744f1077ea7..539a4848e80 100644 --- a/c_glib/arrow-glib/chunked-array-definition.h +++ b/c_glib/arrow-glib/chunked-array-definition.h @@ -19,17 +19,20 @@ #pragma once -#include +#include G_BEGIN_DECLS #define GARROW_TYPE_CHUNKED_ARRAY (garrow_chunked_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowChunkedArray, garrow_chunked_array, GARROW, CHUNKED_ARRAY, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowChunkedArray, + garrow_chunked_array, + GARROW, + CHUNKED_ARRAY, + GObject) struct _GArrowChunkedArrayClass { GObjectClass parent_class; }; + G_END_DECLS diff --git a/c_glib/arrow-glib/chunked-array.cpp b/c_glib/arrow-glib/chunked-array.cpp index 39c8faad6c0..c0f2be4c083 100644 --- a/c_glib/arrow-glib/chunked-array.cpp +++ b/c_glib/arrow-glib/chunked-array.cpp @@ -35,8 +35,7 @@ G_BEGIN_DECLS * makes a list of #GArrowArrays one logical large array. */ -struct GArrowChunkedArrayPrivate -{ +struct GArrowChunkedArrayPrivate { std::shared_ptr chunked_array; GArrowDataType *data_type; }; @@ -46,11 +45,14 @@ enum { PROP_DATA_TYPE, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowChunkedArray, garrow_chunked_array, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowChunkedArray, + garrow_chunked_array, + G_TYPE_OBJECT) -#define GARROW_CHUNKED_ARRAY_GET_PRIVATE(obj) \ - static_cast( \ - garrow_chunked_array_get_instance_private(GARROW_CHUNKED_ARRAY(obj))) +#define GARROW_CHUNKED_ARRAY_GET_PRIVATE(obj) \ + static_cast( \ + garrow_chunked_array_get_instance_private( \ + GARROW_CHUNKED_ARRAY(obj))) static void garrow_chunked_array_dispose(GObject *object) @@ -114,7 +116,7 @@ static void garrow_chunked_array_init(GArrowChunkedArray *object) { auto priv = GARROW_CHUNKED_ARRAY_GET_PRIVATE(object); - new (&priv->chunked_array) std::shared_ptr; + new(&priv->chunked_array) std::shared_ptr; } static void @@ -125,24 +127,24 @@ garrow_chunked_array_class_init(GArrowChunkedArrayClass *klass) gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_chunked_array_dispose; - gobject_class->finalize = garrow_chunked_array_finalize; + gobject_class->dispose = garrow_chunked_array_dispose; + gobject_class->finalize = garrow_chunked_array_finalize; gobject_class->set_property = garrow_chunked_array_set_property; gobject_class->get_property = garrow_chunked_array_get_property; - spec = g_param_spec_pointer( - "chunked-array", - "Chunked array", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("chunked-array", + "Chunked array", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_CHUNKED_ARRAY, spec); - spec = g_param_spec_object( - "data-type", - "Data type", - "The data type of this chunked array", - GARROW_TYPE_DATA_TYPE, - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("data-type", + "Data type", + "The data type of this chunked array", + GARROW_TYPE_DATA_TYPE, + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_DATA_TYPE, spec); } @@ -186,7 +188,8 @@ GArrowChunkedArray * garrow_chunked_array_new_empty(GArrowDataType *data_type, GError **error) { auto arrow_data_type = garrow_data_type_get_raw(data_type); - auto arrow_chunked_array_result = arrow::ChunkedArray::MakeEmpty(arrow_data_type); + auto arrow_chunked_array_result = + arrow::ChunkedArray::MakeEmpty(arrow_data_type); if (garrow::check(error, arrow_chunked_array_result, "[chunked-array][new]")) { auto arrow_chunked_array = *arrow_chunked_array_result; return garrow_chunked_array_new_raw(&arrow_chunked_array); @@ -316,7 +319,8 @@ garrow_chunked_array_get_n_chunks(GArrowChunkedArray *chunked_array) * Returns: (transfer full): The i-th chunk of the chunked array. */ GArrowArray * -garrow_chunked_array_get_chunk(GArrowChunkedArray *chunked_array, guint i) +garrow_chunked_array_get_chunk(GArrowChunkedArray *chunked_array, + guint i) { const auto arrow_chunked_array = garrow_chunked_array_get_raw(chunked_array); auto arrow_chunk = arrow_chunked_array->chunk(i); @@ -354,7 +358,7 @@ garrow_chunked_array_get_chunks(GArrowChunkedArray *chunked_array) * `offset` to `offset + length` range. The sub #GArrowChunkedArray shares * values with the base #GArrowChunkedArray. */ -GArrowChunkedArray * +GArrowChunkedArray * garrow_chunked_array_slice(GArrowChunkedArray *chunked_array, guint64 offset, guint64 length) @@ -399,7 +403,9 @@ garrow_chunked_array_combine(GArrowChunkedArray *chunked_array, GError **error) { const auto arrow_chunked_array = garrow_chunked_array_get_raw(chunked_array); auto arrow_combined_array = arrow::Concatenate(arrow_chunked_array->chunks()); - if (garrow::check(error, arrow_combined_array, "[chunked-array][combine]")) { + if (garrow::check(error, + arrow_combined_array, + "[chunked-array][combine]")) { return garrow_array_new_raw(&(*arrow_combined_array)); } else { return NULL; @@ -409,21 +415,22 @@ garrow_chunked_array_combine(GArrowChunkedArray *chunked_array, GError **error) G_END_DECLS GArrowChunkedArray * -garrow_chunked_array_new_raw(std::shared_ptr *arrow_chunked_array) +garrow_chunked_array_new_raw( + std::shared_ptr *arrow_chunked_array) { return garrow_chunked_array_new_raw(arrow_chunked_array, nullptr); } GArrowChunkedArray * -garrow_chunked_array_new_raw(std::shared_ptr *arrow_chunked_array, - GArrowDataType *data_type) +garrow_chunked_array_new_raw( + std::shared_ptr *arrow_chunked_array, + GArrowDataType *data_type) { - auto chunked_array = GARROW_CHUNKED_ARRAY(g_object_new(GARROW_TYPE_CHUNKED_ARRAY, - "chunked-array", - arrow_chunked_array, - "data-type", - data_type, - NULL)); + auto chunked_array = + GARROW_CHUNKED_ARRAY(g_object_new(GARROW_TYPE_CHUNKED_ARRAY, + "chunked-array", arrow_chunked_array, + "data-type", data_type, + NULL)); return chunked_array; } diff --git a/c_glib/arrow-glib/chunked-array.h b/c_glib/arrow-glib/chunked-array.h index 712d16504f6..e8a2df931f4 100644 --- a/c_glib/arrow-glib/chunked-array.h +++ b/c_glib/arrow-glib/chunked-array.h @@ -24,63 +24,39 @@ G_BEGIN_DECLS -GARROW_AVAILABLE_IN_ALL GArrowChunkedArray * -garrow_chunked_array_new(GList *chunks, GError **error); - +garrow_chunked_array_new(GList *chunks, + GError **error); GARROW_AVAILABLE_IN_11_0 GArrowChunkedArray * -garrow_chunked_array_new_empty(GArrowDataType *data_type, GError **error); +garrow_chunked_array_new_empty(GArrowDataType *data_type, + GError **error); -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_chunked_array_equal(GArrowChunkedArray *chunked_array, - GArrowChunkedArray *other_chunked_array); +gboolean garrow_chunked_array_equal(GArrowChunkedArray *chunked_array, + GArrowChunkedArray *other_chunked_array); -GARROW_AVAILABLE_IN_ALL GArrowDataType * garrow_chunked_array_get_value_data_type(GArrowChunkedArray *chunked_array); - -GARROW_AVAILABLE_IN_ALL GArrowType garrow_chunked_array_get_value_type(GArrowChunkedArray *chunked_array); GARROW_DEPRECATED_IN_0_15_FOR(garrow_chunked_array_get_n_rows) -guint64 -garrow_chunked_array_get_length(GArrowChunkedArray *chunked_array); - +guint64 garrow_chunked_array_get_length (GArrowChunkedArray *chunked_array); GARROW_AVAILABLE_IN_0_15 -guint64 -garrow_chunked_array_get_n_rows(GArrowChunkedArray *chunked_array); - -GARROW_AVAILABLE_IN_ALL -guint64 -garrow_chunked_array_get_n_nulls(GArrowChunkedArray *chunked_array); - -GARROW_AVAILABLE_IN_ALL -guint -garrow_chunked_array_get_n_chunks(GArrowChunkedArray *chunked_array); - -GARROW_AVAILABLE_IN_ALL -GArrowArray * -garrow_chunked_array_get_chunk(GArrowChunkedArray *chunked_array, guint i); - -GARROW_AVAILABLE_IN_ALL -GList * -garrow_chunked_array_get_chunks(GArrowChunkedArray *chunked_array); - -GARROW_AVAILABLE_IN_ALL -GArrowChunkedArray * -garrow_chunked_array_slice(GArrowChunkedArray *chunked_array, - guint64 offset, - guint64 length); - -GARROW_AVAILABLE_IN_ALL -gchar * -garrow_chunked_array_to_string(GArrowChunkedArray *chunked_array, GError **error); - +guint64 garrow_chunked_array_get_n_rows (GArrowChunkedArray *chunked_array); +guint64 garrow_chunked_array_get_n_nulls(GArrowChunkedArray *chunked_array); +guint garrow_chunked_array_get_n_chunks (GArrowChunkedArray *chunked_array); + +GArrowArray *garrow_chunked_array_get_chunk(GArrowChunkedArray *chunked_array, + guint i); +GList *garrow_chunked_array_get_chunks(GArrowChunkedArray *chunked_array); +GArrowChunkedArray *garrow_chunked_array_slice(GArrowChunkedArray *chunked_array, + guint64 offset, + guint64 length); +gchar *garrow_chunked_array_to_string(GArrowChunkedArray *chunked_array, + GError **error); GARROW_AVAILABLE_IN_4_0 -GArrowArray * -garrow_chunked_array_combine(GArrowChunkedArray *chunked_array, GError **error); +GArrowArray *garrow_chunked_array_combine(GArrowChunkedArray *chunked_array, + GError **error); G_END_DECLS diff --git a/c_glib/arrow-glib/chunked-array.hpp b/c_glib/arrow-glib/chunked-array.hpp index 674ef9606b9..06802366ec1 100644 --- a/c_glib/arrow-glib/chunked-array.hpp +++ b/c_glib/arrow-glib/chunked-array.hpp @@ -23,15 +23,12 @@ #include -GARROW_EXTERN GArrowChunkedArray * -garrow_chunked_array_new_raw(std::shared_ptr *arrow_chunked_array); - -GARROW_EXTERN +garrow_chunked_array_new_raw( + std::shared_ptr *arrow_chunked_array); GArrowChunkedArray * -garrow_chunked_array_new_raw(std::shared_ptr *arrow_chunked_array, - GArrowDataType *data_type); - -GARROW_EXTERN +garrow_chunked_array_new_raw( + std::shared_ptr *arrow_chunked_array, + GArrowDataType *data_type); std::shared_ptr garrow_chunked_array_get_raw(GArrowChunkedArray *chunked_array); diff --git a/c_glib/arrow-glib/codec.cpp b/c_glib/arrow-glib/codec.cpp index a14cda23176..fecf9770487 100644 --- a/c_glib/arrow-glib/codec.cpp +++ b/c_glib/arrow-glib/codec.cpp @@ -33,8 +33,7 @@ G_BEGIN_DECLS * #GArrowCodec is a class for compressing and decompressing data. */ -typedef struct GArrowCodecPrivate_ -{ +typedef struct GArrowCodecPrivate_ { std::shared_ptr codec; } GArrowCodecPrivate; @@ -44,9 +43,10 @@ enum { G_DEFINE_TYPE_WITH_PRIVATE(GArrowCodec, garrow_codec, G_TYPE_OBJECT) -#define GARROW_CODEC_GET_PRIVATE(object) \ - static_cast( \ - garrow_codec_get_instance_private(GARROW_CODEC(object))) +#define GARROW_CODEC_GET_PRIVATE(object) \ + static_cast( \ + garrow_codec_get_instance_private( \ + GARROW_CODEC(object))) static void garrow_codec_finalize(GObject *object) @@ -94,7 +94,7 @@ static void garrow_codec_init(GArrowCodec *object) { auto priv = GARROW_CODEC_GET_PRIVATE(object); - new (&priv->codec) std::shared_ptr; + new(&priv->codec) std::shared_ptr; } static void @@ -104,15 +104,15 @@ garrow_codec_class_init(GArrowCodecClass *klass) auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_codec_finalize; + gobject_class->finalize = garrow_codec_finalize; gobject_class->set_property = garrow_codec_set_property; gobject_class->get_property = garrow_codec_get_property; - spec = g_param_spec_pointer( - "codec", - "Codec", - "The raw std::shared_ptr *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("codec", + "Codec", + "The raw std::shared_ptr *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_CODEC, spec); } @@ -126,12 +126,14 @@ garrow_codec_class_init(GArrowCodecClass *klass) * Since: 0.12.0 */ GArrowCodec * -garrow_codec_new(GArrowCompressionType type, GError **error) +garrow_codec_new(GArrowCompressionType type, + GError **error) { auto arrow_type = garrow_compression_type_to_raw(type); auto arrow_codec = arrow::util::Codec::Create(arrow_type); if (garrow::check(error, arrow_codec, "[codec][new]")) { - std::shared_ptr arrow_codec_shared = std::move(*arrow_codec); + std::shared_ptr arrow_codec_shared = + std::move(*arrow_codec); return garrow_codec_new_raw(&arrow_codec_shared); } else { return NULL; @@ -247,7 +249,9 @@ garrow_compression_type_to_raw(GArrowCompressionType type) GArrowCodec * garrow_codec_new_raw(std::shared_ptr *arrow_codec) { - auto codec = GARROW_CODEC(g_object_new(GARROW_TYPE_CODEC, "codec", arrow_codec, NULL)); + auto codec = GARROW_CODEC(g_object_new(GARROW_TYPE_CODEC, + "codec", arrow_codec, + NULL)); return codec; } diff --git a/c_glib/arrow-glib/codec.h b/c_glib/arrow-glib/codec.h index 5865634a7d8..6e177af9eed 100644 --- a/c_glib/arrow-glib/codec.h +++ b/c_glib/arrow-glib/codec.h @@ -19,8 +19,7 @@ #pragma once -#include - +#include #include G_BEGIN_DECLS @@ -49,26 +48,25 @@ typedef enum { GARROW_COMPRESSION_TYPE_BZ2 } GArrowCompressionType; + #define GARROW_TYPE_CODEC (garrow_codec_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowCodec, garrow_codec, GARROW, CODEC, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowCodec, + garrow_codec, + GARROW, + CODEC, + GObject) struct _GArrowCodecClass { GObjectClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowCodec * -garrow_codec_new(GArrowCompressionType type, GError **error); - -GARROW_AVAILABLE_IN_ALL -const gchar * -garrow_codec_get_name(GArrowCodec *codec); +GArrowCodec *garrow_codec_new(GArrowCompressionType type, + GError **error); +const gchar *garrow_codec_get_name(GArrowCodec *codec); GARROW_AVAILABLE_IN_2_0 GArrowCompressionType garrow_codec_get_compression_type(GArrowCodec *codec); - GARROW_AVAILABLE_IN_2_0 gint garrow_codec_get_compression_level(GArrowCodec *codec); diff --git a/c_glib/arrow-glib/codec.hpp b/c_glib/arrow-glib/codec.hpp index baea842ddf6..f4cfaba18a0 100644 --- a/c_glib/arrow-glib/codec.hpp +++ b/c_glib/arrow-glib/codec.hpp @@ -23,18 +23,12 @@ #include -GARROW_EXTERN GArrowCompressionType garrow_compression_type_from_raw(arrow::Compression::type arrow_type); - -GARROW_EXTERN arrow::Compression::type garrow_compression_type_to_raw(GArrowCompressionType type); -GARROW_EXTERN GArrowCodec * garrow_codec_new_raw(std::shared_ptr *arrow_codec); - -GARROW_EXTERN std::shared_ptr garrow_codec_get_raw(GArrowCodec *codec); diff --git a/c_glib/arrow-glib/composite-array.cpp b/c_glib/arrow-glib/composite-array.cpp index d49b3936054..36d460c9e02 100644 --- a/c_glib/arrow-glib/composite-array.cpp +++ b/c_glib/arrow-glib/composite-array.cpp @@ -70,8 +70,7 @@ G_BEGIN_DECLS * array to a normal array by garrow_run_end_encoded_array_decode(). */ -typedef struct GArrowListArrayPrivate_ -{ +typedef struct GArrowListArrayPrivate_ { GArrowArray *raw_values; } GArrowListArrayPrivate; @@ -79,11 +78,14 @@ enum { PROP_RAW_VALUES = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowListArray, garrow_list_array, GARROW_TYPE_ARRAY) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowListArray, + garrow_list_array, + GARROW_TYPE_ARRAY) -#define GARROW_LIST_ARRAY_GET_PRIVATE(obj) \ - static_cast( \ - garrow_list_array_get_instance_private(GARROW_LIST_ARRAY(obj))) +#define GARROW_LIST_ARRAY_GET_PRIVATE(obj) \ + static_cast( \ + garrow_list_array_get_instance_private( \ + GARROW_LIST_ARRAY(obj))) G_END_DECLS template @@ -99,24 +101,21 @@ garrow_base_list_array_new(GArrowDataType *data_type, const auto arrow_value_offsets = garrow_buffer_get_raw(value_offsets); const auto arrow_values = garrow_array_get_raw(values); const auto arrow_null_bitmap = garrow_buffer_get_raw(null_bitmap); - auto arrow_list_array = std::make_shared(arrow_data_type, - length, - arrow_value_offsets, - arrow_values, - arrow_null_bitmap, - n_nulls); - auto arrow_array = std::static_pointer_cast(arrow_list_array); + auto arrow_list_array = + std::make_shared(arrow_data_type, + length, + arrow_value_offsets, + arrow_values, + arrow_null_bitmap, + n_nulls); + auto arrow_array = + std::static_pointer_cast(arrow_list_array); return garrow_array_new_raw(&arrow_array, - "array", - &arrow_array, - "value-data-type", - data_type, - "null-bitmap", - null_bitmap, - "buffer1", - value_offsets, - "raw-values", - values, + "array", &arrow_array, + "value-data-type", data_type, + "null-bitmap", null_bitmap, + "buffer1", value_offsets, + "raw-values", values, NULL); }; @@ -125,19 +124,25 @@ GArrowDataType * garrow_base_list_array_get_value_type(GArrowArray *array) { auto arrow_array = garrow_array_get_raw(array); - auto arrow_list_array = std::static_pointer_cast(arrow_array); + auto arrow_list_array = + std::static_pointer_cast(arrow_array); auto arrow_value_type = arrow_list_array->value_type(); return garrow_data_type_new_raw(&arrow_value_type); }; template GArrowArray * -garrow_base_list_array_get_value(GArrowArray *array, gint64 i) +garrow_base_list_array_get_value(GArrowArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(array); - auto arrow_list_array = std::static_pointer_cast(arrow_array); + auto arrow_list_array = + std::static_pointer_cast(arrow_array); auto arrow_list = arrow_list_array->value_slice(i); - return garrow_array_new_raw(&arrow_list, "array", &arrow_list, "parent", array, NULL); + return garrow_array_new_raw(&arrow_list, + "array", &arrow_list, + "parent", array, + NULL); }; template @@ -145,13 +150,12 @@ GArrowArray * garrow_base_list_array_get_values(GArrowArray *array) { auto arrow_array = garrow_array_get_raw(array); - auto arrow_list_array = std::static_pointer_cast(arrow_array); + auto arrow_list_array = + std::static_pointer_cast(arrow_array); auto arrow_values = arrow_list_array->values(); return garrow_array_new_raw(&arrow_values, - "array", - &arrow_values, - "parent", - array, + "array", &arrow_values, + "parent", array, NULL); }; @@ -160,7 +164,8 @@ typename LIST_ARRAY_CLASS::offset_type garrow_base_list_array_get_value_offset(GArrowArray *array, gint64 i) { auto arrow_array = garrow_array_get_raw(array); - auto arrow_list_array = std::static_pointer_cast(arrow_array); + auto arrow_list_array = + std::static_pointer_cast(arrow_array); return arrow_list_array->value_offset(i); }; @@ -169,7 +174,8 @@ typename LIST_ARRAY_CLASS::offset_type garrow_base_list_array_get_value_length(GArrowArray *array, gint64 i) { auto arrow_array = garrow_array_get_raw(array); - auto arrow_list_array = std::static_pointer_cast(arrow_array); + auto arrow_list_array = + std::static_pointer_cast(arrow_array); return arrow_list_array->value_length(i); }; @@ -179,10 +185,12 @@ garrow_base_list_array_get_value_offsets(GArrowArray *array, gint64 *n_offsets) { auto arrow_array = garrow_array_get_raw(array); *n_offsets = arrow_array->length() + 1; - auto arrow_list_array = std::static_pointer_cast(arrow_array); + auto arrow_list_array = + std::static_pointer_cast(arrow_array); return arrow_list_array->raw_value_offsets(); }; + G_BEGIN_DECLS static void @@ -195,6 +203,7 @@ garrow_list_array_dispose(GObject *object) priv->raw_values = NULL; } + G_OBJECT_CLASS(garrow_list_array_parent_class)->dispose(object); } @@ -249,12 +258,12 @@ garrow_list_array_class_init(GArrowListArrayClass *klass) gobject_class->get_property = garrow_list_array_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "raw-values", - "Raw values", - "The raw values", - GARROW_TYPE_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("raw-values", + "Raw values", + "The raw values", + GARROW_TYPE_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_RAW_VALUES, spec); } @@ -283,12 +292,13 @@ garrow_list_array_new(GArrowDataType *data_type, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto list_array = garrow_base_list_array_new(data_type, - length, - value_offsets, - values, - null_bitmap, - n_nulls); + auto list_array = garrow_base_list_array_new( + data_type, + length, + value_offsets, + values, + null_bitmap, + n_nulls); return GARROW_LIST_ARRAY(list_array); } @@ -301,7 +311,8 @@ garrow_list_array_new(GArrowDataType *data_type, GArrowDataType * garrow_list_array_get_value_type(GArrowListArray *array) { - return garrow_base_list_array_get_value_type(GARROW_ARRAY(array)); + return garrow_base_list_array_get_value_type( + GARROW_ARRAY(array)); } /** @@ -312,9 +323,11 @@ garrow_list_array_get_value_type(GArrowListArray *array) * Returns: (transfer full): The i-th list. */ GArrowArray * -garrow_list_array_get_value(GArrowListArray *array, gint64 i) +garrow_list_array_get_value(GArrowListArray *array, + gint64 i) { - return garrow_base_list_array_get_value(GARROW_ARRAY(array), i); + return garrow_base_list_array_get_value( + GARROW_ARRAY(array), i); } /** @@ -328,7 +341,8 @@ garrow_list_array_get_value(GArrowListArray *array, gint64 i) GArrowArray * garrow_list_array_get_values(GArrowListArray *array) { - return garrow_base_list_array_get_values(GARROW_ARRAY(array)); + return garrow_base_list_array_get_values( + GARROW_ARRAY(array)); } /** @@ -343,8 +357,8 @@ garrow_list_array_get_values(GArrowListArray *array) gint32 garrow_list_array_get_value_offset(GArrowListArray *array, gint64 i) { - return garrow_base_list_array_get_value_offset(GARROW_ARRAY(array), - i); + return garrow_base_list_array_get_value_offset( + GARROW_ARRAY(array), i); } /** @@ -359,8 +373,8 @@ garrow_list_array_get_value_offset(GArrowListArray *array, gint64 i) gint32 garrow_list_array_get_value_length(GArrowListArray *array, gint64 i) { - return garrow_base_list_array_get_value_length(GARROW_ARRAY(array), - i); + return garrow_base_list_array_get_value_length( + GARROW_ARRAY(array), i); } /** @@ -376,12 +390,12 @@ garrow_list_array_get_value_length(GArrowListArray *array, gint64 i) const gint32 * garrow_list_array_get_value_offsets(GArrowListArray *array, gint64 *n_offsets) { - return garrow_base_list_array_get_value_offsets(GARROW_ARRAY(array), - n_offsets); + return garrow_base_list_array_get_value_offsets( + GARROW_ARRAY(array), n_offsets); } -typedef struct GArrowLargeListArrayPrivate_ -{ + +typedef struct GArrowLargeListArrayPrivate_ { GArrowArray *raw_values; } GArrowLargeListArrayPrivate; @@ -389,9 +403,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowLargeListArray, garrow_large_list_array, GARROW_TYPE_ARRAY) -#define GARROW_LARGE_LIST_ARRAY_GET_PRIVATE(obj) \ - static_cast( \ - garrow_large_list_array_get_instance_private(GARROW_LARGE_LIST_ARRAY(obj))) +#define GARROW_LARGE_LIST_ARRAY_GET_PRIVATE(obj) \ + static_cast( \ + garrow_large_list_array_get_instance_private( \ + GARROW_LARGE_LIST_ARRAY(obj))) static void garrow_large_list_array_dispose(GObject *object) @@ -457,12 +472,12 @@ garrow_large_list_array_class_init(GArrowLargeListArrayClass *klass) gobject_class->get_property = garrow_large_list_array_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "raw-values", - "Raw values", - "The raw values", - GARROW_TYPE_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("raw-values", + "Raw values", + "The raw values", + GARROW_TYPE_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_RAW_VALUES, spec); } @@ -491,12 +506,13 @@ garrow_large_list_array_new(GArrowDataType *data_type, GArrowBuffer *null_bitmap, gint64 n_nulls) { - auto large_list_array = garrow_base_list_array_new(data_type, - length, - value_offsets, - values, - null_bitmap, - n_nulls); + auto large_list_array = garrow_base_list_array_new( + data_type, + length, + value_offsets, + values, + null_bitmap, + n_nulls); return GARROW_LARGE_LIST_ARRAY(large_list_array); } @@ -525,9 +541,12 @@ garrow_large_list_array_get_value_type(GArrowLargeListArray *array) * Since: 0.16.0 */ GArrowArray * -garrow_large_list_array_get_value(GArrowLargeListArray *array, gint64 i) +garrow_large_list_array_get_value(GArrowLargeListArray *array, + gint64 i) { - return garrow_base_list_array_get_value(GARROW_ARRAY(array), i); + return garrow_base_list_array_get_value( + GARROW_ARRAY(array), + i); } /** @@ -541,7 +560,8 @@ garrow_large_list_array_get_value(GArrowLargeListArray *array, gint64 i) GArrowArray * garrow_large_list_array_get_values(GArrowLargeListArray *array) { - return garrow_base_list_array_get_values(GARROW_ARRAY(array)); + return garrow_base_list_array_get_values( + GARROW_ARRAY(array)); } /** @@ -557,8 +577,7 @@ gint64 garrow_large_list_array_get_value_offset(GArrowLargeListArray *array, gint64 i) { return garrow_base_list_array_get_value_offset( - GARROW_ARRAY(array), - i); + GARROW_ARRAY(array), i); } /** @@ -574,8 +593,7 @@ gint64 garrow_large_list_array_get_value_length(GArrowLargeListArray *array, gint64 i) { return garrow_base_list_array_get_value_length( - GARROW_ARRAY(array), - i); + GARROW_ARRAY(array), i); } /** @@ -589,24 +607,26 @@ garrow_large_list_array_get_value_length(GArrowLargeListArray *array, gint64 i) * Since: 2.0.0 */ const gint64 * -garrow_large_list_array_get_value_offsets(GArrowLargeListArray *array, gint64 *n_offsets) +garrow_large_list_array_get_value_offsets(GArrowLargeListArray *array, + gint64 *n_offsets) { - auto value_offsets = - garrow_base_list_array_get_value_offsets(GARROW_ARRAY(array), - n_offsets); - return reinterpret_cast(value_offsets); + return garrow_base_list_array_get_value_offsets( + GARROW_ARRAY(array), n_offsets); } -typedef struct GArrowStructArrayPrivate_ -{ + +typedef struct GArrowStructArrayPrivate_ { GPtrArray *fields; } GArrowStructArrayPrivate; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowStructArray, garrow_struct_array, GARROW_TYPE_ARRAY) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowStructArray, + garrow_struct_array, + GARROW_TYPE_ARRAY) -#define GARROW_STRUCT_ARRAY_GET_PRIVATE(obj) \ - static_cast( \ - garrow_struct_array_get_instance_private(GARROW_STRUCT_ARRAY(obj))) +#define GARROW_STRUCT_ARRAY_GET_PRIVATE(obj) \ + static_cast( \ + garrow_struct_array_get_instance_private( \ + GARROW_STRUCT_ARRAY(obj))) static void garrow_struct_array_dispose(GObject *object) @@ -664,18 +684,19 @@ garrow_struct_array_new(GArrowDataType *data_type, arrow_fields.push_back(garrow_array_get_raw(field)); } const auto arrow_null_bitmap = garrow_buffer_get_raw(null_bitmap); - auto arrow_struct_array = std::make_shared(arrow_data_type, - length, - arrow_fields, - arrow_null_bitmap, - n_nulls); - auto arrow_array = std::static_pointer_cast(arrow_struct_array); - auto struct_array = garrow_array_new_raw(&arrow_array, - "array", - &arrow_array, - "null-bitmap", - null_bitmap, - NULL); + auto arrow_struct_array = + std::make_shared(arrow_data_type, + length, + arrow_fields, + arrow_null_bitmap, + n_nulls); + auto arrow_array = + std::static_pointer_cast(arrow_struct_array); + auto struct_array = + garrow_array_new_raw(&arrow_array, + "array", &arrow_array, + "null-bitmap", null_bitmap, + NULL); auto priv = GARROW_STRUCT_ARRAY_GET_PRIVATE(struct_array); priv->fields = g_ptr_array_sized_new(arrow_fields.size()); g_ptr_array_set_free_func(priv->fields, g_object_unref); @@ -692,7 +713,8 @@ garrow_struct_array_get_fields_internal(GArrowStructArray *array) auto priv = GARROW_STRUCT_ARRAY_GET_PRIVATE(array); if (!priv->fields) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto arrow_struct_array = std::static_pointer_cast(arrow_array); + auto arrow_struct_array = + std::static_pointer_cast(arrow_array); auto arrow_fields = arrow_struct_array->fields(); priv->fields = g_ptr_array_sized_new(arrow_fields.size()); g_ptr_array_set_free_func(priv->fields, g_object_unref); @@ -711,7 +733,8 @@ garrow_struct_array_get_fields_internal(GArrowStructArray *array) * Returns: (transfer full): The i-th field. */ GArrowArray * -garrow_struct_array_get_field(GArrowStructArray *array, gint i) +garrow_struct_array_get_field(GArrowStructArray *array, + gint i) { auto fields = garrow_struct_array_get_fields_internal(array); if (i < 0) { @@ -762,7 +785,8 @@ GList * garrow_struct_array_flatten(GArrowStructArray *array, GError **error) { const auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto arrow_struct_array = std::static_pointer_cast(arrow_array); + auto arrow_struct_array = + std::static_pointer_cast(arrow_array); auto memory_pool = arrow::default_memory_pool(); auto arrow_arrays = arrow_struct_array->Flatten(memory_pool); @@ -779,8 +803,8 @@ garrow_struct_array_flatten(GArrowStructArray *array, GError **error) return g_list_reverse(arrays); } -typedef struct GArrowMapArrayPrivate_ -{ + +typedef struct GArrowMapArrayPrivate_ { GArrowArray *offsets; GArrowArray *keys; GArrowArray *items; @@ -792,11 +816,14 @@ enum { PROP_ITEMS, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowMapArray, garrow_map_array, GARROW_TYPE_LIST_ARRAY) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowMapArray, + garrow_map_array, + GARROW_TYPE_LIST_ARRAY) -#define GARROW_MAP_ARRAY_GET_PRIVATE(obj) \ - static_cast( \ - garrow_map_array_get_instance_private(GARROW_MAP_ARRAY(obj))) +#define GARROW_MAP_ARRAY_GET_PRIVATE(obj) \ + static_cast( \ + garrow_map_array_get_instance_private( \ + GARROW_MAP_ARRAY(obj))) static void garrow_map_array_dispose(GObject *object) @@ -884,28 +911,28 @@ garrow_map_array_class_init(GArrowMapArrayClass *klass) gobject_class->get_property = garrow_map_array_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "offsets", - "Offsets", - "The GArrowArray for offsets", - GARROW_TYPE_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("offsets", + "Offsets", + "The GArrowArray for offsets", + GARROW_TYPE_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_OFFSETS, spec); - spec = g_param_spec_object( - "keys", - "Keys", - "The GArrowArray for keys", - GARROW_TYPE_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("keys", + "Keys", + "The GArrowArray for keys", + GARROW_TYPE_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_KEYS, spec); - spec = g_param_spec_object( - "items", - "Items", - "The GArrowArray for items", - GARROW_TYPE_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("items", + "Items", + "The GArrowArray for items", + GARROW_TYPE_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_ITEMS, spec); } @@ -938,14 +965,10 @@ garrow_map_array_new(GArrowArray *offsets, if (garrow::check(error, arrow_array_result, "[map-array][new]")) { auto arrow_array = *arrow_array_result; return GARROW_MAP_ARRAY(garrow_array_new_raw(&arrow_array, - "array", - &arrow_array, - "offsets", - offsets, - "keys", - keys, - "items", - items, + "array", &arrow_array, + "offsets", offsets, + "keys", keys, + "items", items, NULL)); } else { return NULL; @@ -970,7 +993,8 @@ garrow_map_array_get_keys(GArrowMapArray *array) } auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto arrow_map_array = std::static_pointer_cast(arrow_array); + auto arrow_map_array = + std::static_pointer_cast(arrow_array); auto arrow_keys = arrow_map_array->keys(); return garrow_array_new_raw(&arrow_keys); } @@ -993,13 +1017,14 @@ garrow_map_array_get_items(GArrowMapArray *array) } auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto arrow_map_array = std::static_pointer_cast(arrow_array); + auto arrow_map_array = + std::static_pointer_cast(arrow_array); auto arrow_items = arrow_map_array->items(); return garrow_array_new_raw(&arrow_items); } -typedef struct GArrowUnionArrayPrivate_ -{ + +typedef struct GArrowUnionArrayPrivate_ { GArrowInt8Array *type_ids; GPtrArray *fields; } GArrowUnionArrayPrivate; @@ -1009,11 +1034,14 @@ enum { PROP_FIELDS, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowUnionArray, garrow_union_array, GARROW_TYPE_ARRAY) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowUnionArray, + garrow_union_array, + GARROW_TYPE_ARRAY) -#define GARROW_UNION_ARRAY_GET_PRIVATE(obj) \ - static_cast( \ - garrow_union_array_get_instance_private(GARROW_UNION_ARRAY(obj))) +#define GARROW_UNION_ARRAY_GET_PRIVATE(obj) \ + static_cast( \ + garrow_union_array_get_instance_private( \ + GARROW_UNION_ARRAY(obj))) static void garrow_union_array_dispose(GObject *object) @@ -1084,12 +1112,12 @@ garrow_union_array_class_init(GArrowUnionArrayClass *klass) gobject_class->get_property = garrow_union_array_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "type-ids", - "Type IDs", - "The GArrowInt8Array for type IDs", - GARROW_TYPE_INT8_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("type-ids", + "Type IDs", + "The GArrowInt8Array for type IDs", + GARROW_TYPE_INT8_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_TYPE_IDS, spec); } @@ -1103,10 +1131,12 @@ garrow_union_array_class_init(GArrowUnionArrayClass *klass) * Since: 12.0.0 */ gint8 -garrow_union_array_get_type_code(GArrowUnionArray *array, gint64 i) +garrow_union_array_get_type_code(GArrowUnionArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto arrow_union_array = std::static_pointer_cast(arrow_array); + auto arrow_union_array = + std::static_pointer_cast(arrow_array); return arrow_union_array->type_code(i); } @@ -1120,10 +1150,12 @@ garrow_union_array_get_type_code(GArrowUnionArray *array, gint64 i) * Since: 12.0.0 */ gint -garrow_union_array_get_child_id(GArrowUnionArray *array, gint64 i) +garrow_union_array_get_child_id(GArrowUnionArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto arrow_union_array = std::static_pointer_cast(arrow_array); + auto arrow_union_array = + std::static_pointer_cast(arrow_array); return arrow_union_array->child_id(i); } @@ -1136,12 +1168,14 @@ garrow_union_array_get_child_id(GArrowUnionArray *array, gint64 i) * #GArrowArray or %NULL on out of range. */ GArrowArray * -garrow_union_array_get_field(GArrowUnionArray *array, gint i) +garrow_union_array_get_field(GArrowUnionArray *array, + gint i) { auto priv = GARROW_UNION_ARRAY_GET_PRIVATE(array); if (!priv->fields) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto arrow_union_array = std::static_pointer_cast(arrow_array); + auto arrow_union_array = + std::static_pointer_cast(arrow_array); auto n_fields = arrow_union_array->num_fields(); priv->fields = g_ptr_array_sized_new(n_fields); g_ptr_array_set_free_func(priv->fields, g_object_unref); @@ -1165,7 +1199,10 @@ garrow_union_array_get_field(GArrowUnionArray *array, gint i) return field; } -G_DEFINE_TYPE(GArrowSparseUnionArray, garrow_sparse_union_array, GARROW_TYPE_UNION_ARRAY) + +G_DEFINE_TYPE(GArrowSparseUnionArray, + garrow_sparse_union_array, + GARROW_TYPE_UNION_ARRAY) static void garrow_sparse_union_array_init(GArrowSparseUnionArray *object) @@ -1208,16 +1245,16 @@ garrow_sparse_union_array_new_internal(GArrowSparseUnionDataType *data_type, arrow_sparse_union_array_result = arrow::SparseUnionArray::Make(*arrow_type_ids, arrow_fields); } - if (garrow::check(error, arrow_sparse_union_array_result, context)) { + if (garrow::check(error, + arrow_sparse_union_array_result, + context)) { auto arrow_sparse_union_array = *arrow_sparse_union_array_result; - auto sparse_union_array = garrow_array_new_raw(&arrow_sparse_union_array, - "array", - &arrow_sparse_union_array, - "value-data-type", - data_type, - "type-ids", - type_ids, - NULL); + auto sparse_union_array = + garrow_array_new_raw(&arrow_sparse_union_array, + "array", &arrow_sparse_union_array, + "value-data-type", data_type, + "type-ids", type_ids, + NULL); auto priv = GARROW_UNION_ARRAY_GET_PRIVATE(sparse_union_array); priv->fields = g_ptr_array_sized_new(arrow_fields.size()); g_ptr_array_set_free_func(priv->fields, g_object_unref); @@ -1244,7 +1281,9 @@ garrow_sparse_union_array_new_internal(GArrowSparseUnionDataType *data_type, * Since: 0.12.0 */ GArrowSparseUnionArray * -garrow_sparse_union_array_new(GArrowInt8Array *type_ids, GList *fields, GError **error) +garrow_sparse_union_array_new(GArrowInt8Array *type_ids, + GList *fields, + GError **error) { return garrow_sparse_union_array_new_internal(NULL, type_ids, @@ -1272,15 +1311,16 @@ garrow_sparse_union_array_new_data_type(GArrowSparseUnionDataType *data_type, GList *fields, GError **error) { - return garrow_sparse_union_array_new_internal(data_type, - type_ids, - fields, - error, - "[sparse-union-array][new][data-type]"); + return garrow_sparse_union_array_new_internal( + data_type, + type_ids, + fields, + error, + "[sparse-union-array][new][data-type]"); } -typedef struct GArrowDenseUnionArrayPrivate_ -{ + +typedef struct GArrowDenseUnionArrayPrivate_ { GArrowInt32Array *value_offsets; } GArrowDenseUnionArrayPrivate; @@ -1292,9 +1332,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowDenseUnionArray, garrow_dense_union_array, GARROW_TYPE_UNION_ARRAY) -#define GARROW_DENSE_UNION_ARRAY_GET_PRIVATE(obj) \ - static_cast( \ - garrow_dense_union_array_get_instance_private(GARROW_DENSE_UNION_ARRAY(obj))) +#define GARROW_DENSE_UNION_ARRAY_GET_PRIVATE(obj) \ + static_cast( \ + garrow_dense_union_array_get_instance_private( \ + GARROW_DENSE_UNION_ARRAY(obj))) static void garrow_dense_union_array_dispose(GObject *object) @@ -1360,12 +1401,12 @@ garrow_dense_union_array_class_init(GArrowDenseUnionArrayClass *klass) gobject_class->get_property = garrow_dense_union_array_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "value-offsets", - "Value offsets", - "The GArrowInt32Array for value offsets", - GARROW_TYPE_INT32_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("value-offsets", + "Value offsets", + "The GArrowInt32Array for value offsets", + GARROW_TYPE_INT32_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE_OFFSETS, spec); } @@ -1401,20 +1442,21 @@ garrow_dense_union_array_new_internal(GArrowDenseUnionDataType *data_type, arrow_union_data_type->type_codes()); } else { arrow_dense_union_array_result = - arrow::DenseUnionArray::Make(*arrow_type_ids, *arrow_value_offsets, arrow_fields); + arrow::DenseUnionArray::Make(*arrow_type_ids, + *arrow_value_offsets, + arrow_fields); } - if (garrow::check(error, arrow_dense_union_array_result, context)) { + if (garrow::check(error, + arrow_dense_union_array_result, + context)) { auto arrow_dense_union_array = *arrow_dense_union_array_result; - auto dense_union_array = garrow_array_new_raw(&arrow_dense_union_array, - "array", - &arrow_dense_union_array, - "value-data-type", - data_type, - "type-ids", - type_ids, - "value-offsets", - value_offsets, - NULL); + auto dense_union_array = + garrow_array_new_raw(&arrow_dense_union_array, + "array", &arrow_dense_union_array, + "value-data-type", data_type, + "type-ids", type_ids, + "value-offsets", value_offsets, + NULL); auto priv = GARROW_UNION_ARRAY_GET_PRIVATE(dense_union_array); priv->fields = g_ptr_array_sized_new(arrow_fields.size()); g_ptr_array_set_free_func(priv->fields, g_object_unref); @@ -1478,12 +1520,13 @@ garrow_dense_union_array_new_data_type(GArrowDenseUnionDataType *data_type, GList *fields, GError **error) { - return garrow_dense_union_array_new_internal(data_type, - type_ids, - value_offsets, - fields, - error, - "[dense-union-array][new][data-type]"); + return garrow_dense_union_array_new_internal( + data_type, + type_ids, + value_offsets, + fields, + error, + "[dense-union-array][new][data-type]"); } /** @@ -1496,7 +1539,8 @@ garrow_dense_union_array_new_data_type(GArrowDenseUnionDataType *data_type, * Since: 12.0.0 */ gint32 -garrow_dense_union_array_get_value_offset(GArrowDenseUnionArray *array, gint64 i) +garrow_dense_union_array_get_value_offset(GArrowDenseUnionArray *array, + gint64 i) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto arrow_dense_union_array = @@ -1504,8 +1548,8 @@ garrow_dense_union_array_get_value_offset(GArrowDenseUnionArray *array, gint64 i return arrow_dense_union_array->value_offset(i); } -typedef struct GArrowDictionaryArrayPrivate_ -{ + +typedef struct GArrowDictionaryArrayPrivate_ { GArrowArray *indices; GArrowArray *dictionary; } GArrowDictionaryArrayPrivate; @@ -1519,9 +1563,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowDictionaryArray, garrow_dictionary_array, GARROW_TYPE_ARRAY) -#define GARROW_DICTIONARY_ARRAY_GET_PRIVATE(obj) \ - static_cast( \ - garrow_dictionary_array_get_instance_private(GARROW_DICTIONARY_ARRAY(obj))) +#define GARROW_DICTIONARY_ARRAY_GET_PRIVATE(obj) \ + static_cast( \ + garrow_dictionary_array_get_instance_private( \ + GARROW_DICTIONARY_ARRAY(obj))) static void garrow_dictionary_array_dispose(GObject *object) @@ -1598,20 +1643,20 @@ garrow_dictionary_array_class_init(GArrowDictionaryArrayClass *klass) gobject_class->get_property = garrow_dictionary_array_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "indices", - "The indices", - "The GArrowArray for indices", - GARROW_TYPE_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("indices", + "The indices", + "The GArrowArray for indices", + GARROW_TYPE_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_INDICES, spec); - spec = g_param_spec_object( - "dictionary", - "The dictionary", - "The GArrowArray for dictionary", - GARROW_TYPE_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("dictionary", + "The dictionary", + "The GArrowArray for dictionary", + GARROW_TYPE_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_DICTIONARY, spec); } @@ -1637,19 +1682,20 @@ garrow_dictionary_array_new(GArrowDataType *data_type, const auto arrow_indices = garrow_array_get_raw(indices); const auto arrow_dictionary = garrow_array_get_raw(dictionary); auto arrow_dictionary_array_result = - arrow::DictionaryArray::FromArrays(arrow_data_type, arrow_indices, arrow_dictionary); - if (garrow::check(error, arrow_dictionary_array_result, "[dictionary-array][new]")) { + arrow::DictionaryArray::FromArrays( + arrow_data_type, + arrow_indices, + arrow_dictionary); + if (garrow::check(error, + arrow_dictionary_array_result, + "[dictionary-array][new]")) { auto arrow_array = std::static_pointer_cast(*arrow_dictionary_array_result); auto dictionary_array = garrow_array_new_raw(&arrow_array, - "array", - &arrow_array, - "value-data-type", - data_type, - "indices", - indices, - "dictionary", - dictionary, + "array", &arrow_array, + "value-data-type", data_type, + "indices", indices, + "dictionary", dictionary, NULL); return GARROW_DICTIONARY_ARRAY(dictionary_array); } else { @@ -1722,8 +1768,8 @@ garrow_dictionary_array_get_dictionary_data_type(GArrowDictionaryArray *array) return GARROW_DICTIONARY_DATA_TYPE(data_type); } -struct GArrowRunEndEncodedArrayPrivate -{ + +struct GArrowRunEndEncodedArrayPrivate { GArrowArray *run_ends; GArrowArray *values; }; @@ -1737,9 +1783,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowRunEndEncodedArray, garrow_run_end_encoded_array, GARROW_TYPE_ARRAY) -#define GARROW_RUN_END_ENCODED_ARRAY_GET_PRIVATE(obj) \ - static_cast( \ - garrow_run_end_encoded_array_get_instance_private( \ +#define GARROW_RUN_END_ENCODED_ARRAY_GET_PRIVATE(obj) \ + static_cast( \ + garrow_run_end_encoded_array_get_instance_private( \ GARROW_RUN_END_ENCODED_ARRAY(obj))) static void @@ -1817,20 +1863,20 @@ garrow_run_end_encoded_array_class_init(GArrowRunEndEncodedArrayClass *klass) gobject_class->get_property = garrow_run_end_encoded_array_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "run-ends", - "The run-ends", - "The GArrowArray for run-ends", - GARROW_TYPE_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("run-ends", + "The run-ends", + "The GArrowArray for run-ends", + GARROW_TYPE_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_RUN_ENDS, spec); - spec = g_param_spec_object( - "values", - "The values", - "The GArrowArray for values", - GARROW_TYPE_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("values", + "The values", + "The GArrowArray for values", + GARROW_TYPE_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUES, spec); } @@ -1860,26 +1906,24 @@ garrow_run_end_encoded_array_new(GArrowDataType *data_type, const auto arrow_run_ends = garrow_array_get_raw(run_ends); const auto arrow_values = garrow_array_get_raw(values); auto arrow_run_end_encoded_array_result = - arrow::RunEndEncodedArray::Make(arrow_data_type, - logical_length, - arrow_run_ends, - arrow_values, - logical_offset); + arrow::RunEndEncodedArray::Make( + arrow_data_type, + logical_length, + arrow_run_ends, + arrow_values, + logical_offset); if (garrow::check(error, arrow_run_end_encoded_array_result, "[run-end-encoded-array][new]")) { auto arrow_array = std::static_pointer_cast(*arrow_run_end_encoded_array_result); - auto run_end_encoded_array = garrow_array_new_raw(&arrow_array, - "array", - &arrow_array, - "value-data-type", - data_type, - "run-ends", - run_ends, - "values", - values, - NULL); + auto run_end_encoded_array = + garrow_array_new_raw(&arrow_array, + "array", &arrow_array, + "value-data-type", data_type, + "run-ends", run_ends, + "values", values, + NULL); return GARROW_RUN_END_ENCODED_ARRAY(run_end_encoded_array); } else { return nullptr; @@ -1954,8 +1998,9 @@ garrow_run_end_encoded_array_get_values(GArrowRunEndEncodedArray *array) * Since: 13.0.0 */ GArrowArray * -garrow_run_end_encoded_array_get_logical_run_ends(GArrowRunEndEncodedArray *array, - GError **error) +garrow_run_end_encoded_array_get_logical_run_ends( + GArrowRunEndEncodedArray *array, + GError **error) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto arrow_run_end_encoded_array = @@ -1968,7 +2013,9 @@ garrow_run_end_encoded_array_get_logical_run_ends(GArrowRunEndEncodedArray *arra "[run-end-encoded-array][get-logical-run-ends]")) { auto arrow_array = std::static_pointer_cast(*arrow_logical_run_ends_result); - return garrow_array_new_raw(&arrow_array, "array", &arrow_array, NULL); + return garrow_array_new_raw(&arrow_array, + "array", &arrow_array, + NULL); } else { return nullptr; } @@ -1992,10 +2039,10 @@ garrow_run_end_encoded_array_get_logical_values(GArrowRunEndEncodedArray *array) auto arrow_run_end_encoded_array = std::static_pointer_cast(arrow_array); auto arrow_logical_values = - std::static_pointer_cast(arrow_run_end_encoded_array->LogicalValues()); + std::static_pointer_cast( + arrow_run_end_encoded_array->LogicalValues()); return garrow_array_new_raw(&arrow_logical_values, - "array", - &arrow_logical_values, + "array", &arrow_logical_values, NULL); } @@ -2010,7 +2057,8 @@ garrow_run_end_encoded_array_get_logical_values(GArrowRunEndEncodedArray *array) * Since: 13.0.0 */ gint64 -garrow_run_end_encoded_array_find_physical_offset(GArrowRunEndEncodedArray *array) +garrow_run_end_encoded_array_find_physical_offset( + GArrowRunEndEncodedArray *array) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto arrow_run_end_encoded_array = @@ -2029,14 +2077,15 @@ garrow_run_end_encoded_array_find_physical_offset(GArrowRunEndEncodedArray *arra * range of values from offset to length. * * Avoid calling this function if the physical length can be - * established in some other way (e.g. when iterating over the runs + * estabilished in some other way (e.g. when iterating over the runs * sequentially until the end). This function uses binary-search, so * it has a O(log N) cost. * * Since: 13.0.0 */ gint64 -garrow_run_end_encoded_array_find_physical_length(GArrowRunEndEncodedArray *array) +garrow_run_end_encoded_array_find_physical_length( + GArrowRunEndEncodedArray *array) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto arrow_run_end_encoded_array = @@ -2044,4 +2093,5 @@ garrow_run_end_encoded_array_find_physical_length(GArrowRunEndEncodedArray *arra return arrow_run_end_encoded_array->FindPhysicalLength(); } + G_END_DECLS diff --git a/c_glib/arrow-glib/composite-array.h b/c_glib/arrow-glib/composite-array.h index b8ba901363d..3637e03fc23 100644 --- a/c_glib/arrow-glib/composite-array.h +++ b/c_glib/arrow-glib/composite-array.h @@ -27,122 +27,110 @@ G_BEGIN_DECLS #define GARROW_TYPE_LIST_ARRAY (garrow_list_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowListArray, garrow_list_array, GARROW, LIST_ARRAY, GArrowArray) +G_DECLARE_DERIVABLE_TYPE(GArrowListArray, + garrow_list_array, + GARROW, + LIST_ARRAY, + GArrowArray) struct _GArrowListArrayClass { GArrowArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowListArray * -garrow_list_array_new(GArrowDataType *data_type, - gint64 length, - GArrowBuffer *value_offsets, - GArrowArray *values, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -GARROW_AVAILABLE_IN_ALL -GArrowDataType * -garrow_list_array_get_value_type(GArrowListArray *array); - -GARROW_AVAILABLE_IN_ALL -GArrowArray * -garrow_list_array_get_value(GArrowListArray *array, gint64 i); +GArrowListArray *garrow_list_array_new(GArrowDataType *data_type, + gint64 length, + GArrowBuffer *value_offsets, + GArrowArray *values, + GArrowBuffer *null_bitmap, + gint64 n_nulls); +GArrowDataType *garrow_list_array_get_value_type(GArrowListArray *array); +GArrowArray *garrow_list_array_get_value(GArrowListArray *array, + gint64 i); GARROW_AVAILABLE_IN_2_0 -GArrowArray * -garrow_list_array_get_values(GArrowListArray *array); - +GArrowArray *garrow_list_array_get_values(GArrowListArray *array); GARROW_AVAILABLE_IN_2_0 -gint32 -garrow_list_array_get_value_offset(GArrowListArray *array, gint64 i); - +gint32 garrow_list_array_get_value_offset(GArrowListArray *array, + gint64 i); GARROW_AVAILABLE_IN_2_0 -gint32 -garrow_list_array_get_value_length(GArrowListArray *array, gint64 i); - +gint32 garrow_list_array_get_value_length(GArrowListArray *array, + gint64 i); GARROW_AVAILABLE_IN_2_0 const gint32 * -garrow_list_array_get_value_offsets(GArrowListArray *array, gint64 *n_offsets); +garrow_list_array_get_value_offsets(GArrowListArray *array, + gint64 *n_offsets); + #define GARROW_TYPE_LARGE_LIST_ARRAY (garrow_large_list_array_get_type()) -GARROW_AVAILABLE_IN_0_16 -G_DECLARE_DERIVABLE_TYPE( - GArrowLargeListArray, garrow_large_list_array, GARROW, LARGE_LIST_ARRAY, GArrowArray) +G_DECLARE_DERIVABLE_TYPE(GArrowLargeListArray, + garrow_large_list_array, + GARROW, + LARGE_LIST_ARRAY, + GArrowArray) struct _GArrowLargeListArrayClass { GArrowArrayClass parent_class; }; GARROW_AVAILABLE_IN_0_16 -GArrowLargeListArray * -garrow_large_list_array_new(GArrowDataType *data_type, - gint64 length, - GArrowBuffer *value_offsets, - GArrowArray *values, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowLargeListArray *garrow_large_list_array_new(GArrowDataType *data_type, + gint64 length, + GArrowBuffer *value_offsets, + GArrowArray *values, + GArrowBuffer *null_bitmap, + gint64 n_nulls); GARROW_AVAILABLE_IN_0_16 -GArrowDataType * -garrow_large_list_array_get_value_type(GArrowLargeListArray *array); - +GArrowDataType *garrow_large_list_array_get_value_type(GArrowLargeListArray *array); GARROW_AVAILABLE_IN_0_16 -GArrowArray * -garrow_large_list_array_get_value(GArrowLargeListArray *array, gint64 i); - +GArrowArray *garrow_large_list_array_get_value(GArrowLargeListArray *array, + gint64 i); GARROW_AVAILABLE_IN_2_0 -GArrowArray * -garrow_large_list_array_get_values(GArrowLargeListArray *array); - +GArrowArray *garrow_large_list_array_get_values(GArrowLargeListArray *array); GARROW_AVAILABLE_IN_2_0 -gint64 -garrow_large_list_array_get_value_offset(GArrowLargeListArray *array, gint64 i); - +gint64 garrow_large_list_array_get_value_offset(GArrowLargeListArray *array, + gint64 i); GARROW_AVAILABLE_IN_2_0 -gint64 -garrow_large_list_array_get_value_length(GArrowLargeListArray *array, gint64 i); - +gint64 garrow_large_list_array_get_value_length(GArrowLargeListArray *array, + gint64 i); GARROW_AVAILABLE_IN_2_0 const gint64 * -garrow_large_list_array_get_value_offsets(GArrowLargeListArray *array, gint64 *n_offsets); +garrow_large_list_array_get_value_offsets(GArrowLargeListArray *array, + gint64 *n_offsets); + #define GARROW_TYPE_STRUCT_ARRAY (garrow_struct_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowStructArray, garrow_struct_array, GARROW, STRUCT_ARRAY, GArrowArray) +G_DECLARE_DERIVABLE_TYPE(GArrowStructArray, + garrow_struct_array, + GARROW, + STRUCT_ARRAY, + GArrowArray) struct _GArrowStructArrayClass { GArrowArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowStructArray * -garrow_struct_array_new(GArrowDataType *data_type, - gint64 length, - GList *fields, - GArrowBuffer *null_bitmap, - gint64 n_nulls); +GArrowStructArray *garrow_struct_array_new(GArrowDataType *data_type, + gint64 length, + GList *fields, + GArrowBuffer *null_bitmap, + gint64 n_nulls); -GARROW_AVAILABLE_IN_ALL -GArrowArray * -garrow_struct_array_get_field(GArrowStructArray *array, gint i); +GArrowArray *garrow_struct_array_get_field(GArrowStructArray *array, + gint i); -GARROW_AVAILABLE_IN_ALL -GList * -garrow_struct_array_get_fields(GArrowStructArray *array); +GList *garrow_struct_array_get_fields(GArrowStructArray *array); GARROW_AVAILABLE_IN_0_10 -GList * -garrow_struct_array_flatten(GArrowStructArray *array, GError **error); +GList *garrow_struct_array_flatten(GArrowStructArray *array, GError **error); + #define GARROW_TYPE_MAP_ARRAY (garrow_map_array_get_type()) -GARROW_AVAILABLE_IN_0_17 -G_DECLARE_DERIVABLE_TYPE( - GArrowMapArray, garrow_map_array, GARROW, MAP_ARRAY, GArrowListArray) +G_DECLARE_DERIVABLE_TYPE(GArrowMapArray, + garrow_map_array, + GARROW, + MAP_ARRAY, + GArrowListArray) struct _GArrowMapArrayClass { GArrowListArrayClass parent_class; @@ -154,19 +142,20 @@ garrow_map_array_new(GArrowArray *offsets, GArrowArray *keys, GArrowArray *items, GError **error); - GARROW_AVAILABLE_IN_0_17 GArrowArray * garrow_map_array_get_keys(GArrowMapArray *array); - GARROW_AVAILABLE_IN_0_17 GArrowArray * garrow_map_array_get_items(GArrowMapArray *array); + #define GARROW_TYPE_UNION_ARRAY (garrow_union_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowUnionArray, garrow_union_array, GARROW, UNION_ARRAY, GArrowArray) +G_DECLARE_DERIVABLE_TYPE(GArrowUnionArray, + garrow_union_array, + GARROW, + UNION_ARRAY, + GArrowArray) struct _GArrowUnionArrayClass { GArrowArrayClass parent_class; @@ -174,18 +163,17 @@ struct _GArrowUnionArrayClass GARROW_AVAILABLE_IN_12_0 gint8 -garrow_union_array_get_type_code(GArrowUnionArray *array, gint64 i); - +garrow_union_array_get_type_code(GArrowUnionArray *array, + gint64 i); GARROW_AVAILABLE_IN_12_0 gint -garrow_union_array_get_child_id(GArrowUnionArray *array, gint64 i); - -GARROW_AVAILABLE_IN_ALL +garrow_union_array_get_child_id(GArrowUnionArray *array, + gint64 i); GArrowArray * -garrow_union_array_get_field(GArrowUnionArray *array, gint i); +garrow_union_array_get_field(GArrowUnionArray *array, + gint i); #define GARROW_TYPE_SPARSE_UNION_ARRAY (garrow_sparse_union_array_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowSparseUnionArray, garrow_sparse_union_array, GARROW, @@ -196,19 +184,18 @@ struct _GArrowSparseUnionArrayClass GArrowUnionArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowSparseUnionArray * -garrow_sparse_union_array_new(GArrowInt8Array *type_ids, GList *fields, GError **error); - -GARROW_AVAILABLE_IN_ALL +garrow_sparse_union_array_new(GArrowInt8Array *type_ids, + GList *fields, + GError **error); GArrowSparseUnionArray * garrow_sparse_union_array_new_data_type(GArrowSparseUnionDataType *data_type, GArrowInt8Array *type_ids, GList *fields, GError **error); + #define GARROW_TYPE_DENSE_UNION_ARRAY (garrow_dense_union_array_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowDenseUnionArray, garrow_dense_union_array, GARROW, @@ -219,57 +206,52 @@ struct _GArrowDenseUnionArrayClass GArrowUnionArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowDenseUnionArray * garrow_dense_union_array_new(GArrowInt8Array *type_ids, GArrowInt32Array *value_offsets, GList *fields, GError **error); - -GARROW_AVAILABLE_IN_ALL GArrowDenseUnionArray * garrow_dense_union_array_new_data_type(GArrowDenseUnionDataType *data_type, GArrowInt8Array *type_ids, GArrowInt32Array *value_offsets, GList *fields, GError **error); - GARROW_AVAILABLE_IN_12_0 gint32 -garrow_dense_union_array_get_value_offset(GArrowDenseUnionArray *array, gint64 i); +garrow_dense_union_array_get_value_offset(GArrowDenseUnionArray *array, + gint64 i); + #define GARROW_TYPE_DICTIONARY_ARRAY (garrow_dictionary_array_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowDictionaryArray, garrow_dictionary_array, GARROW, DICTIONARY_ARRAY, GArrowArray) +G_DECLARE_DERIVABLE_TYPE(GArrowDictionaryArray, + garrow_dictionary_array, + GARROW, + DICTIONARY_ARRAY, + GArrowArray) struct _GArrowDictionaryArrayClass { GArrowArrayClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowDictionaryArray * garrow_dictionary_array_new(GArrowDataType *data_type, GArrowArray *indices, GArrowArray *dictionary, GError **error); -GARROW_AVAILABLE_IN_ALL GArrowArray * garrow_dictionary_array_get_indices(GArrowDictionaryArray *array); - -GARROW_AVAILABLE_IN_ALL GArrowArray * garrow_dictionary_array_get_dictionary(GArrowDictionaryArray *array); - #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_1_0_FOR(garrow_array_get_value_data_type) GArrowDictionaryDataType * garrow_dictionary_array_get_dictionary_data_type(GArrowDictionaryArray *array); #endif -#define GARROW_TYPE_RUN_END_ENCODED_ARRAY (garrow_run_end_encoded_array_get_type()) -GARROW_AVAILABLE_IN_13_0 + +#define GARROW_TYPE_RUN_END_ENCODED_ARRAY \ + (garrow_run_end_encoded_array_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowRunEndEncodedArray, garrow_run_end_encoded_array, GARROW, @@ -291,25 +273,26 @@ garrow_run_end_encoded_array_new(GArrowDataType *data_type, GARROW_AVAILABLE_IN_13_0 GArrowArray * garrow_run_end_encoded_array_get_run_ends(GArrowRunEndEncodedArray *array); - GARROW_AVAILABLE_IN_13_0 GArrowArray * garrow_run_end_encoded_array_get_values(GArrowRunEndEncodedArray *array); - GARROW_AVAILABLE_IN_13_0 GArrowArray * -garrow_run_end_encoded_array_get_logical_run_ends(GArrowRunEndEncodedArray *array, - GError **error); +garrow_run_end_encoded_array_get_logical_run_ends( + GArrowRunEndEncodedArray *array, + GError **error); GARROW_AVAILABLE_IN_13_0 GArrowArray * garrow_run_end_encoded_array_get_logical_values(GArrowRunEndEncodedArray *array); - GARROW_AVAILABLE_IN_13_0 gint64 -garrow_run_end_encoded_array_find_physical_offset(GArrowRunEndEncodedArray *array); - +garrow_run_end_encoded_array_find_physical_offset( + GArrowRunEndEncodedArray *array); GARROW_AVAILABLE_IN_13_0 gint64 -garrow_run_end_encoded_array_find_physical_length(GArrowRunEndEncodedArray *array); +garrow_run_end_encoded_array_find_physical_length( + GArrowRunEndEncodedArray *array); + + G_END_DECLS diff --git a/c_glib/arrow-glib/composite-data-type.cpp b/c_glib/arrow-glib/composite-data-type.cpp index 914bb3196fa..f3dc7938d50 100644 --- a/c_glib/arrow-glib/composite-data-type.cpp +++ b/c_glib/arrow-glib/composite-data-type.cpp @@ -51,7 +51,9 @@ G_BEGIN_DECLS * #GArrowRunEndEncodedDataType is a class for run end encoded data type. */ -G_DEFINE_TYPE(GArrowListDataType, garrow_list_data_type, GARROW_TYPE_DATA_TYPE) +G_DEFINE_TYPE(GArrowListDataType, + garrow_list_data_type, + GARROW_TYPE_DATA_TYPE) static void garrow_list_data_type_init(GArrowListDataType *object) @@ -73,10 +75,13 @@ GArrowListDataType * garrow_list_data_type_new(GArrowField *field) { auto arrow_field = garrow_field_get_raw(field); - auto arrow_data_type = std::make_shared(arrow_field); + auto arrow_data_type = + std::make_shared(arrow_field); - GArrowListDataType *data_type = GARROW_LIST_DATA_TYPE( - g_object_new(GARROW_TYPE_LIST_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowListDataType *data_type = + GARROW_LIST_DATA_TYPE(g_object_new(GARROW_TYPE_LIST_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } @@ -108,13 +113,17 @@ garrow_list_data_type_get_field(GArrowListDataType *list_data_type) { auto data_type = GARROW_DATA_TYPE(list_data_type); auto arrow_data_type = garrow_data_type_get_raw(data_type); - auto arrow_list_data_type = static_cast(arrow_data_type.get()); + auto arrow_list_data_type = + static_cast(arrow_data_type.get()); auto arrow_field = arrow_list_data_type->value_field(); return garrow_field_new_raw(&arrow_field, nullptr); } -G_DEFINE_TYPE(GArrowLargeListDataType, garrow_large_list_data_type, GARROW_TYPE_DATA_TYPE) + +G_DEFINE_TYPE(GArrowLargeListDataType, + garrow_large_list_data_type, + GARROW_TYPE_DATA_TYPE) static void garrow_large_list_data_type_init(GArrowLargeListDataType *object) @@ -138,10 +147,13 @@ GArrowLargeListDataType * garrow_large_list_data_type_new(GArrowField *field) { auto arrow_field = garrow_field_get_raw(field); - auto arrow_data_type = std::make_shared(arrow_field); + auto arrow_data_type = + std::make_shared(arrow_field); - GArrowLargeListDataType *data_type = GARROW_LARGE_LIST_DATA_TYPE( - g_object_new(GARROW_TYPE_LARGE_LIST_DATA_TYPE, "data-type", &arrow_data_type, NULL)); + GArrowLargeListDataType *data_type = + GARROW_LARGE_LIST_DATA_TYPE(g_object_new(GARROW_TYPE_LARGE_LIST_DATA_TYPE, + "data-type", &arrow_data_type, + NULL)); return data_type; } @@ -165,7 +177,10 @@ garrow_large_list_data_type_get_field(GArrowLargeListDataType *large_list_data_t return garrow_field_new_raw(&arrow_field, nullptr); } -G_DEFINE_TYPE(GArrowStructDataType, garrow_struct_data_type, GARROW_TYPE_DATA_TYPE) + +G_DEFINE_TYPE(GArrowStructDataType, + garrow_struct_data_type, + GARROW_TYPE_DATA_TYPE) static void garrow_struct_data_type_init(GArrowStructDataType *object) @@ -194,8 +209,9 @@ garrow_struct_data_type_new(GList *fields) } auto arrow_data_type = std::make_shared(arrow_fields); - auto data_type = - g_object_new(GARROW_TYPE_STRUCT_DATA_TYPE, "data-type", &arrow_data_type, NULL); + auto data_type = g_object_new(GARROW_TYPE_STRUCT_DATA_TYPE, + "data-type", &arrow_data_type, + NULL); return GARROW_STRUCT_DATA_TYPE(data_type); } @@ -248,7 +264,8 @@ garrow_struct_data_type_get_fields(GArrowStructDataType *struct_data_type) * Since: 0.12.0 */ GArrowField * -garrow_struct_data_type_get_field(GArrowStructDataType *struct_data_type, gint i) +garrow_struct_data_type_get_field(GArrowStructDataType *struct_data_type, + gint i) { auto data_type = GARROW_DATA_TYPE(struct_data_type); auto arrow_data_type = garrow_data_type_get_raw(data_type); @@ -319,7 +336,10 @@ garrow_struct_data_type_get_field_index(GArrowStructDataType *struct_data_type, return arrow_struct_data_type->GetFieldIndex(name); } -G_DEFINE_TYPE(GArrowMapDataType, garrow_map_data_type, GARROW_TYPE_LIST_DATA_TYPE) + +G_DEFINE_TYPE(GArrowMapDataType, + garrow_map_data_type, + GARROW_TYPE_LIST_DATA_TYPE) static void garrow_map_data_type_init(GArrowMapDataType *object) @@ -341,14 +361,16 @@ garrow_map_data_type_class_init(GArrowMapDataTypeClass *klass) * Since: 0.17.0 */ GArrowMapDataType * -garrow_map_data_type_new(GArrowDataType *key_type, GArrowDataType *item_type) +garrow_map_data_type_new(GArrowDataType *key_type, + GArrowDataType *item_type) { auto arrow_key_type = garrow_data_type_get_raw(key_type); auto arrow_item_type = garrow_data_type_get_raw(item_type); - auto arrow_data_type = - std::make_shared(arrow_key_type, arrow_item_type); - auto data_type = - g_object_new(GARROW_TYPE_MAP_DATA_TYPE, "data-type", &arrow_data_type, NULL); + auto arrow_data_type = std::make_shared(arrow_key_type, + arrow_item_type); + auto data_type = g_object_new(GARROW_TYPE_MAP_DATA_TYPE, + "data-type", &arrow_data_type, + NULL); return GARROW_MAP_DATA_TYPE(data_type); } @@ -365,7 +387,8 @@ garrow_map_data_type_get_key_type(GArrowMapDataType *map_data_type) { auto data_type = GARROW_DATA_TYPE(map_data_type); auto arrow_data_type = garrow_data_type_get_raw(data_type); - auto arrow_map_data_type = std::static_pointer_cast(arrow_data_type); + auto arrow_map_data_type = + std::static_pointer_cast(arrow_data_type); auto arrow_key_type = arrow_map_data_type->key_type(); return garrow_data_type_new_raw(&arrow_key_type); } @@ -383,12 +406,16 @@ garrow_map_data_type_get_item_type(GArrowMapDataType *map_data_type) { auto data_type = GARROW_DATA_TYPE(map_data_type); auto arrow_data_type = garrow_data_type_get_raw(data_type); - auto arrow_map_data_type = std::static_pointer_cast(arrow_data_type); + auto arrow_map_data_type = + std::static_pointer_cast(arrow_data_type); auto arrow_item_type = arrow_map_data_type->item_type(); return garrow_data_type_new_raw(&arrow_item_type); } -G_DEFINE_ABSTRACT_TYPE(GArrowUnionDataType, garrow_union_data_type, GARROW_TYPE_DATA_TYPE) + +G_DEFINE_ABSTRACT_TYPE(GArrowUnionDataType, + garrow_union_data_type, + GARROW_TYPE_DATA_TYPE) static void garrow_union_data_type_init(GArrowUnionDataType *object) @@ -449,7 +476,8 @@ garrow_union_data_type_get_fields(GArrowUnionDataType *union_data_type) * Since: 0.12.0 */ GArrowField * -garrow_union_data_type_get_field(GArrowUnionDataType *union_data_type, gint i) +garrow_union_data_type_get_field(GArrowUnionDataType *union_data_type, + gint i) { auto data_type = GARROW_DATA_TYPE(union_data_type); auto arrow_data_type = garrow_data_type_get_raw(data_type); @@ -502,6 +530,7 @@ garrow_union_data_type_get_type_codes(GArrowUnionDataType *union_data_type, return type_codes; } + G_DEFINE_TYPE(GArrowSparseUnionDataType, garrow_sparse_union_data_type, GARROW_TYPE_UNION_DATA_TYPE) @@ -525,7 +554,9 @@ garrow_sparse_union_data_type_class_init(GArrowSparseUnionDataTypeClass *klass) * Returns: The newly created sparse union data type. */ GArrowSparseUnionDataType * -garrow_sparse_union_data_type_new(GList *fields, gint8 *type_codes, gsize n_type_codes) +garrow_sparse_union_data_type_new(GList *fields, + gint8 *type_codes, + gsize n_type_codes) { std::vector> arrow_fields; for (auto node = fields; node; node = g_list_next(node)) { @@ -540,12 +571,15 @@ garrow_sparse_union_data_type_new(GList *fields, gint8 *type_codes, gsize n_type } auto arrow_data_type = - std::make_shared(arrow_fields, arrow_type_codes); - auto data_type = - g_object_new(GARROW_TYPE_SPARSE_UNION_DATA_TYPE, "data-type", &arrow_data_type, NULL); + std::make_shared(arrow_fields, + arrow_type_codes); + auto data_type = g_object_new(GARROW_TYPE_SPARSE_UNION_DATA_TYPE, + "data-type", &arrow_data_type, + NULL); return GARROW_SPARSE_UNION_DATA_TYPE(data_type); } + G_DEFINE_TYPE(GArrowDenseUnionDataType, garrow_dense_union_data_type, GARROW_TYPE_UNION_DATA_TYPE) @@ -569,7 +603,9 @@ garrow_dense_union_data_type_class_init(GArrowDenseUnionDataTypeClass *klass) * Returns: The newly created dense union data type. */ GArrowDenseUnionDataType * -garrow_dense_union_data_type_new(GList *fields, gint8 *type_codes, gsize n_type_codes) +garrow_dense_union_data_type_new(GList *fields, + gint8 *type_codes, + gsize n_type_codes) { std::vector> arrow_fields; for (auto node = fields; node; node = g_list_next(node)) { @@ -584,12 +620,15 @@ garrow_dense_union_data_type_new(GList *fields, gint8 *type_codes, gsize n_type_ } auto arrow_data_type = - std::make_shared(arrow_fields, arrow_type_codes); - auto data_type = - g_object_new(GARROW_TYPE_DENSE_UNION_DATA_TYPE, "data-type", &arrow_data_type, NULL); + std::make_shared(arrow_fields, + arrow_type_codes); + auto data_type = g_object_new(GARROW_TYPE_DENSE_UNION_DATA_TYPE, + "data-type", &arrow_data_type, + NULL); return GARROW_DENSE_UNION_DATA_TYPE(data_type); } + G_DEFINE_TYPE(GArrowDictionaryDataType, garrow_dictionary_data_type, GARROW_TYPE_FIXED_WIDTH_DATA_TYPE) @@ -621,8 +660,9 @@ garrow_dictionary_data_type_new(GArrowDataType *index_data_type, { auto arrow_index_data_type = garrow_data_type_get_raw(index_data_type); auto arrow_value_data_type = garrow_data_type_get_raw(value_data_type); - auto arrow_data_type = - arrow::dictionary(arrow_index_data_type, arrow_value_data_type, ordered); + auto arrow_data_type = arrow::dictionary(arrow_index_data_type, + arrow_value_data_type, + ordered); return GARROW_DICTIONARY_DATA_TYPE(garrow_data_type_new_raw(&arrow_data_type)); } @@ -635,8 +675,7 @@ garrow_dictionary_data_type_new(GArrowDataType *index_data_type, * Since: 0.8.0 */ GArrowDataType * -garrow_dictionary_data_type_get_index_data_type( - GArrowDictionaryDataType *dictionary_data_type) +garrow_dictionary_data_type_get_index_data_type(GArrowDictionaryDataType *dictionary_data_type) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(dictionary_data_type)); auto arrow_dictionary_data_type = @@ -654,8 +693,7 @@ garrow_dictionary_data_type_get_index_data_type( * Since: 0.14.0 */ GArrowDataType * -garrow_dictionary_data_type_get_value_data_type( - GArrowDictionaryDataType *dictionary_data_type) +garrow_dictionary_data_type_get_value_data_type(GArrowDictionaryDataType *dictionary_data_type) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(dictionary_data_type)); auto arrow_dictionary_data_type = @@ -681,6 +719,7 @@ garrow_dictionary_data_type_is_ordered(GArrowDictionaryDataType *dictionary_data return arrow_dictionary_data_type->ordered(); } + G_DEFINE_TYPE(GArrowRunEndEncodedDataType, garrow_run_end_encoded_data_type, GARROW_TYPE_FIXED_WIDTH_DATA_TYPE) @@ -691,7 +730,8 @@ garrow_run_end_encoded_data_type_init(GArrowRunEndEncodedDataType *object) } static void -garrow_run_end_encoded_data_type_class_init(GArrowRunEndEncodedDataTypeClass *klass) +garrow_run_end_encoded_data_type_class_init( + GArrowRunEndEncodedDataTypeClass *klass) { } @@ -710,9 +750,10 @@ garrow_run_end_encoded_data_type_new(GArrowDataType *run_end_data_type, { auto arrow_run_end_data_type = garrow_data_type_get_raw(run_end_data_type); auto arrow_value_data_type = garrow_data_type_get_raw(value_data_type); - auto arrow_data_type = - arrow::run_end_encoded(arrow_run_end_data_type, arrow_value_data_type); - return GARROW_RUN_END_ENCODED_DATA_TYPE(garrow_data_type_new_raw(&arrow_data_type)); + auto arrow_data_type = arrow::run_end_encoded(arrow_run_end_data_type, + arrow_value_data_type); + return GARROW_RUN_END_ENCODED_DATA_TYPE( + garrow_data_type_new_raw(&arrow_data_type)); } /** @@ -753,4 +794,5 @@ garrow_run_end_encoded_data_type_get_value_data_type( return garrow_data_type_new_raw(&arrow_value_data_type); } + G_END_DECLS diff --git a/c_glib/arrow-glib/composite-data-type.h b/c_glib/arrow-glib/composite-data-type.h index 7a0a462af00..0113b556e8e 100644 --- a/c_glib/arrow-glib/composite-data-type.h +++ b/c_glib/arrow-glib/composite-data-type.h @@ -27,31 +27,26 @@ G_BEGIN_DECLS #define GARROW_TYPE_LIST_DATA_TYPE (garrow_list_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowListDataType, garrow_list_data_type, GARROW, LIST_DATA_TYPE, GArrowDataType) +G_DECLARE_DERIVABLE_TYPE(GArrowListDataType, + garrow_list_data_type, + GARROW, + LIST_DATA_TYPE, + GArrowDataType) struct _GArrowListDataTypeClass { GArrowDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowListDataType * -garrow_list_data_type_new(GArrowField *field); - +GArrowListDataType *garrow_list_data_type_new (GArrowField *field); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_13_FOR(garrow_list_data_type_get_field) -GArrowField * -garrow_list_data_type_get_value_field(GArrowListDataType *list_data_type); +GArrowField *garrow_list_data_type_get_value_field (GArrowListDataType *list_data_type); #endif - GARROW_AVAILABLE_IN_0_13 -GArrowField * -garrow_list_data_type_get_field(GArrowListDataType *list_data_type); +GArrowField *garrow_list_data_type_get_field (GArrowListDataType *list_data_type); + #define GARROW_TYPE_LARGE_LIST_DATA_TYPE (garrow_large_list_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowLargeListDataType, garrow_large_list_data_type, GARROW, @@ -63,52 +58,44 @@ struct _GArrowLargeListDataTypeClass }; GARROW_AVAILABLE_IN_0_16 -GArrowLargeListDataType * -garrow_large_list_data_type_new(GArrowField *field); - +GArrowLargeListDataType *garrow_large_list_data_type_new(GArrowField *field); GARROW_AVAILABLE_IN_0_16 -GArrowField * -garrow_large_list_data_type_get_field(GArrowLargeListDataType *large_list_data_type); +GArrowField *garrow_large_list_data_type_get_field(GArrowLargeListDataType *large_list_data_type); + #define GARROW_TYPE_STRUCT_DATA_TYPE (garrow_struct_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowStructDataType, garrow_struct_data_type, GARROW, STRUCT_DATA_TYPE, GArrowDataType) +G_DECLARE_DERIVABLE_TYPE(GArrowStructDataType, + garrow_struct_data_type, + GARROW, + STRUCT_DATA_TYPE, + GArrowDataType) struct _GArrowStructDataTypeClass { GArrowDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowStructDataType * -garrow_struct_data_type_new(GList *fields); - -GARROW_AVAILABLE_IN_ALL +GArrowStructDataType *garrow_struct_data_type_new (GList *fields); gint garrow_struct_data_type_get_n_fields(GArrowStructDataType *struct_data_type); - -GARROW_AVAILABLE_IN_ALL GList * garrow_struct_data_type_get_fields(GArrowStructDataType *struct_data_type); - -GARROW_AVAILABLE_IN_ALL GArrowField * -garrow_struct_data_type_get_field(GArrowStructDataType *struct_data_type, gint i); - -GARROW_AVAILABLE_IN_ALL +garrow_struct_data_type_get_field(GArrowStructDataType *struct_data_type, + gint i); GArrowField * garrow_struct_data_type_get_field_by_name(GArrowStructDataType *struct_data_type, const gchar *name); - -GARROW_AVAILABLE_IN_ALL gint garrow_struct_data_type_get_field_index(GArrowStructDataType *struct_data_type, const gchar *name); + #define GARROW_TYPE_MAP_DATA_TYPE (garrow_map_data_type_get_type()) -GARROW_AVAILABLE_IN_0_17 -G_DECLARE_DERIVABLE_TYPE( - GArrowMapDataType, garrow_map_data_type, GARROW, MAP_DATA_TYPE, GArrowListDataType) +G_DECLARE_DERIVABLE_TYPE(GArrowMapDataType, + garrow_map_data_type, + GARROW, + MAP_DATA_TYPE, + GArrowListDataType) struct _GArrowMapDataTypeClass { GArrowListDataTypeClass parent_class; @@ -116,7 +103,8 @@ struct _GArrowMapDataTypeClass GARROW_AVAILABLE_IN_0_17 GArrowMapDataType * -garrow_map_data_type_new(GArrowDataType *key_type, GArrowDataType *item_type); +garrow_map_data_type_new(GArrowDataType *key_type, + GArrowDataType *item_type); GARROW_AVAILABLE_IN_0_17 GArrowDataType * garrow_map_data_type_get_key_type(GArrowMapDataType *map_data_type); @@ -124,34 +112,32 @@ GARROW_AVAILABLE_IN_0_17 GArrowDataType * garrow_map_data_type_get_item_type(GArrowMapDataType *map_data_type); + #define GARROW_TYPE_UNION_DATA_TYPE (garrow_union_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowUnionDataType, garrow_union_data_type, GARROW, UNION_DATA_TYPE, GArrowDataType) +G_DECLARE_DERIVABLE_TYPE(GArrowUnionDataType, + garrow_union_data_type, + GARROW, + UNION_DATA_TYPE, + GArrowDataType) struct _GArrowUnionDataTypeClass { GArrowDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL gint garrow_union_data_type_get_n_fields(GArrowUnionDataType *union_data_type); - -GARROW_AVAILABLE_IN_ALL GList * garrow_union_data_type_get_fields(GArrowUnionDataType *union_data_type); - -GARROW_AVAILABLE_IN_ALL GArrowField * -garrow_union_data_type_get_field(GArrowUnionDataType *union_data_type, gint i); - -GARROW_AVAILABLE_IN_ALL +garrow_union_data_type_get_field(GArrowUnionDataType *union_data_type, + gint i); gint8 * garrow_union_data_type_get_type_codes(GArrowUnionDataType *union_data_type, gsize *n_type_codes); -#define GARROW_TYPE_SPARSE_UNION_DATA_TYPE (garrow_sparse_union_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_SPARSE_UNION_DATA_TYPE \ + (garrow_sparse_union_data_type_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowSparseUnionDataType, garrow_sparse_union_data_type, GARROW, @@ -162,12 +148,14 @@ struct _GArrowSparseUnionDataTypeClass GArrowUnionDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowSparseUnionDataType * -garrow_sparse_union_data_type_new(GList *fields, gint8 *type_codes, gsize n_type_codes); +garrow_sparse_union_data_type_new(GList *fields, + gint8 *type_codes, + gsize n_type_codes); -#define GARROW_TYPE_DENSE_UNION_DATA_TYPE (garrow_dense_union_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL + +#define GARROW_TYPE_DENSE_UNION_DATA_TYPE \ + (garrow_dense_union_data_type_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowDenseUnionDataType, garrow_dense_union_data_type, GARROW, @@ -178,12 +166,13 @@ struct _GArrowDenseUnionDataTypeClass GArrowUnionDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowDenseUnionDataType * -garrow_dense_union_data_type_new(GList *fields, gint8 *type_codes, gsize n_type_codes); +garrow_dense_union_data_type_new(GList *fields, + gint8 *type_codes, + gsize n_type_codes); + #define GARROW_TYPE_DICTIONARY_DATA_TYPE (garrow_dictionary_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowDictionaryDataType, garrow_dictionary_data_type, GARROW, @@ -194,29 +183,21 @@ struct _GArrowDictionaryDataTypeClass GArrowFixedWidthDataTypeClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowDictionaryDataType * garrow_dictionary_data_type_new(GArrowDataType *index_data_type, GArrowDataType *value_data_type, gboolean ordered); - -GARROW_AVAILABLE_IN_ALL GArrowDataType * -garrow_dictionary_data_type_get_index_data_type( - GArrowDictionaryDataType *dictionary_data_type); - +garrow_dictionary_data_type_get_index_data_type(GArrowDictionaryDataType *dictionary_data_type); GARROW_AVAILABLE_IN_0_14 GArrowDataType * -garrow_dictionary_data_type_get_value_data_type( - GArrowDictionaryDataType *dictionary_data_type); - -GARROW_AVAILABLE_IN_ALL +garrow_dictionary_data_type_get_value_data_type(GArrowDictionaryDataType *dictionary_data_type); gboolean garrow_dictionary_data_type_is_ordered(GArrowDictionaryDataType *dictionary_data_type); -#define GARROW_TYPE_RUN_END_ENCODED_DATA_TYPE \ + +#define GARROW_TYPE_RUN_END_ENCODED_DATA_TYPE \ (garrow_run_end_encoded_data_type_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowRunEndEncodedDataType, garrow_run_end_encoded_data_type, GARROW, @@ -235,10 +216,10 @@ GARROW_AVAILABLE_IN_13_0 GArrowDataType * garrow_run_end_encoded_data_type_get_run_end_data_type( GArrowRunEndEncodedDataType *data_type); - GARROW_AVAILABLE_IN_13_0 GArrowDataType * garrow_run_end_encoded_data_type_get_value_data_type( GArrowRunEndEncodedDataType *data_type); + G_END_DECLS diff --git a/c_glib/arrow-glib/compute-definition.h b/c_glib/arrow-glib/compute-definition.h index a060f16f62c..e27bc4bd5c5 100644 --- a/c_glib/arrow-glib/compute-definition.h +++ b/c_glib/arrow-glib/compute-definition.h @@ -19,36 +19,43 @@ #pragma once -#include - -#include +#include G_BEGIN_DECLS #define GARROW_TYPE_FUNCTION_OPTIONS (garrow_function_options_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowFunctionOptions, garrow_function_options, GARROW, FUNCTION_OPTIONS, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowFunctionOptions, + garrow_function_options, + GARROW, + FUNCTION_OPTIONS, + GObject) struct _GArrowFunctionOptionsClass { GObjectClass parent_class; }; + #define GARROW_TYPE_CAST_OPTIONS (garrow_cast_options_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowCastOptions, garrow_cast_options, GARROW, CAST_OPTIONS, GArrowFunctionOptions) +G_DECLARE_DERIVABLE_TYPE(GArrowCastOptions, + garrow_cast_options, + GARROW, + CAST_OPTIONS, + GArrowFunctionOptions) struct _GArrowCastOptionsClass { GArrowFunctionOptionsClass parent_class; }; #define GARROW_TYPE_EXPRESSION (garrow_expression_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowExpression, garrow_expression, GARROW, EXPRESSION, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowExpression, + garrow_expression, + GARROW, + EXPRESSION, + GObject) struct _GArrowExpressionClass { GObjectClass parent_class; }; + G_END_DECLS diff --git a/c_glib/arrow-glib/compute.cpp b/c_glib/arrow-glib/compute.cpp index 9b9faeb4495..9692f277d18 100644 --- a/c_glib/arrow-glib/compute.cpp +++ b/c_glib/arrow-glib/compute.cpp @@ -32,7 +32,6 @@ #include #include #include -#include #include #include @@ -72,9 +71,12 @@ garrow_take(arrow::Datum arrow_values, arrow::Result arrow_taken_datum; if (options) { auto arrow_options = garrow_take_options_get_raw(options); - arrow_taken_datum = arrow::compute::Take(arrow_values, arrow_indices, *arrow_options); + arrow_taken_datum = arrow::compute::Take(arrow_values, + arrow_indices, + *arrow_options); } else { - arrow_taken_datum = arrow::compute::Take(arrow_values, arrow_indices); + arrow_taken_datum = arrow::compute::Take(arrow_values, + arrow_indices); } if (garrow::check(error, arrow_taken_datum, tag)) { return garrow_type_new_raw(*arrow_taken_datum); @@ -114,8 +116,9 @@ namespace { } gboolean - garrow_raw_sort_keys_equal(std::vector &arrow_sort_keys, - std::vector &arrow_other_sort_keys) + garrow_raw_sort_keys_equal( + std::vector &arrow_sort_keys, + std::vector &arrow_other_sort_keys) { if (arrow_sort_keys.size() != arrow_other_sort_keys.size()) { return FALSE; @@ -150,7 +153,7 @@ namespace { auto arrow_sort_key = garrow_sort_key_get_raw(sort_key); arrow_sort_keys.push_back(*arrow_sort_key); } -} // namespace +} G_BEGIN_DECLS @@ -227,7 +230,7 @@ G_BEGIN_DECLS * #GArrowUTF8NormalizeOptions is a class to customize the * `utf8_normalize` function. * - * #GArrowQuantileOptions is a class to customize the `quantile` + * #GArrowQuantileOptions is a class to customize the `qunatile` * function. * * #GArrowIndexOptions is a class to customize the `index` function. @@ -237,29 +240,21 @@ G_BEGIN_DECLS * #GArrowRunEndEncodeOptions is a class to customize the * `run_end_encode` function. * - * #GArrowStrptimeOptions is a class to customize the `strptime` function. - * - * #GArrowStrftimeOptions is a class to customize the `strftime` function. - * - * #GArrowSplitPatternOptions is a class to customize the `split_pattern` and - * `split_pattern_regex` functions. - * - * #GArrowStructFieldOptions is a class to customize the `struct_field` - * function. - * * There are many functions to compute data on an array. */ -typedef struct GArrowExecuteContextPrivate_ -{ +typedef struct GArrowExecuteContextPrivate_ { arrow::compute::ExecContext context; } GArrowExecuteContextPrivate; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowExecuteContext, garrow_execute_context, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowExecuteContext, + garrow_execute_context, + G_TYPE_OBJECT) -#define GARROW_EXECUTE_CONTEXT_GET_PRIVATE(object) \ - static_cast( \ - garrow_execute_context_get_instance_private(GARROW_EXECUTE_CONTEXT(object))) +#define GARROW_EXECUTE_CONTEXT_GET_PRIVATE(object) \ + static_cast( \ + garrow_execute_context_get_instance_private( \ + GARROW_EXECUTE_CONTEXT(object))) static void garrow_execute_context_finalize(GObject *object) @@ -273,7 +268,8 @@ static void garrow_execute_context_init(GArrowExecuteContext *object) { auto priv = GARROW_EXECUTE_CONTEXT_GET_PRIVATE(object); - new (&priv->context) arrow::compute::ExecContext(arrow::default_memory_pool(), nullptr); + new(&priv->context) arrow::compute::ExecContext(arrow::default_memory_pool(), + nullptr); } static void @@ -298,16 +294,19 @@ garrow_execute_context_new(void) return GARROW_EXECUTE_CONTEXT(execute_context); } -typedef struct GArrowFunctionOptionsPrivate_ -{ + +typedef struct GArrowFunctionOptionsPrivate_ { arrow::compute::FunctionOptions *options; } GArrowFunctionOptionsPrivate; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowFunctionOptions, garrow_function_options, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowFunctionOptions, + garrow_function_options, + G_TYPE_OBJECT) -#define GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_function_options_get_instance_private(GARROW_FUNCTION_OPTIONS(object))) +#define GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_function_options_get_instance_private( \ + GARROW_FUNCTION_OPTIONS(object))) static void garrow_function_options_finalize(GObject *object) @@ -369,8 +368,8 @@ garrow_function_options_to_string(GArrowFunctionOptions *options) return g_strndup(string.data(), string.size()); } -typedef struct GArrowFunctionDocPrivate_ -{ + +typedef struct GArrowFunctionDocPrivate_ { arrow::compute::FunctionDoc *doc; } GArrowFunctionDocPrivate; @@ -378,11 +377,14 @@ enum { PROP_DOC = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowFunctionDoc, garrow_function_doc, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowFunctionDoc, + garrow_function_doc, + G_TYPE_OBJECT) -#define GARROW_FUNCTION_DOC_GET_PRIVATE(object) \ - static_cast( \ - garrow_function_doc_get_instance_private(GARROW_FUNCTION_DOC(object))) +#define GARROW_FUNCTION_DOC_GET_PRIVATE(object) \ + static_cast( \ + garrow_function_doc_get_instance_private( \ + GARROW_FUNCTION_DOC(object))) static void garrow_function_doc_set_property(GObject *object, @@ -394,7 +396,8 @@ garrow_function_doc_set_property(GObject *object, switch (prop_id) { case PROP_DOC: - priv->doc = static_cast(g_value_get_pointer(value)); + priv->doc = + static_cast(g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -414,11 +417,11 @@ garrow_function_doc_class_init(GArrowFunctionDocClass *klass) gobject_class->set_property = garrow_function_doc_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "doc", - "Doc", - "The raw arrow::compute::FunctionDoc *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("doc", + "Doc", + "The raw arrow::compute::FunctionDoc *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_DOC, spec); } @@ -436,7 +439,8 @@ gchar * garrow_function_doc_get_summary(GArrowFunctionDoc *doc) { auto arrow_doc = garrow_function_doc_get_raw(doc); - return g_strndup(arrow_doc->summary.data(), arrow_doc->summary.size()); + return g_strndup(arrow_doc->summary.data(), + arrow_doc->summary.size()); } /** @@ -454,7 +458,8 @@ gchar * garrow_function_doc_get_description(GArrowFunctionDoc *doc) { auto arrow_doc = garrow_function_doc_get_raw(doc); - return g_strndup(arrow_doc->description.data(), arrow_doc->description.size()); + return g_strndup(arrow_doc->description.data(), + arrow_doc->description.size()); } /** @@ -477,7 +482,8 @@ garrow_function_doc_get_arg_names(GArrowFunctionDoc *doc) auto n = arrow_arg_names.size(); auto arg_names = g_new(gchar *, n + 1); for (size_t i = 0; i < n; ++i) { - arg_names[i] = g_strndup(arrow_arg_names[i].data(), arrow_arg_names[i].size()); + arg_names[i] = g_strndup(arrow_arg_names[i].data(), + arrow_arg_names[i].size()); } arg_names[n] = NULL; return arg_names; @@ -497,11 +503,12 @@ gchar * garrow_function_doc_get_options_class_name(GArrowFunctionDoc *doc) { auto arrow_doc = garrow_function_doc_get_raw(doc); - return g_strndup(arrow_doc->options_class.data(), arrow_doc->options_class.size()); + return g_strndup(arrow_doc->options_class.data(), + arrow_doc->options_class.size()); } -typedef struct GArrowFunctionPrivate_ -{ + +typedef struct GArrowFunctionPrivate_ { std::shared_ptr function; gchar *name; } GArrowFunctionPrivate; @@ -510,11 +517,14 @@ enum { PROP_FUNCTION = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowFunction, garrow_function, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowFunction, + garrow_function, + G_TYPE_OBJECT) -#define GARROW_FUNCTION_GET_PRIVATE(object) \ - static_cast( \ - garrow_function_get_instance_private(GARROW_FUNCTION(object))) +#define GARROW_FUNCTION_GET_PRIVATE(object) \ + static_cast( \ + garrow_function_get_instance_private( \ + GARROW_FUNCTION(object))) static void garrow_function_finalize(GObject *object) @@ -537,8 +547,9 @@ garrow_function_set_property(GObject *object, switch (prop_id) { case PROP_FUNCTION: - priv->function = *static_cast *>( - g_value_get_pointer(value)); + priv->function = + *static_cast *>( + g_value_get_pointer(value)); { const auto &arrow_name = priv->function->name(); priv->name = g_strndup(arrow_name.data(), arrow_name.length()); @@ -554,7 +565,7 @@ static void garrow_function_init(GArrowFunction *object) { auto priv = GARROW_FUNCTION_GET_PRIVATE(object); - new (&priv->function) std::shared_ptr; + new(&priv->function) std::shared_ptr; } static void @@ -562,15 +573,15 @@ garrow_function_class_init(GArrowFunctionClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_function_finalize; + gobject_class->finalize = garrow_function_finalize; gobject_class->set_property = garrow_function_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "function", - "Function", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("function", + "Function", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FUNCTION, spec); } @@ -617,7 +628,8 @@ garrow_function_all(void) continue; } auto arrow_function = *arrow_function_result; - functions = g_list_prepend(functions, garrow_function_new_raw(&arrow_function)); + functions = g_list_prepend(functions, + garrow_function_new_raw(&arrow_function)); } return g_list_reverse(functions); } @@ -658,12 +670,14 @@ garrow_function_execute(GArrowFunction *function, arrow::Result arrow_result_result; if (context) { auto arrow_context = garrow_execute_context_get_raw(context); - arrow_result_result = - arrow_function->Execute(arrow_args, arrow_options, arrow_context); + arrow_result_result = arrow_function->Execute(arrow_args, + arrow_options, + arrow_context); } else { arrow::compute::ExecContext arrow_context; - arrow_result_result = - arrow_function->Execute(arrow_args, arrow_options, &arrow_context); + arrow_result_result = arrow_function->Execute(arrow_args, + arrow_options, + &arrow_context); } if (garrow::check(error, arrow_result_result, "[function][execute]")) { auto arrow_result = *arrow_result_result; @@ -758,7 +772,8 @@ garrow_function_get_options_type(GArrowFunction *function) * Since: 7.0.0 */ gboolean -garrow_function_equal(GArrowFunction *function, GArrowFunction *other_function) +garrow_function_equal(GArrowFunction *function, + GArrowFunction *other_function) { auto priv = GARROW_FUNCTION_GET_PRIVATE(function); auto other_priv = GARROW_FUNCTION_GET_PRIVATE(other_function); @@ -803,8 +818,8 @@ garrow_function_to_string(GArrowFunction *function) return g_string_free(string, FALSE); } -typedef struct GArrowExecuteNodeOptionsPrivate_ -{ + +typedef struct GArrowExecuteNodeOptionsPrivate_ { arrow::acero::ExecNodeOptions *options; } GArrowExecuteNodeOptionsPrivate; @@ -816,9 +831,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowExecuteNodeOptions, garrow_execute_node_options, G_TYPE_OBJECT) -#define GARROW_EXECUTE_NODE_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_execute_node_options_get_instance_private( \ +#define GARROW_EXECUTE_NODE_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_execute_node_options_get_instance_private( \ GARROW_EXECUTE_NODE_OPTIONS(object))) static void @@ -863,16 +878,18 @@ garrow_execute_node_options_class_init(GArrowExecuteNodeOptionsClass *klass) gobject_class->set_property = garrow_execute_node_options_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "options", - "Options", - "The raw arrow::acero::ExecNodeOptions *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property(gobject_class, PROP_EXECUTE_NODE_OPTIONS, spec); + spec = g_param_spec_pointer("options", + "Options", + "The raw arrow::acero::ExecNodeOptions *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property(gobject_class, + PROP_EXECUTE_NODE_OPTIONS, + spec); } -typedef struct GArrowSourceNodeOptionsPrivate_ -{ + +typedef struct GArrowSourceNodeOptionsPrivate_ { GArrowRecordBatchReader *reader; GArrowRecordBatch *record_batch; } GArrowSourceNodeOptionsPrivate; @@ -886,9 +903,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowSourceNodeOptions, garrow_source_node_options, GARROW_TYPE_EXECUTE_NODE_OPTIONS) -#define GARROW_SOURCE_NODE_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_source_node_options_get_instance_private(GARROW_SOURCE_NODE_OPTIONS(object))) +#define GARROW_SOURCE_NODE_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_source_node_options_get_instance_private( \ + GARROW_SOURCE_NODE_OPTIONS(object))) static void garrow_source_node_options_dispose(GObject *object) @@ -964,21 +982,21 @@ garrow_source_node_options_class_init(GArrowSourceNodeOptionsClass *klass) gobject_class->get_property = garrow_source_node_options_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "reader", - "Reader", - "The GArrowRecordBatchReader that produces " - "record batches", - GARROW_TYPE_RECORD_BATCH_READER, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("reader", + "Reader", + "The GArrowRecordBatchReader that produces " + "record batches", + GARROW_TYPE_RECORD_BATCH_READER, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_READER, spec); - spec = g_param_spec_object( - "record-batch", - "Record batch", - "The GArrowRecordBatch to be produced", - GARROW_TYPE_RECORD_BATCH, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("record-batch", + "Record batch", + "The GArrowRecordBatch to be produced", + GARROW_TYPE_RECORD_BATCH, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_RECORD_BATCH, spec); } @@ -991,11 +1009,13 @@ garrow_source_node_options_class_init(GArrowSourceNodeOptionsClass *klass) * Since: 6.0.0 */ GArrowSourceNodeOptions * -garrow_source_node_options_new_record_batch_reader(GArrowRecordBatchReader *reader) +garrow_source_node_options_new_record_batch_reader( + GArrowRecordBatchReader *reader) { auto arrow_reader = garrow_record_batch_reader_get_raw(reader); - auto arrow_options = - new arrow::acero::SourceNodeOptions(arrow_reader->schema(), [arrow_reader]() { + auto arrow_options = new arrow::acero::SourceNodeOptions( + arrow_reader->schema(), + [arrow_reader]() { using ExecBatch = arrow::compute::ExecBatch; using ExecBatchOptional = std::optional; auto arrow_record_batch_result = arrow_reader->Next(); @@ -1010,10 +1030,8 @@ garrow_source_node_options_new_record_batch_reader(GArrowRecordBatchReader *read ExecBatch(*arrow_record_batch)); }); auto options = g_object_new(GARROW_TYPE_SOURCE_NODE_OPTIONS, - "options", - arrow_options, - "reader", - reader, + "options", arrow_options, + "reader", reader, NULL); return GARROW_SOURCE_NODE_OPTIONS(options); } @@ -1029,16 +1047,16 @@ garrow_source_node_options_new_record_batch_reader(GArrowRecordBatchReader *read GArrowSourceNodeOptions * garrow_source_node_options_new_record_batch(GArrowRecordBatch *record_batch) { - struct State - { + struct State { std::shared_ptr record_batch; bool generated; }; auto state = std::make_shared(); state->record_batch = garrow_record_batch_get_raw(record_batch); state->generated = false; - auto arrow_options = - new arrow::acero::SourceNodeOptions(state->record_batch->schema(), [state]() { + auto arrow_options = new arrow::acero::SourceNodeOptions( + state->record_batch->schema(), + [state]() { using ExecBatch = arrow::compute::ExecBatch; using ExecBatchOptional = std::optional; if (!state->generated) { @@ -1050,10 +1068,8 @@ garrow_source_node_options_new_record_batch(GArrowRecordBatch *record_batch) } }); auto options = g_object_new(GARROW_TYPE_SOURCE_NODE_OPTIONS, - "options", - arrow_options, - "record-batch", - record_batch, + "options", arrow_options, + "record-batch", record_batch, NULL); return GARROW_SOURCE_NODE_OPTIONS(options); } @@ -1076,6 +1092,7 @@ garrow_source_node_options_new_table(GArrowTable *table) return options; } + G_DEFINE_TYPE(GArrowFilterNodeOptions, garrow_filter_node_options, GARROW_TYPE_EXECUTE_NODE_OPTIONS) @@ -1102,12 +1119,15 @@ GArrowFilterNodeOptions * garrow_filter_node_options_new(GArrowExpression *expression) { auto arrow_expression = garrow_expression_get_raw(expression); - auto arrow_options = new arrow::acero::FilterNodeOptions(*arrow_expression); - auto options = - g_object_new(GARROW_TYPE_FILTER_NODE_OPTIONS, "options", arrow_options, NULL); + auto arrow_options = + new arrow::acero::FilterNodeOptions(*arrow_expression); + auto options = g_object_new(GARROW_TYPE_FILTER_NODE_OPTIONS, + "options", arrow_options, + NULL); return GARROW_FILTER_NODE_OPTIONS(options); } + G_DEFINE_TYPE(GArrowProjectNodeOptions, garrow_project_node_options, GARROW_TYPE_EXECUTE_NODE_OPTIONS) @@ -1136,7 +1156,9 @@ garrow_project_node_options_class_init(GArrowProjectNodeOptionsClass *klass) * Since: 11.0.0 */ GArrowProjectNodeOptions * -garrow_project_node_options_new(GList *expressions, gchar **names, gsize n_names) +garrow_project_node_options_new(GList *expressions, + gchar **names, + gsize n_names) { std::vector arrow_expressions; std::vector arrow_names; @@ -1154,13 +1176,14 @@ garrow_project_node_options_new(GList *expressions, gchar **names, gsize n_names } auto arrow_options = new arrow::acero::ProjectNodeOptions(arrow_expressions, arrow_names); - auto options = - g_object_new(GARROW_TYPE_PROJECT_NODE_OPTIONS, "options", arrow_options, NULL); + auto options = g_object_new(GARROW_TYPE_PROJECT_NODE_OPTIONS, + "options", arrow_options, + NULL); return GARROW_PROJECT_NODE_OPTIONS(options); } -typedef struct GArrowAggregationPrivate_ -{ + +typedef struct GArrowAggregationPrivate_ { gchar *function; GArrowFunctionOptions *options; gchar *input; @@ -1174,11 +1197,14 @@ enum { PROP_AGGREGATION_OUTPUT, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowAggregation, garrow_aggregation, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowAggregation, + garrow_aggregation, + G_TYPE_OBJECT) -#define GARROW_AGGREGATION_GET_PRIVATE(object) \ - static_cast( \ - garrow_aggregation_get_instance_private(GARROW_AGGREGATION(object))) +#define GARROW_AGGREGATION_GET_PRIVATE(object) \ + static_cast( \ + garrow_aggregation_get_instance_private( \ + GARROW_AGGREGATION(object))) static void garrow_aggregation_dispose(GObject *object) @@ -1277,13 +1303,15 @@ garrow_aggregation_class_init(GArrowAggregationClass *klass) * * Since: 6.0.0 */ - spec = g_param_spec_string( - "function", - "Function", - "The function name to aggregate", - NULL, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property(gobject_class, PROP_AGGREGATION_FUNCTION, spec); + spec = g_param_spec_string("function", + "Function", + "The function name to aggregate", + NULL, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property(gobject_class, + PROP_AGGREGATION_FUNCTION, + spec); /** * GArrowAggregation:options: @@ -1292,13 +1320,15 @@ garrow_aggregation_class_init(GArrowAggregationClass *klass) * * Since: 6.0.0 */ - spec = g_param_spec_object( - "options", - "Options", - "The options of aggregate function", - GARROW_TYPE_FUNCTION_OPTIONS, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property(gobject_class, PROP_AGGREGATION_OPTIONS, spec); + spec = g_param_spec_object("options", + "Options", + "The options of aggregate function", + GARROW_TYPE_FUNCTION_OPTIONS, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property(gobject_class, + PROP_AGGREGATION_OPTIONS, + spec); /** * GArrowAggregation:input: @@ -1307,13 +1337,15 @@ garrow_aggregation_class_init(GArrowAggregationClass *klass) * * Since: 6.0.0 */ - spec = g_param_spec_string( - "input", - "Input", - "The input field name of aggregate function", - NULL, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property(gobject_class, PROP_AGGREGATION_INPUT, spec); + spec = g_param_spec_string("input", + "Input", + "The input field name of aggregate function", + NULL, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property(gobject_class, + PROP_AGGREGATION_INPUT, + spec); /** * GArrowAggregation:output: @@ -1322,13 +1354,15 @@ garrow_aggregation_class_init(GArrowAggregationClass *klass) * * Since: 6.0.0 */ - spec = g_param_spec_string( - "output", - "Output", - "The output field name of aggregate function", - NULL, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property(gobject_class, PROP_AGGREGATION_OUTPUT, spec); + spec = g_param_spec_string("output", + "Output", + "The output field name of aggregate function", + NULL, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property(gobject_class, + PROP_AGGREGATION_OUTPUT, + spec); } /** @@ -1349,17 +1383,14 @@ garrow_aggregation_new(const gchar *function, const gchar *output) { return GARROW_AGGREGATION(g_object_new(GARROW_TYPE_AGGREGATION, - "function", - function, - "options", - options, - "input", - input, - "output", - output, + "function", function, + "options", options, + "input", input, + "output", output, NULL)); } + G_DEFINE_TYPE(GArrowAggregateNodeOptions, garrow_aggregate_node_options, GARROW_TYPE_EXECUTE_NODE_OPTIONS) @@ -1398,7 +1429,8 @@ garrow_aggregate_node_options_new(GList *aggregations, auto aggregation_priv = GARROW_AGGREGATION_GET_PRIVATE(node->data); arrow::compute::FunctionOptions *function_options = nullptr; if (aggregation_priv->options) { - function_options = garrow_function_options_get_raw(aggregation_priv->options); + function_options = + garrow_function_options_get_raw(aggregation_priv->options); }; std::vector arrow_targets; if (!garrow_field_refs_add(arrow_targets, @@ -1422,15 +1454,17 @@ garrow_aggregate_node_options_new(GList *aggregations, return NULL; } } - auto arrow_options = new arrow::acero::AggregateNodeOptions(std::move(arrow_aggregates), - std::move(arrow_keys)); - auto options = - g_object_new(GARROW_TYPE_AGGREGATE_NODE_OPTIONS, "options", arrow_options, NULL); + auto arrow_options = + new arrow::acero::AggregateNodeOptions(std::move(arrow_aggregates), + std::move(arrow_keys)); + auto options = g_object_new(GARROW_TYPE_AGGREGATE_NODE_OPTIONS, + "options", arrow_options, + NULL); return GARROW_AGGREGATE_NODE_OPTIONS(options); } -typedef struct GArrowSinkNodeOptionsPrivate_ -{ + +typedef struct GArrowSinkNodeOptionsPrivate_ { arrow::AsyncGenerator> generator; GArrowRecordBatchReader *reader; } GArrowSinkNodeOptionsPrivate; @@ -1439,9 +1473,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowSinkNodeOptions, garrow_sink_node_options, GARROW_TYPE_EXECUTE_NODE_OPTIONS) -#define GARROW_SINK_NODE_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_sink_node_options_get_instance_private(GARROW_SINK_NODE_OPTIONS(object))) +#define GARROW_SINK_NODE_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_sink_node_options_get_instance_private( \ + GARROW_SINK_NODE_OPTIONS(object))) static void garrow_sink_node_options_dispose(GObject *object) @@ -1466,7 +1501,7 @@ static void garrow_sink_node_options_init(GArrowSinkNodeOptions *object) { auto priv = GARROW_SINK_NODE_OPTIONS_GET_PRIVATE(object); - new (&(priv->generator)) + new(&(priv->generator)) arrow::AsyncGenerator>(); } @@ -1506,20 +1541,23 @@ garrow_sink_node_options_new(void) * Since: 6.0.0 */ GArrowRecordBatchReader * -garrow_sink_node_options_get_reader(GArrowSinkNodeOptions *options, GArrowSchema *schema) +garrow_sink_node_options_get_reader(GArrowSinkNodeOptions *options, + GArrowSchema *schema) { auto arrow_schema = garrow_schema_get_raw(schema); auto priv = GARROW_SINK_NODE_OPTIONS_GET_PRIVATE(options); if (!priv->reader) { - auto arrow_reader = arrow::acero::MakeGeneratorReader(arrow_schema, - std::move(priv->generator), - arrow::default_memory_pool()); + auto arrow_reader = + arrow::acero::MakeGeneratorReader(arrow_schema, + std::move(priv->generator), + arrow::default_memory_pool()); priv->reader = garrow_record_batch_reader_new_raw(&arrow_reader, nullptr); } g_object_ref(priv->reader); return priv->reader; } + G_DEFINE_TYPE(GArrowHashJoinNodeOptions, garrow_hash_join_node_options, GARROW_TYPE_EXECUTE_NODE_OPTIONS) @@ -1576,11 +1614,13 @@ garrow_hash_join_node_options_new(GArrowJoinType type, return NULL; } } - auto arrow_options = new arrow::acero::HashJoinNodeOptions(arrow_type, - std::move(arrow_left_keys), - std::move(arrow_right_keys)); - auto options = - g_object_new(GARROW_TYPE_HASH_JOIN_NODE_OPTIONS, "options", arrow_options, NULL); + auto arrow_options = + new arrow::acero::HashJoinNodeOptions(arrow_type, + std::move(arrow_left_keys), + std::move(arrow_right_keys)); + auto options = g_object_new(GARROW_TYPE_HASH_JOIN_NODE_OPTIONS, + "options", arrow_options, + NULL); return GARROW_HASH_JOIN_NODE_OPTIONS(options); } @@ -1596,13 +1636,16 @@ garrow_hash_join_node_options_new(GArrowJoinType type, * Since: 7.0.0 */ gboolean -garrow_hash_join_node_options_set_left_outputs(GArrowHashJoinNodeOptions *options, - const gchar **outputs, - gsize n_outputs, - GError **error) +garrow_hash_join_node_options_set_left_outputs( + GArrowHashJoinNodeOptions *options, + const gchar **outputs, + gsize n_outputs, + GError **error) { - auto arrow_options = static_cast( - garrow_execute_node_options_get_raw(GARROW_EXECUTE_NODE_OPTIONS(options))); + auto arrow_options = + static_cast( + garrow_execute_node_options_get_raw( + GARROW_EXECUTE_NODE_OPTIONS(options))); arrow_options->output_all = false; arrow_options->left_output.clear(); for (gsize i = 0; i < n_outputs; ++i) { @@ -1628,13 +1671,16 @@ garrow_hash_join_node_options_set_left_outputs(GArrowHashJoinNodeOptions *option * Since: 7.0.0 */ gboolean -garrow_hash_join_node_options_set_right_outputs(GArrowHashJoinNodeOptions *options, - const gchar **outputs, - gsize n_outputs, - GError **error) +garrow_hash_join_node_options_set_right_outputs( + GArrowHashJoinNodeOptions *options, + const gchar **outputs, + gsize n_outputs, + GError **error) { - auto arrow_options = static_cast( - garrow_execute_node_options_get_raw(GARROW_EXECUTE_NODE_OPTIONS(options))); + auto arrow_options = + static_cast( + garrow_execute_node_options_get_raw( + GARROW_EXECUTE_NODE_OPTIONS(options))); arrow_options->output_all = false; arrow_options->right_output.clear(); for (gsize i = 0; i < n_outputs; ++i) { @@ -1648,8 +1694,8 @@ garrow_hash_join_node_options_set_right_outputs(GArrowHashJoinNodeOptions *optio return TRUE; } -struct GArrowExecuteNodePrivate -{ + +struct GArrowExecuteNodePrivate { arrow::acero::ExecNode *node; GArrowExecuteNodeOptions *options; }; @@ -1659,11 +1705,14 @@ enum { PROP_OPTIONS, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowExecuteNode, garrow_execute_node, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowExecuteNode, + garrow_execute_node, + G_TYPE_OBJECT) -#define GARROW_EXECUTE_NODE_GET_PRIVATE(object) \ - static_cast( \ - garrow_execute_node_get_instance_private(GARROW_EXECUTE_NODE(object))) +#define GARROW_EXECUTE_NODE_GET_PRIVATE(object) \ + static_cast( \ + garrow_execute_node_get_instance_private( \ + GARROW_EXECUTE_NODE(object))) static void garrow_execute_node_dispose(GObject *object) @@ -1686,10 +1735,12 @@ garrow_execute_node_set_property(GObject *object, switch (prop_id) { case PROP_NODE: - priv->node = static_cast(g_value_get_pointer(value)); + priv->node = + static_cast(g_value_get_pointer(value)); break; case PROP_OPTIONS: - priv->options = static_cast(g_value_dup_object(value)); + priv->options = + static_cast(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -1729,19 +1780,19 @@ garrow_execute_node_class_init(GArrowExecuteNodeClass *klass) gobject_class->get_property = garrow_execute_node_get_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "node", - "Node", - "The raw arrow::acero::ExecNode *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("node", + "Node", + "The raw arrow::acero::ExecNode *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_NODE, spec); - spec = g_param_spec_object( - "options", - "Options", - "The options of this node", - GARROW_TYPE_EXECUTE_NODE_OPTIONS, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("options", + "Options", + "The options of this node", + GARROW_TYPE_EXECUTE_NODE_OPTIONS, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_OPTIONS, spec); } @@ -1776,8 +1827,8 @@ garrow_execute_node_get_output_schema(GArrowExecuteNode *node) return garrow_schema_new_raw(&arrow_schema); } -struct GArrowExecutePlanPrivate -{ + +struct GArrowExecutePlanPrivate { std::shared_ptr plan; GList *nodes; }; @@ -1786,11 +1837,14 @@ enum { PROP_PLAN = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowExecutePlan, garrow_execute_plan, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowExecutePlan, + garrow_execute_plan, + G_TYPE_OBJECT) -#define GARROW_EXECUTE_PLAN_GET_PRIVATE(object) \ - static_cast( \ - garrow_execute_plan_get_instance_private(GARROW_EXECUTE_PLAN(object))) +#define GARROW_EXECUTE_PLAN_GET_PRIVATE(object) \ + static_cast( \ + garrow_execute_plan_get_instance_private( \ + GARROW_EXECUTE_PLAN(object))) static void garrow_execute_plan_finalize(GObject *object) @@ -1820,7 +1874,8 @@ garrow_execute_plan_set_property(GObject *object, switch (prop_id) { case PROP_PLAN: priv->plan = - *static_cast *>(g_value_get_pointer(value)); + *static_cast *>( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -1832,7 +1887,7 @@ static void garrow_execute_plan_init(GArrowExecutePlan *object) { auto priv = GARROW_EXECUTE_PLAN_GET_PRIVATE(object); - new (&(priv->plan)) std::shared_ptr; + new(&(priv->plan)) std::shared_ptr; } static void @@ -1844,11 +1899,11 @@ garrow_execute_plan_class_init(GArrowExecutePlanClass *klass) gobject_class->set_property = garrow_execute_plan_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "plan", - "Plan", - "The raw std::shared_ptr", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("plan", + "Plan", + "The raw std::shared_ptr", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_PLAN, spec); } @@ -1866,8 +1921,9 @@ garrow_execute_plan_new(GError **error) { auto arrow_plan_result = arrow::acero::ExecPlan::Make(); if (garrow::check(error, arrow_plan_result, "[execute-plan][new]")) { - return GARROW_EXECUTE_PLAN( - g_object_new(GARROW_TYPE_EXECUTE_PLAN, "plan", &(*arrow_plan_result), NULL)); + return GARROW_EXECUTE_PLAN(g_object_new(GARROW_TYPE_EXECUTE_PLAN, + "plan", &(*arrow_plan_result), + NULL)); } else { return NULL; } @@ -1896,7 +1952,8 @@ garrow_execute_plan_build_node(GArrowExecutePlan *plan, auto arrow_plan = garrow_execute_plan_get_raw(plan); std::vector arrow_inputs; for (auto node = inputs; node; node = node->next) { - auto arrow_node = garrow_execute_node_get_raw(GARROW_EXECUTE_NODE(node->data)); + auto arrow_node = + garrow_execute_node_get_raw(GARROW_EXECUTE_NODE(node->data)); arrow_inputs.push_back(arrow_node); } auto arrow_options = garrow_execute_node_options_get_raw(options); @@ -1966,11 +2023,12 @@ garrow_execute_plan_build_filter_node(GArrowExecutePlan *plan, { GList *inputs = nullptr; inputs = g_list_prepend(inputs, input); - auto node = garrow_execute_plan_build_node(plan, - "filter", - inputs, - GARROW_EXECUTE_NODE_OPTIONS(options), - error); + auto node = + garrow_execute_plan_build_node(plan, + "filter", + inputs, + GARROW_EXECUTE_NODE_OPTIONS(options), + error); g_list_free(inputs); return node; } @@ -1998,11 +2056,12 @@ garrow_execute_plan_build_project_node(GArrowExecutePlan *plan, { GList *inputs = nullptr; inputs = g_list_prepend(inputs, input); - auto node = garrow_execute_plan_build_node(plan, - "project", - inputs, - GARROW_EXECUTE_NODE_OPTIONS(options), - error); + auto node = + garrow_execute_plan_build_node(plan, + "project", + inputs, + GARROW_EXECUTE_NODE_OPTIONS(options), + error); g_list_free(inputs); return node; } @@ -2030,11 +2089,12 @@ garrow_execute_plan_build_aggregate_node(GArrowExecutePlan *plan, { GList *inputs = NULL; inputs = g_list_prepend(inputs, input); - auto node = garrow_execute_plan_build_node(plan, - "aggregate", - inputs, - GARROW_EXECUTE_NODE_OPTIONS(options), - error); + auto node = + garrow_execute_plan_build_node(plan, + "aggregate", + inputs, + GARROW_EXECUTE_NODE_OPTIONS(options), + error); g_list_free(inputs); return node; } @@ -2062,11 +2122,12 @@ garrow_execute_plan_build_sink_node(GArrowExecutePlan *plan, { GList *inputs = NULL; inputs = g_list_prepend(inputs, input); - auto node = garrow_execute_plan_build_node(plan, - "sink", - inputs, - GARROW_EXECUTE_NODE_OPTIONS(options), - error); + auto node = + garrow_execute_plan_build_node(plan, + "sink", + inputs, + GARROW_EXECUTE_NODE_OPTIONS(options), + error); g_list_free(inputs); return node; } @@ -2097,11 +2158,12 @@ garrow_execute_plan_build_hash_join_node(GArrowExecutePlan *plan, GList *inputs = NULL; inputs = g_list_append(inputs, left); inputs = g_list_append(inputs, right); - auto node = garrow_execute_plan_build_node(plan, - "hashjoin", - inputs, - GARROW_EXECUTE_NODE_OPTIONS(options), - error); + auto node = + garrow_execute_plan_build_node(plan, + "hashjoin", + inputs, + GARROW_EXECUTE_NODE_OPTIONS(options), + error); g_list_free(inputs); return node; } @@ -2132,10 +2194,13 @@ garrow_execute_plan_get_nodes(GArrowExecutePlan *plan) * Since: 6.0.0 */ gboolean -garrow_execute_plan_validate(GArrowExecutePlan *plan, GError **error) +garrow_execute_plan_validate(GArrowExecutePlan *plan, + GError **error) { auto arrow_plan = garrow_execute_plan_get_raw(plan); - return garrow::check(error, arrow_plan->Validate(), "[execute-plan][validate]"); + return garrow::check(error, + arrow_plan->Validate(), + "[execute-plan][validate]"); } /** @@ -2184,11 +2249,12 @@ garrow_execute_plan_wait(GArrowExecutePlan *plan, GError **error) { auto arrow_plan = garrow_execute_plan_get_raw(plan); arrow_plan->finished().Wait(); - return garrow::check(error, arrow_plan->finished().status(), "[execute-plan][wait]"); + return garrow::check(error, arrow_plan->finished().status(), + "[execute-plan][wait]"); } -typedef struct GArrowCastOptionsPrivate_ -{ + +typedef struct GArrowCastOptionsPrivate_ { GArrowDataType *to_data_type; } GArrowCastOptionsPrivate; @@ -2206,9 +2272,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowCastOptions, garrow_cast_options, GARROW_TYPE_FUNCTION_OPTIONS) -#define GARROW_CAST_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_cast_options_get_instance_private(GARROW_CAST_OPTIONS(object))) +#define GARROW_CAST_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_cast_options_get_instance_private( \ + GARROW_CAST_OPTIONS(object))) static void garrow_cast_options_dispose(GObject *object) @@ -2313,8 +2380,8 @@ static void garrow_cast_options_init(GArrowCastOptions *object) { auto priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object); - priv->options = - static_cast(new arrow::compute::CastOptions()); + priv->options = static_cast( + new arrow::compute::CastOptions()); } static void @@ -2322,7 +2389,7 @@ garrow_cast_options_class_init(GArrowCastOptionsClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_cast_options_dispose; + gobject_class->dispose = garrow_cast_options_dispose; gobject_class->set_property = garrow_cast_options_set_property; gobject_class->get_property = garrow_cast_options_get_property; @@ -2441,6 +2508,7 @@ garrow_cast_options_new(void) return GARROW_CAST_OPTIONS(cast_options); } + enum { PROP_SKIP_NULLS = 1, PROP_MIN_COUNT, @@ -2457,7 +2525,8 @@ garrow_scalar_aggregate_options_set_property(GObject *object, GParamSpec *pspec) { auto options = - garrow_scalar_aggregate_options_get_raw(GARROW_SCALAR_AGGREGATE_OPTIONS(object)); + garrow_scalar_aggregate_options_get_raw( + GARROW_SCALAR_AGGREGATE_OPTIONS(object)); switch (prop_id) { case PROP_SKIP_NULLS: @@ -2479,7 +2548,8 @@ garrow_scalar_aggregate_options_get_property(GObject *object, GParamSpec *pspec) { auto options = - garrow_scalar_aggregate_options_get_raw(GARROW_SCALAR_AGGREGATE_OPTIONS(object)); + garrow_scalar_aggregate_options_get_raw( + GARROW_SCALAR_AGGREGATE_OPTIONS(object)); switch (prop_id) { case PROP_SKIP_NULLS: @@ -2503,7 +2573,8 @@ garrow_scalar_aggregate_options_init(GArrowScalarAggregateOptions *object) } static void -garrow_scalar_aggregate_options_class_init(GArrowScalarAggregateOptionsClass *klass) +garrow_scalar_aggregate_options_class_init( + GArrowScalarAggregateOptionsClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); @@ -2559,11 +2630,14 @@ garrow_scalar_aggregate_options_new(void) return GARROW_SCALAR_AGGREGATE_OPTIONS(scalar_aggregate_options); } + enum { PROP_MODE = 1, }; -G_DEFINE_TYPE(GArrowCountOptions, garrow_count_options, GARROW_TYPE_FUNCTION_OPTIONS) +G_DEFINE_TYPE(GArrowCountOptions, + garrow_count_options, + GARROW_TYPE_FUNCTION_OPTIONS) static void garrow_count_options_set_property(GObject *object, @@ -2576,7 +2650,8 @@ garrow_count_options_set_property(GObject *object, switch (prop_id) { case PROP_MODE: options->mode = - static_cast(g_value_get_enum(value)); + static_cast( + g_value_get_enum(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -2606,8 +2681,8 @@ static void garrow_count_options_init(GArrowCountOptions *object) { auto priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object); - priv->options = - static_cast(new arrow::compute::CountOptions()); + priv->options = static_cast( + new arrow::compute::CountOptions()); } static void @@ -2651,11 +2726,14 @@ garrow_count_options_new(void) return GARROW_COUNT_OPTIONS(count_options); } + enum { PROP_NULL_SELECTION_BEHAVIOR = 1, }; -G_DEFINE_TYPE(GArrowFilterOptions, garrow_filter_options, GARROW_TYPE_FUNCTION_OPTIONS) +G_DEFINE_TYPE(GArrowFilterOptions, + garrow_filter_options, + GARROW_TYPE_FUNCTION_OPTIONS) static void garrow_filter_options_set_property(GObject *object, @@ -2699,8 +2777,8 @@ static void garrow_filter_options_init(GArrowFilterOptions *object) { auto priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object); - priv->options = - static_cast(new arrow::compute::FilterOptions()); + priv->options = static_cast( + new arrow::compute::FilterOptions()); } static void @@ -2721,14 +2799,16 @@ garrow_filter_options_class_init(GArrowFilterOptionsClass *klass) * * Since: 0.17.0 */ - spec = g_param_spec_enum( - "null-selection-behavior", - "NULL selection behavior", - "How to handle filtered values", - GARROW_TYPE_FILTER_NULL_SELECTION_BEHAVIOR, - static_cast(options.null_selection_behavior), - static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_NULL_SELECTION_BEHAVIOR, spec); + spec = g_param_spec_enum("null-selection-behavior", + "NULL selection behavior", + "How to handle filtered values", + GARROW_TYPE_FILTER_NULL_SELECTION_BEHAVIOR, + static_cast( + options.null_selection_behavior), + static_cast(G_PARAM_READWRITE)); + g_object_class_install_property(gobject_class, + PROP_NULL_SELECTION_BEHAVIOR, + spec); } /** @@ -2745,14 +2825,17 @@ garrow_filter_options_new(void) return GARROW_FILTER_OPTIONS(filter_options); } -G_DEFINE_TYPE(GArrowTakeOptions, garrow_take_options, GARROW_TYPE_FUNCTION_OPTIONS) + +G_DEFINE_TYPE(GArrowTakeOptions, + garrow_take_options, + GARROW_TYPE_FUNCTION_OPTIONS) static void garrow_take_options_init(GArrowTakeOptions *object) { auto priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object); - priv->options = - static_cast(new arrow::compute::TakeOptions()); + priv->options = static_cast( + new arrow::compute::TakeOptions()); } static void @@ -2774,6 +2857,7 @@ garrow_take_options_new(void) return GARROW_TAKE_OPTIONS(take_options); } + enum { PROP_ARRAY_SORT_OPTIONS_ORDER = 1, }; @@ -2788,11 +2872,13 @@ garrow_array_sort_options_set_property(GObject *object, const GValue *value, GParamSpec *pspec) { - auto options = garrow_array_sort_options_get_raw(GARROW_ARRAY_SORT_OPTIONS(object)); + auto options = + garrow_array_sort_options_get_raw(GARROW_ARRAY_SORT_OPTIONS(object)); switch (prop_id) { case PROP_ARRAY_SORT_OPTIONS_ORDER: - options->order = static_cast(g_value_get_enum(value)); + options->order = + static_cast(g_value_get_enum(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -2806,7 +2892,8 @@ garrow_array_sort_options_get_property(GObject *object, GValue *value, GParamSpec *pspec) { - auto options = garrow_array_sort_options_get_raw(GARROW_ARRAY_SORT_OPTIONS(object)); + auto options = + garrow_array_sort_options_get_raw(GARROW_ARRAY_SORT_OPTIONS(object)); switch (prop_id) { case PROP_ARRAY_SORT_OPTIONS_ORDER: @@ -2850,7 +2937,9 @@ garrow_array_sort_options_class_init(GArrowArraySortOptionsClass *klass) GARROW_TYPE_SORT_ORDER, static_cast(options.order), static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_ARRAY_SORT_OPTIONS_ORDER, spec); + g_object_class_install_property(gobject_class, + PROP_ARRAY_SORT_OPTIONS_ORDER, + spec); } /** @@ -2865,7 +2954,9 @@ GArrowArraySortOptions * garrow_array_sort_options_new(GArrowSortOrder order) { auto array_sort_options = - g_object_new(GARROW_TYPE_ARRAY_SORT_OPTIONS, "order", order, NULL); + g_object_new(GARROW_TYPE_ARRAY_SORT_OPTIONS, + "order", order, + NULL); return GARROW_ARRAY_SORT_OPTIONS(array_sort_options); } @@ -2888,8 +2979,8 @@ garrow_array_sort_options_equal(GArrowArraySortOptions *options, return arrow_options->order == arrow_other_options->order; } -typedef struct GArrowSortKeyPrivate_ -{ + +typedef struct GArrowSortKeyPrivate_ { arrow::compute::SortKey sort_key; } GArrowSortKeyPrivate; @@ -2898,11 +2989,14 @@ enum { PROP_SORT_KEY_ORDER, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowSortKey, garrow_sort_key, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowSortKey, + garrow_sort_key, + G_TYPE_OBJECT) -#define GARROW_SORT_KEY_GET_PRIVATE(object) \ - static_cast( \ - garrow_sort_key_get_instance_private(GARROW_SORT_KEY(object))) +#define GARROW_SORT_KEY_GET_PRIVATE(object) \ + static_cast( \ + garrow_sort_key_get_instance_private( \ + GARROW_SORT_KEY(object))) static void garrow_sort_key_finalize(GObject *object) @@ -2963,7 +3057,7 @@ static void garrow_sort_key_init(GArrowSortKey *object) { auto priv = GARROW_SORT_KEY_GET_PRIVATE(object); - new (&priv->sort_key) arrow::compute::SortKey(""); + new(&priv->sort_key) arrow::compute::SortKey(""); } static void @@ -2971,7 +3065,7 @@ garrow_sort_key_class_init(GArrowSortKeyClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_sort_key_finalize; + gobject_class->finalize = garrow_sort_key_finalize; gobject_class->set_property = garrow_sort_key_set_property; gobject_class->get_property = garrow_sort_key_get_property; @@ -3001,13 +3095,13 @@ garrow_sort_key_class_init(GArrowSortKeyClass *klass) * * Since: 3.0.0 */ - spec = g_param_spec_enum( - "order", - "Order", - "How to order values", - GARROW_TYPE_SORT_ORDER, - 0, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_enum("order", + "Order", + "How to order values", + GARROW_TYPE_SORT_ORDER, + 0, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_SORT_KEY_ORDER, spec); } @@ -3021,13 +3115,19 @@ garrow_sort_key_class_init(GArrowSortKeyClass *klass) * Since: 3.0.0 */ GArrowSortKey * -garrow_sort_key_new(const gchar *target, GArrowSortOrder order, GError **error) +garrow_sort_key_new(const gchar *target, + GArrowSortOrder order, + GError **error) { auto arrow_reference_result = garrow_field_reference_resolve_raw(target); - if (!garrow::check(error, arrow_reference_result, "[sort-key][new]")) { + if (!garrow::check(error, + arrow_reference_result, + "[sort-key][new]")) { return NULL; } - auto sort_key = g_object_new(GARROW_TYPE_SORT_KEY, "order", order, NULL); + auto sort_key = g_object_new(GARROW_TYPE_SORT_KEY, + "order", order, + NULL); auto priv = GARROW_SORT_KEY_GET_PRIVATE(sort_key); priv->sort_key.target = *arrow_reference_result; return GARROW_SORT_KEY(sort_key); @@ -3044,21 +3144,25 @@ garrow_sort_key_new(const gchar *target, GArrowSortOrder order, GError **error) * Since: 3.0.0 */ gboolean -garrow_sort_key_equal(GArrowSortKey *sort_key, GArrowSortKey *other_sort_key) +garrow_sort_key_equal(GArrowSortKey *sort_key, + GArrowSortKey *other_sort_key) { auto arrow_sort_key = garrow_sort_key_get_raw(sort_key); auto arrow_other_sort_key = garrow_sort_key_get_raw(other_sort_key); return arrow_sort_key->Equals(*arrow_other_sort_key); } -G_DEFINE_TYPE(GArrowSortOptions, garrow_sort_options, GARROW_TYPE_FUNCTION_OPTIONS) + +G_DEFINE_TYPE(GArrowSortOptions, + garrow_sort_options, + GARROW_TYPE_FUNCTION_OPTIONS) static void garrow_sort_options_init(GArrowSortOptions *object) { auto priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object); - priv->options = - static_cast(new arrow::compute::SortOptions()); + priv->options = static_cast( + new arrow::compute::SortOptions()); } static void @@ -3077,7 +3181,8 @@ garrow_sort_options_class_init(GArrowSortOptionsClass *klass) GArrowSortOptions * garrow_sort_options_new(GList *sort_keys) { - auto sort_options = GARROW_SORT_OPTIONS(g_object_new(GARROW_TYPE_SORT_OPTIONS, NULL)); + auto sort_options = + GARROW_SORT_OPTIONS(g_object_new(GARROW_TYPE_SORT_OPTIONS, NULL)); if (sort_keys) { garrow_sort_options_set_sort_keys(sort_options, sort_keys); } @@ -3095,7 +3200,8 @@ garrow_sort_options_new(GList *sort_keys) * Since: 3.0.0 */ gboolean -garrow_sort_options_equal(GArrowSortOptions *options, GArrowSortOptions *other_options) +garrow_sort_options_equal(GArrowSortOptions *options, + GArrowSortOptions *other_options) { auto arrow_options = garrow_sort_options_get_raw(options); auto arrow_other_options = garrow_sort_options_get_raw(other_options); @@ -3132,7 +3238,8 @@ garrow_sort_options_get_sort_keys(GArrowSortOptions *options) * Since: 3.0.0 */ void -garrow_sort_options_set_sort_keys(GArrowSortOptions *options, GList *sort_keys) +garrow_sort_options_set_sort_keys(GArrowSortOptions *options, + GList *sort_keys) { auto arrow_options = garrow_sort_options_get_raw(options); garrow_raw_sort_keys_set(arrow_options->sort_keys, sort_keys); @@ -3148,14 +3255,15 @@ garrow_sort_options_set_sort_keys(GArrowSortOptions *options, GList *sort_keys) * Since: 3.0.0 */ void -garrow_sort_options_add_sort_key(GArrowSortOptions *options, GArrowSortKey *sort_key) +garrow_sort_options_add_sort_key(GArrowSortOptions *options, + GArrowSortKey *sort_key) { auto arrow_options = garrow_sort_options_get_raw(options); garrow_raw_sort_keys_add(arrow_options->sort_keys, sort_key); } -typedef struct GArrowSetLookupOptionsPrivate_ -{ + +typedef struct GArrowSetLookupOptionsPrivate_ { GArrowDatum *value_set; } GArrowSetLookupOptionsPrivate; @@ -3168,9 +3276,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowSetLookupOptions, garrow_set_lookup_options, GARROW_TYPE_FUNCTION_OPTIONS) -#define GARROW_SET_LOOKUP_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_set_lookup_options_get_instance_private(GARROW_SET_LOOKUP_OPTIONS(object))) +#define GARROW_SET_LOOKUP_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_set_lookup_options_get_instance_private( \ + GARROW_SET_LOOKUP_OPTIONS(object))) static void garrow_set_lookup_options_dispose(GObject *object) @@ -3192,7 +3301,8 @@ garrow_set_lookup_options_set_property(GObject *object, GParamSpec *pspec) { auto priv = GARROW_SET_LOOKUP_OPTIONS_GET_PRIVATE(object); - auto options = garrow_set_lookup_options_get_raw(GARROW_SET_LOOKUP_OPTIONS(object)); + auto options = + garrow_set_lookup_options_get_raw(GARROW_SET_LOOKUP_OPTIONS(object)); switch (prop_id) { case PROP_SET_LOOKUP_OPTIONS_VALUE_SET: @@ -3228,15 +3338,15 @@ garrow_set_lookup_options_get_property(GObject *object, GParamSpec *pspec) { auto priv = GARROW_SET_LOOKUP_OPTIONS_GET_PRIVATE(object); - auto options = garrow_set_lookup_options_get_raw(GARROW_SET_LOOKUP_OPTIONS(object)); + auto options = + garrow_set_lookup_options_get_raw(GARROW_SET_LOOKUP_OPTIONS(object)); switch (prop_id) { case PROP_SET_LOOKUP_OPTIONS_VALUE_SET: g_value_set_object(value, priv->value_set); break; case PROP_SET_LOOKUP_OPTIONS_SKIP_NULLS: - g_value_set_boolean(value, - options->skip_nulls.has_value() && options->skip_nulls.value()); + g_value_set_boolean(value, options->skip_nulls.has_value() && options->skip_nulls.value()); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -3261,6 +3371,7 @@ garrow_set_lookup_options_class_init(GArrowSetLookupOptionsClass *klass) gobject_class->set_property = garrow_set_lookup_options_set_property; gobject_class->get_property = garrow_set_lookup_options_get_property; + arrow::compute::SetLookupOptions options; GParamSpec *spec; @@ -3276,7 +3387,9 @@ garrow_set_lookup_options_class_init(GArrowSetLookupOptionsClass *klass) "The set of values to look up input values into", GARROW_TYPE_DATUM, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_SET_LOOKUP_OPTIONS_VALUE_SET, spec); + g_object_class_install_property(gobject_class, + PROP_SET_LOOKUP_OPTIONS_VALUE_SET, + spec); /** * GArrowSetLookupOptions:skip-nulls: @@ -3286,13 +3399,10 @@ garrow_set_lookup_options_class_init(GArrowSetLookupOptionsClass *klass) * Since: 6.0.0 */ auto skip_nulls = (options.skip_nulls.has_value() && options.skip_nulls.value()); - spec = g_param_spec_boolean("skip-nulls", - "Skip NULLs", - "Whether NULLs are skipped or not", - skip_nulls, - static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, - PROP_SET_LOOKUP_OPTIONS_SKIP_NULLS, + spec = + g_param_spec_boolean("skip-nulls", "Skip NULLs", "Whether NULLs are skipped or not", + skip_nulls, static_cast(G_PARAM_READWRITE)); + g_object_class_install_property(gobject_class, PROP_SET_LOOKUP_OPTIONS_SKIP_NULLS, spec); } @@ -3309,9 +3419,12 @@ GArrowSetLookupOptions * garrow_set_lookup_options_new(GArrowDatum *value_set) { return GARROW_SET_LOOKUP_OPTIONS( - g_object_new(GARROW_TYPE_SET_LOOKUP_OPTIONS, "value-set", value_set, NULL)); + g_object_new(GARROW_TYPE_SET_LOOKUP_OPTIONS, + "value-set", value_set, + NULL)); } + enum { PROP_VARIANCE_OPTIONS_DDOF = 1, PROP_VARIANCE_OPTIONS_SKIP_NULLS, @@ -3322,9 +3435,10 @@ G_DEFINE_TYPE(GArrowVarianceOptions, garrow_variance_options, GARROW_TYPE_FUNCTION_OPTIONS) -#define GARROW_VARIANCE_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_variance_options_get_instance_private(GARROW_VARIANCE_OPTIONS(object))) +#define GARROW_VARIANCE_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_variance_options_get_instance_private( \ + GARROW_VARIANCE_OPTIONS(object))) static void garrow_variance_options_set_property(GObject *object, @@ -3332,7 +3446,8 @@ garrow_variance_options_set_property(GObject *object, const GValue *value, GParamSpec *pspec) { - auto options = garrow_variance_options_get_raw(GARROW_VARIANCE_OPTIONS(object)); + auto options = + garrow_variance_options_get_raw(GARROW_VARIANCE_OPTIONS(object)); switch (prop_id) { case PROP_VARIANCE_OPTIONS_DDOF: @@ -3356,7 +3471,8 @@ garrow_variance_options_get_property(GObject *object, GValue *value, GParamSpec *pspec) { - auto options = garrow_variance_options_get_raw(GARROW_VARIANCE_OPTIONS(object)); + auto options = + garrow_variance_options_get_raw(GARROW_VARIANCE_OPTIONS(object)); switch (prop_id) { case PROP_VARIANCE_OPTIONS_DDOF: @@ -3378,8 +3494,8 @@ static void garrow_variance_options_init(GArrowVarianceOptions *object) { auto priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object); - priv->options = - static_cast(new arrow::compute::VarianceOptions()); + priv->options = static_cast( + new arrow::compute::VarianceOptions()); } static void @@ -3390,6 +3506,7 @@ garrow_variance_options_class_init(GArrowVarianceOptionsClass *klass) gobject_class->set_property = garrow_variance_options_set_property; gobject_class->get_property = garrow_variance_options_get_property; + arrow::compute::VarianceOptions options; GParamSpec *spec; @@ -3407,7 +3524,9 @@ garrow_variance_options_class_init(GArrowVarianceOptionsClass *klass) G_MAXINT, options.ddof, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_VARIANCE_OPTIONS_DDOF, spec); + g_object_class_install_property(gobject_class, + PROP_VARIANCE_OPTIONS_DDOF, + spec); /** * GArrowVarianceOptions:skip-nulls: @@ -3421,7 +3540,9 @@ garrow_variance_options_class_init(GArrowVarianceOptionsClass *klass) "Whether NULLs are skipped or not", options.skip_nulls, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_VARIANCE_OPTIONS_SKIP_NULLS, spec); + g_object_class_install_property(gobject_class, + PROP_VARIANCE_OPTIONS_SKIP_NULLS, + spec); /** * GArrowVarianceOptions:min-count: @@ -3438,7 +3559,10 @@ garrow_variance_options_class_init(GArrowVarianceOptionsClass *klass) G_MAXUINT, options.min_count, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_VARIANCE_OPTIONS_MIN_COUNT, spec); + g_object_class_install_property(gobject_class, + PROP_VARIANCE_OPTIONS_MIN_COUNT, + spec); + } /** @@ -3451,19 +3575,24 @@ garrow_variance_options_class_init(GArrowVarianceOptionsClass *klass) GArrowVarianceOptions * garrow_variance_options_new(void) { - return GARROW_VARIANCE_OPTIONS(g_object_new(GARROW_TYPE_VARIANCE_OPTIONS, NULL)); + return GARROW_VARIANCE_OPTIONS( + g_object_new(GARROW_TYPE_VARIANCE_OPTIONS, NULL)); } + enum { PROP_ROUND_OPTIONS_N_DIGITS = 1, PROP_ROUND_OPTIONS_MODE, }; -G_DEFINE_TYPE(GArrowRoundOptions, garrow_round_options, GARROW_TYPE_FUNCTION_OPTIONS) +G_DEFINE_TYPE(GArrowRoundOptions, + garrow_round_options, + GARROW_TYPE_FUNCTION_OPTIONS) -#define GARROW_ROUND_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_round_options_get_instance_private(GARROW_ROUND_OPTIONS(object))) +#define GARROW_ROUND_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_round_options_get_instance_private( \ + GARROW_ROUND_OPTIONS(object))) static void garrow_round_options_set_property(GObject *object, @@ -3478,7 +3607,8 @@ garrow_round_options_set_property(GObject *object, options->ndigits = g_value_get_int64(value); break; case PROP_ROUND_OPTIONS_MODE: - options->round_mode = static_cast(g_value_get_enum(value)); + options->round_mode = + static_cast(g_value_get_enum(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -3511,8 +3641,8 @@ static void garrow_round_options_init(GArrowRoundOptions *object) { auto priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object); - priv->options = - static_cast(new arrow::compute::RoundOptions()); + priv->options = static_cast( + new arrow::compute::RoundOptions()); } static void @@ -3523,6 +3653,7 @@ garrow_round_options_class_init(GArrowRoundOptionsClass *klass) gobject_class->set_property = garrow_round_options_set_property; gobject_class->get_property = garrow_round_options_get_property; + arrow::compute::RoundOptions options; GParamSpec *spec; @@ -3540,7 +3671,9 @@ garrow_round_options_class_init(GArrowRoundOptionsClass *klass) G_MAXINT64, options.ndigits, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_ROUND_OPTIONS_N_DIGITS, spec); + g_object_class_install_property(gobject_class, + PROP_ROUND_OPTIONS_N_DIGITS, + spec); /** * GArrowRoundOptions:mode: @@ -3555,7 +3688,9 @@ garrow_round_options_class_init(GArrowRoundOptionsClass *klass) GARROW_TYPE_ROUND_MODE, static_cast(options.round_mode), static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_ROUND_OPTIONS_MODE, spec); + g_object_class_install_property(gobject_class, + PROP_ROUND_OPTIONS_MODE, + spec); } /** @@ -3571,8 +3706,8 @@ garrow_round_options_new(void) return GARROW_ROUND_OPTIONS(g_object_new(GARROW_TYPE_ROUND_OPTIONS, NULL)); } -typedef struct GArrowRoundToMultipleOptionsPrivate_ -{ + +typedef struct GArrowRoundToMultipleOptionsPrivate_ { GArrowScalar *multiple; } GArrowRoundToMultipleOptionsPrivate; @@ -3585,9 +3720,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowRoundToMultipleOptions, garrow_round_to_multiple_options, GARROW_TYPE_FUNCTION_OPTIONS) -#define GARROW_ROUND_TO_MULTIPLE_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_round_to_multiple_options_get_instance_private( \ +#define GARROW_ROUND_TO_MULTIPLE_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_round_to_multiple_options_get_instance_private( \ GARROW_ROUND_TO_MULTIPLE_OPTIONS(object))) static void @@ -3611,7 +3746,8 @@ garrow_round_to_multiple_options_set_property(GObject *object, { auto priv = GARROW_ROUND_TO_MULTIPLE_OPTIONS_GET_PRIVATE(object); auto options = - garrow_round_to_multiple_options_get_raw(GARROW_ROUND_TO_MULTIPLE_OPTIONS(object)); + garrow_round_to_multiple_options_get_raw( + GARROW_ROUND_TO_MULTIPLE_OPTIONS(object)); switch (prop_id) { case PROP_ROUND_TO_MULTIPLE_OPTIONS_MULTIPLE: @@ -3633,7 +3769,8 @@ garrow_round_to_multiple_options_set_property(GObject *object, } break; case PROP_ROUND_TO_MULTIPLE_OPTIONS_MODE: - options->round_mode = static_cast(g_value_get_enum(value)); + options->round_mode = + static_cast(g_value_get_enum(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -3649,7 +3786,8 @@ garrow_round_to_multiple_options_get_property(GObject *object, { auto priv = GARROW_ROUND_TO_MULTIPLE_OPTIONS_GET_PRIVATE(object); auto options = - garrow_round_to_multiple_options_get_raw(GARROW_ROUND_TO_MULTIPLE_OPTIONS(object)); + garrow_round_to_multiple_options_get_raw( + GARROW_ROUND_TO_MULTIPLE_OPTIONS(object)); switch (prop_id) { case PROP_ROUND_TO_MULTIPLE_OPTIONS_MULTIPLE: @@ -3676,13 +3814,15 @@ garrow_round_to_multiple_options_init(GArrowRoundToMultipleOptions *object) } static void -garrow_round_to_multiple_options_class_init(GArrowRoundToMultipleOptionsClass *klass) +garrow_round_to_multiple_options_class_init( + GArrowRoundToMultipleOptionsClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = garrow_round_to_multiple_options_dispose; gobject_class->set_property = garrow_round_to_multiple_options_set_property; gobject_class->get_property = garrow_round_to_multiple_options_get_property; + arrow::compute::RoundToMultipleOptions options; GParamSpec *spec; @@ -3739,6 +3879,7 @@ garrow_round_to_multiple_options_new(void) g_object_new(GARROW_TYPE_ROUND_TO_MULTIPLE_OPTIONS, NULL)); } + enum { PROP_MATCH_SUBSTRING_OPTIONS_PATTERN = 1, PROP_MATCH_SUBSTRING_OPTIONS_IGNORE_CASE, @@ -3755,7 +3896,8 @@ garrow_match_substring_options_set_property(GObject *object, GParamSpec *pspec) { auto options = - garrow_match_substring_options_get_raw(GARROW_MATCH_SUBSTRING_OPTIONS(object)); + garrow_match_substring_options_get_raw( + GARROW_MATCH_SUBSTRING_OPTIONS(object)); switch (prop_id) { case PROP_MATCH_SUBSTRING_OPTIONS_PATTERN: @@ -3777,7 +3919,8 @@ garrow_match_substring_options_get_property(GObject *object, GParamSpec *pspec) { auto options = - garrow_match_substring_options_get_raw(GARROW_MATCH_SUBSTRING_OPTIONS(object)); + garrow_match_substring_options_get_raw( + GARROW_MATCH_SUBSTRING_OPTIONS(object)); switch (prop_id) { case PROP_MATCH_SUBSTRING_OPTIONS_PATTERN: @@ -3796,17 +3939,20 @@ static void garrow_match_substring_options_init(GArrowMatchSubstringOptions *object) { auto function_options_priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object); - function_options_priv->options = static_cast( - new arrow::compute::MatchSubstringOptions()); + function_options_priv->options = + static_cast( + new arrow::compute::MatchSubstringOptions()); } static void -garrow_match_substring_options_class_init(GArrowMatchSubstringOptionsClass *klass) +garrow_match_substring_options_class_init( + GArrowMatchSubstringOptionsClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); gobject_class->set_property = garrow_match_substring_options_set_property; gobject_class->get_property = garrow_match_substring_options_get_property; + arrow::compute::MatchSubstringOptions options; GParamSpec *spec; @@ -3858,6 +4004,7 @@ garrow_match_substring_options_new(void) g_object_new(GARROW_TYPE_MATCH_SUBSTRING_OPTIONS, NULL)); } + enum { PROP_UTF8_NORMALIZE_OPTIONS_FORM = 1, }; @@ -3866,9 +4013,9 @@ G_DEFINE_TYPE(GArrowUTF8NormalizeOptions, garrow_utf8_normalize_options, GARROW_TYPE_FUNCTION_OPTIONS) -#define GARROW_UTF8_NORMARIZE_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_utf8_normalize_options_get_instance_private( \ +#define GARROW_UTF8_NORMARIZE_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_utf8_normalize_options_get_instance_private( \ GARROW_UTF8_NORMALIZE_OPTIONS(object))) static void @@ -3877,13 +4024,14 @@ garrow_utf8_normalize_options_set_property(GObject *object, const GValue *value, GParamSpec *pspec) { - auto options = - garrow_utf8_normalize_options_get_raw(GARROW_UTF8_NORMALIZE_OPTIONS(object)); + auto options = garrow_utf8_normalize_options_get_raw( + GARROW_UTF8_NORMALIZE_OPTIONS(object)); switch (prop_id) { case PROP_UTF8_NORMALIZE_OPTIONS_FORM: options->form = - static_cast(g_value_get_enum(value)); + static_cast( + g_value_get_enum(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -3897,8 +4045,8 @@ garrow_utf8_normalize_options_get_property(GObject *object, GValue *value, GParamSpec *pspec) { - auto options = - garrow_utf8_normalize_options_get_raw(GARROW_UTF8_NORMALIZE_OPTIONS(object)); + auto options = garrow_utf8_normalize_options_get_raw( + GARROW_UTF8_NORMALIZE_OPTIONS(object)); switch (prop_id) { case PROP_UTF8_NORMALIZE_OPTIONS_FORM: @@ -3926,6 +4074,7 @@ garrow_utf8_normalize_options_class_init(GArrowUTF8NormalizeOptionsClass *klass) gobject_class->set_property = garrow_utf8_normalize_options_set_property; gobject_class->get_property = garrow_utf8_normalize_options_get_property; + arrow::compute::Utf8NormalizeOptions options; GParamSpec *spec; @@ -3942,7 +4091,9 @@ garrow_utf8_normalize_options_class_init(GArrowUTF8NormalizeOptionsClass *klass) GARROW_TYPE_UTF8_NORMALIZE_FORM, static_cast(options.form), static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_UTF8_NORMALIZE_OPTIONS_FORM, spec); + g_object_class_install_property(gobject_class, + PROP_UTF8_NORMALIZE_OPTIONS_FORM, + spec); } /** @@ -3959,6 +4110,7 @@ garrow_utf8_normalize_options_new(void) g_object_new(GARROW_TYPE_UTF8_NORMALIZE_OPTIONS, NULL)); } + enum { PROP_QUANTILE_OPTIONS_INTERPOLATION = 1, PROP_QUANTILE_OPTIONS_SKIP_NULLS, @@ -3975,12 +4127,15 @@ garrow_quantile_options_set_property(GObject *object, const GValue *value, GParamSpec *pspec) { - auto options = garrow_quantile_options_get_raw(GARROW_QUANTILE_OPTIONS(object)); + auto options = + garrow_quantile_options_get_raw( + GARROW_QUANTILE_OPTIONS(object)); switch (prop_id) { case PROP_QUANTILE_OPTIONS_INTERPOLATION: - options->interpolation = static_cast( - g_value_get_enum(value)); + options->interpolation = + static_cast( + g_value_get_enum(value)); break; case PROP_QUANTILE_OPTIONS_SKIP_NULLS: options->skip_nulls = g_value_get_boolean(value); @@ -4000,12 +4155,14 @@ garrow_quantile_options_get_property(GObject *object, GValue *value, GParamSpec *pspec) { - auto options = garrow_quantile_options_get_raw(GARROW_QUANTILE_OPTIONS(object)); + auto options = garrow_quantile_options_get_raw( + GARROW_QUANTILE_OPTIONS(object)); switch (prop_id) { case PROP_QUANTILE_OPTIONS_INTERPOLATION: - g_value_set_enum(value, - static_cast(options->interpolation)); + g_value_set_enum( + value, + static_cast(options->interpolation)); break; case PROP_QUANTILE_OPTIONS_SKIP_NULLS: g_value_set_boolean(value, options->skip_nulls); @@ -4023,8 +4180,8 @@ static void garrow_quantile_options_init(GArrowQuantileOptions *object) { auto priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object); - priv->options = - static_cast(new arrow::compute::QuantileOptions()); + priv->options = static_cast( + new arrow::compute::QuantileOptions()); } static void @@ -4035,6 +4192,7 @@ garrow_quantile_options_class_init(GArrowQuantileOptionsClass *klass) gobject_class->set_property = garrow_quantile_options_set_property; gobject_class->get_property = garrow_quantile_options_get_property; + auto options = arrow::compute::QuantileOptions::Defaults(); GParamSpec *spec; @@ -4046,14 +4204,14 @@ garrow_quantile_options_class_init(GArrowQuantileOptionsClass *klass) * * Since: 9.0.0 */ - spec = - g_param_spec_enum("interpolation", - "Interpolation", - "Interpolation method to use when " - "quantile lies between two data points.", - GARROW_TYPE_QUANTILE_INTERPOLATION, - static_cast(options.interpolation), - static_cast(G_PARAM_READWRITE)); + spec = g_param_spec_enum("interpolation", + "Interpolation", + "Interpolation method to use when " + "quantile lies between two data points.", + GARROW_TYPE_QUANTILE_INTERPOLATION, + static_cast( + options.interpolation), + static_cast(G_PARAM_READWRITE)); g_object_class_install_property(gobject_class, PROP_QUANTILE_OPTIONS_INTERPOLATION, spec); @@ -4074,7 +4232,9 @@ garrow_quantile_options_class_init(GArrowQuantileOptionsClass *klass) "emit null.", options.skip_nulls, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_QUANTILE_OPTIONS_SKIP_NULLS, spec); + g_object_class_install_property(gobject_class, + PROP_QUANTILE_OPTIONS_SKIP_NULLS, + spec); /** * GArrowQuantileOptions:min-count: @@ -4091,7 +4251,9 @@ garrow_quantile_options_class_init(GArrowQuantileOptionsClass *klass) G_MAXUINT32, options.min_count, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_QUANTILE_OPTIONS_MIN_COUNT, spec); + g_object_class_install_property(gobject_class, + PROP_QUANTILE_OPTIONS_MIN_COUNT, + spec); } /** @@ -4104,7 +4266,8 @@ garrow_quantile_options_class_init(GArrowQuantileOptionsClass *klass) GArrowQuantileOptions * garrow_quantile_options_new(void) { - return GARROW_QUANTILE_OPTIONS(g_object_new(GARROW_TYPE_QUANTILE_OPTIONS, NULL)); + return GARROW_QUANTILE_OPTIONS( + g_object_new(GARROW_TYPE_QUANTILE_OPTIONS, NULL)); } /** @@ -4134,7 +4297,8 @@ garrow_quantile_options_get_qs(GArrowQuantileOptions *options, gsize *n) * Since: 9.0.0 */ void -garrow_quantile_options_set_q(GArrowQuantileOptions *options, gdouble q) +garrow_quantile_options_set_q(GArrowQuantileOptions *options, + gdouble q) { auto priv = garrow_quantile_options_get_raw(options); priv->q.clear(); @@ -4150,7 +4314,9 @@ garrow_quantile_options_set_q(GArrowQuantileOptions *options, gdouble q) * Since: 9.0.0 */ void -garrow_quantile_options_set_qs(GArrowQuantileOptions *options, const gdouble *qs, gsize n) +garrow_quantile_options_set_qs(GArrowQuantileOptions *options, + const gdouble *qs, + gsize n) { auto priv = garrow_quantile_options_get_raw(options); priv->q.clear(); @@ -4159,8 +4325,8 @@ garrow_quantile_options_set_qs(GArrowQuantileOptions *options, const gdouble *qs } } -struct GArrowIndexOptionsPrivate -{ + +struct GArrowIndexOptionsPrivate { GArrowScalar *value; }; @@ -4172,9 +4338,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowIndexOptions, garrow_index_options, GARROW_TYPE_FUNCTION_OPTIONS) -#define GARROW_INDEX_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_index_options_get_instance_private(GARROW_INDEX_OPTIONS(object))) +#define GARROW_INDEX_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_index_options_get_instance_private( \ + GARROW_INDEX_OPTIONS(object))) static void garrow_index_options_dispose(GObject *object) @@ -4200,23 +4367,23 @@ garrow_index_options_set_property(GObject *object, switch (prop_id) { case PROP_INDEX_OPTIONS_VALUE: - { - auto scalar = GARROW_SCALAR(g_value_get_object(value)); - if (priv->value == scalar) { - return; - } - if (priv->value) { - g_object_unref(priv->value); - } - priv->value = scalar; - if (priv->value) { - g_object_ref(priv->value); - options->value = garrow_scalar_get_raw(scalar); - } else { - options->value = nullptr; - } - break; + { + auto scalar = GARROW_SCALAR(g_value_get_object(value)); + if (priv->value == scalar) { + return; + } + if (priv->value) { + g_object_unref(priv->value); + } + priv->value = scalar; + if (priv->value) { + g_object_ref(priv->value); + options->value = garrow_scalar_get_raw(scalar); + } else { + options->value = nullptr; } + break; + } default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; @@ -4261,6 +4428,7 @@ garrow_index_options_class_init(GArrowIndexOptionsClass *klass) gobject_class->set_property = garrow_index_options_set_property; gobject_class->get_property = garrow_index_options_get_property; + GParamSpec *spec; /** * GArrowIndexOptions:value: @@ -4287,19 +4455,24 @@ garrow_index_options_class_init(GArrowIndexOptionsClass *klass) GArrowIndexOptions * garrow_index_options_new(void) { - return GARROW_INDEX_OPTIONS(g_object_new(GARROW_TYPE_INDEX_OPTIONS, NULL)); + return GARROW_INDEX_OPTIONS(g_object_new(GARROW_TYPE_INDEX_OPTIONS, + NULL)); } + enum { PROP_RANK_OPTIONS_NULL_PLACEMENT = 1, PROP_RANK_OPTIONS_TIEBREAKER, }; -G_DEFINE_TYPE(GArrowRankOptions, garrow_rank_options, GARROW_TYPE_FUNCTION_OPTIONS) +G_DEFINE_TYPE(GArrowRankOptions, + garrow_rank_options, + GARROW_TYPE_FUNCTION_OPTIONS) -#define GARROW_RANK_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_rank_options_get_instance_private(GARROW_RANK_OPTIONS(object))) +#define GARROW_RANK_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_rank_options_get_instance_private( \ + GARROW_RANK_OPTIONS(object))) static void garrow_rank_options_set_property(GObject *object, @@ -4316,7 +4489,8 @@ garrow_rank_options_set_property(GObject *object, break; case PROP_RANK_OPTIONS_TIEBREAKER: options->tiebreaker = - static_cast(g_value_get_enum(value)); + static_cast( + g_value_get_enum(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -4334,10 +4508,14 @@ garrow_rank_options_get_property(GObject *object, switch (prop_id) { case PROP_RANK_OPTIONS_NULL_PLACEMENT: - g_value_set_enum(value, static_cast(options->null_placement)); + g_value_set_enum( + value, + static_cast(options->null_placement)); break; case PROP_RANK_OPTIONS_TIEBREAKER: - g_value_set_enum(value, static_cast(options->tiebreaker)); + g_value_set_enum( + value, + static_cast(options->tiebreaker)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -4349,8 +4527,8 @@ static void garrow_rank_options_init(GArrowRankOptions *object) { auto priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object); - priv->options = - static_cast(new arrow::compute::RankOptions()); + priv->options = static_cast( + new arrow::compute::RankOptions()); } static void @@ -4361,6 +4539,7 @@ garrow_rank_options_class_init(GArrowRankOptionsClass *klass) gobject_class->set_property = garrow_rank_options_set_property; gobject_class->get_property = garrow_rank_options_get_property; + auto options = arrow::compute::RankOptions::Defaults(); GParamSpec *spec; @@ -4376,9 +4555,12 @@ garrow_rank_options_class_init(GArrowRankOptionsClass *klass) "Whether nulls and NaNs are placed " "at the start or at the end.", GARROW_TYPE_NULL_PLACEMENT, - static_cast(options.null_placement), + static_cast( + options.null_placement), static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_RANK_OPTIONS_NULL_PLACEMENT, spec); + g_object_class_install_property(gobject_class, + PROP_RANK_OPTIONS_NULL_PLACEMENT, + spec); /** * GArrowRankOptions:tiebreaker: @@ -4391,9 +4573,12 @@ garrow_rank_options_class_init(GArrowRankOptionsClass *klass) "Tiebreaker", "Tiebreaker for dealing with equal values in ranks.", GARROW_TYPE_RANK_TIEBREAKER, - static_cast(options.tiebreaker), + static_cast( + options.tiebreaker), static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_RANK_OPTIONS_TIEBREAKER, spec); + g_object_class_install_property(gobject_class, + PROP_RANK_OPTIONS_TIEBREAKER, + spec); } /** @@ -4420,7 +4605,8 @@ garrow_rank_options_new(void) * Since: 12.0.0 */ gboolean -garrow_rank_options_equal(GArrowRankOptions *options, GArrowRankOptions *other_options) +garrow_rank_options_equal(GArrowRankOptions *options, + GArrowRankOptions *other_options) { auto arrow_options = garrow_rank_options_get_raw(options); auto arrow_other_options = garrow_rank_options_get_raw(other_options); @@ -4463,7 +4649,8 @@ garrow_rank_options_get_sort_keys(GArrowRankOptions *options) * Since: 12.0.0 */ void -garrow_rank_options_set_sort_keys(GArrowRankOptions *options, GList *sort_keys) +garrow_rank_options_set_sort_keys(GArrowRankOptions *options, + GList *sort_keys) { auto arrow_options = garrow_rank_options_get_raw(options); garrow_raw_sort_keys_set(arrow_options->sort_keys, sort_keys); @@ -4479,12 +4666,14 @@ garrow_rank_options_set_sort_keys(GArrowRankOptions *options, GList *sort_keys) * Since: 12.0.0 */ void -garrow_rank_options_add_sort_key(GArrowRankOptions *options, GArrowSortKey *sort_key) +garrow_rank_options_add_sort_key(GArrowRankOptions *options, + GArrowSortKey *sort_key) { auto arrow_options = garrow_rank_options_get_raw(options); garrow_raw_sort_keys_add(arrow_options->sort_keys, sort_key); } + /** * garrow_array_cast: * @array: A #GArrowArray. @@ -4509,20 +4698,24 @@ garrow_array_cast(GArrowArray *array, arrow::Result> arrow_casted_array; if (options) { auto arrow_options = garrow_cast_options_get_raw(options); - arrow_casted_array = - arrow::compute::Cast(*arrow_array_raw, arrow_target_data_type, *arrow_options); + arrow_casted_array = arrow::compute::Cast(*arrow_array_raw, + arrow_target_data_type, + *arrow_options); } else { - arrow_casted_array = arrow::compute::Cast(*arrow_array_raw, arrow_target_data_type); - } - if (garrow::check(error, arrow_casted_array, [&]() { - std::stringstream message; - message << "[array][cast] <"; - message << arrow_array->type()->ToString(); - message << "> -> <"; - message << arrow_target_data_type->ToString(); - message << ">"; - return message.str(); - })) { + arrow_casted_array = arrow::compute::Cast(*arrow_array_raw, + arrow_target_data_type); + } + if (garrow::check(error, + arrow_casted_array, + [&]() { + std::stringstream message; + message << "[array][cast] <"; + message << arrow_array->type()->ToString(); + message << "> -> <"; + message << arrow_target_data_type->ToString(); + message << ">"; + return message.str(); + })) { return garrow_array_new_raw(&(*arrow_casted_array)); } else { return NULL; @@ -4540,17 +4733,20 @@ garrow_array_cast(GArrowArray *array, * Since: 0.8.0 */ GArrowArray * -garrow_array_unique(GArrowArray *array, GError **error) +garrow_array_unique(GArrowArray *array, + GError **error) { auto arrow_array = garrow_array_get_raw(array); auto arrow_unique_array = arrow::compute::Unique(arrow_array); - if (garrow::check(error, arrow_unique_array, [&]() { - std::stringstream message; - message << "[array][unique] <"; - message << arrow_array->type()->ToString(); - message << ">"; - return message.str(); - })) { + if (garrow::check(error, + arrow_unique_array, + [&]() { + std::stringstream message; + message << "[array][unique] <"; + message << arrow_array->type()->ToString(); + message << ">"; + return message.str(); + })) { return garrow_array_new_raw(&(*arrow_unique_array)); } else { return NULL; @@ -4569,19 +4765,25 @@ garrow_array_unique(GArrowArray *array, GError **error) * Since: 0.8.0 */ GArrowDictionaryArray * -garrow_array_dictionary_encode(GArrowArray *array, GError **error) +garrow_array_dictionary_encode(GArrowArray *array, + GError **error) { auto arrow_array = garrow_array_get_raw(array); - auto arrow_dictionary_encoded_datum = arrow::compute::DictionaryEncode(arrow_array); - if (garrow::check(error, arrow_dictionary_encoded_datum, [&]() { - std::stringstream message; - message << "[array][dictionary-encode] <"; - message << arrow_array->type()->ToString(); - message << ">"; - return message.str(); - })) { - auto arrow_dictionary_encoded_array = (*arrow_dictionary_encoded_datum).make_array(); - auto dictionary_encoded_array = garrow_array_new_raw(&arrow_dictionary_encoded_array); + auto arrow_dictionary_encoded_datum = + arrow::compute::DictionaryEncode(arrow_array); + if (garrow::check(error, + arrow_dictionary_encoded_datum, + [&]() { + std::stringstream message; + message << "[array][dictionary-encode] <"; + message << arrow_array->type()->ToString(); + message << ">"; + return message.str(); + })) { + auto arrow_dictionary_encoded_array = + (*arrow_dictionary_encoded_datum).make_array(); + auto dictionary_encoded_array = + garrow_array_new_raw(&arrow_dictionary_encoded_array); return GARROW_DICTIONARY_ARRAY(dictionary_encoded_array); } else { return NULL; @@ -4600,14 +4802,17 @@ garrow_array_dictionary_encode(GArrowArray *array, GError **error) * Since: 0.13.0 */ gint64 -garrow_array_count(GArrowArray *array, GArrowCountOptions *options, GError **error) +garrow_array_count(GArrowArray *array, + GArrowCountOptions *options, + GError **error) { auto arrow_array = garrow_array_get_raw(array); auto arrow_array_raw = arrow_array.get(); arrow::Result arrow_counted_datum; if (options) { auto arrow_options = garrow_count_options_get_raw(options); - arrow_counted_datum = arrow::compute::Count(*arrow_array_raw, *arrow_options); + arrow_counted_datum = + arrow::compute::Count(*arrow_array_raw, *arrow_options); } else { arrow_counted_datum = arrow::compute::Count(*arrow_array_raw); } @@ -4633,7 +4838,8 @@ garrow_array_count(GArrowArray *array, GArrowCountOptions *options, GError **err * Since: 0.13.0 */ GArrowStructArray * -garrow_array_count_values(GArrowArray *array, GError **error) +garrow_array_count_values(GArrowArray *array, + GError **error) { auto arrow_array = garrow_array_get_raw(array); auto arrow_counted_values = arrow::compute::ValueCounts(arrow_array); @@ -4645,6 +4851,7 @@ garrow_array_count_values(GArrowArray *array, GError **error) } } + /** * garrow_boolean_array_invert: * @array: A #GArrowBooleanArray. @@ -4657,7 +4864,8 @@ garrow_array_count_values(GArrowArray *array, GError **error) * Since: 0.13.0 */ GArrowBooleanArray * -garrow_boolean_array_invert(GArrowBooleanArray *array, GError **error) +garrow_boolean_array_invert(GArrowBooleanArray *array, + GError **error) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto arrow_inverted_datum = arrow::compute::Invert(arrow_array); @@ -4753,6 +4961,7 @@ garrow_boolean_array_xor(GArrowBooleanArray *left, } } + /** * garrow_numeric_array_mean: * @array: A #GArrowNumericArray. @@ -4763,7 +4972,8 @@ garrow_boolean_array_xor(GArrowBooleanArray *left, * Since: 0.13.0 */ gdouble -garrow_numeric_array_mean(GArrowNumericArray *array, GError **error) +garrow_numeric_array_mean(GArrowNumericArray *array, + GError **error) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); auto arrow_mean_datum = arrow::compute::Mean(arrow_array); @@ -4781,6 +4991,7 @@ garrow_numeric_array_mean(GArrowNumericArray *array, GError **error) } } + /** * garrow_int8_array_sum: * @array: A #GArrowInt8Array. @@ -4792,9 +5003,13 @@ garrow_numeric_array_mean(GArrowNumericArray *array, GError **error) * Since: 0.13.0 */ gint64 -garrow_int8_array_sum(GArrowInt8Array *array, GError **error) +garrow_int8_array_sum(GArrowInt8Array *array, + GError **error) { - return garrow_numeric_array_sum(array, error, "[int8-array][sum]", 0); + return garrow_numeric_array_sum(array, + error, + "[int8-array][sum]", + 0); } /** @@ -4808,7 +5023,8 @@ garrow_int8_array_sum(GArrowInt8Array *array, GError **error) * Since: 0.13.0 */ guint64 -garrow_uint8_array_sum(GArrowUInt8Array *array, GError **error) +garrow_uint8_array_sum(GArrowUInt8Array *array, + GError **error) { return garrow_numeric_array_sum(array, error, @@ -4827,7 +5043,8 @@ garrow_uint8_array_sum(GArrowUInt8Array *array, GError **error) * Since: 0.13.0 */ gint64 -garrow_int16_array_sum(GArrowInt16Array *array, GError **error) +garrow_int16_array_sum(GArrowInt16Array *array, + GError **error) { return garrow_numeric_array_sum(array, error, @@ -4846,7 +5063,8 @@ garrow_int16_array_sum(GArrowInt16Array *array, GError **error) * Since: 0.13.0 */ guint64 -garrow_uint16_array_sum(GArrowUInt16Array *array, GError **error) +garrow_uint16_array_sum(GArrowUInt16Array *array, + GError **error) { return garrow_numeric_array_sum(array, error, @@ -4865,7 +5083,8 @@ garrow_uint16_array_sum(GArrowUInt16Array *array, GError **error) * Since: 0.13.0 */ gint64 -garrow_int32_array_sum(GArrowInt32Array *array, GError **error) +garrow_int32_array_sum(GArrowInt32Array *array, + GError **error) { return garrow_numeric_array_sum(array, error, @@ -4884,12 +5103,13 @@ garrow_int32_array_sum(GArrowInt32Array *array, GError **error) * Since: 0.13.0 */ guint64 -garrow_uint32_array_sum(GArrowUInt32Array *array, GError **error) +garrow_uint32_array_sum(GArrowUInt32Array *array, + GError **error) { return garrow_numeric_array_sum(array, - error, - "[uint32-array][sum]", - 0); + error, + "[uint32-array][sum]", + 0); } /** @@ -4903,7 +5123,8 @@ garrow_uint32_array_sum(GArrowUInt32Array *array, GError **error) * Since: 0.13.0 */ gint64 -garrow_int64_array_sum(GArrowInt64Array *array, GError **error) +garrow_int64_array_sum(GArrowInt64Array *array, + GError **error) { return garrow_numeric_array_sum(array, error, @@ -4922,12 +5143,13 @@ garrow_int64_array_sum(GArrowInt64Array *array, GError **error) * Since: 0.13.0 */ guint64 -garrow_uint64_array_sum(GArrowUInt64Array *array, GError **error) +garrow_uint64_array_sum(GArrowUInt64Array *array, + GError **error) { return garrow_numeric_array_sum(array, - error, - "[uint64-array][sum]", - 0); + error, + "[uint64-array][sum]", + 0); } /** @@ -4941,7 +5163,8 @@ garrow_uint64_array_sum(GArrowUInt64Array *array, GError **error) * Since: 0.13.0 */ gdouble -garrow_float_array_sum(GArrowFloatArray *array, GError **error) +garrow_float_array_sum(GArrowFloatArray *array, + GError **error) { return garrow_numeric_array_sum(array, error, @@ -4960,7 +5183,8 @@ garrow_float_array_sum(GArrowFloatArray *array, GError **error) * Since: 0.13.0 */ gdouble -garrow_double_array_sum(GArrowDoubleArray *array, GError **error) +garrow_double_array_sum(GArrowDoubleArray *array, + GError **error) { return garrow_numeric_array_sum(array, error, @@ -5199,7 +5423,7 @@ garrow_record_batch_take(GArrowRecordBatch *record_batch, * @options: (nullable): A #GArrowFilterOptions. * @error: (nullable): Return location for a #GError or %NULL. * - * Returns: (nullable) (transfer full): The #GArrowArray filtered + * Returns: (nullable) (transfer full): The #GArrowArray filterd * with a boolean selection filter. Nulls in the filter will * result in nulls in the output. * @@ -5216,10 +5440,12 @@ garrow_array_filter(GArrowArray *array, arrow::Result arrow_filtered_datum; if (options) { auto arrow_options = garrow_filter_options_get_raw(options); - arrow_filtered_datum = - arrow::compute::Filter(arrow_array, arrow_filter, *arrow_options); + arrow_filtered_datum = arrow::compute::Filter(arrow_array, + arrow_filter, + *arrow_options); } else { - arrow_filtered_datum = arrow::compute::Filter(arrow_array, arrow_filter); + arrow_filtered_datum = arrow::compute::Filter(arrow_array, + arrow_filter); } if (garrow::check(error, arrow_filtered_datum, "[array][filter]")) { auto arrow_filtered_array = (*arrow_filtered_datum).make_array(); @@ -5242,7 +5468,9 @@ garrow_array_filter(GArrowArray *array, * Since: 0.15.0 */ GArrowBooleanArray * -garrow_array_is_in(GArrowArray *left, GArrowArray *right, GError **error) +garrow_array_is_in(GArrowArray *left, + GArrowArray *right, + GError **error) { auto arrow_left = garrow_array_get_raw(left); auto arrow_right = garrow_array_get_raw(right); @@ -5275,7 +5503,9 @@ garrow_array_is_in_chunked_array(GArrowArray *left, auto arrow_left = garrow_array_get_raw(left); auto arrow_right = garrow_chunked_array_get_raw(right); auto arrow_is_in_datum = arrow::compute::IsIn(arrow_left, arrow_right); - if (garrow::check(error, arrow_is_in_datum, "[array][is-in][chunked-array]")) { + if (garrow::check(error, + arrow_is_in_datum, + "[array][is-in][chunked-array]")) { auto arrow_is_in_array = (*arrow_is_in_datum).make_array(); return GARROW_BOOLEAN_ARRAY(garrow_array_new_raw(&arrow_is_in_array)); } else { @@ -5295,12 +5525,15 @@ garrow_array_is_in_chunked_array(GArrowArray *left, * Since: 3.0.0 */ GArrowUInt64Array * -garrow_array_sort_indices(GArrowArray *array, GArrowSortOrder order, GError **error) +garrow_array_sort_indices(GArrowArray *array, + GArrowSortOrder order, + GError **error) { auto arrow_array = garrow_array_get_raw(array); auto arrow_array_raw = arrow_array.get(); auto arrow_order = static_cast(order); - auto arrow_indices_array = arrow::compute::SortIndices(*arrow_array_raw, arrow_order); + auto arrow_indices_array = + arrow::compute::SortIndices(*arrow_array_raw, arrow_order); if (garrow::check(error, arrow_indices_array, "[array][sort-indices]")) { return GARROW_UINT64_ARRAY(garrow_array_new_raw(&(*arrow_indices_array))); } else { @@ -5321,7 +5554,8 @@ garrow_array_sort_indices(GArrowArray *array, GArrowSortOrder order, GError **er * Deprecated: 3.0.0: Use garrow_array_sort_indices() instead. */ GArrowUInt64Array * -garrow_array_sort_to_indices(GArrowArray *array, GError **error) +garrow_array_sort_to_indices(GArrowArray *array, + GError **error) { return garrow_array_sort_indices(array, GARROW_SORT_ORDER_ASCENDING, error); } @@ -5347,7 +5581,9 @@ garrow_chunked_array_sort_indices(GArrowChunkedArray *chunked_array, auto arrow_order = static_cast(order); auto arrow_indices_array = arrow::compute::SortIndices(*arrow_chunked_array_raw, arrow_order); - if (garrow::check(error, arrow_indices_array, "[chunked-array][sort-indices]")) { + if (garrow::check(error, + arrow_indices_array, + "[chunked-array][sort-indices]")) { return GARROW_UINT64_ARRAY(garrow_array_new_raw(&(*arrow_indices_array))); } else { return NULL; @@ -5374,8 +5610,11 @@ garrow_record_batch_sort_indices(GArrowRecordBatch *record_batch, auto arrow_record_batch_raw = arrow_record_batch.get(); auto arrow_options = garrow_sort_options_get_raw(options); auto arrow_indices_array = - arrow::compute::SortIndices(::arrow::Datum(*arrow_record_batch_raw), *arrow_options); - if (garrow::check(error, arrow_indices_array, "[record-batch][sort-indices]")) { + arrow::compute::SortIndices(::arrow::Datum(*arrow_record_batch_raw), + *arrow_options); + if (garrow::check(error, + arrow_indices_array, + "[record-batch][sort-indices]")) { return GARROW_UINT64_ARRAY(garrow_array_new_raw(&(*arrow_indices_array))); } else { return NULL; @@ -5394,14 +5633,19 @@ garrow_record_batch_sort_indices(GArrowRecordBatch *record_batch, * Since: 3.0.0 */ GArrowUInt64Array * -garrow_table_sort_indices(GArrowTable *table, GArrowSortOptions *options, GError **error) +garrow_table_sort_indices(GArrowTable *table, + GArrowSortOptions *options, + GError **error) { auto arrow_table = garrow_table_get_raw(table); auto arrow_table_raw = arrow_table.get(); auto arrow_options = garrow_sort_options_get_raw(options); auto arrow_indices_array = - arrow::compute::SortIndices(::arrow::Datum(*arrow_table_raw), *arrow_options); - if (garrow::check(error, arrow_indices_array, "[table][sort-indices]")) { + arrow::compute::SortIndices(::arrow::Datum(*arrow_table_raw), + *arrow_options); + if (garrow::check(error, + arrow_indices_array, + "[table][sort-indices]")) { return GARROW_UINT64_ARRAY(garrow_array_new_raw(&(*arrow_indices_array))); } else { return NULL; @@ -5415,7 +5659,7 @@ garrow_table_sort_indices(GArrowTable *table, GArrowSortOptions *options, GError * @options: (nullable): A #GArrowFilterOptions. * @error: (nullable): Return location for a #GError or %NULL. * - * Returns: (nullable) (transfer full): The #GArrowTable filtered + * Returns: (nullable) (transfer full): The #GArrowTable filterd * with a boolean selection filter. Nulls in the filter will * result in nulls in the output. * @@ -5432,10 +5676,12 @@ garrow_table_filter(GArrowTable *table, arrow::Result arrow_filtered_datum; if (options) { auto arrow_options = garrow_filter_options_get_raw(options); - arrow_filtered_datum = - arrow::compute::Filter(arrow_table, arrow_filter, *arrow_options); + arrow_filtered_datum = arrow::compute::Filter(arrow_table, + arrow_filter, + *arrow_options); } else { - arrow_filtered_datum = arrow::compute::Filter(arrow_table, arrow_filter); + arrow_filtered_datum = arrow::compute::Filter(arrow_table, + arrow_filter); } if (garrow::check(error, arrow_filtered_datum, "[table][filter]")) { auto arrow_filtered_table = (*arrow_filtered_datum).table(); @@ -5452,7 +5698,7 @@ garrow_table_filter(GArrowTable *table, * @options: (nullable): A #GArrowFilterOptions. * @error: (nullable): Return location for a #GError or %NULL. * - * Returns: (nullable) (transfer full): The #GArrowTable filtered + * Returns: (nullable) (transfer full): The #GArrowTable filterd * with a chunked array filter. Nulls in the filter will * result in nulls in the output. * @@ -5469,12 +5715,16 @@ garrow_table_filter_chunked_array(GArrowTable *table, arrow::Result arrow_filtered_datum; if (options) { auto arrow_options = garrow_filter_options_get_raw(options); - arrow_filtered_datum = - arrow::compute::Filter(arrow_table, arrow_filter, *arrow_options); + arrow_filtered_datum = arrow::compute::Filter(arrow_table, + arrow_filter, + *arrow_options); } else { - arrow_filtered_datum = arrow::compute::Filter(arrow_table, arrow_filter); + arrow_filtered_datum = arrow::compute::Filter(arrow_table, + arrow_filter); } - if (garrow::check(error, arrow_filtered_datum, "[table][filter][chunked-array]")) { + if (garrow::check(error, + arrow_filtered_datum, + "[table][filter][chunked-array]")) { auto arrow_filtered_table = (*arrow_filtered_datum).table(); return garrow_table_new_raw(&arrow_filtered_table); } else { @@ -5489,7 +5739,7 @@ garrow_table_filter_chunked_array(GArrowTable *table, * @options: (nullable): A #GArrowFilterOptions. * @error: (nullable): Return location for a #GError or %NULL. * - * Returns: (nullable) (transfer full): The #GArrowChunkedArray filtered + * Returns: (nullable) (transfer full): The #GArrowChunkedArray filterd * with a boolean selection filter. Nulls in the filter will * result in nulls in the output. * @@ -5506,10 +5756,12 @@ garrow_chunked_array_filter(GArrowChunkedArray *chunked_array, arrow::Result arrow_filtered_datum; if (options) { auto arrow_options = garrow_filter_options_get_raw(options); - arrow_filtered_datum = - arrow::compute::Filter(arrow_chunked_array, arrow_filter, *arrow_options); + arrow_filtered_datum = arrow::compute::Filter(arrow_chunked_array, + arrow_filter, + *arrow_options); } else { - arrow_filtered_datum = arrow::compute::Filter(arrow_chunked_array, arrow_filter); + arrow_filtered_datum = arrow::compute::Filter(arrow_chunked_array, + arrow_filter); } if (garrow::check(error, arrow_filtered_datum, "[chunked-array][filter]")) { auto arrow_filtered_chunked_array = (*arrow_filtered_datum).chunked_array(); @@ -5526,7 +5778,7 @@ garrow_chunked_array_filter(GArrowChunkedArray *chunked_array, * @options: (nullable): A #GArrowFilterOptions. * @error: (nullable): Return location for a #GError or %NULL. * - * Returns: (nullable) (transfer full): The #GArrowChunkedArray filtered + * Returns: (nullable) (transfer full): The #GArrowChunkedArray filterd * with a chunked array filter. Nulls in the filter will * result in nulls in the output. * @@ -5543,10 +5795,12 @@ garrow_chunked_array_filter_chunked_array(GArrowChunkedArray *chunked_array, arrow::Result arrow_filtered_datum; if (options) { auto arrow_options = garrow_filter_options_get_raw(options); - arrow_filtered_datum = - arrow::compute::Filter(arrow_chunked_array, arrow_filter, *arrow_options); + arrow_filtered_datum = arrow::compute::Filter(arrow_chunked_array, + arrow_filter, + *arrow_options); } else { - arrow_filtered_datum = arrow::compute::Filter(arrow_chunked_array, arrow_filter); + arrow_filtered_datum = arrow::compute::Filter(arrow_chunked_array, + arrow_filter); } if (garrow::check(error, arrow_filtered_datum, @@ -5565,7 +5819,7 @@ garrow_chunked_array_filter_chunked_array(GArrowChunkedArray *chunked_array, * @options: (nullable): A #GArrowFilterOptions. * @error: (nullable): Return location for a #GError or %NULL. * - * Returns: (nullable) (transfer full): The #GArrowRecordBatch filtered + * Returns: (nullable) (transfer full): The #GArrowRecordBatch filterd * with a boolean selection filter. Nulls in the filter will * result in nulls in the output. * @@ -5582,10 +5836,12 @@ garrow_record_batch_filter(GArrowRecordBatch *record_batch, arrow::Result arrow_filtered_datum; if (options) { auto arrow_options = garrow_filter_options_get_raw(options); - arrow_filtered_datum = - arrow::compute::Filter(arrow_record_batch, arrow_filter, *arrow_options); + arrow_filtered_datum = arrow::compute::Filter(arrow_record_batch, + arrow_filter, + *arrow_options); } else { - arrow_filtered_datum = arrow::compute::Filter(arrow_record_batch, arrow_filter); + arrow_filtered_datum = arrow::compute::Filter(arrow_record_batch, + arrow_filter); } if (garrow::check(error, arrow_filtered_datum, "[record-batch][filter]")) { auto arrow_filtered_record_batch = (*arrow_filtered_datum).record_batch(); @@ -5595,8 +5851,7 @@ garrow_record_batch_filter(GArrowRecordBatch *record_batch, } } -struct GArrowRunEndEncodeOptionsPrivate -{ +struct GArrowRunEndEncodeOptionsPrivate { GArrowDataType *run_end_data_type; }; @@ -5608,9 +5863,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowRunEndEncodeOptions, garrow_run_end_encode_options, GARROW_TYPE_FUNCTION_OPTIONS) -#define GARROW_RUN_END_ENCODE_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_run_end_encode_options_get_instance_private( \ +#define GARROW_RUN_END_ENCODE_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_run_end_encode_options_get_instance_private( \ GARROW_RUN_END_ENCODE_OPTIONS(object))) static void @@ -5693,6 +5948,7 @@ garrow_run_end_encode_options_class_init(GArrowRunEndEncodeOptionsClass *klass) gobject_class->set_property = garrow_run_end_encode_options_set_property; gobject_class->get_property = garrow_run_end_encode_options_get_property; + GParamSpec *spec; /** * GArrowRunEndEncodeOptions:run-end-data-type: @@ -5729,8 +5985,7 @@ garrow_run_end_encode_options_new(GArrowDataType *run_end_data_type) need_run_end_data_type_unref = true; } auto options = g_object_new(GARROW_TYPE_RUN_END_ENCODE_OPTIONS, - "run-end-data-type", - run_end_data_type, + "run-end-data-type", run_end_data_type, NULL); if (need_run_end_data_type_unref) { g_object_unref(run_end_data_type); @@ -5762,17 +6017,22 @@ garrow_array_run_end_encode(GArrowArray *array, arrow_run_end_encoded_datum_result = arrow::compute::RunEndEncode(arrow_array, *arrow_options); } else { - arrow_run_end_encoded_datum_result = arrow::compute::RunEndEncode(arrow_array); - } - if (garrow::check(error, arrow_run_end_encoded_datum_result, [&]() { - std::stringstream message; - message << "[array][run-end-encode] <"; - message << arrow_array->type()->ToString(); - message << ">"; - return message.str(); - })) { - auto arrow_run_end_encoded_array = (*arrow_run_end_encoded_datum_result).make_array(); - auto run_end_encoded_array = garrow_array_new_raw(&arrow_run_end_encoded_array); + arrow_run_end_encoded_datum_result = + arrow::compute::RunEndEncode(arrow_array); + } + if (garrow::check(error, + arrow_run_end_encoded_datum_result, + [&]() { + std::stringstream message; + message << "[array][run-end-encode] <"; + message << arrow_array->type()->ToString(); + message << ">"; + return message.str(); + })) { + auto arrow_run_end_encoded_array = + (*arrow_run_end_encoded_datum_result).make_array(); + auto run_end_encoded_array = + garrow_array_new_raw(&arrow_run_end_encoded_array); return GARROW_RUN_END_ENCODED_ARRAY(run_end_encoded_array); } else { return nullptr; @@ -5791,17 +6051,21 @@ garrow_array_run_end_encode(GArrowArray *array, * Since: 13.0.0 */ GArrowArray * -garrow_run_end_encoded_array_decode(GArrowRunEndEncodedArray *array, GError **error) +garrow_run_end_encoded_array_decode(GArrowRunEndEncodedArray *array, + GError **error) { auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto arrow_decoded_datum_result = arrow::compute::RunEndDecode(arrow_array); - if (garrow::check(error, arrow_decoded_datum_result, [&]() { - std::stringstream message; - message << "[run-end-encoded-array][decode] <"; - message << arrow_array->type()->ToString(); - message << ">"; - return message.str(); - })) { + auto arrow_decoded_datum_result = + arrow::compute::RunEndDecode(arrow_array); + if (garrow::check(error, + arrow_decoded_datum_result, + [&]() { + std::stringstream message; + message << "[run-end-encoded-array][decode] <"; + message << arrow_array->type()->ToString(); + message << ">"; + return message.str(); + })) { auto arrow_decoded_array = (*arrow_decoded_datum_result).make_array(); return garrow_array_new_raw(&arrow_decoded_array); } else { @@ -5809,524 +6073,20 @@ garrow_run_end_encoded_array_decode(GArrowRunEndEncodedArray *array, GError **er } } -enum { - PROP_STRPTIME_OPTIONS_FORMAT = 1, - PROP_STRPTIME_OPTIONS_UNIT, - PROP_STRPTIME_OPTIONS_ERROR_IS_NULL, -}; +G_END_DECLS -G_DEFINE_TYPE(GArrowStrptimeOptions, - garrow_strptime_options, - GARROW_TYPE_FUNCTION_OPTIONS) -static void -garrow_strptime_options_set_property(GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) +arrow::Result +garrow_field_reference_resolve_raw(const gchar *reference) { - auto options = garrow_strptime_options_get_raw(GARROW_STRPTIME_OPTIONS(object)); - - switch (prop_id) { - case PROP_STRPTIME_OPTIONS_FORMAT: - options->format = g_value_get_string(value); - break; - case PROP_STRPTIME_OPTIONS_UNIT: - options->unit = - garrow_time_unit_to_raw(static_cast(g_value_get_enum(value))); - break; - case PROP_STRPTIME_OPTIONS_ERROR_IS_NULL: - options->error_is_null = g_value_get_boolean(value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); - break; + if (reference && (reference[0] == '.' || reference[0] == '[')) { + return arrow::FieldRef::FromDotPath(reference); + } else { + arrow::FieldRef arrow_reference(reference); + return arrow_reference; } } -static void -garrow_strptime_options_get_property(GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - auto options = garrow_strptime_options_get_raw(GARROW_STRPTIME_OPTIONS(object)); - - switch (prop_id) { - case PROP_STRPTIME_OPTIONS_FORMAT: - g_value_set_string(value, options->format.c_str()); - break; - case PROP_STRPTIME_OPTIONS_UNIT: - g_value_set_enum(value, garrow_time_unit_from_raw(options->unit)); - break; - case PROP_STRPTIME_OPTIONS_ERROR_IS_NULL: - g_value_set_boolean(value, options->error_is_null); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); - break; - } -} - -static void -garrow_strptime_options_init(GArrowStrptimeOptions *object) -{ - auto priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object); - priv->options = - static_cast(new arrow::compute::StrptimeOptions()); -} - -static void -garrow_strptime_options_class_init(GArrowStrptimeOptionsClass *klass) -{ - auto gobject_class = G_OBJECT_CLASS(klass); - - gobject_class->set_property = garrow_strptime_options_set_property; - gobject_class->get_property = garrow_strptime_options_get_property; - - arrow::compute::StrptimeOptions options; - - GParamSpec *spec; - /** - * GArrowStrptimeOptions:format: - * - * The desired format string. - * - * Since: 16.0.0 - */ - spec = g_param_spec_string("format", - "Format", - "The desired format string", - options.format.c_str(), - static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_STRPTIME_OPTIONS_FORMAT, spec); - - /** - * GArrowStrptimeOptions:unit: - * - * The desired time resolution. - * - * Since: 16.0.0 - */ - spec = g_param_spec_enum("unit", - "Unit", - "The desired time resolution", - GARROW_TYPE_TIME_UNIT, - garrow_time_unit_from_raw(options.unit), - static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_STRPTIME_OPTIONS_UNIT, spec); - - /** - * GArrowStrptimeOptions:error-is-null: - * - * Return null on parsing errors if true or raise if false. - * - * Since: 16.0.0 - */ - spec = g_param_spec_boolean("error-is-null", - "Error is null", - "Return null on parsing errors if true or raise if false", - options.error_is_null, - static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, - PROP_STRPTIME_OPTIONS_ERROR_IS_NULL, - spec); -} - -/** - * garrow_strptime_options_new: - * - * Returns: A newly created #GArrowStrptimeOptions. - * - * Since: 16.0.0 - */ -GArrowStrptimeOptions * -garrow_strptime_options_new(void) -{ - auto options = g_object_new(GARROW_TYPE_STRPTIME_OPTIONS, NULL); - return GARROW_STRPTIME_OPTIONS(options); -} - -enum { - PROP_STRFTIME_OPTIONS_FORMAT = 1, - PROP_STRFTIME_OPTIONS_LOCALE, -}; - -G_DEFINE_TYPE(GArrowStrftimeOptions, - garrow_strftime_options, - GARROW_TYPE_FUNCTION_OPTIONS) - -static void -garrow_strftime_options_set_property(GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - auto options = garrow_strftime_options_get_raw(GARROW_STRFTIME_OPTIONS(object)); - - switch (prop_id) { - case PROP_STRFTIME_OPTIONS_FORMAT: - options->format = g_value_get_string(value); - break; - case PROP_STRFTIME_OPTIONS_LOCALE: - options->locale = g_value_get_string(value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); - break; - } -} - -static void -garrow_strftime_options_get_property(GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - auto options = garrow_strftime_options_get_raw(GARROW_STRFTIME_OPTIONS(object)); - - switch (prop_id) { - case PROP_STRFTIME_OPTIONS_FORMAT: - g_value_set_string(value, options->format.c_str()); - break; - case PROP_STRFTIME_OPTIONS_LOCALE: - g_value_set_string(value, options->locale.c_str()); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); - break; - } -} - -static void -garrow_strftime_options_init(GArrowStrftimeOptions *object) -{ - auto priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object); - priv->options = - static_cast(new arrow::compute::StrftimeOptions()); -} - -static void -garrow_strftime_options_class_init(GArrowStrftimeOptionsClass *klass) -{ - auto gobject_class = G_OBJECT_CLASS(klass); - - gobject_class->set_property = garrow_strftime_options_set_property; - gobject_class->get_property = garrow_strftime_options_get_property; - - arrow::compute::StrftimeOptions options; - - GParamSpec *spec; - /** - * GArrowStrftimeOptions:format: - * - * The desired format string. - * - * Since: 16.0.0 - */ - spec = g_param_spec_string("format", - "Format", - "The desired format string", - options.format.c_str(), - static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_STRFTIME_OPTIONS_FORMAT, spec); - - /** - * GArrowStrftimeOptions:locale: - * - * The desired output locale string. - * - * Since: 16.0.0 - */ - spec = g_param_spec_string("locale", - "locale", - "The desired output locale string", - options.locale.c_str(), - static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_STRFTIME_OPTIONS_LOCALE, spec); -} - -/** - * garrow_strftime_options_new: - * - * Returns: A newly created #GArrowStrftimeOptions. - * - * Since: 16.0.0 - */ -GArrowStrftimeOptions * -garrow_strftime_options_new(void) -{ - auto options = g_object_new(GARROW_TYPE_STRFTIME_OPTIONS, NULL); - return GARROW_STRFTIME_OPTIONS(options); -} - -enum { - PROP_SPLIT_PATTERN_OPTIONS_PATTERN = 1, - PROP_SPLIT_PATTERN_OPTIONS_MAX_SPLITS, - PROP_SPLIT_PATTERN_OPTIONS_REVERSE, -}; - -G_DEFINE_TYPE(GArrowSplitPatternOptions, - garrow_split_pattern_options, - GARROW_TYPE_FUNCTION_OPTIONS) - -static void -garrow_split_pattern_options_set_property(GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - auto options = - garrow_split_pattern_options_get_raw(GARROW_SPLIT_PATTERN_OPTIONS(object)); - - switch (prop_id) { - case PROP_SPLIT_PATTERN_OPTIONS_PATTERN: - options->pattern = g_value_get_string(value); - break; - case PROP_SPLIT_PATTERN_OPTIONS_MAX_SPLITS: - options->max_splits = g_value_get_int64(value); - break; - case PROP_SPLIT_PATTERN_OPTIONS_REVERSE: - options->reverse = g_value_get_boolean(value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); - break; - } -} - -static void -garrow_split_pattern_options_get_property(GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - auto options = - garrow_split_pattern_options_get_raw(GARROW_SPLIT_PATTERN_OPTIONS(object)); - - switch (prop_id) { - case PROP_SPLIT_PATTERN_OPTIONS_PATTERN: - g_value_set_string(value, options->pattern.c_str()); - break; - case PROP_SPLIT_PATTERN_OPTIONS_MAX_SPLITS: - g_value_set_int64(value, options->max_splits); - break; - case PROP_SPLIT_PATTERN_OPTIONS_REVERSE: - g_value_set_boolean(value, options->reverse); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); - break; - } -} - -static void -garrow_split_pattern_options_init(GArrowSplitPatternOptions *object) -{ - auto priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object); - priv->options = static_cast( - new arrow::compute::SplitPatternOptions()); -} - -static void -garrow_split_pattern_options_class_init(GArrowSplitPatternOptionsClass *klass) -{ - auto gobject_class = G_OBJECT_CLASS(klass); - - gobject_class->set_property = garrow_split_pattern_options_set_property; - gobject_class->get_property = garrow_split_pattern_options_get_property; - - arrow::compute::SplitPatternOptions options; - - GParamSpec *spec; - /** - * GArrowSplitPatternOptions:pattern: - * - * The exact substring to split on. - * - * Since: 16.0.0 - */ - spec = g_param_spec_string("pattern", - "Pattern", - "The exact substring to split on", - options.pattern.c_str(), - static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, - PROP_SPLIT_PATTERN_OPTIONS_PATTERN, - spec); - - /** - * GArrowSplitPatternOptions:max_splits: - * - * Maximum number of splits allowed, or unlimited when -1. - * - * Since: 16.0.0 - */ - spec = g_param_spec_int64("max_splits", - "Max splits", - "Maximum number of splits allowed, or unlimited when -1", - G_MININT64, - G_MAXINT64, - options.max_splits, - static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, - PROP_SPLIT_PATTERN_OPTIONS_MAX_SPLITS, - spec); - - /** - * GArrowSplitPatternOptions:reverse: - * - * Start splitting from the end of the string (only relevant when - * max_splits != -1) - * - * Since: 16.0.0 - */ - spec = g_param_spec_boolean( - "reverse", - "Reverse", - "Start splitting from the end of the string (only relevant when max_splits != -1)", - options.reverse, - static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, - PROP_SPLIT_PATTERN_OPTIONS_REVERSE, - spec); -} - -/** - * garrow_split_pattern_options_new: - * - * Returns: A newly created #GArrowSplitPatternOptions. - * - * Since: 16.0.0 - */ -GArrowSplitPatternOptions * -garrow_split_pattern_options_new(void) -{ - auto options = g_object_new(GARROW_TYPE_SPLIT_PATTERN_OPTIONS, NULL); - return GARROW_SPLIT_PATTERN_OPTIONS(options); -} - -enum { - PROP_STRUCT_FIELD_OPTIONS_FIELD_REF = 1, -}; - -G_DEFINE_TYPE(GArrowStructFieldOptions, - garrow_struct_field_options, - GARROW_TYPE_FUNCTION_OPTIONS) - -/** - * garrow_struct_field_options_set_field_ref: - * @field_ref: The name or dot path specifying what to extract from struct or - * union. - * - * Since: 16.0.0 - */ -void -garrow_struct_field_options_set_field_ref(GArrowStructFieldOptions *options, - const gchar *field_ref, - GError **error) -{ - auto arrow_options = - garrow_struct_field_options_get_raw(GARROW_STRUCT_FIELD_OPTIONS(options)); - - auto arrow_reference_result = garrow_field_reference_resolve_raw(field_ref); - if (!garrow::check(error, - arrow_reference_result, - "[struct-field-options][set-field-ref]")) { - return; - } - arrow_options->field_ref = *arrow_reference_result; -} - -static void -garrow_struct_field_options_get_property(GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - auto options = garrow_struct_field_options_get_raw(GARROW_STRUCT_FIELD_OPTIONS(object)); - - switch (prop_id) { - case PROP_STRUCT_FIELD_OPTIONS_FIELD_REF: - { - auto name = options->field_ref.name(); - if (name) { - g_value_set_string(value, name->c_str()); - } else { - g_value_set_string(value, options->field_ref.ToDotPath().c_str()); - } - } - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); - break; - } -} - -static void -garrow_struct_field_options_init(GArrowStructFieldOptions *object) -{ - auto priv = GARROW_FUNCTION_OPTIONS_GET_PRIVATE(object); - priv->options = static_cast( - new arrow::compute::StructFieldOptions()); -} - -static void -garrow_struct_field_options_class_init(GArrowStructFieldOptionsClass *klass) -{ - auto gobject_class = G_OBJECT_CLASS(klass); - - gobject_class->get_property = garrow_struct_field_options_get_property; - - GParamSpec *spec; - /** - * GArrowStructFieldOptions:field_ref: - * - * The name or dot path specifying what to extract from struct or union. - * - * dot_path = '.' name - * | '[' digit+ ']' - * | dot_path+ - * - * Since: 16.0.0 - */ - spec = g_param_spec_string( - "field_ref", - "Field ref", - "The name or dot path specifying what to extract from struct or union.", - "", - static_cast(G_PARAM_READABLE)); - g_object_class_install_property(gobject_class, - PROP_STRUCT_FIELD_OPTIONS_FIELD_REF, - spec); -} - -/** - * garrow_struct_field_options_new: - * - * Returns: A newly created #GArrowStructFieldOptions. - * - * Since: 16.0.0 - */ -GArrowStructFieldOptions * -garrow_struct_field_options_new(void) -{ - auto options = g_object_new(GARROW_TYPE_STRUCT_FIELD_OPTIONS, NULL); - return GARROW_STRUCT_FIELD_OPTIONS(options); -} - -G_END_DECLS - -arrow::Result -garrow_field_reference_resolve_raw(const gchar *reference) -{ - if (reference && (reference[0] == '.' || reference[0] == '[')) { - return arrow::FieldRef::FromDotPath(reference); - } else { - arrow::FieldRef arrow_reference(reference); - return arrow_reference; - } -} arrow::compute::ExecContext * garrow_execute_context_get_raw(GArrowExecuteContext *context) @@ -6335,8 +6095,10 @@ garrow_execute_context_get_raw(GArrowExecuteContext *context) return &priv->context; } + GArrowFunctionOptions * -garrow_function_options_new_raw(const arrow::compute::FunctionOptions *arrow_options) +garrow_function_options_new_raw( + const arrow::compute::FunctionOptions *arrow_options) { std::string_view arrow_type_name(arrow_options->type_name()); if (arrow_type_name == "CastOptions") { @@ -6399,12 +6161,14 @@ garrow_function_options_new_raw(const arrow::compute::FunctionOptions *arrow_opt } else if (arrow_type_name == "MatchSubstringOptions") { const auto arrow_match_substring_options = static_cast(arrow_options); - auto options = garrow_match_substring_options_new_raw(arrow_match_substring_options); + auto options = + garrow_match_substring_options_new_raw(arrow_match_substring_options); return GARROW_FUNCTION_OPTIONS(options); } else if (arrow_type_name == "UTF8NormalizedOptions") { const auto arrow_utf8_normalize_options = static_cast(arrow_options); - auto options = garrow_utf8_normalize_options_new_raw(arrow_utf8_normalize_options); + auto options = garrow_utf8_normalize_options_new_raw( + arrow_utf8_normalize_options); return GARROW_FUNCTION_OPTIONS(options); } else if (arrow_type_name == "QuantileOptions") { const auto arrow_quantile_options = @@ -6424,30 +6188,12 @@ garrow_function_options_new_raw(const arrow::compute::FunctionOptions *arrow_opt } else if (arrow_type_name == "RunEndEncodeOptions") { const auto arrow_run_end_encode_options = static_cast(arrow_options); - auto options = garrow_run_end_encode_options_new_raw(arrow_run_end_encode_options); - return GARROW_FUNCTION_OPTIONS(options); - } else if (arrow_type_name == "StrptimeOptions") { - const auto arrow_strptime_options = - static_cast(arrow_options); - auto options = garrow_strptime_options_new_raw(arrow_strptime_options); - return GARROW_FUNCTION_OPTIONS(options); - } else if (arrow_type_name == "StrftimeOptions") { - const auto arrow_strftime_options = - static_cast(arrow_options); - auto options = garrow_strftime_options_new_raw(arrow_strftime_options); - return GARROW_FUNCTION_OPTIONS(options); - } else if (arrow_type_name == "SplitPatternOptions") { - const auto arrow_split_pattern_options = - static_cast(arrow_options); - auto options = garrow_split_pattern_options_new_raw(arrow_split_pattern_options); - return GARROW_FUNCTION_OPTIONS(options); - } else if (arrow_type_name == "StructFieldOptions") { - const auto arrow_struct_field_options = - static_cast(arrow_options); - auto options = garrow_struct_field_options_new_raw(arrow_struct_field_options); + auto options = + garrow_run_end_encode_options_new_raw(arrow_run_end_encode_options); return GARROW_FUNCTION_OPTIONS(options); } else { - auto options = g_object_new(GARROW_TYPE_FUNCTION_OPTIONS, NULL); + auto options = g_object_new(GARROW_TYPE_FUNCTION_OPTIONS, + NULL); return GARROW_FUNCTION_OPTIONS(options); } } @@ -6459,11 +6205,13 @@ garrow_function_options_get_raw(GArrowFunctionOptions *options) return priv->options; } + GArrowFunctionDoc * garrow_function_doc_new_raw(const arrow::compute::FunctionDoc *arrow_doc) { - return GARROW_FUNCTION_DOC( - g_object_new(GARROW_TYPE_FUNCTION_DOC, "doc", arrow_doc, NULL)); + return GARROW_FUNCTION_DOC(g_object_new(GARROW_TYPE_FUNCTION_DOC, + "doc", arrow_doc, + NULL)); } arrow::compute::FunctionDoc * @@ -6473,11 +6221,14 @@ garrow_function_doc_get_raw(GArrowFunctionDoc *doc) return priv->doc; } + GArrowFunction * -garrow_function_new_raw(std::shared_ptr *arrow_function) +garrow_function_new_raw( + std::shared_ptr *arrow_function) { - return GARROW_FUNCTION( - g_object_new(GARROW_TYPE_FUNCTION, "function", arrow_function, NULL)); + return GARROW_FUNCTION(g_object_new(GARROW_TYPE_FUNCTION, + "function", arrow_function, + NULL)); } std::shared_ptr @@ -6487,11 +6238,15 @@ garrow_function_get_raw(GArrowFunction *function) return priv->function; } + GArrowExecuteNodeOptions * -garrow_execute_node_options_new_raw(arrow::acero::ExecNodeOptions *arrow_options) +garrow_execute_node_options_new_raw( + arrow::acero::ExecNodeOptions *arrow_options) { return GARROW_EXECUTE_NODE_OPTIONS( - g_object_new(GARROW_TYPE_EXECUTE_NODE_OPTIONS, "options", arrow_options, NULL)); + g_object_new(GARROW_TYPE_EXECUTE_NODE_OPTIONS, + "options", arrow_options, + NULL)); } arrow::acero::ExecNodeOptions * @@ -6501,12 +6256,15 @@ garrow_execute_node_options_get_raw(GArrowExecuteNodeOptions *options) return priv->options; } + GArrowExecuteNode * garrow_execute_node_new_raw(arrow::acero::ExecNode *arrow_node, GArrowExecuteNodeOptions *options) { - return GARROW_EXECUTE_NODE( - g_object_new(GARROW_TYPE_EXECUTE_NODE, "node", arrow_node, "options", options, NULL)); + return GARROW_EXECUTE_NODE(g_object_new(GARROW_TYPE_EXECUTE_NODE, + "node", arrow_node, + "options", options, + NULL)); } arrow::acero::ExecNode * @@ -6516,6 +6274,7 @@ garrow_execute_node_get_raw(GArrowExecuteNode *node) return priv->node; } + std::shared_ptr garrow_execute_plan_get_raw(GArrowExecutePlan *plan) { @@ -6523,6 +6282,7 @@ garrow_execute_plan_get_raw(GArrowExecutePlan *plan) return priv->plan; } + GArrowCastOptions * garrow_cast_options_new_raw(const arrow::compute::CastOptions *arrow_options) { @@ -6531,22 +6291,16 @@ garrow_cast_options_new_raw(const arrow::compute::CastOptions *arrow_options) auto arrow_to_data_type = arrow_options->to_type.GetSharedPtr(); to_data_type = garrow_data_type_new_raw(&arrow_to_data_type); } - auto options = g_object_new(GARROW_TYPE_CAST_OPTIONS, - "to-data-type", - to_data_type, - "allow-int-overflow", - arrow_options->allow_int_overflow, - "allow-time-truncate", - arrow_options->allow_time_truncate, - "allow-time-overflow", - arrow_options->allow_time_overflow, - "allow-decimal-truncate", - arrow_options->allow_decimal_truncate, - "allow-float-truncate", - arrow_options->allow_float_truncate, - "allow-invalid-utf8", - arrow_options->allow_invalid_utf8, - NULL); + auto options = + g_object_new(GARROW_TYPE_CAST_OPTIONS, + "to-data-type", to_data_type, + "allow-int-overflow", arrow_options->allow_int_overflow, + "allow-time-truncate", arrow_options->allow_time_truncate, + "allow-time-overflow", arrow_options->allow_time_overflow, + "allow-decimal-truncate", arrow_options->allow_decimal_truncate, + "allow-float-truncate", arrow_options->allow_float_truncate, + "allow-invalid-utf8", arrow_options->allow_invalid_utf8, + NULL); return GARROW_CAST_OPTIONS(options); } @@ -6557,16 +6311,16 @@ garrow_cast_options_get_raw(GArrowCastOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowScalarAggregateOptions * garrow_scalar_aggregate_options_new_raw( const arrow::compute::ScalarAggregateOptions *arrow_options) { - auto options = g_object_new(GARROW_TYPE_SCALAR_AGGREGATE_OPTIONS, - "skip-nulls", - arrow_options->skip_nulls, - "min-count", - arrow_options->min_count, - NULL); + auto options = + g_object_new(GARROW_TYPE_SCALAR_AGGREGATE_OPTIONS, + "skip-nulls", arrow_options->skip_nulls, + "min-count", arrow_options->min_count, + NULL); return GARROW_SCALAR_AGGREGATE_OPTIONS(options); } @@ -6577,11 +6331,14 @@ garrow_scalar_aggregate_options_get_raw(GArrowScalarAggregateOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowCountOptions * -garrow_count_options_new_raw(const arrow::compute::CountOptions *arrow_options) +garrow_count_options_new_raw( + const arrow::compute::CountOptions *arrow_options) { - auto options = - g_object_new(GARROW_TYPE_COUNT_OPTIONS, "mode", arrow_options->mode, NULL); + auto options = g_object_new(GARROW_TYPE_COUNT_OPTIONS, + "mode", arrow_options->mode, + NULL); return GARROW_COUNT_OPTIONS(options); } @@ -6592,13 +6349,16 @@ garrow_count_options_get_raw(GArrowCountOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowFilterOptions * -garrow_filter_options_new_raw(const arrow::compute::FilterOptions *arrow_options) +garrow_filter_options_new_raw( + const arrow::compute::FilterOptions *arrow_options) { - auto options = g_object_new(GARROW_TYPE_FILTER_OPTIONS, - "null-selection-behavior", - arrow_options->null_selection_behavior, - NULL); + auto options = + g_object_new(GARROW_TYPE_FILTER_OPTIONS, + "null-selection-behavior", + arrow_options->null_selection_behavior, + NULL); return GARROW_FILTER_OPTIONS(options); } @@ -6609,10 +6369,13 @@ garrow_filter_options_get_raw(GArrowFilterOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowTakeOptions * -garrow_take_options_new_raw(const arrow::compute::TakeOptions *arrow_options) +garrow_take_options_new_raw( + const arrow::compute::TakeOptions *arrow_options) { - auto options = GARROW_TAKE_OPTIONS(g_object_new(GARROW_TYPE_TAKE_OPTIONS, NULL)); + auto options = + GARROW_TAKE_OPTIONS(g_object_new(GARROW_TYPE_TAKE_OPTIONS, NULL)); /* TODO: Use property when we add support for boundscheck. */ auto arrow_new_options = garrow_take_options_get_raw(options); arrow_new_options->boundscheck = arrow_options->boundscheck; @@ -6626,11 +6389,14 @@ garrow_take_options_get_raw(GArrowTakeOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowArraySortOptions * -garrow_array_sort_options_new_raw(const arrow::compute::ArraySortOptions *arrow_options) +garrow_array_sort_options_new_raw( + const arrow::compute::ArraySortOptions *arrow_options) { - auto options = - g_object_new(GARROW_TYPE_ARRAY_SORT_OPTIONS, "order", arrow_options->order, NULL); + auto options = g_object_new(GARROW_TYPE_ARRAY_SORT_OPTIONS, + "order", arrow_options->order, + NULL); return GARROW_ARRAY_SORT_OPTIONS(options); } @@ -6641,6 +6407,7 @@ garrow_array_sort_options_get_raw(GArrowArraySortOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowSortKey * garrow_sort_key_new_raw(const arrow::compute::SortKey &arrow_sort_key) { @@ -6657,10 +6424,14 @@ garrow_sort_key_get_raw(GArrowSortKey *sort_key) return &(priv->sort_key); } + GArrowSortOptions * -garrow_sort_options_new_raw(const arrow::compute::SortOptions *arrow_options) +garrow_sort_options_new_raw( + const arrow::compute::SortOptions *arrow_options) { - auto options = GARROW_SORT_OPTIONS(g_object_new(GARROW_TYPE_SORT_OPTIONS, NULL)); + auto options = + GARROW_SORT_OPTIONS(g_object_new(GARROW_TYPE_SORT_OPTIONS, + NULL)); auto arrow_new_options = garrow_sort_options_get_raw(options); arrow_new_options->sort_keys = arrow_options->sort_keys; /* TODO: Use property when we add support for null_placement. */ @@ -6676,19 +6447,19 @@ garrow_sort_options_get_raw(GArrowSortOptions *options) } GArrowSetLookupOptions * -garrow_set_lookup_options_new_raw(const arrow::compute::SetLookupOptions *arrow_options) +garrow_set_lookup_options_new_raw( + const arrow::compute::SetLookupOptions *arrow_options) { auto arrow_copied_options = arrow_options->Copy(); auto arrow_copied_set_lookup_options = - static_cast(arrow_copied_options.get()); - auto value_set = garrow_datum_new_raw(&(arrow_copied_set_lookup_options->value_set)); - auto skip_nulls = - (arrow_options->skip_nulls.has_value() && arrow_options->skip_nulls.value()); + static_cast( + arrow_copied_options.get()); + auto value_set = + garrow_datum_new_raw(&(arrow_copied_set_lookup_options->value_set)); + auto skip_nulls = (arrow_options->skip_nulls.has_value() && arrow_options->skip_nulls.value()); auto options = g_object_new(GARROW_TYPE_SET_LOOKUP_OPTIONS, - "value-set", - value_set, - "skip-nulls", - skip_nulls, + "value-set", value_set, + "skip-nulls", skip_nulls, NULL); return GARROW_SET_LOOKUP_OPTIONS(options); } @@ -6700,16 +6471,15 @@ garrow_set_lookup_options_get_raw(GArrowSetLookupOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowVarianceOptions * -garrow_variance_options_new_raw(const arrow::compute::VarianceOptions *arrow_options) +garrow_variance_options_new_raw( + const arrow::compute::VarianceOptions *arrow_options) { auto options = g_object_new(GARROW_TYPE_VARIANCE_OPTIONS, - "ddof", - arrow_options->ddof, - "skip-nulls", - arrow_options->skip_nulls, - "min-count", - arrow_options->min_count, + "ddof", arrow_options->ddof, + "skip-nulls", arrow_options->skip_nulls, + "min-count", arrow_options->min_count, NULL); return GARROW_VARIANCE_OPTIONS(options); } @@ -6721,15 +6491,16 @@ garrow_variance_options_get_raw(GArrowVarianceOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowRoundOptions * -garrow_round_options_new_raw(const arrow::compute::RoundOptions *arrow_options) -{ - auto options = g_object_new(GARROW_TYPE_ROUND_OPTIONS, - "n-digits", - arrow_options->ndigits, - "mode", - static_cast(arrow_options->round_mode), - NULL); +garrow_round_options_new_raw( + const arrow::compute::RoundOptions *arrow_options) +{ + auto options = g_object_new( + GARROW_TYPE_ROUND_OPTIONS, + "n-digits", arrow_options->ndigits, + "mode", static_cast(arrow_options->round_mode), + NULL); return GARROW_ROUND_OPTIONS(options); } @@ -6740,21 +6511,22 @@ garrow_round_options_get_raw(GArrowRoundOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowRoundToMultipleOptions * garrow_round_to_multiple_options_new_raw( const arrow::compute::RoundToMultipleOptions *arrow_options) { auto arrow_copied_options = arrow_options->Copy(); auto arrow_copied_round_to_multiple_options = - static_cast(arrow_copied_options.get()); + static_cast( + arrow_copied_options.get()); auto multiple = garrow_scalar_new_raw(&(arrow_copied_round_to_multiple_options->multiple)); - auto options = g_object_new(GARROW_TYPE_ROUND_TO_MULTIPLE_OPTIONS, - "multiple", - multiple, - "mode", - static_cast(arrow_options->round_mode), - NULL); + auto options = + g_object_new(GARROW_TYPE_ROUND_TO_MULTIPLE_OPTIONS, + "multiple", multiple, + "mode", static_cast(arrow_options->round_mode), + NULL); g_object_unref(multiple); return GARROW_ROUND_TO_MULTIPLE_OPTIONS(options); } @@ -6766,16 +6538,16 @@ garrow_round_to_multiple_options_get_raw(GArrowRoundToMultipleOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowMatchSubstringOptions * garrow_match_substring_options_new_raw( const arrow::compute::MatchSubstringOptions *arrow_options) { - return GARROW_MATCH_SUBSTRING_OPTIONS(g_object_new(GARROW_TYPE_MATCH_SUBSTRING_OPTIONS, - "pattern", - arrow_options->pattern.c_str(), - "ignore-case", - arrow_options->ignore_case, - NULL)); + return GARROW_MATCH_SUBSTRING_OPTIONS( + g_object_new(GARROW_TYPE_MATCH_SUBSTRING_OPTIONS, + "pattern", arrow_options->pattern.c_str(), + "ignore-case", arrow_options->ignore_case, + NULL)); } arrow::compute::MatchSubstringOptions * @@ -6785,12 +6557,14 @@ garrow_match_substring_options_get_raw(GArrowMatchSubstringOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowUTF8NormalizeOptions * garrow_utf8_normalize_options_new_raw( const arrow::compute::Utf8NormalizeOptions *arrow_options) { - auto options = - g_object_new(GARROW_TYPE_UTF8_NORMALIZE_FORM, "form", arrow_options->form, NULL); + auto options = g_object_new(GARROW_TYPE_UTF8_NORMALIZE_FORM, + "form", arrow_options->form, + NULL); return GARROW_UTF8_NORMALIZE_OPTIONS(options); } @@ -6801,17 +6575,18 @@ garrow_utf8_normalize_options_get_raw(GArrowUTF8NormalizeOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowQuantileOptions * -garrow_quantile_options_new_raw(const arrow::compute::QuantileOptions *arrow_options) -{ - auto options = GARROW_QUANTILE_OPTIONS(g_object_new(GARROW_TYPE_QUANTILE_OPTIONS, - "interpolation", - arrow_options->interpolation, - "skip-nulls", - arrow_options->skip_nulls, - "min-count", - arrow_options->min_count, - NULL)); +garrow_quantile_options_new_raw( + const arrow::compute::QuantileOptions *arrow_options) +{ + auto options = + GARROW_QUANTILE_OPTIONS( + g_object_new(GARROW_TYPE_QUANTILE_OPTIONS, + "interpolation", arrow_options->interpolation, + "skip-nulls", arrow_options->skip_nulls, + "min-count", arrow_options->min_count, + NULL)); garrow_quantile_options_set_qs(options, arrow_options->q.data(), arrow_options->q.size()); @@ -6825,6 +6600,7 @@ garrow_quantile_options_get_raw(GArrowQuantileOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowIndexOptions * garrow_index_options_new_raw(const arrow::compute::IndexOptions *arrow_options) { @@ -6834,7 +6610,10 @@ garrow_index_options_new_raw(const arrow::compute::IndexOptions *arrow_options) value = garrow_scalar_new_raw(&arrow_value); } auto options = - GARROW_INDEX_OPTIONS(g_object_new(GARROW_TYPE_INDEX_OPTIONS, "value", value, NULL)); + GARROW_INDEX_OPTIONS( + g_object_new(GARROW_TYPE_INDEX_OPTIONS, + "value", value, + NULL)); if (value) { g_object_unref(value); } @@ -6848,15 +6627,15 @@ garrow_index_options_get_raw(GArrowIndexOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowRankOptions * garrow_rank_options_new_raw(const arrow::compute::RankOptions *arrow_options) { - auto options = GARROW_RANK_OPTIONS(g_object_new(GARROW_TYPE_RANK_OPTIONS, - "null-placement", - arrow_options->null_placement, - "tiebreaker", - arrow_options->tiebreaker, - nullptr)); + auto options = GARROW_RANK_OPTIONS( + g_object_new(GARROW_TYPE_RANK_OPTIONS, + "null-placement", arrow_options->null_placement, + "tiebreaker", arrow_options->tiebreaker, + nullptr)); auto arrow_new_options = garrow_rank_options_get_raw(options); arrow_new_options->sort_keys = arrow_options->sort_keys; return options; @@ -6869,6 +6648,7 @@ garrow_rank_options_get_raw(GArrowRankOptions *options) garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } + GArrowRunEndEncodeOptions * garrow_run_end_encode_options_new_raw( const arrow::compute::RunEndEncodeOptions *arrow_options) @@ -6887,80 +6667,3 @@ garrow_run_end_encode_options_get_raw(GArrowRunEndEncodeOptions *options) return static_cast( garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); } - -GArrowStrptimeOptions * -garrow_strptime_options_new_raw(const arrow::compute::StrptimeOptions *arrow_options) -{ - return GARROW_STRPTIME_OPTIONS(g_object_new(GARROW_TYPE_STRPTIME_OPTIONS, - "format", - arrow_options->format.c_str(), - "unit", - arrow_options->unit, - "error_is_null", - arrow_options->error_is_null, - NULL)); -} - -arrow::compute::StrptimeOptions * -garrow_strptime_options_get_raw(GArrowStrptimeOptions *options) -{ - return static_cast( - garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); -} - -GArrowStrftimeOptions * -garrow_strftime_options_new_raw(const arrow::compute::StrftimeOptions *arrow_options) -{ - return GARROW_STRFTIME_OPTIONS(g_object_new(GARROW_TYPE_STRFTIME_OPTIONS, - "format", - arrow_options->format.c_str(), - "locale", - arrow_options->locale.c_str(), - NULL)); -} - -arrow::compute::StrftimeOptions * -garrow_strftime_options_get_raw(GArrowStrftimeOptions *options) -{ - return static_cast( - garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); -} - -GArrowSplitPatternOptions * -garrow_split_pattern_options_new_raw( - const arrow::compute::SplitPatternOptions *arrow_options) -{ - return GARROW_SPLIT_PATTERN_OPTIONS(g_object_new(GARROW_TYPE_SPLIT_PATTERN_OPTIONS, - "pattern", - arrow_options->pattern.c_str(), - "max_splits", - arrow_options->max_splits, - "reverse", - arrow_options->reverse, - NULL)); -} - -arrow::compute::SplitPatternOptions * -garrow_split_pattern_options_get_raw(GArrowSplitPatternOptions *options) -{ - return static_cast( - garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); -} - -GArrowStructFieldOptions * -garrow_struct_field_options_new_raw( - const arrow::compute::StructFieldOptions *arrow_options) -{ - auto options = - GARROW_STRUCT_FIELD_OPTIONS(g_object_new(GARROW_TYPE_STRUCT_FIELD_OPTIONS, NULL)); - auto arrow_new_options = garrow_struct_field_options_get_raw(options); - arrow_new_options->field_ref = arrow_options->field_ref; - return options; -} - -arrow::compute::StructFieldOptions * -garrow_struct_field_options_get_raw(GArrowStructFieldOptions *options) -{ - return static_cast( - garrow_function_options_get_raw(GARROW_FUNCTION_OPTIONS(options))); -} diff --git a/c_glib/arrow-glib/compute.h b/c_glib/arrow-glib/compute.h index 54b0ddb014f..008ae2a7838 100644 --- a/c_glib/arrow-glib/compute.h +++ b/c_glib/arrow-glib/compute.h @@ -26,17 +26,19 @@ G_BEGIN_DECLS #define GARROW_TYPE_EXECUTE_CONTEXT (garrow_execute_context_get_type()) -GARROW_AVAILABLE_IN_1_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowExecuteContext, garrow_execute_context, GARROW, EXECUTE_CONTEXT, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowExecuteContext, + garrow_execute_context, + GARROW, + EXECUTE_CONTEXT, + GObject) struct _GArrowExecuteContextClass { GObjectClass parent_class; }; GARROW_AVAILABLE_IN_1_0 -GArrowExecuteContext * -garrow_execute_context_new(void); +GArrowExecuteContext *garrow_execute_context_new(void); + GARROW_AVAILABLE_IN_7_0 gboolean @@ -46,10 +48,13 @@ GARROW_AVAILABLE_IN_7_0 gchar * garrow_function_options_to_string(GArrowFunctionOptions *options); + #define GARROW_TYPE_FUNCTION_DOC (garrow_function_doc_get_type()) -GARROW_AVAILABLE_IN_6_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowFunctionDoc, garrow_function_doc, GARROW, FUNCTION_DOC, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowFunctionDoc, + garrow_function_doc, + GARROW, + FUNCTION_DOC, + GObject) struct _GArrowFunctionDocClass { GObjectClass parent_class; @@ -68,29 +73,31 @@ GARROW_AVAILABLE_IN_6_0 gchar * garrow_function_doc_get_options_class_name(GArrowFunctionDoc *doc); + #define GARROW_TYPE_FUNCTION (garrow_function_get_type()) -GARROW_AVAILABLE_IN_1_0 -G_DECLARE_DERIVABLE_TYPE(GArrowFunction, garrow_function, GARROW, FUNCTION, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowFunction, + garrow_function, + GARROW, + FUNCTION, + GObject) struct _GArrowFunctionClass { GObjectClass parent_class; }; + GARROW_AVAILABLE_IN_1_0 -GArrowFunction * -garrow_function_find(const gchar *name); +GArrowFunction *garrow_function_find(const gchar *name); GARROW_AVAILABLE_IN_7_0 -GList * -garrow_function_all(void); +GList *garrow_function_all(void); GARROW_AVAILABLE_IN_1_0 -GArrowDatum * -garrow_function_execute(GArrowFunction *function, - GList *args, - GArrowFunctionOptions *options, - GArrowExecuteContext *context, - GError **error); +GArrowDatum *garrow_function_execute(GArrowFunction *function, + GList *args, + GArrowFunctionOptions *options, + GArrowExecuteContext *context, + GError **error); GARROW_AVAILABLE_IN_7_0 const gchar * @@ -107,13 +114,14 @@ garrow_function_get_options_type(GArrowFunction *function); GARROW_AVAILABLE_IN_7_0 gboolean -garrow_function_equal(GArrowFunction *function, GArrowFunction *other_function); +garrow_function_equal(GArrowFunction *function, + GArrowFunction *other_function); GARROW_AVAILABLE_IN_7_0 gchar * garrow_function_to_string(GArrowFunction *function); + #define GARROW_TYPE_EXECUTE_NODE_OPTIONS (garrow_execute_node_options_get_type()) -GARROW_AVAILABLE_IN_6_0 G_DECLARE_DERIVABLE_TYPE(GArrowExecuteNodeOptions, garrow_execute_node_options, GARROW, @@ -124,8 +132,8 @@ struct _GArrowExecuteNodeOptionsClass GObjectClass parent_class; }; + #define GARROW_TYPE_SOURCE_NODE_OPTIONS (garrow_source_node_options_get_type()) -GARROW_AVAILABLE_IN_6_0 G_DECLARE_DERIVABLE_TYPE(GArrowSourceNodeOptions, garrow_source_node_options, GARROW, @@ -138,7 +146,8 @@ struct _GArrowSourceNodeOptionsClass GARROW_AVAILABLE_IN_6_0 GArrowSourceNodeOptions * -garrow_source_node_options_new_record_batch_reader(GArrowRecordBatchReader *reader); +garrow_source_node_options_new_record_batch_reader( + GArrowRecordBatchReader *reader); GARROW_AVAILABLE_IN_6_0 GArrowSourceNodeOptions * garrow_source_node_options_new_record_batch(GArrowRecordBatch *record_batch); @@ -146,8 +155,8 @@ GARROW_AVAILABLE_IN_6_0 GArrowSourceNodeOptions * garrow_source_node_options_new_table(GArrowTable *table); + #define GARROW_TYPE_FILTER_NODE_OPTIONS (garrow_filter_node_options_get_type()) -GARROW_AVAILABLE_IN_12_0 G_DECLARE_DERIVABLE_TYPE(GArrowFilterNodeOptions, garrow_filter_node_options, GARROW, @@ -162,8 +171,8 @@ GARROW_AVAILABLE_IN_12_0 GArrowFilterNodeOptions * garrow_filter_node_options_new(GArrowExpression *expression); + #define GARROW_TYPE_PROJECT_NODE_OPTIONS (garrow_project_node_options_get_type()) -GARROW_AVAILABLE_IN_11_0 G_DECLARE_DERIVABLE_TYPE(GArrowProjectNodeOptions, garrow_project_node_options, GARROW, @@ -176,12 +185,17 @@ struct _GArrowProjectNodeOptionsClass GARROW_AVAILABLE_IN_11_0 GArrowProjectNodeOptions * -garrow_project_node_options_new(GList *expressions, gchar **names, gsize n_names); +garrow_project_node_options_new(GList *expressions, + gchar **names, + gsize n_names); + #define GARROW_TYPE_AGGREGATION (garrow_aggregation_get_type()) -GARROW_AVAILABLE_IN_6_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowAggregation, garrow_aggregation, GARROW, AGGREGATION, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowAggregation, + garrow_aggregation, + GARROW, + AGGREGATION, + GObject) struct _GArrowAggregationClass { GObjectClass parent_class; @@ -194,8 +208,8 @@ garrow_aggregation_new(const gchar *function, const gchar *input, const gchar *output); -#define GARROW_TYPE_AGGREGATE_NODE_OPTIONS (garrow_aggregate_node_options_get_type()) -GARROW_AVAILABLE_IN_6_0 +#define GARROW_TYPE_AGGREGATE_NODE_OPTIONS \ + (garrow_aggregate_node_options_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowAggregateNodeOptions, garrow_aggregate_node_options, GARROW, @@ -213,8 +227,8 @@ garrow_aggregate_node_options_new(GList *aggregations, gsize n_keys, GError **error); + #define GARROW_TYPE_SINK_NODE_OPTIONS (garrow_sink_node_options_get_type()) -GARROW_AVAILABLE_IN_6_0 G_DECLARE_DERIVABLE_TYPE(GArrowSinkNodeOptions, garrow_sink_node_options, GARROW, @@ -230,7 +244,9 @@ GArrowSinkNodeOptions * garrow_sink_node_options_new(void); GARROW_AVAILABLE_IN_6_0 GArrowRecordBatchReader * -garrow_sink_node_options_get_reader(GArrowSinkNodeOptions *options, GArrowSchema *schema); +garrow_sink_node_options_get_reader(GArrowSinkNodeOptions *options, + GArrowSchema *schema); + /** * GArrowJoinType: @@ -258,8 +274,8 @@ typedef enum { GARROW_JOIN_TYPE_FULL_OUTER, } GArrowJoinType; -#define GARROW_TYPE_HASH_JOIN_NODE_OPTIONS (garrow_hash_join_node_options_get_type()) -GARROW_AVAILABLE_IN_7_0 +#define GARROW_TYPE_HASH_JOIN_NODE_OPTIONS \ + (garrow_hash_join_node_options_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowHashJoinNodeOptions, garrow_hash_join_node_options, GARROW, @@ -280,21 +296,26 @@ garrow_hash_join_node_options_new(GArrowJoinType type, GError **error); GARROW_AVAILABLE_IN_7_0 gboolean -garrow_hash_join_node_options_set_left_outputs(GArrowHashJoinNodeOptions *options, - const gchar **outputs, - gsize n_outputs, - GError **error); +garrow_hash_join_node_options_set_left_outputs( + GArrowHashJoinNodeOptions *options, + const gchar **outputs, + gsize n_outputs, + GError **error); GARROW_AVAILABLE_IN_7_0 gboolean -garrow_hash_join_node_options_set_right_outputs(GArrowHashJoinNodeOptions *options, - const gchar **outputs, - gsize n_outputs, - GError **error); +garrow_hash_join_node_options_set_right_outputs( + GArrowHashJoinNodeOptions *options, + const gchar **outputs, + gsize n_outputs, + GError **error); + #define GARROW_TYPE_EXECUTE_NODE (garrow_execute_node_get_type()) -GARROW_AVAILABLE_IN_6_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowExecuteNode, garrow_execute_node, GARROW, EXECUTE_NODE, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowExecuteNode, + garrow_execute_node, + GARROW, + EXECUTE_NODE, + GObject) struct _GArrowExecuteNodeClass { GObjectClass parent_class; @@ -307,10 +328,13 @@ GARROW_AVAILABLE_IN_6_0 GArrowSchema * garrow_execute_node_get_output_schema(GArrowExecuteNode *node); + #define GARROW_TYPE_EXECUTE_PLAN (garrow_execute_plan_get_type()) -GARROW_AVAILABLE_IN_6_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowExecutePlan, garrow_execute_plan, GARROW, EXECUTE_PLAN, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowExecutePlan, + garrow_execute_plan, + GARROW, + EXECUTE_PLAN, + GObject) struct _GArrowExecutePlanClass { GObjectClass parent_class; @@ -367,7 +391,8 @@ GList * garrow_execute_plan_get_nodes(GArrowExecutePlan *plan); GARROW_AVAILABLE_IN_6_0 gboolean -garrow_execute_plan_validate(GArrowExecutePlan *plan, GError **error); +garrow_execute_plan_validate(GArrowExecutePlan *plan, + GError **error); GARROW_AVAILABLE_IN_6_0 void garrow_execute_plan_start(GArrowExecutePlan *plan); @@ -376,14 +401,15 @@ void garrow_execute_plan_stop(GArrowExecutePlan *plan); GARROW_AVAILABLE_IN_6_0 gboolean -garrow_execute_plan_wait(GArrowExecutePlan *plan, GError **error); +garrow_execute_plan_wait(GArrowExecutePlan *plan, + GError **error); -GARROW_AVAILABLE_IN_ALL -GArrowCastOptions * -garrow_cast_options_new(void); -#define GARROW_TYPE_SCALAR_AGGREGATE_OPTIONS (garrow_scalar_aggregate_options_get_type()) -GARROW_AVAILABLE_IN_5_0 +GArrowCastOptions *garrow_cast_options_new(void); + + +#define GARROW_TYPE_SCALAR_AGGREGATE_OPTIONS \ + (garrow_scalar_aggregate_options_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowScalarAggregateOptions, garrow_scalar_aggregate_options, GARROW, @@ -416,9 +442,11 @@ typedef enum { } GArrowCountMode; #define GARROW_TYPE_COUNT_OPTIONS (garrow_count_options_get_type()) -GARROW_AVAILABLE_IN_6_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowCountOptions, garrow_count_options, GARROW, COUNT_OPTIONS, GArrowFunctionOptions) +G_DECLARE_DERIVABLE_TYPE(GArrowCountOptions, + garrow_count_options, + GARROW, + COUNT_OPTIONS, + GArrowFunctionOptions) struct _GArrowCountOptionsClass { GArrowFunctionOptionsClass parent_class; @@ -428,6 +456,7 @@ GARROW_AVAILABLE_IN_6_0 GArrowCountOptions * garrow_count_options_new(void); + /** * GArrowFilterNullSelectionBehavior: * @GARROW_FILTER_NULL_SELECTION_DROP: @@ -444,7 +473,6 @@ typedef enum { } GArrowFilterNullSelectionBehavior; #define GARROW_TYPE_FILTER_OPTIONS (garrow_filter_options_get_type()) -GARROW_AVAILABLE_IN_0_17 G_DECLARE_DERIVABLE_TYPE(GArrowFilterOptions, garrow_filter_options, GARROW, @@ -459,10 +487,13 @@ GARROW_AVAILABLE_IN_0_17 GArrowFilterOptions * garrow_filter_options_new(void); + #define GARROW_TYPE_TAKE_OPTIONS (garrow_take_options_get_type()) -GARROW_AVAILABLE_IN_0_14 -G_DECLARE_DERIVABLE_TYPE( - GArrowTakeOptions, garrow_take_options, GARROW, TAKE_OPTIONS, GArrowFunctionOptions) +G_DECLARE_DERIVABLE_TYPE(GArrowTakeOptions, + garrow_take_options, + GARROW, + TAKE_OPTIONS, + GArrowFunctionOptions) struct _GArrowTakeOptionsClass { GArrowFunctionOptionsClass parent_class; @@ -472,6 +503,7 @@ GARROW_AVAILABLE_IN_0_14 GArrowTakeOptions * garrow_take_options_new(void); + /** * GArrowSortOrder: * @GARROW_SORT_ORDER_ASCENDING: Sort in ascending order. @@ -505,7 +537,6 @@ typedef enum /**/ { } GArrowNullPlacement; #define GARROW_TYPE_ARRAY_SORT_OPTIONS (garrow_array_sort_options_get_type()) -GARROW_AVAILABLE_IN_3_0 G_DECLARE_DERIVABLE_TYPE(GArrowArraySortOptions, garrow_array_sort_options, GARROW, @@ -524,9 +555,13 @@ gboolean garrow_array_sort_options_equal(GArrowArraySortOptions *options, GArrowArraySortOptions *other_options); + #define GARROW_TYPE_SORT_KEY (garrow_sort_key_get_type()) -GARROW_AVAILABLE_IN_3_0 -G_DECLARE_DERIVABLE_TYPE(GArrowSortKey, garrow_sort_key, GARROW, SORT_KEY, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowSortKey, + garrow_sort_key, + GARROW, + SORT_KEY, + GObject) struct _GArrowSortKeyClass { GObjectClass parent_class; @@ -534,16 +569,22 @@ struct _GArrowSortKeyClass GARROW_AVAILABLE_IN_3_0 GArrowSortKey * -garrow_sort_key_new(const gchar *target, GArrowSortOrder order, GError **error); +garrow_sort_key_new(const gchar *target, + GArrowSortOrder order, + GError **error); GARROW_AVAILABLE_IN_3_0 gboolean -garrow_sort_key_equal(GArrowSortKey *sort_key, GArrowSortKey *other_sort_key); +garrow_sort_key_equal(GArrowSortKey *sort_key, + GArrowSortKey *other_sort_key); + #define GARROW_TYPE_SORT_OPTIONS (garrow_sort_options_get_type()) -GARROW_AVAILABLE_IN_3_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowSortOptions, garrow_sort_options, GARROW, SORT_OPTIONS, GArrowFunctionOptions) +G_DECLARE_DERIVABLE_TYPE(GArrowSortOptions, + garrow_sort_options, + GARROW, + SORT_OPTIONS, + GArrowFunctionOptions) struct _GArrowSortOptionsClass { GArrowFunctionOptionsClass parent_class; @@ -554,19 +595,22 @@ GArrowSortOptions * garrow_sort_options_new(GList *sort_keys); GARROW_AVAILABLE_IN_3_0 gboolean -garrow_sort_options_equal(GArrowSortOptions *options, GArrowSortOptions *other_options); +garrow_sort_options_equal(GArrowSortOptions *options, + GArrowSortOptions *other_options); GARROW_AVAILABLE_IN_3_0 GList * garrow_sort_options_get_sort_keys(GArrowSortOptions *options); GARROW_AVAILABLE_IN_3_0 void -garrow_sort_options_set_sort_keys(GArrowSortOptions *options, GList *sort_keys); +garrow_sort_options_set_sort_keys(GArrowSortOptions *options, + GList *sort_keys); GARROW_AVAILABLE_IN_3_0 void -garrow_sort_options_add_sort_key(GArrowSortOptions *options, GArrowSortKey *sort_key); +garrow_sort_options_add_sort_key(GArrowSortOptions *options, + GArrowSortKey *sort_key); + #define GARROW_TYPE_SET_LOOKUP_OPTIONS (garrow_set_lookup_options_get_type()) -GARROW_AVAILABLE_IN_6_0 G_DECLARE_DERIVABLE_TYPE(GArrowSetLookupOptions, garrow_set_lookup_options, GARROW, @@ -581,8 +625,8 @@ GARROW_AVAILABLE_IN_6_0 GArrowSetLookupOptions * garrow_set_lookup_options_new(GArrowDatum *value_set); + #define GARROW_TYPE_VARIANCE_OPTIONS (garrow_variance_options_get_type()) -GARROW_AVAILABLE_IN_6_0 G_DECLARE_DERIVABLE_TYPE(GArrowVarianceOptions, garrow_variance_options, GARROW, @@ -597,6 +641,7 @@ GARROW_AVAILABLE_IN_6_0 GArrowVarianceOptions * garrow_variance_options_new(void); + /** * GArrowRoundMode: * @GARROW_ROUND_MODE_DOWN: @@ -642,10 +687,13 @@ typedef enum { GARROW_ROUND_HALF_TO_ODD, } GArrowRoundMode; + #define GARROW_TYPE_ROUND_OPTIONS (garrow_round_options_get_type()) -GARROW_AVAILABLE_IN_7_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowRoundOptions, garrow_round_options, GARROW, ROUND_OPTIONS, GArrowFunctionOptions) +G_DECLARE_DERIVABLE_TYPE(GArrowRoundOptions, + garrow_round_options, + GARROW, + ROUND_OPTIONS, + GArrowFunctionOptions) struct _GArrowRoundOptionsClass { GArrowFunctionOptionsClass parent_class; @@ -655,9 +703,9 @@ GARROW_AVAILABLE_IN_7_0 GArrowRoundOptions * garrow_round_options_new(void); -#define GARROW_TYPE_ROUND_TO_MULTIPLE_OPTIONS \ + +#define GARROW_TYPE_ROUND_TO_MULTIPLE_OPTIONS \ (garrow_round_to_multiple_options_get_type()) -GARROW_AVAILABLE_IN_7_0 G_DECLARE_DERIVABLE_TYPE(GArrowRoundToMultipleOptions, garrow_round_to_multiple_options, GARROW, @@ -672,8 +720,9 @@ GARROW_AVAILABLE_IN_7_0 GArrowRoundToMultipleOptions * garrow_round_to_multiple_options_new(void); -#define GARROW_TYPE_MATCH_SUBSTRING_OPTIONS (garrow_match_substring_options_get_type()) -GARROW_AVAILABLE_IN_12_0 + +#define GARROW_TYPE_MATCH_SUBSTRING_OPTIONS \ + (garrow_match_substring_options_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowMatchSubstringOptions, garrow_match_substring_options, GARROW, @@ -688,6 +737,7 @@ GARROW_AVAILABLE_IN_12_0 GArrowMatchSubstringOptions * garrow_match_substring_options_new(void); + /** * GArrowUTF8NormalizeForm: * @GARROW_UTF8_NORMALIZE_FORM_NFC: Normalization Form Canonical Composition. @@ -708,8 +758,8 @@ typedef enum /*< underscore_name=garrow_utf8_normalize_form >*/ { GARROW_UTF8_NORMALIZE_FORM_NFKD, } GArrowUTF8NormalizeForm; -#define GARROW_TYPE_UTF8_NORMALIZE_OPTIONS (garrow_utf8_normalize_options_get_type()) -GARROW_AVAILABLE_IN_8_0 +#define GARROW_TYPE_UTF8_NORMALIZE_OPTIONS \ + (garrow_utf8_normalize_options_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowUTF8NormalizeOptions, garrow_utf8_normalize_options, GARROW, @@ -724,6 +774,7 @@ GARROW_AVAILABLE_IN_8_0 GArrowUTF8NormalizeOptions * garrow_utf8_normalize_options_new(void); + /** * GArrowQuantileInterpolation: * @GARROW_QUANTILE_INTERPOLATION_LINEAR: Linear. @@ -745,8 +796,8 @@ typedef enum { GARROW_QUANTILE_INTERPOLATION_MIDPOINT, } GArrowQuantileInterpolation; -#define GARROW_TYPE_QUANTILE_OPTIONS (garrow_quantile_options_get_type()) -GARROW_AVAILABLE_IN_9_0 +#define GARROW_TYPE_QUANTILE_OPTIONS \ + (garrow_quantile_options_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowQuantileOptions, garrow_quantile_options, GARROW, @@ -762,20 +813,25 @@ GArrowQuantileOptions * garrow_quantile_options_new(void); GARROW_AVAILABLE_IN_9_0 const gdouble * -garrow_quantile_options_get_qs(GArrowQuantileOptions *options, gsize *n); +garrow_quantile_options_get_qs(GArrowQuantileOptions *options, + gsize *n); GARROW_AVAILABLE_IN_9_0 void -garrow_quantile_options_set_q(GArrowQuantileOptions *options, gdouble q); +garrow_quantile_options_set_q(GArrowQuantileOptions *options, + gdouble q); GARROW_AVAILABLE_IN_9_0 void garrow_quantile_options_set_qs(GArrowQuantileOptions *options, const gdouble *qs, gsize n); + #define GARROW_TYPE_INDEX_OPTIONS (garrow_index_options_get_type()) -GARROW_AVAILABLE_IN_12_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowIndexOptions, garrow_index_options, GARROW, INDEX_OPTIONS, GArrowFunctionOptions) +G_DECLARE_DERIVABLE_TYPE(GArrowIndexOptions, + garrow_index_options, + GARROW, + INDEX_OPTIONS, + GArrowFunctionOptions) struct _GArrowIndexOptionsClass { GArrowFunctionOptionsClass parent_class; @@ -785,6 +841,7 @@ GARROW_AVAILABLE_IN_12_0 GArrowIndexOptions * garrow_index_options_new(void); + /** * GArrowRankTiebreader: * @GARROW_RANK_TIEBREAKER_MIN: @@ -810,10 +867,13 @@ typedef enum { GARROW_RANK_TIEBREAKER_DENSE, } GArrowRankTiebreaker; -#define GARROW_TYPE_RANK_OPTIONS (garrow_rank_options_get_type()) -GARROW_AVAILABLE_IN_12_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowRankOptions, garrow_rank_options, GARROW, RANK_OPTIONS, GArrowFunctionOptions) +#define GARROW_TYPE_RANK_OPTIONS \ + (garrow_rank_options_get_type()) +G_DECLARE_DERIVABLE_TYPE(GArrowRankOptions, + garrow_rank_options, + GARROW, + RANK_OPTIONS, + GArrowFunctionOptions) struct _GArrowRankOptionsClass { GArrowFunctionOptionsClass parent_class; @@ -824,99 +884,92 @@ GArrowRankOptions * garrow_rank_options_new(void); GARROW_AVAILABLE_IN_12_0 gboolean -garrow_rank_options_equal(GArrowRankOptions *options, GArrowRankOptions *other_options); +garrow_rank_options_equal(GArrowRankOptions *options, + GArrowRankOptions *other_options); GARROW_AVAILABLE_IN_12_0 GList * garrow_rank_options_get_sort_keys(GArrowRankOptions *options); GARROW_AVAILABLE_IN_12_0 void -garrow_rank_options_set_sort_keys(GArrowRankOptions *options, GList *sort_keys); +garrow_rank_options_set_sort_keys(GArrowRankOptions *options, + GList *sort_keys); GARROW_AVAILABLE_IN_12_0 void -garrow_rank_options_add_sort_key(GArrowRankOptions *options, GArrowSortKey *sort_key); - -GARROW_AVAILABLE_IN_ALL -GArrowArray * -garrow_array_cast(GArrowArray *array, - GArrowDataType *target_data_type, - GArrowCastOptions *options, - GError **error); - -GARROW_AVAILABLE_IN_ALL -GArrowArray * -garrow_array_unique(GArrowArray *array, GError **error); +garrow_rank_options_add_sort_key(GArrowRankOptions *options, + GArrowSortKey *sort_key); -GARROW_AVAILABLE_IN_ALL -GArrowDictionaryArray * -garrow_array_dictionary_encode(GArrowArray *array, GError **error); +GArrowArray *garrow_array_cast(GArrowArray *array, + GArrowDataType *target_data_type, + GArrowCastOptions *options, + GError **error); +GArrowArray *garrow_array_unique(GArrowArray *array, + GError **error); +GArrowDictionaryArray *garrow_array_dictionary_encode(GArrowArray *array, + GError **error); GARROW_AVAILABLE_IN_0_13 -gint64 -garrow_array_count(GArrowArray *array, GArrowCountOptions *options, GError **error); - +gint64 garrow_array_count(GArrowArray *array, + GArrowCountOptions *options, + GError **error); GARROW_AVAILABLE_IN_0_13 -GArrowStructArray * -garrow_array_count_values(GArrowArray *array, GError **error); +GArrowStructArray *garrow_array_count_values(GArrowArray *array, + GError **error); GARROW_AVAILABLE_IN_0_13 -GArrowBooleanArray * -garrow_boolean_array_invert(GArrowBooleanArray *array, GError **error); +GArrowBooleanArray *garrow_boolean_array_invert(GArrowBooleanArray *array, + GError **error); GARROW_AVAILABLE_IN_0_13 -GArrowBooleanArray * -garrow_boolean_array_and(GArrowBooleanArray *left, - GArrowBooleanArray *right, - GError **error); +GArrowBooleanArray *garrow_boolean_array_and(GArrowBooleanArray *left, + GArrowBooleanArray *right, + GError **error); GARROW_AVAILABLE_IN_0_13 -GArrowBooleanArray * -garrow_boolean_array_or(GArrowBooleanArray *left, - GArrowBooleanArray *right, - GError **error); +GArrowBooleanArray *garrow_boolean_array_or(GArrowBooleanArray *left, + GArrowBooleanArray *right, + GError **error); GARROW_AVAILABLE_IN_0_13 -GArrowBooleanArray * -garrow_boolean_array_xor(GArrowBooleanArray *left, - GArrowBooleanArray *right, - GError **error); +GArrowBooleanArray *garrow_boolean_array_xor(GArrowBooleanArray *left, + GArrowBooleanArray *right, + GError **error); GARROW_AVAILABLE_IN_0_13 -gdouble -garrow_numeric_array_mean(GArrowNumericArray *array, GError **error); +gdouble garrow_numeric_array_mean(GArrowNumericArray *array, + GError **error); GARROW_AVAILABLE_IN_0_13 -gint64 -garrow_int8_array_sum(GArrowInt8Array *array, GError **error); +gint64 garrow_int8_array_sum(GArrowInt8Array *array, + GError **error); GARROW_AVAILABLE_IN_0_13 -guint64 -garrow_uint8_array_sum(GArrowUInt8Array *array, GError **error); +guint64 garrow_uint8_array_sum(GArrowUInt8Array *array, + GError **error); GARROW_AVAILABLE_IN_0_13 -gint64 -garrow_int16_array_sum(GArrowInt16Array *array, GError **error); +gint64 garrow_int16_array_sum(GArrowInt16Array *array, + GError **error); GARROW_AVAILABLE_IN_0_13 -guint64 -garrow_uint16_array_sum(GArrowUInt16Array *array, GError **error); +guint64 garrow_uint16_array_sum(GArrowUInt16Array *array, + GError **error); GARROW_AVAILABLE_IN_0_13 -gint64 -garrow_int32_array_sum(GArrowInt32Array *array, GError **error); +gint64 garrow_int32_array_sum(GArrowInt32Array *array, + GError **error); GARROW_AVAILABLE_IN_0_13 -guint64 -garrow_uint32_array_sum(GArrowUInt32Array *array, GError **error); +guint64 garrow_uint32_array_sum(GArrowUInt32Array *array, + GError **error); GARROW_AVAILABLE_IN_0_13 -gint64 -garrow_int64_array_sum(GArrowInt64Array *array, GError **error); +gint64 garrow_int64_array_sum(GArrowInt64Array *array, + GError **error); GARROW_AVAILABLE_IN_0_13 -guint64 -garrow_uint64_array_sum(GArrowUInt64Array *array, GError **error); +guint64 garrow_uint64_array_sum(GArrowUInt64Array *array, + GError **error); GARROW_AVAILABLE_IN_0_13 -gdouble -garrow_float_array_sum(GArrowFloatArray *array, GError **error); +gdouble garrow_float_array_sum(GArrowFloatArray *array, + GError **error); GARROW_AVAILABLE_IN_0_13 -gdouble -garrow_double_array_sum(GArrowDoubleArray *array, GError **error); +gdouble garrow_double_array_sum(GArrowDoubleArray *array, + GError **error); GARROW_AVAILABLE_IN_0_14 -GArrowArray * -garrow_array_take(GArrowArray *array, - GArrowArray *indices, - GArrowTakeOptions *options, - GError **error); +GArrowArray *garrow_array_take(GArrowArray *array, + GArrowArray *indices, + GArrowTakeOptions *options, + GError **error); GARROW_AVAILABLE_IN_0_16 GArrowChunkedArray * garrow_array_take_chunked_array(GArrowArray *array, @@ -961,20 +1014,26 @@ garrow_array_filter(GArrowArray *array, GError **error); GARROW_AVAILABLE_IN_0_15 GArrowBooleanArray * -garrow_array_is_in(GArrowArray *left, GArrowArray *right, GError **error); +garrow_array_is_in(GArrowArray *left, + GArrowArray *right, + GError **error); GARROW_AVAILABLE_IN_0_15 GArrowBooleanArray * garrow_array_is_in_chunked_array(GArrowArray *left, GArrowChunkedArray *right, GError **error); + GARROW_AVAILABLE_IN_3_0 GArrowUInt64Array * -garrow_array_sort_indices(GArrowArray *array, GArrowSortOrder order, GError **error); +garrow_array_sort_indices(GArrowArray *array, + GArrowSortOrder order, + GError **error); GARROW_DEPRECATED_IN_3_0_FOR(garrow_array_sort_indices) GARROW_AVAILABLE_IN_0_15 GArrowUInt64Array * -garrow_array_sort_to_indices(GArrowArray *array, GError **error); +garrow_array_sort_to_indices(GArrowArray *array, + GError **error); GARROW_AVAILABLE_IN_3_0 GArrowUInt64Array * @@ -982,6 +1041,7 @@ garrow_chunked_array_sort_indices(GArrowChunkedArray *chunked_array, GArrowSortOrder order, GError **error); + GARROW_AVAILABLE_IN_3_0 GArrowUInt64Array * garrow_record_batch_sort_indices(GArrowRecordBatch *record_batch, @@ -990,7 +1050,10 @@ garrow_record_batch_sort_indices(GArrowRecordBatch *record_batch, GARROW_AVAILABLE_IN_3_0 GArrowUInt64Array * -garrow_table_sort_indices(GArrowTable *table, GArrowSortOptions *options, GError **error); +garrow_table_sort_indices(GArrowTable *table, + GArrowSortOptions *options, + GError **error); + GARROW_AVAILABLE_IN_0_16 GArrowTable * @@ -1023,8 +1086,8 @@ garrow_record_batch_filter(GArrowRecordBatch *record_batch, GArrowFilterOptions *options, GError **error); -#define GARROW_TYPE_RUN_END_ENCODE_OPTIONS (garrow_run_end_encode_options_get_type()) -GARROW_AVAILABLE_IN_13_0 +#define GARROW_TYPE_RUN_END_ENCODE_OPTIONS \ + (garrow_run_end_encode_options_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowRunEndEncodeOptions, garrow_run_end_encode_options, GARROW, @@ -1039,6 +1102,7 @@ GARROW_AVAILABLE_IN_13_0 GArrowRunEndEncodeOptions * garrow_run_end_encode_options_new(GArrowDataType *run_end_data_type); + GARROW_AVAILABLE_IN_13_0 GArrowRunEndEncodedArray * garrow_array_run_end_encode(GArrowArray *array, @@ -1046,76 +1110,8 @@ garrow_array_run_end_encode(GArrowArray *array, GError **error); GARROW_AVAILABLE_IN_13_0 GArrowArray * -garrow_run_end_encoded_array_decode(GArrowRunEndEncodedArray *array, GError **error); - -#define GARROW_TYPE_STRPTIME_OPTIONS (garrow_strptime_options_get_type()) -GARROW_AVAILABLE_IN_16_0 -G_DECLARE_DERIVABLE_TYPE(GArrowStrptimeOptions, - garrow_strptime_options, - GARROW, - STRPTIME_OPTIONS, - GArrowFunctionOptions) -struct _GArrowStrptimeOptionsClass -{ - GArrowFunctionOptionsClass parent_class; -}; - -GARROW_AVAILABLE_IN_16_0 -GArrowStrptimeOptions * -garrow_strptime_options_new(void); - -#define GARROW_TYPE_STRFTIME_OPTIONS (garrow_strftime_options_get_type()) -GARROW_AVAILABLE_IN_16_0 -G_DECLARE_DERIVABLE_TYPE(GArrowStrftimeOptions, - garrow_strftime_options, - GARROW, - STRFTIME_OPTIONS, - GArrowFunctionOptions) -struct _GArrowStrftimeOptionsClass -{ - GArrowFunctionOptionsClass parent_class; -}; - -GARROW_AVAILABLE_IN_16_0 -GArrowStrftimeOptions * -garrow_strftime_options_new(void); - -#define GARROW_TYPE_SPLIT_PATTERN_OPTIONS (garrow_split_pattern_options_get_type()) -GARROW_AVAILABLE_IN_16_0 -G_DECLARE_DERIVABLE_TYPE(GArrowSplitPatternOptions, - garrow_split_pattern_options, - GARROW, - SPLIT_PATTERN_OPTIONS, - GArrowFunctionOptions) -struct _GArrowSplitPatternOptionsClass -{ - GArrowFunctionOptionsClass parent_class; -}; - -GARROW_AVAILABLE_IN_16_0 -GArrowSplitPatternOptions * -garrow_split_pattern_options_new(void); - -#define GARROW_TYPE_STRUCT_FIELD_OPTIONS (garrow_struct_field_options_get_type()) -GARROW_AVAILABLE_IN_16_0 -G_DECLARE_DERIVABLE_TYPE(GArrowStructFieldOptions, - garrow_struct_field_options, - GARROW, - STRUCT_FIELD_OPTIONS, - GArrowFunctionOptions) -struct _GArrowStructFieldOptionsClass -{ - GArrowFunctionOptionsClass parent_class; -}; - -GARROW_AVAILABLE_IN_16_0 -void -garrow_struct_field_options_set_field_ref(GArrowStructFieldOptions *options, - const gchar *field_ref, - GError **error); +garrow_run_end_encoded_array_decode(GArrowRunEndEncodedArray *array, + GError **error); -GARROW_AVAILABLE_IN_16_0 -GArrowStructFieldOptions * -garrow_struct_field_options_new(void); G_END_DECLS diff --git a/c_glib/arrow-glib/compute.hpp b/c_glib/arrow-glib/compute.hpp index 0abf62f7d2e..50074d0c98e 100644 --- a/c_glib/arrow-glib/compute.hpp +++ b/c_glib/arrow-glib/compute.hpp @@ -24,17 +24,22 @@ #include + arrow::Result garrow_field_reference_resolve_raw(const gchar *reference); + arrow::compute::ExecContext * garrow_execute_context_get_raw(GArrowExecuteContext *context); + GArrowFunctionOptions * -garrow_function_options_new_raw(const arrow::compute::FunctionOptions *arrow_options); +garrow_function_options_new_raw( + const arrow::compute::FunctionOptions *arrow_options); arrow::compute::FunctionOptions * garrow_function_options_get_raw(GArrowFunctionOptions *options); + GArrowFunctionDoc * garrow_function_doc_new_raw(const arrow::compute::FunctionDoc *arrow_doc); arrow::compute::FunctionDoc * @@ -45,133 +50,145 @@ garrow_function_new_raw(std::shared_ptr *arrow_functio std::shared_ptr garrow_function_get_raw(GArrowFunction *function); + GArrowExecuteNodeOptions * -garrow_execute_node_options_new_raw(arrow::acero::ExecNodeOptions *arrow_options); +garrow_execute_node_options_new_raw( + arrow::acero::ExecNodeOptions *arrow_options); arrow::acero::ExecNodeOptions * garrow_execute_node_options_get_raw(GArrowExecuteNodeOptions *options); + GArrowExecuteNode * -garrow_execute_node_new_raw(arrow::acero::ExecNode *arrow_node, - GArrowExecuteNodeOptions *options); +garrow_execute_node_new_raw( + arrow::acero::ExecNode* arrow_node, + GArrowExecuteNodeOptions *options); arrow::acero::ExecNode * garrow_execute_node_get_raw(GArrowExecuteNode *node); + std::shared_ptr garrow_execute_plan_get_raw(GArrowExecutePlan *plan); + GArrowCastOptions * garrow_cast_options_new_raw(const arrow::compute::CastOptions *arrow_options); arrow::compute::CastOptions * garrow_cast_options_get_raw(GArrowCastOptions *options); + GArrowScalarAggregateOptions * garrow_scalar_aggregate_options_new_raw( const arrow::compute::ScalarAggregateOptions *arrow_options); arrow::compute::ScalarAggregateOptions * -garrow_scalar_aggregate_options_get_raw(GArrowScalarAggregateOptions *options); +garrow_scalar_aggregate_options_get_raw( + GArrowScalarAggregateOptions *options); + GArrowCountOptions * -garrow_count_options_new_raw(const arrow::compute::CountOptions *arrow_options); +garrow_count_options_new_raw( + const arrow::compute::CountOptions *arrow_options); arrow::compute::CountOptions * garrow_count_options_get_raw(GArrowCountOptions *options); + GArrowFilterOptions * -garrow_filter_options_new_raw(const arrow::compute::FilterOptions *arrow_options); +garrow_filter_options_new_raw( + const arrow::compute::FilterOptions *arrow_options); arrow::compute::FilterOptions * garrow_filter_options_get_raw(GArrowFilterOptions *options); + GArrowTakeOptions * -garrow_take_options_new_raw(const arrow::compute::TakeOptions *arrow_options); +garrow_take_options_new_raw( + const arrow::compute::TakeOptions *arrow_options); arrow::compute::TakeOptions * garrow_take_options_get_raw(GArrowTakeOptions *options); + GArrowArraySortOptions * -garrow_array_sort_options_new_raw(const arrow::compute::ArraySortOptions *arrow_options); +garrow_array_sort_options_new_raw( + const arrow::compute::ArraySortOptions *arrow_options); arrow::compute::ArraySortOptions * garrow_array_sort_options_get_raw(GArrowArraySortOptions *options); + GArrowSortKey * garrow_sort_key_new_raw(const arrow::compute::SortKey &arrow_sort_key); arrow::compute::SortKey * garrow_sort_key_get_raw(GArrowSortKey *sort_key); + GArrowSortOptions * -garrow_sort_options_new_raw(const arrow::compute::SortOptions *arrow_options); +garrow_sort_options_new_raw( + const arrow::compute::SortOptions *arrow_options); arrow::compute::SortOptions * garrow_sort_options_get_raw(GArrowSortOptions *options); + GArrowSetLookupOptions * -garrow_set_lookup_options_new_raw(const arrow::compute::SetLookupOptions *arrow_options); +garrow_set_lookup_options_new_raw( + const arrow::compute::SetLookupOptions *arrow_options); arrow::compute::SetLookupOptions * garrow_set_lookup_options_get_raw(GArrowSetLookupOptions *options); + GArrowVarianceOptions * -garrow_variance_options_new_raw(const arrow::compute::VarianceOptions *arrow_options); +garrow_variance_options_new_raw( + const arrow::compute::VarianceOptions *arrow_options); arrow::compute::VarianceOptions * garrow_variance_options_get_raw(GArrowVarianceOptions *options); + GArrowRoundOptions * -garrow_round_options_new_raw(const arrow::compute::RoundOptions *arrow_options); +garrow_round_options_new_raw( + const arrow::compute::RoundOptions *arrow_options); arrow::compute::RoundOptions * garrow_round_options_get_raw(GArrowRoundOptions *options); + GArrowRoundToMultipleOptions * garrow_round_to_multiple_options_new_raw( const arrow::compute::RoundToMultipleOptions *arrow_options); arrow::compute::RoundToMultipleOptions * garrow_round_to_multiple_options_get_raw(GArrowRoundToMultipleOptions *options); + GArrowMatchSubstringOptions * garrow_match_substring_options_new_raw( const arrow::compute::MatchSubstringOptions *arrow_options); arrow::compute::MatchSubstringOptions * garrow_match_substring_options_get_raw(GArrowMatchSubstringOptions *options); + GArrowUTF8NormalizeOptions * garrow_utf8_normalize_options_new_raw( const arrow::compute::Utf8NormalizeOptions *arrow_options); arrow::compute::Utf8NormalizeOptions * garrow_utf8_normalize_options_get_raw(GArrowUTF8NormalizeOptions *options); + GArrowQuantileOptions * -garrow_quantile_options_new_raw(const arrow::compute::QuantileOptions *arrow_options); +garrow_quantile_options_new_raw( + const arrow::compute::QuantileOptions *arrow_options); arrow::compute::QuantileOptions * garrow_quantile_options_get_raw(GArrowQuantileOptions *options); + GArrowIndexOptions * -garrow_index_options_new_raw(const arrow::compute::IndexOptions *arrow_options); +garrow_index_options_new_raw( + const arrow::compute::IndexOptions *arrow_options); arrow::compute::IndexOptions * garrow_index_options_get_raw(GArrowIndexOptions *options); + GArrowRankOptions * garrow_rank_options_new_raw(const arrow::compute::RankOptions *arrow_options); arrow::compute::RankOptions * garrow_rank_options_get_raw(GArrowRankOptions *options); + GArrowRunEndEncodeOptions * garrow_run_end_encode_options_new_raw( const arrow::compute::RunEndEncodeOptions *arrow_options); arrow::compute::RunEndEncodeOptions * garrow_run_end_encode_options_get_raw(GArrowRunEndEncodeOptions *options); - -GArrowStrptimeOptions * -garrow_strptime_options_new_raw(const arrow::compute::StrptimeOptions *arrow_options); -arrow::compute::StrptimeOptions * -garrow_strptime_options_get_raw(GArrowStrptimeOptions *options); - -GArrowStrftimeOptions * -garrow_strftime_options_new_raw(const arrow::compute::StrftimeOptions *arrow_options); -arrow::compute::StrftimeOptions * -garrow_strftime_options_get_raw(GArrowStrftimeOptions *options); - -GArrowSplitPatternOptions * -garrow_split_pattern_options_new_raw( - const arrow::compute::SplitPatternOptions *arrow_options); -arrow::compute::SplitPatternOptions * -garrow_split_pattern_options_get_raw(GArrowSplitPatternOptions *options); - -GArrowStructFieldOptions * -garrow_struct_field_options_new_raw( - const arrow::compute::StructFieldOptions *arrow_options); -arrow::compute::StructFieldOptions * -garrow_struct_field_options_get_raw(GArrowStructFieldOptions *options); diff --git a/c_glib/arrow-glib/datum.cpp b/c_glib/arrow-glib/datum.cpp index a77f44e8dab..705eb3144d6 100644 --- a/c_glib/arrow-glib/datum.cpp +++ b/c_glib/arrow-glib/datum.cpp @@ -45,8 +45,7 @@ G_BEGIN_DECLS * #GArrowTableDatum is a class to hold an #GArrowTable. */ -typedef struct GArrowDatumPrivate_ -{ +typedef struct GArrowDatumPrivate_ { arrow::Datum datum; } GArrowDatumPrivate; @@ -56,8 +55,10 @@ enum { G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowDatum, garrow_datum, G_TYPE_OBJECT) -#define GARROW_DATUM_GET_PRIVATE(obj) \ - static_cast(garrow_datum_get_instance_private(GARROW_DATUM(obj))) +#define GARROW_DATUM_GET_PRIVATE(obj) \ + static_cast( \ + garrow_datum_get_instance_private( \ + GARROW_DATUM(obj))) static void garrow_datum_finalize(GObject *object) @@ -91,7 +92,7 @@ static void garrow_datum_init(GArrowDatum *object) { auto priv = GARROW_DATUM_GET_PRIVATE(object); - new (&priv->datum) arrow::Datum; + new(&priv->datum) arrow::Datum; } static void @@ -99,15 +100,15 @@ garrow_datum_class_init(GArrowDatumClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_datum_finalize; + gobject_class->finalize = garrow_datum_finalize; gobject_class->set_property = garrow_datum_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "datum", - "Datum", - "The raw arrow::Datum *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("datum", + "Datum", + "The raw arrow::Datum *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_DATUM, spec); } @@ -210,8 +211,8 @@ garrow_datum_to_string(GArrowDatum *datum) return g_strdup(string.c_str()); } -typedef struct GArrowArrayDatumPrivate_ -{ + +typedef struct GArrowArrayDatumPrivate_ { GArrowArray *value; } GArrowArrayDatumPrivate; @@ -219,11 +220,14 @@ enum { PROP_VALUE = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowArrayDatum, garrow_array_datum, GARROW_TYPE_DATUM) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowArrayDatum, + garrow_array_datum, + GARROW_TYPE_DATUM) -#define GARROW_ARRAY_DATUM_GET_PRIVATE(obj) \ - static_cast( \ - garrow_array_datum_get_instance_private(GARROW_ARRAY_DATUM(obj))) +#define GARROW_ARRAY_DATUM_GET_PRIVATE(obj) \ + static_cast( \ + garrow_array_datum_get_instance_private( \ + GARROW_ARRAY_DATUM(obj))) static void garrow_array_datum_dispose(GObject *object) @@ -284,17 +288,17 @@ garrow_array_datum_class_init(GArrowArrayDatumClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_array_datum_dispose; + gobject_class->dispose = garrow_array_datum_dispose; gobject_class->set_property = garrow_array_datum_set_property; gobject_class->get_property = garrow_array_datum_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "value", - "Value", - "The array held by this datum", - GARROW_TYPE_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("value", + "Value", + "The array held by this datum", + GARROW_TYPE_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } @@ -314,16 +318,19 @@ garrow_array_datum_new(GArrowArray *value) return garrow_array_datum_new_raw(&arrow_datum, value); } -typedef struct GArrowScalarDatumPrivate_ -{ + +typedef struct GArrowScalarDatumPrivate_ { GArrowScalar *value; } GArrowScalarDatumPrivate; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowScalarDatum, garrow_scalar_datum, GARROW_TYPE_DATUM) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowScalarDatum, + garrow_scalar_datum, + GARROW_TYPE_DATUM) -#define GARROW_SCALAR_DATUM_GET_PRIVATE(obj) \ - static_cast( \ - garrow_scalar_datum_get_instance_private(GARROW_SCALAR_DATUM(obj))) +#define GARROW_SCALAR_DATUM_GET_PRIVATE(obj) \ + static_cast( \ + garrow_scalar_datum_get_instance_private( \ + GARROW_SCALAR_DATUM(obj))) static void garrow_scalar_datum_dispose(GObject *object) @@ -384,17 +391,17 @@ garrow_scalar_datum_class_init(GArrowScalarDatumClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_scalar_datum_dispose; + gobject_class->dispose = garrow_scalar_datum_dispose; gobject_class->set_property = garrow_scalar_datum_set_property; gobject_class->get_property = garrow_scalar_datum_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "value", - "Value", - "The scalar held by this datum", - GARROW_TYPE_SCALAR, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("value", + "Value", + "The scalar held by this datum", + GARROW_TYPE_SCALAR, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } @@ -414,8 +421,8 @@ garrow_scalar_datum_new(GArrowScalar *value) return garrow_scalar_datum_new_raw(&arrow_datum, value); } -typedef struct GArrowChunkedArrayDatumPrivate_ -{ + +typedef struct GArrowChunkedArrayDatumPrivate_ { GArrowChunkedArray *value; } GArrowChunkedArrayDatumPrivate; @@ -423,9 +430,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowChunkedArrayDatum, garrow_chunked_array_datum, GARROW_TYPE_DATUM) -#define GARROW_CHUNKED_ARRAY_DATUM_GET_PRIVATE(obj) \ - static_cast( \ - garrow_chunked_array_datum_get_instance_private(GARROW_CHUNKED_ARRAY_DATUM(obj))) +#define GARROW_CHUNKED_ARRAY_DATUM_GET_PRIVATE(obj) \ + static_cast( \ + garrow_chunked_array_datum_get_instance_private( \ + GARROW_CHUNKED_ARRAY_DATUM(obj))) static void garrow_chunked_array_datum_dispose(GObject *object) @@ -486,17 +494,17 @@ garrow_chunked_array_datum_class_init(GArrowChunkedArrayDatumClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_chunked_array_datum_dispose; + gobject_class->dispose = garrow_chunked_array_datum_dispose; gobject_class->set_property = garrow_chunked_array_datum_set_property; gobject_class->get_property = garrow_chunked_array_datum_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "value", - "Value", - "The chunked array held by this datum", - GARROW_TYPE_CHUNKED_ARRAY, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("value", + "Value", + "The chunked array held by this datum", + GARROW_TYPE_CHUNKED_ARRAY, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } @@ -516,8 +524,8 @@ garrow_chunked_array_datum_new(GArrowChunkedArray *value) return garrow_chunked_array_datum_new_raw(&arrow_datum, value); } -typedef struct GArrowRecordBatchDatumPrivate_ -{ + +typedef struct GArrowRecordBatchDatumPrivate_ { GArrowRecordBatch *value; } GArrowRecordBatchDatumPrivate; @@ -525,9 +533,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowRecordBatchDatum, garrow_record_batch_datum, GARROW_TYPE_DATUM) -#define GARROW_RECORD_BATCH_DATUM_GET_PRIVATE(obj) \ - static_cast( \ - garrow_record_batch_datum_get_instance_private(GARROW_RECORD_BATCH_DATUM(obj))) +#define GARROW_RECORD_BATCH_DATUM_GET_PRIVATE(obj) \ + static_cast( \ + garrow_record_batch_datum_get_instance_private( \ + GARROW_RECORD_BATCH_DATUM(obj))) static void garrow_record_batch_datum_dispose(GObject *object) @@ -588,17 +597,17 @@ garrow_record_batch_datum_class_init(GArrowRecordBatchDatumClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_record_batch_datum_dispose; + gobject_class->dispose = garrow_record_batch_datum_dispose; gobject_class->set_property = garrow_record_batch_datum_set_property; gobject_class->get_property = garrow_record_batch_datum_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "value", - "Value", - "The chunked array held by this datum", - GARROW_TYPE_RECORD_BATCH, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("value", + "Value", + "The chunked array held by this datum", + GARROW_TYPE_RECORD_BATCH, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } @@ -618,16 +627,19 @@ garrow_record_batch_datum_new(GArrowRecordBatch *value) return garrow_record_batch_datum_new_raw(&arrow_datum, value); } -typedef struct GArrowTableDatumPrivate_ -{ + +typedef struct GArrowTableDatumPrivate_ { GArrowTable *value; } GArrowTableDatumPrivate; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowTableDatum, garrow_table_datum, GARROW_TYPE_DATUM) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowTableDatum, + garrow_table_datum, + GARROW_TYPE_DATUM) -#define GARROW_TABLE_DATUM_GET_PRIVATE(obj) \ - static_cast( \ - garrow_table_datum_get_instance_private(GARROW_TABLE_DATUM(obj))) +#define GARROW_TABLE_DATUM_GET_PRIVATE(obj) \ + static_cast( \ + garrow_table_datum_get_instance_private( \ + GARROW_TABLE_DATUM(obj))) static void garrow_table_datum_dispose(GObject *object) @@ -688,17 +700,17 @@ garrow_table_datum_class_init(GArrowTableDatumClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_table_datum_dispose; + gobject_class->dispose = garrow_table_datum_dispose; gobject_class->set_property = garrow_table_datum_set_property; gobject_class->get_property = garrow_table_datum_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "value", - "Value", - "The table held by this datum", - GARROW_TYPE_TABLE, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("value", + "Value", + "The table held by this datum", + GARROW_TYPE_TABLE, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } @@ -718,6 +730,7 @@ garrow_table_datum_new(GArrowTable *value) return garrow_table_datum_new_raw(&arrow_datum, value); } + G_END_DECLS arrow::Datum @@ -780,44 +793,51 @@ garrow_datum_new_raw(arrow::Datum *arrow_datum) } GArrowScalarDatum * -garrow_scalar_datum_new_raw(arrow::Datum *arrow_datum, GArrowScalar *value) +garrow_scalar_datum_new_raw(arrow::Datum *arrow_datum, + GArrowScalar *value) { - return GARROW_SCALAR_DATUM( - g_object_new(GARROW_TYPE_SCALAR_DATUM, "datum", arrow_datum, "value", value, NULL)); + return GARROW_SCALAR_DATUM(g_object_new(GARROW_TYPE_SCALAR_DATUM, + "datum", arrow_datum, + "value", value, + NULL)); } GArrowArrayDatum * -garrow_array_datum_new_raw(arrow::Datum *arrow_datum, GArrowArray *value) +garrow_array_datum_new_raw(arrow::Datum *arrow_datum, + GArrowArray *value) { - return GARROW_ARRAY_DATUM( - g_object_new(GARROW_TYPE_ARRAY_DATUM, "datum", arrow_datum, "value", value, NULL)); + return GARROW_ARRAY_DATUM(g_object_new(GARROW_TYPE_ARRAY_DATUM, + "datum", arrow_datum, + "value", value, + NULL)); } GArrowChunkedArrayDatum * -garrow_chunked_array_datum_new_raw(arrow::Datum *arrow_datum, GArrowChunkedArray *value) +garrow_chunked_array_datum_new_raw(arrow::Datum *arrow_datum, + GArrowChunkedArray *value) { return GARROW_CHUNKED_ARRAY_DATUM(g_object_new(GARROW_TYPE_CHUNKED_ARRAY_DATUM, - "datum", - arrow_datum, - "value", - value, + "datum", arrow_datum, + "value", value, NULL)); } GArrowRecordBatchDatum * -garrow_record_batch_datum_new_raw(arrow::Datum *arrow_datum, GArrowRecordBatch *value) +garrow_record_batch_datum_new_raw(arrow::Datum *arrow_datum, + GArrowRecordBatch *value) { return GARROW_RECORD_BATCH_DATUM(g_object_new(GARROW_TYPE_RECORD_BATCH_DATUM, - "datum", - arrow_datum, - "value", - value, + "datum", arrow_datum, + "value", value, NULL)); } GArrowTableDatum * -garrow_table_datum_new_raw(arrow::Datum *arrow_datum, GArrowTable *value) +garrow_table_datum_new_raw(arrow::Datum *arrow_datum, + GArrowTable *value) { - return GARROW_TABLE_DATUM( - g_object_new(GARROW_TYPE_TABLE_DATUM, "datum", arrow_datum, "value", value, NULL)); + return GARROW_TABLE_DATUM(g_object_new(GARROW_TYPE_TABLE_DATUM, + "datum", arrow_datum, + "value", value, + NULL)); } diff --git a/c_glib/arrow-glib/datum.h b/c_glib/arrow-glib/datum.h index fc9a2fe7ab9..bc7dda36911 100644 --- a/c_glib/arrow-glib/datum.h +++ b/c_glib/arrow-glib/datum.h @@ -28,66 +28,65 @@ G_BEGIN_DECLS #define GARROW_TYPE_DATUM (garrow_datum_get_type()) -GARROW_AVAILABLE_IN_1_0 -G_DECLARE_DERIVABLE_TYPE(GArrowDatum, garrow_datum, GARROW, DATUM, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowDatum, + garrow_datum, + GARROW, + DATUM, + GObject) struct _GArrowDatumClass { GObjectClass parent_class; }; GARROW_AVAILABLE_IN_1_0 -gboolean -garrow_datum_is_array(GArrowDatum *datum); +gboolean garrow_datum_is_array(GArrowDatum *datum); GARROW_AVAILABLE_IN_1_0 -gboolean -garrow_datum_is_array_like(GArrowDatum *datum); +gboolean garrow_datum_is_array_like(GArrowDatum *datum); GARROW_AVAILABLE_IN_5_0 -gboolean -garrow_datum_is_scalar(GArrowDatum *datum); +gboolean garrow_datum_is_scalar(GArrowDatum *datum); GARROW_AVAILABLE_IN_5_0 -gboolean -garrow_datum_is_value(GArrowDatum *datum); +gboolean garrow_datum_is_value(GArrowDatum *datum); /* GARROW_AVAILABLE_IN_5_0 gboolean garrow_datum_is_collection(GArrowDatum *datum); */ GARROW_AVAILABLE_IN_1_0 -gboolean -garrow_datum_equal(GArrowDatum *datum, GArrowDatum *other_datum); +gboolean garrow_datum_equal(GArrowDatum *datum, + GArrowDatum *other_datum); GARROW_AVAILABLE_IN_1_0 -gchar * -garrow_datum_to_string(GArrowDatum *datum); +gchar *garrow_datum_to_string(GArrowDatum *datum); /* GARROW_TYPE_NONE_DATUM */ #define GARROW_TYPE_SCALAR_DATUM (garrow_scalar_datum_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowScalarDatum, garrow_scalar_datum, GARROW, SCALAR_DATUM, GArrowDatum) +G_DECLARE_DERIVABLE_TYPE(GArrowScalarDatum, + garrow_scalar_datum, + GARROW, + SCALAR_DATUM, + GArrowDatum) struct _GArrowScalarDatumClass { GArrowDatumClass parent_class; }; GARROW_AVAILABLE_IN_5_0 -GArrowScalarDatum * -garrow_scalar_datum_new(GArrowScalar *value); +GArrowScalarDatum *garrow_scalar_datum_new(GArrowScalar *value); #define GARROW_TYPE_ARRAY_DATUM (garrow_array_datum_get_type()) -GARROW_AVAILABLE_IN_1_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowArrayDatum, garrow_array_datum, GARROW, ARRAY_DATUM, GArrowDatum) +G_DECLARE_DERIVABLE_TYPE(GArrowArrayDatum, + garrow_array_datum, + GARROW, + ARRAY_DATUM, + GArrowDatum) struct _GArrowArrayDatumClass { GArrowDatumClass parent_class; }; GARROW_AVAILABLE_IN_1_0 -GArrowArrayDatum * -garrow_array_datum_new(GArrowArray *value); +GArrowArrayDatum *garrow_array_datum_new(GArrowArray *value); #define GARROW_TYPE_CHUNKED_ARRAY_DATUM (garrow_chunked_array_datum_get_type()) -GARROW_AVAILABLE_IN_1_0 G_DECLARE_DERIVABLE_TYPE(GArrowChunkedArrayDatum, garrow_chunked_array_datum, GARROW, @@ -103,7 +102,6 @@ GArrowChunkedArrayDatum * garrow_chunked_array_datum_new(GArrowChunkedArray *value); #define GARROW_TYPE_RECORD_BATCH_DATUM (garrow_record_batch_datum_get_type()) -GARROW_AVAILABLE_IN_1_0 G_DECLARE_DERIVABLE_TYPE(GArrowRecordBatchDatum, garrow_record_batch_datum, GARROW, @@ -119,17 +117,18 @@ GArrowRecordBatchDatum * garrow_record_batch_datum_new(GArrowRecordBatch *value); #define GARROW_TYPE_TABLE_DATUM (garrow_table_datum_get_type()) -GARROW_AVAILABLE_IN_1_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowTableDatum, garrow_table_datum, GARROW, TABLE_DATUM, GArrowDatum) +G_DECLARE_DERIVABLE_TYPE(GArrowTableDatum, + garrow_table_datum, + GARROW, + TABLE_DATUM, + GArrowDatum) struct _GArrowTableDatumClass { GArrowDatumClass parent_class; }; GARROW_AVAILABLE_IN_1_0 -GArrowTableDatum * -garrow_table_datum_new(GArrowTable *value); +GArrowTableDatum *garrow_table_datum_new(GArrowTable *value); /* GARROW_TYPE_COLLECTION_DATUM */ diff --git a/c_glib/arrow-glib/datum.hpp b/c_glib/arrow-glib/datum.hpp index dc985f956f8..d1acfc58c93 100644 --- a/c_glib/arrow-glib/datum.hpp +++ b/c_glib/arrow-glib/datum.hpp @@ -29,12 +29,17 @@ GArrowDatum * garrow_datum_new_raw(arrow::Datum *arrow_datum); GArrowScalarDatum * -garrow_scalar_datum_new_raw(arrow::Datum *arrow_datum, GArrowScalar *value); +garrow_scalar_datum_new_raw(arrow::Datum *arrow_datum, + GArrowScalar *value); GArrowArrayDatum * -garrow_array_datum_new_raw(arrow::Datum *arrow_datum, GArrowArray *value); +garrow_array_datum_new_raw(arrow::Datum *arrow_datum, + GArrowArray *value); GArrowChunkedArrayDatum * -garrow_chunked_array_datum_new_raw(arrow::Datum *arrow_datum, GArrowChunkedArray *value); +garrow_chunked_array_datum_new_raw(arrow::Datum *arrow_datum, + GArrowChunkedArray *value); GArrowRecordBatchDatum * -garrow_record_batch_datum_new_raw(arrow::Datum *arrow_datum, GArrowRecordBatch *value); +garrow_record_batch_datum_new_raw(arrow::Datum *arrow_datum, + GArrowRecordBatch *value); GArrowTableDatum * -garrow_table_datum_new_raw(arrow::Datum *arrow_datum, GArrowTable *value); +garrow_table_datum_new_raw(arrow::Datum *arrow_datum, + GArrowTable *value); diff --git a/c_glib/arrow-glib/decimal.cpp b/c_glib/arrow-glib/decimal.cpp index 5947868edd3..51560f33601 100644 --- a/c_glib/arrow-glib/decimal.cpp +++ b/c_glib/arrow-glib/decimal.cpp @@ -20,12 +20,12 @@ #include #include -template struct DecimalConverter -{ +template +struct DecimalConverter { }; -template <> struct DecimalConverter -{ +template <> +struct DecimalConverter { using ArrowType = arrow::Decimal128; using GArrowType = GArrowDecimal128; @@ -42,27 +42,27 @@ template <> struct DecimalConverter } }; -template <> struct DecimalConverter -{ +template <> +struct DecimalConverter { using ArrowType = arrow::Decimal256; using GArrowType = GArrowDecimal256; GArrowType * - new_raw(std::shared_ptr *arrow_decimal256) - { + new_raw(std::shared_ptr *arrow_decimal256) { return garrow_decimal256_new_raw(arrow_decimal256); } std::shared_ptr - get_raw(GArrowType *decimal256) - { + get_raw(GArrowType *decimal256) { return garrow_decimal256_get_raw(decimal256); } }; template typename DecimalConverter::GArrowType * -garrow_decimal_new_string(const gchar *data, GError **error, const gchar *tag) +garrow_decimal_new_string(const gchar *data, + GError **error, + const gchar *tag) { auto arrow_decimal_result = Decimal::FromString(data); if (garrow::check(error, arrow_decimal_result, tag)) { @@ -128,9 +128,8 @@ garrow_decimal_less_than(typename DecimalConverter::GArrowType *decimal template gboolean -garrow_decimal_less_than_or_equal( - typename DecimalConverter::GArrowType *decimal, - typename DecimalConverter::GArrowType *other_decimal) +garrow_decimal_less_than_or_equal(typename DecimalConverter::GArrowType *decimal, + typename DecimalConverter::GArrowType *other_decimal) { DecimalConverter converter; const auto arrow_decimal = converter.get_raw(decimal); @@ -151,9 +150,8 @@ garrow_decimal_greater_than(typename DecimalConverter::GArrowType *deci template gboolean -garrow_decimal_greater_than_or_equal( - typename DecimalConverter::GArrowType *decimal, - typename DecimalConverter::GArrowType *other_decimal) +garrow_decimal_greater_than_or_equal(typename DecimalConverter::GArrowType *decimal, + typename DecimalConverter::GArrowType *other_decimal) { DecimalConverter converter; const auto arrow_decimal = converter.get_raw(decimal); @@ -296,6 +294,7 @@ garrow_decimal_rescale(typename DecimalConverter::GArrowType *decimal, } } + G_BEGIN_DECLS /** @@ -311,8 +310,7 @@ G_BEGIN_DECLS * Since: 0.10.0 */ -typedef struct GArrowDecimal128Private_ -{ +typedef struct GArrowDecimal128Private_ { std::shared_ptr decimal128; } GArrowDecimal128Private; @@ -320,11 +318,14 @@ enum { PROP_DECIMAL128 = 1 }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowDecimal128, garrow_decimal128, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowDecimal128, + garrow_decimal128, + G_TYPE_OBJECT) -#define GARROW_DECIMAL128_GET_PRIVATE(obj) \ - static_cast( \ - garrow_decimal128_get_instance_private(GARROW_DECIMAL128(obj))) +#define GARROW_DECIMAL128_GET_PRIVATE(obj) \ + static_cast( \ + garrow_decimal128_get_instance_private( \ + GARROW_DECIMAL128(obj))) static void garrow_decimal128_finalize(GObject *object) @@ -359,7 +360,7 @@ static void garrow_decimal128_init(GArrowDecimal128 *object) { auto priv = GARROW_DECIMAL128_GET_PRIVATE(object); - new (&priv->decimal128) std::shared_ptr; + new(&priv->decimal128) std::shared_ptr; } static void @@ -369,14 +370,14 @@ garrow_decimal128_class_init(GArrowDecimal128Class *klass) auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_decimal128_finalize; + gobject_class->finalize = garrow_decimal128_finalize; gobject_class->set_property = garrow_decimal128_set_property; - spec = g_param_spec_pointer( - "decimal128", - "Decimal128", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("decimal128", + "Decimal128", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_DECIMAL128, spec); } @@ -393,9 +394,8 @@ garrow_decimal128_class_init(GArrowDecimal128Class *klass) GArrowDecimal128 * garrow_decimal128_new_string(const gchar *data, GError **error) { - return garrow_decimal_new_string(data, - error, - "[decimal128][new][string]"); + return garrow_decimal_new_string( + data, error, "[decimal128][new][string]"); } /** @@ -437,7 +437,8 @@ garrow_decimal128_copy(GArrowDecimal128 *decimal) * Since: 0.12.0 */ gboolean -garrow_decimal128_equal(GArrowDecimal128 *decimal, GArrowDecimal128 *other_decimal) +garrow_decimal128_equal(GArrowDecimal128 *decimal, + GArrowDecimal128 *other_decimal) { return garrow_decimal_equal(decimal, other_decimal); } @@ -453,7 +454,8 @@ garrow_decimal128_equal(GArrowDecimal128 *decimal, GArrowDecimal128 *other_decim * Since: 0.12.0 */ gboolean -garrow_decimal128_not_equal(GArrowDecimal128 *decimal, GArrowDecimal128 *other_decimal) +garrow_decimal128_not_equal(GArrowDecimal128 *decimal, + GArrowDecimal128 *other_decimal) { return garrow_decimal_not_equal(decimal, other_decimal); } @@ -469,7 +471,8 @@ garrow_decimal128_not_equal(GArrowDecimal128 *decimal, GArrowDecimal128 *other_d * Since: 0.12.0 */ gboolean -garrow_decimal128_less_than(GArrowDecimal128 *decimal, GArrowDecimal128 *other_decimal) +garrow_decimal128_less_than(GArrowDecimal128 *decimal, + GArrowDecimal128 *other_decimal) { return garrow_decimal_less_than(decimal, other_decimal); } @@ -502,7 +505,8 @@ garrow_decimal128_less_than_or_equal(GArrowDecimal128 *decimal, * Since: 0.12.0 */ gboolean -garrow_decimal128_greater_than(GArrowDecimal128 *decimal, GArrowDecimal128 *other_decimal) +garrow_decimal128_greater_than(GArrowDecimal128 *decimal, + GArrowDecimal128 *other_decimal) { return garrow_decimal_greater_than(decimal, other_decimal); } @@ -624,7 +628,8 @@ garrow_decimal128_to_integer(GArrowDecimal128 *decimal) * Since: 0.11.0 */ GArrowDecimal128 * -garrow_decimal128_plus(GArrowDecimal128 *left, GArrowDecimal128 *right) +garrow_decimal128_plus(GArrowDecimal128 *left, + GArrowDecimal128 *right) { return garrow_decimal_plus(left, right); } @@ -639,7 +644,8 @@ garrow_decimal128_plus(GArrowDecimal128 *left, GArrowDecimal128 *right) * Since: 0.11.0 */ GArrowDecimal128 * -garrow_decimal128_minus(GArrowDecimal128 *left, GArrowDecimal128 *right) +garrow_decimal128_minus(GArrowDecimal128 *left, + GArrowDecimal128 *right) { return garrow_decimal_minus(left, right); } @@ -654,7 +660,8 @@ garrow_decimal128_minus(GArrowDecimal128 *left, GArrowDecimal128 *right) * Since: 0.11.0 */ GArrowDecimal128 * -garrow_decimal128_multiply(GArrowDecimal128 *left, GArrowDecimal128 *right) +garrow_decimal128_multiply(GArrowDecimal128 *left, + GArrowDecimal128 *right) { return garrow_decimal_multiply(left, right); } @@ -710,8 +717,8 @@ garrow_decimal128_rescale(GArrowDecimal128 *decimal, "[decimal128][rescale]"); } -typedef struct GArrowDecimal256Private_ -{ + +typedef struct GArrowDecimal256Private_ { std::shared_ptr decimal256; } GArrowDecimal256Private; @@ -719,11 +726,14 @@ enum { PROP_DECIMAL256 = 1 }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowDecimal256, garrow_decimal256, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowDecimal256, + garrow_decimal256, + G_TYPE_OBJECT) -#define GARROW_DECIMAL256_GET_PRIVATE(obj) \ - static_cast( \ - garrow_decimal256_get_instance_private(GARROW_DECIMAL256(obj))) +#define GARROW_DECIMAL256_GET_PRIVATE(obj) \ + static_cast( \ + garrow_decimal256_get_instance_private( \ + GARROW_DECIMAL256(obj))) static void garrow_decimal256_finalize(GObject *object) @@ -758,7 +768,7 @@ static void garrow_decimal256_init(GArrowDecimal256 *object) { auto priv = GARROW_DECIMAL256_GET_PRIVATE(object); - new (&priv->decimal256) std::shared_ptr; + new(&priv->decimal256) std::shared_ptr; } static void @@ -768,14 +778,14 @@ garrow_decimal256_class_init(GArrowDecimal256Class *klass) auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_decimal256_finalize; + gobject_class->finalize = garrow_decimal256_finalize; gobject_class->set_property = garrow_decimal256_set_property; - spec = g_param_spec_pointer( - "decimal256", - "Decimal256", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("decimal256", + "Decimal256", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_DECIMAL256, spec); } @@ -792,9 +802,8 @@ garrow_decimal256_class_init(GArrowDecimal256Class *klass) GArrowDecimal256 * garrow_decimal256_new_string(const gchar *data, GError **error) { - return garrow_decimal_new_string(data, - error, - "[decimal256][new][string]"); + return garrow_decimal_new_string( + data, error, "[decimal256][new][string]"); } /** @@ -836,7 +845,8 @@ garrow_decimal256_copy(GArrowDecimal256 *decimal) * Since: 3.0.0 */ gboolean -garrow_decimal256_equal(GArrowDecimal256 *decimal, GArrowDecimal256 *other_decimal) +garrow_decimal256_equal(GArrowDecimal256 *decimal, + GArrowDecimal256 *other_decimal) { return garrow_decimal_equal(decimal, other_decimal); } @@ -852,7 +862,8 @@ garrow_decimal256_equal(GArrowDecimal256 *decimal, GArrowDecimal256 *other_decim * Since: 3.0.0 */ gboolean -garrow_decimal256_not_equal(GArrowDecimal256 *decimal, GArrowDecimal256 *other_decimal) +garrow_decimal256_not_equal(GArrowDecimal256 *decimal, + GArrowDecimal256 *other_decimal) { return garrow_decimal_not_equal(decimal, other_decimal); } @@ -868,7 +879,8 @@ garrow_decimal256_not_equal(GArrowDecimal256 *decimal, GArrowDecimal256 *other_d * Since: 3.0.0 */ gboolean -garrow_decimal256_less_than(GArrowDecimal256 *decimal, GArrowDecimal256 *other_decimal) +garrow_decimal256_less_than(GArrowDecimal256 *decimal, + GArrowDecimal256 *other_decimal) { return garrow_decimal_less_than(decimal, other_decimal); } @@ -901,7 +913,8 @@ garrow_decimal256_less_than_or_equal(GArrowDecimal256 *decimal, * Since: 3.0.0 */ gboolean -garrow_decimal256_greater_than(GArrowDecimal256 *decimal, GArrowDecimal256 *other_decimal) +garrow_decimal256_greater_than(GArrowDecimal256 *decimal, + GArrowDecimal256 *other_decimal) { return garrow_decimal_greater_than(decimal, other_decimal); } @@ -1008,7 +1021,8 @@ garrow_decimal256_negate(GArrowDecimal256 *decimal) * Since: 3.0.0 */ GArrowDecimal256 * -garrow_decimal256_plus(GArrowDecimal256 *left, GArrowDecimal256 *right) +garrow_decimal256_plus(GArrowDecimal256 *left, + GArrowDecimal256 *right) { return garrow_decimal_plus(left, right); } @@ -1023,7 +1037,8 @@ garrow_decimal256_plus(GArrowDecimal256 *left, GArrowDecimal256 *right) * Since: 3.0.0 */ GArrowDecimal256 * -garrow_decimal256_multiply(GArrowDecimal256 *left, GArrowDecimal256 *right) +garrow_decimal256_multiply(GArrowDecimal256 *left, + GArrowDecimal256 *right) { return garrow_decimal_multiply(left, right); } @@ -1079,13 +1094,15 @@ garrow_decimal256_rescale(GArrowDecimal256 *decimal, "[decimal256][rescale]"); } + G_END_DECLS GArrowDecimal128 * garrow_decimal128_new_raw(std::shared_ptr *arrow_decimal128) { - auto decimal128 = - g_object_new(garrow_decimal128_get_type(), "decimal128", arrow_decimal128, NULL); + auto decimal128 = g_object_new(garrow_decimal128_get_type(), + "decimal128", arrow_decimal128, + NULL); return GARROW_DECIMAL128(decimal128); } @@ -1099,8 +1116,9 @@ garrow_decimal128_get_raw(GArrowDecimal128 *decimal128) GArrowDecimal256 * garrow_decimal256_new_raw(std::shared_ptr *arrow_decimal256) { - auto decimal256 = - g_object_new(garrow_decimal256_get_type(), "decimal256", arrow_decimal256, NULL); + auto decimal256 = g_object_new(garrow_decimal256_get_type(), + "decimal256", arrow_decimal256, + NULL); return GARROW_DECIMAL256(decimal256); } diff --git a/c_glib/arrow-glib/decimal.h b/c_glib/arrow-glib/decimal.h index f64afa800a1..97b521f3fbe 100644 --- a/c_glib/arrow-glib/decimal.h +++ b/c_glib/arrow-glib/decimal.h @@ -19,85 +19,66 @@ #pragma once -#include - +#include #include G_BEGIN_DECLS /* Disabled because it conflicts with GARROW_TYPE_DECIMAL128 in GArrowType. */ /* #define GARROW_TYPE_DECIMAL128 (garrow_decimal128_get_type()) */ -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowDecimal128, garrow_decimal128, GARROW, DECIMAL128, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowDecimal128, + garrow_decimal128, + GARROW, + DECIMAL128, + GObject) struct _GArrowDecimal128Class { GObjectClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowDecimal128 * -garrow_decimal128_new_string(const gchar *data, GError **error); -GARROW_AVAILABLE_IN_ALL GArrowDecimal128 * -garrow_decimal128_new_integer(const gint64 data); +garrow_decimal128_new_string(const gchar *data, + GError **error); +GArrowDecimal128 *garrow_decimal128_new_integer(const gint64 data); GARROW_AVAILABLE_IN_3_0 -GArrowDecimal128 * -garrow_decimal128_copy(GArrowDecimal128 *decimal); +GArrowDecimal128 *garrow_decimal128_copy(GArrowDecimal128 *decimal); GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_decimal128_equal(GArrowDecimal128 *decimal, GArrowDecimal128 *other_decimal); +gboolean garrow_decimal128_equal(GArrowDecimal128 *decimal, + GArrowDecimal128 *other_decimal); GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_decimal128_not_equal(GArrowDecimal128 *decimal, GArrowDecimal128 *other_decimal); -GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_decimal128_less_than(GArrowDecimal128 *decimal, GArrowDecimal128 *other_decimal); +gboolean garrow_decimal128_not_equal(GArrowDecimal128 *decimal, + GArrowDecimal128 *other_decimal); GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_decimal128_less_than_or_equal(GArrowDecimal128 *decimal, +gboolean garrow_decimal128_less_than(GArrowDecimal128 *decimal, GArrowDecimal128 *other_decimal); GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_decimal128_greater_than(GArrowDecimal128 *decimal, - GArrowDecimal128 *other_decimal); +gboolean garrow_decimal128_less_than_or_equal(GArrowDecimal128 *decimal, + GArrowDecimal128 *other_decimal); GARROW_AVAILABLE_IN_0_12 -gboolean -garrow_decimal128_greater_than_or_equal(GArrowDecimal128 *decimal, +gboolean garrow_decimal128_greater_than(GArrowDecimal128 *decimal, GArrowDecimal128 *other_decimal); -GARROW_AVAILABLE_IN_ALL -gchar * -garrow_decimal128_to_string_scale(GArrowDecimal128 *decimal, gint32 scale); -GARROW_AVAILABLE_IN_ALL -gchar * -garrow_decimal128_to_string(GArrowDecimal128 *decimal); -GARROW_AVAILABLE_IN_3_0 -GBytes * -garrow_decimal128_to_bytes(GArrowDecimal128 *decimal); -GARROW_AVAILABLE_IN_ALL -void -garrow_decimal128_abs(GArrowDecimal128 *decimal); -GARROW_AVAILABLE_IN_ALL -void -garrow_decimal128_negate(GArrowDecimal128 *decimal); -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_decimal128_to_integer(GArrowDecimal128 *decimal); -GARROW_AVAILABLE_IN_ALL -GArrowDecimal128 * -garrow_decimal128_plus(GArrowDecimal128 *left, GArrowDecimal128 *right); -GARROW_AVAILABLE_IN_ALL -GArrowDecimal128 * -garrow_decimal128_minus(GArrowDecimal128 *left, GArrowDecimal128 *right); -GARROW_AVAILABLE_IN_ALL -GArrowDecimal128 * -garrow_decimal128_multiply(GArrowDecimal128 *left, GArrowDecimal128 *right); -GARROW_AVAILABLE_IN_ALL -GArrowDecimal128 * -garrow_decimal128_divide(GArrowDecimal128 *left, - GArrowDecimal128 *right, - GArrowDecimal128 **remainder, - GError **error); +GARROW_AVAILABLE_IN_0_12 +gboolean garrow_decimal128_greater_than_or_equal(GArrowDecimal128 *decimal, + GArrowDecimal128 *other_decimal); +gchar *garrow_decimal128_to_string_scale(GArrowDecimal128 *decimal, + gint32 scale); +gchar *garrow_decimal128_to_string(GArrowDecimal128 *decimal); +GARROW_AVAILABLE_IN_3_0 +GBytes *garrow_decimal128_to_bytes(GArrowDecimal128 *decimal); +void garrow_decimal128_abs(GArrowDecimal128 *decimal); +void garrow_decimal128_negate(GArrowDecimal128 *decimal); +gint64 garrow_decimal128_to_integer(GArrowDecimal128 *decimal); +GArrowDecimal128 *garrow_decimal128_plus(GArrowDecimal128 *left, + GArrowDecimal128 *right); +GArrowDecimal128 *garrow_decimal128_minus(GArrowDecimal128 *left, + GArrowDecimal128 *right); +GArrowDecimal128 *garrow_decimal128_multiply(GArrowDecimal128 *left, + GArrowDecimal128 *right); +GArrowDecimal128 *garrow_decimal128_divide(GArrowDecimal128 *left, + GArrowDecimal128 *right, + GArrowDecimal128 **remainder, + GError **error); GARROW_AVAILABLE_IN_0_15 GArrowDecimal128 * garrow_decimal128_rescale(GArrowDecimal128 *decimal, @@ -105,10 +86,14 @@ garrow_decimal128_rescale(GArrowDecimal128 *decimal, gint32 new_scale, GError **error); + /* Disabled because it conflicts with GARROW_TYPE_DECIMAL256 in GArrowType. */ /* #define GARROW_TYPE_DECIMAL256 (garrow_decimal256_get_type()) */ -GARROW_AVAILABLE_IN_3_0 -G_DECLARE_DERIVABLE_TYPE(GArrowDecimal256, garrow_decimal256, GARROW, DECIMAL256, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowDecimal256, + garrow_decimal256, + GARROW, + DECIMAL256, + GObject) struct _GArrowDecimal256Class { @@ -117,61 +102,52 @@ struct _GArrowDecimal256Class GARROW_AVAILABLE_IN_3_0 GArrowDecimal256 * -garrow_decimal256_new_string(const gchar *data, GError **error); +garrow_decimal256_new_string(const gchar *data, + GError **error); GARROW_AVAILABLE_IN_3_0 -GArrowDecimal256 * -garrow_decimal256_new_integer(const gint64 data); -GARROW_AVAILABLE_IN_3_0 -GArrowDecimal256 * -garrow_decimal256_copy(GArrowDecimal256 *decimal); +GArrowDecimal256 *garrow_decimal256_new_integer(const gint64 data); GARROW_AVAILABLE_IN_3_0 -gboolean -garrow_decimal256_equal(GArrowDecimal256 *decimal, GArrowDecimal256 *other_decimal); +GArrowDecimal256 *garrow_decimal256_copy(GArrowDecimal256 *decimal); GARROW_AVAILABLE_IN_3_0 -gboolean -garrow_decimal256_not_equal(GArrowDecimal256 *decimal, GArrowDecimal256 *other_decimal); +gboolean garrow_decimal256_equal(GArrowDecimal256 *decimal, + GArrowDecimal256 *other_decimal); GARROW_AVAILABLE_IN_3_0 -gboolean -garrow_decimal256_less_than(GArrowDecimal256 *decimal, GArrowDecimal256 *other_decimal); +gboolean garrow_decimal256_not_equal(GArrowDecimal256 *decimal, + GArrowDecimal256 *other_decimal); GARROW_AVAILABLE_IN_3_0 -gboolean -garrow_decimal256_less_than_or_equal(GArrowDecimal256 *decimal, +gboolean garrow_decimal256_less_than(GArrowDecimal256 *decimal, GArrowDecimal256 *other_decimal); GARROW_AVAILABLE_IN_3_0 -gboolean -garrow_decimal256_greater_than(GArrowDecimal256 *decimal, - GArrowDecimal256 *other_decimal); +gboolean garrow_decimal256_less_than_or_equal(GArrowDecimal256 *decimal, + GArrowDecimal256 *other_decimal); GARROW_AVAILABLE_IN_3_0 -gboolean -garrow_decimal256_greater_than_or_equal(GArrowDecimal256 *decimal, +gboolean garrow_decimal256_greater_than(GArrowDecimal256 *decimal, GArrowDecimal256 *other_decimal); GARROW_AVAILABLE_IN_3_0 -gchar * -garrow_decimal256_to_string_scale(GArrowDecimal256 *decimal, gint32 scale); +gboolean garrow_decimal256_greater_than_or_equal(GArrowDecimal256 *decimal, + GArrowDecimal256 *other_decimal); GARROW_AVAILABLE_IN_3_0 -gchar * -garrow_decimal256_to_string(GArrowDecimal256 *decimal); +gchar *garrow_decimal256_to_string_scale(GArrowDecimal256 *decimal, + gint32 scale); GARROW_AVAILABLE_IN_3_0 -GBytes * -garrow_decimal256_to_bytes(GArrowDecimal256 *decimal); +gchar *garrow_decimal256_to_string(GArrowDecimal256 *decimal); GARROW_AVAILABLE_IN_3_0 -void -garrow_decimal256_abs(GArrowDecimal256 *decimal); +GBytes *garrow_decimal256_to_bytes(GArrowDecimal256 *decimal); GARROW_AVAILABLE_IN_3_0 -void -garrow_decimal256_negate(GArrowDecimal256 *decimal); +void garrow_decimal256_abs(GArrowDecimal256 *decimal); GARROW_AVAILABLE_IN_3_0 -GArrowDecimal256 * -garrow_decimal256_plus(GArrowDecimal256 *left, GArrowDecimal256 *right); +void garrow_decimal256_negate(GArrowDecimal256 *decimal); GARROW_AVAILABLE_IN_3_0 -GArrowDecimal256 * -garrow_decimal256_multiply(GArrowDecimal256 *left, GArrowDecimal256 *right); +GArrowDecimal256 *garrow_decimal256_plus(GArrowDecimal256 *left, + GArrowDecimal256 *right); GARROW_AVAILABLE_IN_3_0 -GArrowDecimal256 * -garrow_decimal256_divide(GArrowDecimal256 *left, - GArrowDecimal256 *right, - GArrowDecimal256 **remainder, - GError **error); +GArrowDecimal256 *garrow_decimal256_multiply(GArrowDecimal256 *left, + GArrowDecimal256 *right); +GARROW_AVAILABLE_IN_3_0 +GArrowDecimal256 *garrow_decimal256_divide(GArrowDecimal256 *left, + GArrowDecimal256 *right, + GArrowDecimal256 **remainder, + GError **error); GARROW_AVAILABLE_IN_3_0 GArrowDecimal256 * garrow_decimal256_rescale(GArrowDecimal256 *decimal, diff --git a/c_glib/arrow-glib/enums.h.template b/c_glib/arrow-glib/enums.h.template index e49b717fb30..b7d3c99c0be 100644 --- a/c_glib/arrow-glib/enums.h.template +++ b/c_glib/arrow-glib/enums.h.template @@ -22,8 +22,6 @@ #include -#include - G_BEGIN_DECLS /*** END file-header ***/ @@ -33,7 +31,6 @@ G_BEGIN_DECLS /*** END file-production ***/ /*** BEGIN value-header ***/ -GARROW_AVAILABLE_IN_ALL GType @enum_name@_get_type(void) G_GNUC_CONST; #define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) /*** END value-header ***/ diff --git a/c_glib/arrow-glib/error.cpp b/c_glib/arrow-glib/error.cpp index 84a1f69d937..ac61ddc499a 100644 --- a/c_glib/arrow-glib/error.cpp +++ b/c_glib/arrow-glib/error.cpp @@ -33,12 +33,14 @@ G_BEGIN_DECLS * values. */ -G_DEFINE_QUARK(garrow - error - quark, garrow_error) +G_DEFINE_QUARK(garrow-error-quark, garrow_error) G_END_DECLS gboolean -garrow_error_check(GError **error, const arrow::Status &status, const char *context) +garrow_error_check(GError **error, + const arrow::Status &status, + const char *context) { return garrow::check(error, status, context); } @@ -83,7 +85,8 @@ garrow_error_from_status(const arrow::Status &status) } arrow::StatusCode -garrow_error_to_status_code(GError *error, arrow::StatusCode default_code) +garrow_error_to_status_code(GError *error, + arrow::StatusCode default_code) { if (error->domain != GARROW_ERROR) { return default_code; @@ -124,7 +127,9 @@ garrow_error_to_status_code(GError *error, arrow::StatusCode default_code) } arrow::Status -garrow_error_to_status(GError *error, arrow::StatusCode default_code, const char *context) +garrow_error_to_status(GError *error, + arrow::StatusCode default_code, + const char *context) { std::stringstream message; message << context << ": " << g_quark_to_string(error->domain); @@ -136,9 +141,9 @@ garrow_error_to_status(GError *error, arrow::StatusCode default_code, const char } namespace garrow { - gboolean - check(GError **error, const arrow::Status &status, const char *context) - { + gboolean check(GError **error, + const arrow::Status &status, + const char *context) { if (status.ok()) { return TRUE; } else { @@ -151,4 +156,4 @@ namespace garrow { return FALSE; } } -} // namespace garrow +} diff --git a/c_glib/arrow-glib/error.h b/c_glib/arrow-glib/error.h index e0c6a591a02..d600663592f 100644 --- a/c_glib/arrow-glib/error.h +++ b/c_glib/arrow-glib/error.h @@ -21,8 +21,6 @@ #include -#include - G_BEGIN_DECLS /** @@ -39,10 +37,8 @@ G_BEGIN_DECLS * @GARROW_ERROR_SERIALIZATION: Serialization error. * @GARROW_ERROR_CODE_GENERATION: Error generating code for expression evaluation * in Gandiva. - * @GARROW_ERROR_EXPRESSION_VALIDATION: Validation errors in expression given for code - * generation. - * @GARROW_ERROR_EXECUTION: Execution error while evaluating the expression against a - * record batch. + * @GARROW_ERROR_EXPRESSION_VALIDATION: Validation errors in expression given for code generation. + * @GARROW_ERROR_EXECUTION: Execution error while evaluating the expression against a record batch. * @GARROW_ERROR_ALREADY_EXISTS: Item already exists error. * * The error codes are used by all arrow-glib functions. @@ -68,8 +64,6 @@ typedef enum { #define GARROW_ERROR garrow_error_quark() -GARROW_AVAILABLE_IN_ALL -GQuark -garrow_error_quark(void); +GQuark garrow_error_quark(void); G_END_DECLS diff --git a/c_glib/arrow-glib/error.hpp b/c_glib/arrow-glib/error.hpp index c2c9b3c6302..8a8d346f440 100644 --- a/c_glib/arrow-glib/error.hpp +++ b/c_glib/arrow-glib/error.hpp @@ -23,33 +23,26 @@ #include -GARROW_EXTERN -gboolean -garrow_error_check(GError **error, const arrow::Status &status, const char *context); - -GARROW_EXTERN -GArrowError -garrow_error_from_status(const arrow::Status &status); - -GARROW_EXTERN +gboolean garrow_error_check(GError **error, + const arrow::Status &status, + const char *context); +GArrowError garrow_error_from_status(const arrow::Status &status); arrow::StatusCode -garrow_error_to_status_code(GError *error, arrow::StatusCode default_code); - -GARROW_EXTERN -arrow::Status -garrow_error_to_status(GError *error, - arrow::StatusCode default_code, - const char *context); +garrow_error_to_status_code(GError *error, + arrow::StatusCode default_code); +arrow::Status garrow_error_to_status(GError *error, + arrow::StatusCode default_code, + const char *context); namespace garrow { - GARROW_EXTERN - gboolean - check(GError **error, const arrow::Status &status, const char *context); + gboolean check(GError **error, + const arrow::Status &status, + const char *context); template - gboolean - check(GError **error, const arrow::Status &status, CONTEXT_FUNC &&context_func) - { + gboolean check(GError **error, + const arrow::Status &status, + CONTEXT_FUNC &&context_func) { if (status.ok()) { return TRUE; } else { @@ -65,16 +58,16 @@ namespace garrow { } template - gboolean - check(GError **error, const arrow::Result &result, const char *context) - { + gboolean check(GError **error, + const arrow::Result &result, + const char *context) { return check(error, result.status(), context); } template - gboolean - check(GError **error, const arrow::Result &result, CONTEXT_FUNC &&context_func) - { + gboolean check(GError **error, + const arrow::Result &result, + CONTEXT_FUNC &&context_func) { return check(error, result.status(), context_func); } -} // namespace garrow +} diff --git a/c_glib/arrow-glib/expression.cpp b/c_glib/arrow-glib/expression.cpp index 9be8e1f68bc..419f668823d 100644 --- a/c_glib/arrow-glib/expression.cpp +++ b/c_glib/arrow-glib/expression.cpp @@ -42,16 +42,18 @@ G_BEGIN_DECLS * Since: 6.0.0 */ -typedef struct GArrowExpressionPrivate_ -{ +typedef struct GArrowExpressionPrivate_ { arrow::compute::Expression expression; } GArrowExpressionPrivate; -G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowExpression, garrow_expression, G_TYPE_OBJECT) +G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowExpression, + garrow_expression, + G_TYPE_OBJECT) -#define GARROW_EXPRESSION_GET_PRIVATE(object) \ - static_cast( \ - garrow_expression_get_instance_private(GARROW_EXPRESSION(object))) +#define GARROW_EXPRESSION_GET_PRIVATE(object) \ + static_cast( \ + garrow_expression_get_instance_private( \ + GARROW_EXPRESSION(object))) static void garrow_expression_finalize(GObject *object) @@ -65,7 +67,7 @@ static void garrow_expression_init(GArrowExpression *object) { auto priv = GARROW_EXPRESSION_GET_PRIVATE(object); - new (&priv->expression) arrow::compute::Expression(); + new(&priv->expression) arrow::compute::Expression(); } static void @@ -105,14 +107,18 @@ garrow_expression_to_string(GArrowExpression *expression) * Since: 6.0.0 */ gboolean -garrow_expression_equal(GArrowExpression *expression, GArrowExpression *other_expression) +garrow_expression_equal(GArrowExpression *expression, + GArrowExpression *other_expression) { auto priv = GARROW_EXPRESSION_GET_PRIVATE(expression); auto other_priv = GARROW_EXPRESSION_GET_PRIVATE(other_expression); return priv->expression.Equals(other_priv->expression); } -G_DEFINE_TYPE(GArrowLiteralExpression, garrow_literal_expression, GARROW_TYPE_EXPRESSION) + +G_DEFINE_TYPE(GArrowLiteralExpression, + garrow_literal_expression, + GARROW_TYPE_EXPRESSION) static void garrow_literal_expression_init(GArrowLiteralExpression *object) @@ -140,7 +146,10 @@ garrow_literal_expression_new(GArrowDatum *datum) return GARROW_LITERAL_EXPRESSION(garrow_expression_new_raw(arrow_expression)); } -G_DEFINE_TYPE(GArrowFieldExpression, garrow_field_expression, GARROW_TYPE_EXPRESSION) + +G_DEFINE_TYPE(GArrowFieldExpression, + garrow_field_expression, + GARROW_TYPE_EXPRESSION) static void garrow_field_expression_init(GArrowFieldExpression *object) @@ -157,23 +166,29 @@ garrow_field_expression_class_init(GArrowFieldExpressionClass *klass) * @reference: A field name or dot path. * @error: (nullable): Return location for a #GError or %NULL. * - * Returns: A newly created #GArrowFieldExpression on success, %NULL on + * Returns: A newly created #GArrowFieldExpression on sucess, %NULL on * error. * * Since: 6.0.0 */ GArrowFieldExpression * -garrow_field_expression_new(const gchar *reference, GError **error) +garrow_field_expression_new(const gchar *reference, + GError **error) { auto arrow_reference_result = garrow_field_reference_resolve_raw(reference); - if (!garrow::check(error, arrow_reference_result, "[field-expression][new]")) { + if (!garrow::check(error, + arrow_reference_result, + "[field-expression][new]")) { return NULL; } auto arrow_expression = arrow::compute::field_ref(*arrow_reference_result); return GARROW_FIELD_EXPRESSION(garrow_expression_new_raw(arrow_expression)); } -G_DEFINE_TYPE(GArrowCallExpression, garrow_call_expression, GARROW_TYPE_EXPRESSION) + +G_DEFINE_TYPE(GArrowCallExpression, + garrow_call_expression, + GARROW_TYPE_EXPRESSION) static void garrow_call_expression_init(GArrowCallExpression *object) @@ -210,10 +225,13 @@ garrow_call_expression_new(const gchar *function, if (options) { arrow_options.reset(garrow_function_options_get_raw(options)->Copy().release()); } - auto arrow_expression = arrow::compute::call(function, arrow_arguments, arrow_options); + auto arrow_expression = arrow::compute::call(function, + arrow_arguments, + arrow_options); return GARROW_CALL_EXPRESSION(garrow_expression_new_raw(arrow_expression)); } + G_END_DECLS GArrowExpression * diff --git a/c_glib/arrow-glib/expression.h b/c_glib/arrow-glib/expression.h index 5a6bfb456fc..a161b8306be 100644 --- a/c_glib/arrow-glib/expression.h +++ b/c_glib/arrow-glib/expression.h @@ -28,10 +28,11 @@ gchar * garrow_expression_to_string(GArrowExpression *expression); GARROW_AVAILABLE_IN_6_0 gboolean -garrow_expression_equal(GArrowExpression *expression, GArrowExpression *other_expression); +garrow_expression_equal(GArrowExpression *expression, + GArrowExpression *other_expression); + #define GARROW_TYPE_LITERAL_EXPRESSION (garrow_literal_expression_get_type()) -GARROW_AVAILABLE_IN_6_0 G_DECLARE_DERIVABLE_TYPE(GArrowLiteralExpression, garrow_literal_expression, GARROW, @@ -46,8 +47,8 @@ GARROW_AVAILABLE_IN_6_0 GArrowLiteralExpression * garrow_literal_expression_new(GArrowDatum *datum); + #define GARROW_TYPE_FIELD_EXPRESSION (garrow_field_expression_get_type()) -GARROW_AVAILABLE_IN_6_0 G_DECLARE_DERIVABLE_TYPE(GArrowFieldExpression, garrow_field_expression, GARROW, @@ -60,12 +61,16 @@ struct _GArrowFieldExpressionClass GARROW_AVAILABLE_IN_6_0 GArrowFieldExpression * -garrow_field_expression_new(const gchar *reference, GError **error); +garrow_field_expression_new(const gchar *reference, + GError **error); + #define GARROW_TYPE_CALL_EXPRESSION (garrow_call_expression_get_type()) -GARROW_AVAILABLE_IN_6_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowCallExpression, garrow_call_expression, GARROW, CALL_EXPRESSION, GArrowExpression) +G_DECLARE_DERIVABLE_TYPE(GArrowCallExpression, + garrow_call_expression, + GARROW, + CALL_EXPRESSION, + GArrowExpression) struct _GArrowCallExpressionClass { GArrowExpressionClass parent_class; diff --git a/c_glib/arrow-glib/expression.hpp b/c_glib/arrow-glib/expression.hpp index cc96badbe67..8d6e2f8d117 100644 --- a/c_glib/arrow-glib/expression.hpp +++ b/c_glib/arrow-glib/expression.hpp @@ -23,10 +23,8 @@ #include -GARROW_EXTERN + GArrowExpression * garrow_expression_new_raw(const arrow::compute::Expression &arrow_expression); - -GARROW_EXTERN arrow::compute::Expression * garrow_expression_get_raw(GArrowExpression *expression); diff --git a/c_glib/arrow-glib/field.cpp b/c_glib/arrow-glib/field.cpp index 7df92d3ad40..135a4a5d771 100644 --- a/c_glib/arrow-glib/field.cpp +++ b/c_glib/arrow-glib/field.cpp @@ -35,8 +35,7 @@ G_BEGIN_DECLS * information of the column. */ -typedef struct GArrowFieldPrivate_ -{ +typedef struct GArrowFieldPrivate_ { std::shared_ptr field; GArrowDataType *data_type; } GArrowFieldPrivate; @@ -46,10 +45,14 @@ enum { PROP_DATA_TYPE }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowField, garrow_field, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowField, + garrow_field, + G_TYPE_OBJECT) -#define GARROW_FIELD_GET_PRIVATE(obj) \ - static_cast(garrow_field_get_instance_private(GARROW_FIELD(obj))) +#define GARROW_FIELD_GET_PRIVATE(obj) \ + static_cast( \ + garrow_field_get_instance_private( \ + GARROW_FIELD(obj))) static void garrow_field_dispose(GObject *object) @@ -100,7 +103,7 @@ static void garrow_field_init(GArrowField *object) { auto priv = GARROW_FIELD_GET_PRIVATE(object); - new (&priv->field) std::shared_ptr; + new(&priv->field) std::shared_ptr; } static void @@ -108,24 +111,24 @@ garrow_field_class_init(GArrowFieldClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_field_dispose; - gobject_class->finalize = garrow_field_finalize; + gobject_class->dispose = garrow_field_dispose; + gobject_class->finalize = garrow_field_finalize; gobject_class->set_property = garrow_field_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "field", - "Field", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("field", + "Field", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FIELD, spec); - spec = g_param_spec_object( - "data-type", - "Data type", - "The data type", - GARROW_TYPE_DATA_TYPE, - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("data-type", + "Data type", + "The data type", + GARROW_TYPE_DATA_TYPE, + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_DATA_TYPE, spec); } @@ -145,7 +148,8 @@ garrow_field_class_init(GArrowFieldClass *klass) GArrowField * garrow_field_import(gpointer c_abi_schema, GError **error) { - auto arrow_field_result = arrow::ImportField(static_cast(c_abi_schema)); + auto arrow_field_result = + arrow::ImportField(static_cast(c_abi_schema)); if (garrow::check(error, arrow_field_result, "[field][import]")) { return garrow_field_new_raw(&(*arrow_field_result), nullptr); } else { @@ -161,7 +165,8 @@ garrow_field_import(gpointer c_abi_schema, GError **error) * Returns: A newly created #GArrowField. */ GArrowField * -garrow_field_new(const gchar *name, GArrowDataType *data_type) +garrow_field_new(const gchar *name, + GArrowDataType *data_type) { auto arrow_data_type = garrow_data_type_get_raw(data_type); auto arrow_field = std::make_shared(name, arrow_data_type); @@ -177,10 +182,14 @@ garrow_field_new(const gchar *name, GArrowDataType *data_type) * Returns: A newly created #GArrowField. */ GArrowField * -garrow_field_new_full(const gchar *name, GArrowDataType *data_type, gboolean nullable) +garrow_field_new_full(const gchar *name, + GArrowDataType *data_type, + gboolean nullable) { auto arrow_field = - std::make_shared(name, garrow_data_type_get_raw(data_type), nullable); + std::make_shared(name, + garrow_data_type_get_raw(data_type), + nullable); return garrow_field_new_raw(&arrow_field, data_type); } @@ -259,7 +268,8 @@ garrow_field_is_nullable(GArrowField *field) * otherwise. */ gboolean -garrow_field_equal(GArrowField *field, GArrowField *other_field) +garrow_field_equal(GArrowField *field, + GArrowField *other_field) { const auto arrow_field = garrow_field_get_raw(field); const auto arrow_other_field = garrow_field_get_raw(other_field); @@ -354,12 +364,14 @@ garrow_field_get_metadata(GArrowField *field) * Since: 3.0.0 */ GArrowField * -garrow_field_with_metadata(GArrowField *field, GHashTable *metadata) +garrow_field_with_metadata(GArrowField *field, + GHashTable *metadata) { const auto arrow_field = garrow_field_get_raw(field); auto arrow_metadata = garrow_internal_hash_table_to_metadata(metadata); auto arrow_new_field = arrow_field->WithMetadata(arrow_metadata); - return garrow_field_new_raw(&arrow_new_field, garrow_field_get_data_type(field)); + return garrow_field_new_raw(&arrow_new_field, + garrow_field_get_data_type(field)); } /** @@ -374,12 +386,14 @@ garrow_field_with_metadata(GArrowField *field, GHashTable *metadata) * Since: 3.0.0 */ GArrowField * -garrow_field_with_merged_metadata(GArrowField *field, GHashTable *metadata) +garrow_field_with_merged_metadata(GArrowField *field, + GHashTable *metadata) { const auto arrow_field = garrow_field_get_raw(field); auto arrow_metadata = garrow_internal_hash_table_to_metadata(metadata); auto arrow_new_field = arrow_field->WithMergedMetadata(arrow_metadata); - return garrow_field_new_raw(&arrow_new_field, garrow_field_get_data_type(field)); + return garrow_field_new_raw(&arrow_new_field, + garrow_field_get_data_type(field)); } /** @@ -395,7 +409,8 @@ garrow_field_remove_metadata(GArrowField *field) { const auto arrow_field = garrow_field_get_raw(field); auto arrow_new_field = arrow_field->RemoveMetadata(); - return garrow_field_new_raw(&arrow_new_field, garrow_field_get_data_type(field)); + return garrow_field_new_raw(&arrow_new_field, + garrow_field_get_data_type(field)); } G_END_DECLS @@ -410,8 +425,10 @@ garrow_field_new_raw(std::shared_ptr *arrow_field, data_type = garrow_data_type_new_raw(&arrow_data_type); data_type_need_unref = true; } - auto field = GARROW_FIELD( - g_object_new(GARROW_TYPE_FIELD, "field", arrow_field, "data-type", data_type, NULL)); + auto field = GARROW_FIELD(g_object_new(GARROW_TYPE_FIELD, + "field", arrow_field, + "data-type", data_type, + NULL)); if (data_type_need_unref) { g_object_unref(data_type); } diff --git a/c_glib/arrow-glib/field.h b/c_glib/arrow-glib/field.h index 4be13f61359..60689c36e76 100644 --- a/c_glib/arrow-glib/field.h +++ b/c_glib/arrow-glib/field.h @@ -24,8 +24,11 @@ G_BEGIN_DECLS #define GARROW_TYPE_FIELD (garrow_field_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowField, garrow_field, GARROW, FIELD, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowField, + garrow_field, + GARROW, + FIELD, + GObject) struct _GArrowFieldClass { GObjectClass parent_class; @@ -33,42 +36,33 @@ struct _GArrowFieldClass GARROW_AVAILABLE_IN_6_0 GArrowField * -garrow_field_import(gpointer c_abi_schema, GError **error); +garrow_field_import(gpointer c_abi_schema, + GError **error); -GARROW_AVAILABLE_IN_ALL -GArrowField * -garrow_field_new(const gchar *name, GArrowDataType *data_type); -GARROW_AVAILABLE_IN_ALL -GArrowField * -garrow_field_new_full(const gchar *name, GArrowDataType *data_type, gboolean nullable); +GArrowField *garrow_field_new (const gchar *name, + GArrowDataType *data_type); +GArrowField *garrow_field_new_full (const gchar *name, + GArrowDataType *data_type, + gboolean nullable); GARROW_AVAILABLE_IN_6_0 gpointer -garrow_field_export(GArrowField *field, GError **error); +garrow_field_export(GArrowField *field, + GError **error); -GARROW_AVAILABLE_IN_ALL -const gchar * -garrow_field_get_name(GArrowField *field); +const gchar *garrow_field_get_name (GArrowField *field); +GArrowDataType *garrow_field_get_data_type (GArrowField *field); +gboolean garrow_field_is_nullable (GArrowField *field); -GARROW_AVAILABLE_IN_ALL -GArrowDataType * -garrow_field_get_data_type(GArrowField *field); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_field_is_nullable(GArrowField *field); +gboolean garrow_field_equal (GArrowField *field, + GArrowField *other_field); -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_field_equal(GArrowField *field, GArrowField *other_field); - -GARROW_AVAILABLE_IN_ALL gchar * garrow_field_to_string(GArrowField *field); - GARROW_AVAILABLE_IN_3_0 gchar * -garrow_field_to_string_metadata(GArrowField *field, gboolean show_metadata); +garrow_field_to_string_metadata(GArrowField *field, + gboolean show_metadata); GARROW_AVAILABLE_IN_3_0 gboolean @@ -78,10 +72,12 @@ GHashTable * garrow_field_get_metadata(GArrowField *field); GARROW_AVAILABLE_IN_3_0 GArrowField * -garrow_field_with_metadata(GArrowField *field, GHashTable *metadata); +garrow_field_with_metadata(GArrowField *field, + GHashTable *metadata); GARROW_AVAILABLE_IN_3_0 GArrowField * -garrow_field_with_merged_metadata(GArrowField *field, GHashTable *metadata); +garrow_field_with_merged_metadata(GArrowField *field, + GHashTable *metadata); GARROW_AVAILABLE_IN_3_0 GArrowField * garrow_field_remove_metadata(GArrowField *field); diff --git a/c_glib/arrow-glib/field.hpp b/c_glib/arrow-glib/field.hpp index 67dd9e1b8fd..f8d0d46c97a 100644 --- a/c_glib/arrow-glib/field.hpp +++ b/c_glib/arrow-glib/field.hpp @@ -23,8 +23,6 @@ #include -GArrowField * -garrow_field_new_raw(std::shared_ptr *arrow_field, - GArrowDataType *data_type); -std::shared_ptr -garrow_field_get_raw(GArrowField *field); +GArrowField *garrow_field_new_raw(std::shared_ptr *arrow_field, + GArrowDataType *data_type); +std::shared_ptr garrow_field_get_raw(GArrowField *field); diff --git a/c_glib/arrow-glib/file-mode.hpp b/c_glib/arrow-glib/file-mode.hpp index c860d0d50b6..2b67379421d 100644 --- a/c_glib/arrow-glib/file-mode.hpp +++ b/c_glib/arrow-glib/file-mode.hpp @@ -23,7 +23,5 @@ #include -GArrowFileMode -garrow_file_mode_from_raw(arrow::io::FileMode::type mode); -arrow::io::FileMode::type -garrow_file_mode_to_raw(GArrowFileMode mode); +GArrowFileMode garrow_file_mode_from_raw(arrow::io::FileMode::type mode); +arrow::io::FileMode::type garrow_file_mode_to_raw(GArrowFileMode mode); diff --git a/c_glib/arrow-glib/file-system.cpp b/c_glib/arrow-glib/file-system.cpp index 9ba494e4059..a81db683d34 100644 --- a/c_glib/arrow-glib/file-system.cpp +++ b/c_glib/arrow-glib/file-system.cpp @@ -56,14 +56,11 @@ G_BEGIN_DECLS * #GArrowS3FileSystem is a class for S3-backed file system. * * #GArrowGCSFileSystem is a class for GCS-backed file system. - * - * #GArrowAzureFileSystem is a class for Azure-backed file system. */ /* arrow::fs::FileInfo */ -typedef struct GArrowFileInfoPrivate_ -{ +typedef struct GArrowFileInfoPrivate_ { arrow::fs::FileInfo file_info; } GArrowFileInfoPrivate; @@ -79,9 +76,10 @@ enum { G_DEFINE_TYPE_WITH_PRIVATE(GArrowFileInfo, garrow_file_info, G_TYPE_OBJECT) -#define GARROW_FILE_INFO_GET_PRIVATE(object) \ - static_cast( \ - garrow_file_info_get_instance_private(GARROW_FILE_INFO(object))) +#define GARROW_FILE_INFO_GET_PRIVATE(object) \ + static_cast( \ + garrow_file_info_get_instance_private( \ + GARROW_FILE_INFO(object))) static void garrow_file_info_finalize(GObject *object) @@ -104,7 +102,8 @@ garrow_file_info_set_property(GObject *object, switch (prop_id) { case PROP_FILE_INFO_TYPE: { - auto arrow_file_type = static_cast(g_value_get_enum(value)); + auto arrow_file_type = + static_cast(g_value_get_enum(value)); arrow_file_info->set_type(arrow_file_type); } break; @@ -133,7 +132,8 @@ garrow_file_info_get_property(GObject *object, GValue *value, GParamSpec *pspec) { - const auto arrow_file_info = garrow_file_info_get_raw(GARROW_FILE_INFO(object)); + const auto arrow_file_info = + garrow_file_info_get_raw(GARROW_FILE_INFO(object)); switch (prop_id) { case PROP_FILE_INFO_TYPE: @@ -175,7 +175,7 @@ static void garrow_file_info_init(GArrowFileInfo *object) { auto priv = GARROW_FILE_INFO_GET_PRIVATE(object); - new (&priv->file_info) arrow::fs::FileInfo; + new(&priv->file_info) arrow::fs::FileInfo; } static void @@ -185,7 +185,7 @@ garrow_file_info_class_init(GArrowFileInfoClass *klass) auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_file_info_finalize; + gobject_class->finalize = garrow_file_info_finalize; gobject_class->set_property = garrow_file_info_set_property; gobject_class->get_property = garrow_file_info_get_property; @@ -232,7 +232,9 @@ garrow_file_info_class_init(GArrowFileInfoClass *klass) "The file base name", info.base_name().c_str(), static_cast(G_PARAM_READABLE)); - g_object_class_install_property(gobject_class, PROP_FILE_INFO_BASE_NAME, spec); + g_object_class_install_property(gobject_class, + PROP_FILE_INFO_BASE_NAME, + spec); /** * GArrowFileInfo:dir-name: @@ -246,7 +248,9 @@ garrow_file_info_class_init(GArrowFileInfoClass *klass) "The directory base name", info.dir_name().c_str(), static_cast(G_PARAM_READABLE)); - g_object_class_install_property(gobject_class, PROP_FILE_INFO_DIR_NAME, spec); + g_object_class_install_property(gobject_class, + PROP_FILE_INFO_DIR_NAME, + spec); /** * GArrowFileInfo:extension: @@ -260,7 +264,9 @@ garrow_file_info_class_init(GArrowFileInfoClass *klass) "The file extension", info.extension().c_str(), static_cast(G_PARAM_READABLE)); - g_object_class_install_property(gobject_class, PROP_FILE_INFO_EXTENSION, spec); + g_object_class_install_property(gobject_class, + PROP_FILE_INFO_EXTENSION, + spec); /** * GArrowFileInfo:size: @@ -320,7 +326,8 @@ garrow_file_info_new(void) * Since: 0.17.0 */ gboolean -garrow_file_info_equal(GArrowFileInfo *file_info, GArrowFileInfo *other_file_info) +garrow_file_info_equal(GArrowFileInfo *file_info, + GArrowFileInfo *other_file_info) { const auto arrow_file_info = garrow_file_info_get_raw(file_info); const auto arrow_other_file_info = garrow_file_info_get_raw(other_file_info); @@ -377,8 +384,7 @@ garrow_file_info_to_string(GArrowFileInfo *file_info) /* arrow::fs::FileSelector */ -typedef struct GArrowFileSelectorPrivate_ -{ +typedef struct GArrowFileSelectorPrivate_ { arrow::fs::FileSelector file_selector; } GArrowFileSelectorPrivate; @@ -391,9 +397,10 @@ enum { G_DEFINE_TYPE_WITH_PRIVATE(GArrowFileSelector, garrow_file_selector, G_TYPE_OBJECT) -#define GARROW_FILE_SELECTOR_GET_PRIVATE(obj) \ - static_cast( \ - garrow_file_selector_get_instance_private(GARROW_FILE_SELECTOR(obj))) +#define GARROW_FILE_SELECTOR_GET_PRIVATE(obj) \ + static_cast( \ + garrow_file_selector_get_instance_private( \ + GARROW_FILE_SELECTOR(obj))) static void garrow_file_selector_finalize(GObject *object) @@ -463,7 +470,7 @@ static void garrow_file_selector_init(GArrowFileSelector *object) { auto priv = GARROW_FILE_SELECTOR_GET_PRIVATE(object); - new (&priv->file_selector) arrow::fs::FileSelector; + new(&priv->file_selector) arrow::fs::FileSelector; } static void @@ -493,7 +500,9 @@ garrow_file_selector_class_init(GArrowFileSelectorClass *klass) "The directory in which to select files", file_selector.base_dir.c_str(), static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_FILE_SELECTOR_BASE_DIR, spec); + g_object_class_install_property(gobject_class, + PROP_FILE_SELECTOR_BASE_DIR, + spec); /** * GArrowFileSelector:allow-not-found: @@ -524,7 +533,9 @@ garrow_file_selector_class_init(GArrowFileSelectorClass *klass) "Whether to recurse into subdirectories", file_selector.recursive, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_FILE_SELECTOR_RECURSIVE, spec); + g_object_class_install_property(gobject_class, + PROP_FILE_SELECTOR_RECURSIVE, + spec); /** * GArrowFileSelector:max-recursion: @@ -540,13 +551,14 @@ garrow_file_selector_class_init(GArrowFileSelectorClass *klass) INT32_MAX, file_selector.max_recursion, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_FILE_SELECTOR_MAX_RECURSION, spec); + g_object_class_install_property(gobject_class, + PROP_FILE_SELECTOR_MAX_RECURSION, + spec); } /* arrow::fs::FileSystem */ -typedef struct GArrowFileSystemPrivate_ -{ +typedef struct GArrowFileSystemPrivate_ { std::shared_ptr file_system; } GArrowFileSystemPrivate; @@ -554,11 +566,14 @@ enum { PROP_FILE_SYSTEM = 1 }; -G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowFileSystem, garrow_file_system, G_TYPE_OBJECT) +G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowFileSystem, + garrow_file_system, + G_TYPE_OBJECT) -#define GARROW_FILE_SYSTEM_GET_PRIVATE(obj) \ - static_cast( \ - garrow_file_system_get_instance_private(GARROW_FILE_SYSTEM(obj))) +#define GARROW_FILE_SYSTEM_GET_PRIVATE(obj) \ + static_cast( \ + garrow_file_system_get_instance_private( \ + GARROW_FILE_SYSTEM(obj))) static void garrow_file_system_finalize(GObject *object) @@ -593,7 +608,7 @@ static void garrow_file_system_init(GArrowFileSystem *object) { auto priv = GARROW_FILE_SYSTEM_GET_PRIVATE(object); - new (&priv->file_system) std::shared_ptr; + new(&priv->file_system) std::shared_ptr; } static void @@ -603,14 +618,14 @@ garrow_file_system_class_init(GArrowFileSystemClass *klass) auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_file_system_finalize; + gobject_class->finalize = garrow_file_system_finalize; gobject_class->set_property = garrow_file_system_set_property; - spec = g_param_spec_pointer( - "file-system", - "FileSystem", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("file-system", + "FileSystem", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FILE_SYSTEM, spec); } @@ -632,7 +647,9 @@ GArrowFileSystem * garrow_file_system_create(const gchar *uri, GError **error) { auto arrow_file_system_result = arrow::fs::FileSystemFromUri(uri); - if (garrow::check(error, arrow_file_system_result, "[file-system][create]")) { + if (garrow::check(error, + arrow_file_system_result, + "[file-system][create]")) { auto arrow_file_system = *arrow_file_system_result; return garrow_file_system_new_raw(&arrow_file_system); } else { @@ -692,7 +709,7 @@ garrow_file_system_get_file_info(GArrowFileSystem *file_system, } static inline GList * -garrow_file_infos_new(arrow::Result> &&arrow_result, +garrow_file_infos_new(arrow::Result>&& arrow_result, GError **error, const gchar *context) { @@ -968,7 +985,9 @@ garrow_file_system_open_input_stream(GArrowFileSystem *file_system, { auto arrow_file_system = garrow_file_system_get_raw(file_system); auto arrow_input_stream = arrow_file_system->OpenInputStream(path); - if (garrow::check(error, arrow_input_stream, "[file-system][open-input-stream]")) { + if (garrow::check(error, + arrow_input_stream, + "[file-system][open-input-stream]")) { return garrow_input_stream_new_raw(&(*arrow_input_stream)); } else { return NULL; @@ -995,7 +1014,9 @@ garrow_file_system_open_input_file(GArrowFileSystem *file_system, { auto arrow_file_system = garrow_file_system_get_raw(file_system); auto arrow_random_access_file = arrow_file_system->OpenInputFile(path); - if (garrow::check(error, arrow_random_access_file, "[file-system][open-input-file]")) { + if (garrow::check(error, + arrow_random_access_file, + "[file-system][open-input-file]")) { return garrow_seekable_input_stream_new_raw(&(*arrow_random_access_file)); } else { return NULL; @@ -1023,7 +1044,9 @@ garrow_file_system_open_output_stream(GArrowFileSystem *file_system, { auto arrow_file_system = garrow_file_system_get_raw(file_system); auto arrow_output_stream = arrow_file_system->OpenOutputStream(path); - if (garrow::check(error, arrow_output_stream, "[file-system][open-output-stream]")) { + if (garrow::check(error, + arrow_output_stream, + "[file-system][open-output-stream]")) { return garrow_output_stream_new_raw(&(*arrow_output_stream)); } else { return NULL; @@ -1051,7 +1074,9 @@ garrow_file_system_open_append_stream(GArrowFileSystem *file_system, { auto arrow_file_system = garrow_file_system_get_raw(file_system); auto arrow_output_stream = arrow_file_system->OpenAppendStream(path); - if (garrow::check(error, arrow_output_stream, "[file-system][open-append-stream]")) { + if (garrow::check(error, + arrow_output_stream, + "[file-system][open-append-stream]")) { return garrow_output_stream_new_raw(&(*arrow_output_stream)); } else { return NULL; @@ -1060,8 +1085,7 @@ garrow_file_system_open_append_stream(GArrowFileSystem *file_system, /* arrow::fs::SubTreeFileSystem */ -typedef struct GArrowSubTreeFileSystemPrivate_ -{ +typedef struct GArrowSubTreeFileSystemPrivate_ { GArrowFileSystem *base_file_system; } GArrowSubTreeFileSystemPrivate; @@ -1073,9 +1097,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowSubTreeFileSystem, garrow_sub_tree_file_system, GARROW_TYPE_FILE_SYSTEM) -#define GARROW_SUB_TREE_FILE_SYSTEM_GET_PRIVATE(object) \ - static_cast( \ - garrow_sub_tree_file_system_get_instance_private( \ +#define GARROW_SUB_TREE_FILE_SYSTEM_GET_PRIVATE(object) \ + static_cast( \ + garrow_sub_tree_file_system_get_instance_private( \ GARROW_SUB_TREE_FILE_SYSTEM(object))) static void @@ -1136,17 +1160,17 @@ static void garrow_sub_tree_file_system_class_init(GArrowSubTreeFileSystemClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_sub_tree_file_system_dispose; + gobject_class->dispose = garrow_sub_tree_file_system_dispose; gobject_class->set_property = garrow_sub_tree_file_system_set_property; gobject_class->get_property = garrow_sub_tree_file_system_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "base-file-system", - "Base file system", - "The base GArrowFileSystem", - GARROW_TYPE_FILE_SYSTEM, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("base-file-system", + "Base file system", + "The base GArrowFileSystem", + GARROW_TYPE_FILE_SYSTEM, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_BASE_FILE_SYSTEM, spec); } @@ -1164,16 +1188,17 @@ garrow_sub_tree_file_system_new(const gchar *base_path, GArrowFileSystem *base_file_system) { auto arrow_base_file_system = garrow_file_system_get_raw(base_file_system); - auto arrow_sub_tree_file_system = std::static_pointer_cast( - std::make_shared(base_path, arrow_base_file_system)); + auto arrow_sub_tree_file_system = + std::static_pointer_cast( + std::make_shared(base_path, + arrow_base_file_system)); return garrow_sub_tree_file_system_new_raw(&arrow_sub_tree_file_system, base_file_system); } /* arrow::fs::SlowFileSystem */ -typedef struct GArrowSlowFileSystemPrivate_ -{ +typedef struct GArrowSlowFileSystemPrivate_ { GArrowFileSystem *base_file_system; } GArrowSlowFileSystemPrivate; @@ -1181,9 +1206,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowSlowFileSystem, garrow_slow_file_system, GARROW_TYPE_FILE_SYSTEM) -#define GARROW_SLOW_FILE_SYSTEM_GET_PRIVATE(object) \ - static_cast( \ - garrow_slow_file_system_get_instance_private(GARROW_SLOW_FILE_SYSTEM(object))) +#define GARROW_SLOW_FILE_SYSTEM_GET_PRIVATE(object) \ + static_cast( \ + garrow_slow_file_system_get_instance_private( \ + GARROW_SLOW_FILE_SYSTEM(object))) static void garrow_slow_file_system_dispose(GObject *object) @@ -1243,17 +1269,17 @@ static void garrow_slow_file_system_class_init(GArrowSlowFileSystemClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_slow_file_system_dispose; + gobject_class->dispose = garrow_slow_file_system_dispose; gobject_class->set_property = garrow_slow_file_system_set_property; gobject_class->get_property = garrow_slow_file_system_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "base-file-system", - "Base file system", - "The base GArrowFileSystem", - GARROW_TYPE_FILE_SYSTEM, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("base-file-system", + "Base file system", + "The base GArrowFileSystem", + GARROW_TYPE_FILE_SYSTEM, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_BASE_FILE_SYSTEM, spec); } @@ -1276,9 +1302,12 @@ garrow_slow_file_system_new_average_latency(GArrowFileSystem *base_file_system, gdouble average_latency) { auto arrow_base_file_system = garrow_file_system_get_raw(base_file_system); - auto arrow_slow_file_system = std::static_pointer_cast( - std::make_shared(arrow_base_file_system, average_latency)); - return garrow_slow_file_system_new_raw(&arrow_slow_file_system, base_file_system); + auto arrow_slow_file_system = + std::static_pointer_cast( + std::make_shared(arrow_base_file_system, + average_latency)); + return garrow_slow_file_system_new_raw(&arrow_slow_file_system, + base_file_system); } /** @@ -1300,14 +1329,19 @@ garrow_slow_file_system_new_average_latency_and_seed(GArrowFileSystem *base_file gint32 seed) { auto arrow_base_file_system = garrow_file_system_get_raw(base_file_system); - auto arrow_slow_file_system = std::static_pointer_cast( - std::make_shared(arrow_base_file_system, - average_latency, - seed)); - return garrow_slow_file_system_new_raw(&arrow_slow_file_system, base_file_system); + auto arrow_slow_file_system = + std::static_pointer_cast( + std::make_shared(arrow_base_file_system, + average_latency, + seed)); + return garrow_slow_file_system_new_raw(&arrow_slow_file_system, + base_file_system); } -G_DEFINE_TYPE(GArrowMockFileSystem, garrow_mock_file_system, GARROW_TYPE_FILE_SYSTEM) + +G_DEFINE_TYPE(GArrowMockFileSystem, + garrow_mock_file_system, + GARROW_TYPE_FILE_SYSTEM) static void garrow_mock_file_system_init(GArrowMockFileSystem *file_system) @@ -1319,7 +1353,10 @@ garrow_mock_file_system_class_init(GArrowMockFileSystemClass *klass) { } -G_DEFINE_TYPE(GArrowHDFSFileSystem, garrow_hdfs_file_system, GARROW_TYPE_FILE_SYSTEM) + +G_DEFINE_TYPE(GArrowHDFSFileSystem, + garrow_hdfs_file_system, + GARROW_TYPE_FILE_SYSTEM) static void garrow_hdfs_file_system_init(GArrowHDFSFileSystem *file_system) @@ -1331,29 +1368,20 @@ garrow_hdfs_file_system_class_init(GArrowHDFSFileSystemClass *klass) { } + #ifndef ARROW_S3 namespace arrow { namespace fs { - enum class S3LogLevel : int8_t { - Off, - Fatal, - Error, - Warn, - Info, - Debug, - Trace - }; + enum class S3LogLevel : int8_t { Off, Fatal, Error, Warn, Info, Debug, Trace }; - struct ARROW_EXPORT S3GlobalOptions - { + struct ARROW_EXPORT S3GlobalOptions { S3LogLevel log_level; }; - } // namespace fs -} // namespace arrow + } +} #endif -typedef struct GArrowS3GlobalOptionsPrivate_ -{ +typedef struct GArrowS3GlobalOptionsPrivate_ { arrow::fs::S3GlobalOptions options; } GArrowS3GlobalOptionsPrivate; @@ -1361,11 +1389,14 @@ enum { PROP_S3_GLOBAL_OPTIONS_LOG_LEVEL = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowS3GlobalOptions, garrow_s3_global_options, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowS3GlobalOptions, + garrow_s3_global_options, + G_TYPE_OBJECT) -#define GARROW_S3_GLOBAL_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_s3_global_options_get_instance_private(GARROW_S3_GLOBAL_OPTIONS(object))) +#define GARROW_S3_GLOBAL_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_s3_global_options_get_instance_private( \ + GARROW_S3_GLOBAL_OPTIONS(object))) static void garrow_s3_global_options_finalize(GObject *object) @@ -1382,7 +1413,8 @@ garrow_s3_global_options_set_property(GObject *object, GParamSpec *pspec) { #ifdef ARROW_S3 - auto arrow_options = garrow_s3_global_options_get_raw(GARROW_S3_GLOBAL_OPTIONS(object)); + auto arrow_options = + garrow_s3_global_options_get_raw(GARROW_S3_GLOBAL_OPTIONS(object)); switch (prop_id) { case PROP_S3_GLOBAL_OPTIONS_LOG_LEVEL: @@ -1405,11 +1437,13 @@ garrow_s3_global_options_get_property(GObject *object, GParamSpec *pspec) { #ifdef ARROW_S3 - auto arrow_options = garrow_s3_global_options_get_raw(GARROW_S3_GLOBAL_OPTIONS(object)); + auto arrow_options = + garrow_s3_global_options_get_raw(GARROW_S3_GLOBAL_OPTIONS(object)); switch (prop_id) { case PROP_S3_GLOBAL_OPTIONS_LOG_LEVEL: - g_value_set_enum(value, static_cast(arrow_options->log_level)); + g_value_set_enum(value, + static_cast(arrow_options->log_level)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -1424,7 +1458,7 @@ static void garrow_s3_global_options_init(GArrowS3GlobalOptions *object) { auto priv = GARROW_S3_GLOBAL_OPTIONS_GET_PRIVATE(object); - new (&priv->options) arrow::fs::S3GlobalOptions; + new(&priv->options) arrow::fs::S3GlobalOptions; } static void @@ -1434,7 +1468,7 @@ garrow_s3_global_options_class_init(GArrowS3GlobalOptionsClass *klass) auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_s3_global_options_finalize; + gobject_class->finalize = garrow_s3_global_options_finalize; gobject_class->set_property = garrow_s3_global_options_set_property; gobject_class->get_property = garrow_s3_global_options_get_property; @@ -1445,14 +1479,16 @@ garrow_s3_global_options_class_init(GArrowS3GlobalOptionsClass *klass) * * Since: 7.0.0 */ - spec = - g_param_spec_enum("log-level", - "Log level", - "The log level of S3 APIs", - GARROW_TYPE_S3_LOG_LEVEL, - GARROW_S3_LOG_LEVEL_FATAL, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); - g_object_class_install_property(gobject_class, PROP_S3_GLOBAL_OPTIONS_LOG_LEVEL, spec); + spec = g_param_spec_enum("log-level", + "Log level", + "The log level of S3 APIs", + GARROW_TYPE_S3_LOG_LEVEL, + GARROW_S3_LOG_LEVEL_FATAL, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT)); + g_object_class_install_property(gobject_class, + PROP_S3_GLOBAL_OPTIONS_LOG_LEVEL, + spec); } /** @@ -1465,9 +1501,11 @@ garrow_s3_global_options_class_init(GArrowS3GlobalOptionsClass *klass) GArrowS3GlobalOptions * garrow_s3_global_options_new(void) { - return GARROW_S3_GLOBAL_OPTIONS(g_object_new(GARROW_TYPE_S3_GLOBAL_OPTIONS, NULL)); + return GARROW_S3_GLOBAL_OPTIONS( + g_object_new(GARROW_TYPE_S3_GLOBAL_OPTIONS, NULL)); } + /** * garrow_s3_is_enabled: * @@ -1501,7 +1539,8 @@ garrow_s3_is_enabled(void) * Since: 7.0.0 */ gboolean -garrow_s3_initialize(GArrowS3GlobalOptions *options, GError **error) +garrow_s3_initialize(GArrowS3GlobalOptions *options, + GError **error) { #ifdef ARROW_S3 auto arrow_options = garrow_s3_global_options_get_raw(options); @@ -1509,10 +1548,10 @@ garrow_s3_initialize(GArrowS3GlobalOptions *options, GError **error) arrow::fs::InitializeS3(*arrow_options), "[s3][initialize]"); #else - return garrow::check( - error, - arrow::Status::NotImplemented("Apache Arrow C++ isn't built with S3 support"), - "[s3][initialize]"); + return garrow::check(error, + arrow::Status::NotImplemented( + "Apache Arrow C++ isn't built with S3 support"), + "[s3][initialize]"); #endif } @@ -1530,16 +1569,21 @@ gboolean garrow_s3_finalize(GError **error) { #ifdef ARROW_S3 - return garrow::check(error, arrow::fs::FinalizeS3(), "[s3][finalize]"); + return garrow::check(error, + arrow::fs::FinalizeS3(), + "[s3][finalize]"); #else - return garrow::check( - error, - arrow::Status::NotImplemented("Apache Arrow C++ isn't built with S3 support"), - "[s3][initialize]"); + return garrow::check(error, + arrow::Status::NotImplemented( + "Apache Arrow C++ isn't built with S3 support"), + "[s3][initialize]"); #endif } -G_DEFINE_TYPE(GArrowS3FileSystem, garrow_s3_file_system, GARROW_TYPE_FILE_SYSTEM) + +G_DEFINE_TYPE(GArrowS3FileSystem, + garrow_s3_file_system, + GARROW_TYPE_FILE_SYSTEM) static void garrow_s3_file_system_init(GArrowS3FileSystem *file_system) @@ -1551,7 +1595,10 @@ garrow_s3_file_system_class_init(GArrowS3FileSystemClass *klass) { } -G_DEFINE_TYPE(GArrowGCSFileSystem, garrow_gcs_file_system, GARROW_TYPE_FILE_SYSTEM) + +G_DEFINE_TYPE(GArrowGCSFileSystem, + garrow_gcs_file_system, + GARROW_TYPE_FILE_SYSTEM) static void garrow_gcs_file_system_init(GArrowGCSFileSystem *file_system) @@ -1563,17 +1610,6 @@ garrow_gcs_file_system_class_init(GArrowGCSFileSystemClass *klass) { } -G_DEFINE_TYPE(GArrowAzureFileSystem, garrow_azure_file_system, GARROW_TYPE_FILE_SYSTEM) - -static void -garrow_azure_file_system_init(GArrowAzureFileSystem *file_system) -{ -} - -static void -garrow_azure_file_system_class_init(GArrowAzureFileSystemClass *klass) -{ -} G_END_DECLS @@ -1593,7 +1629,8 @@ garrow_file_info_get_raw(GArrowFileInfo *file_info) } GArrowFileSystem * -garrow_file_system_new_raw(std::shared_ptr *arrow_file_system) +garrow_file_system_new_raw( + std::shared_ptr *arrow_file_system) { const auto &type_name = (*arrow_file_system)->type_name(); @@ -1606,14 +1643,13 @@ garrow_file_system_new_raw(std::shared_ptr *arrow_file_sy file_system_type = GARROW_TYPE_S3_FILE_SYSTEM; } else if (type_name == "gcs") { file_system_type = GARROW_TYPE_GCS_FILE_SYSTEM; - } else if (type_name == "abfs") { - file_system_type = GARROW_TYPE_AZURE_FILE_SYSTEM; } else if (type_name == "mock") { file_system_type = GARROW_TYPE_MOCK_FILE_SYSTEM; } - return GARROW_FILE_SYSTEM( - g_object_new(file_system_type, "file-system", arrow_file_system, NULL)); + return GARROW_FILE_SYSTEM(g_object_new(file_system_type, + "file-system", arrow_file_system, + NULL)); } std::shared_ptr @@ -1628,24 +1664,23 @@ garrow_sub_tree_file_system_new_raw( std::shared_ptr *arrow_file_system, GArrowFileSystem *base_file_system) { - return GARROW_SUB_TREE_FILE_SYSTEM(g_object_new(GARROW_TYPE_SUB_TREE_FILE_SYSTEM, - "file-system", - arrow_file_system, - "base-file-system", - base_file_system, - NULL)); + return GARROW_SUB_TREE_FILE_SYSTEM( + g_object_new(GARROW_TYPE_SUB_TREE_FILE_SYSTEM, + "file-system", arrow_file_system, + "base-file-system", base_file_system, + NULL)); } GArrowSlowFileSystem * -garrow_slow_file_system_new_raw(std::shared_ptr *arrow_file_system, - GArrowFileSystem *base_file_system) +garrow_slow_file_system_new_raw( + std::shared_ptr *arrow_file_system, + GArrowFileSystem *base_file_system) { - return GARROW_SLOW_FILE_SYSTEM(g_object_new(GARROW_TYPE_SLOW_FILE_SYSTEM, - "file-system", - arrow_file_system, - "base-file-system", - base_file_system, - NULL)); + return GARROW_SLOW_FILE_SYSTEM( + g_object_new(GARROW_TYPE_SLOW_FILE_SYSTEM, + "file-system", arrow_file_system, + "base-file-system", base_file_system, + NULL)); } #ifdef ARROW_S3 diff --git a/c_glib/arrow-glib/file-system.h b/c_glib/arrow-glib/file-system.h index 9a903c6af68..687404734a2 100644 --- a/c_glib/arrow-glib/file-system.h +++ b/c_glib/arrow-glib/file-system.h @@ -50,40 +50,42 @@ typedef enum { GARROW_FILE_TYPE_DIR } GArrowFileType; + /* arrow::fs::FileInfo */ #define GARROW_TYPE_FILE_INFO (garrow_file_info_get_type()) -GARROW_AVAILABLE_IN_0_17 -G_DECLARE_DERIVABLE_TYPE(GArrowFileInfo, garrow_file_info, GARROW, FILE_INFO, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowFileInfo, + garrow_file_info, + GARROW, + FILE_INFO, + GObject) struct _GArrowFileInfoClass { GObjectClass parent_class; }; GARROW_AVAILABLE_IN_0_17 -GArrowFileInfo * -garrow_file_info_new(void); +GArrowFileInfo *garrow_file_info_new(void); GARROW_AVAILABLE_IN_0_17 -gboolean -garrow_file_info_equal(GArrowFileInfo *file_info, GArrowFileInfo *other_file_info); +gboolean garrow_file_info_equal(GArrowFileInfo *file_info, + GArrowFileInfo *other_file_info); GARROW_AVAILABLE_IN_0_17 -gboolean -garrow_file_info_is_file(GArrowFileInfo *file_info); +gboolean garrow_file_info_is_file(GArrowFileInfo *file_info); GARROW_AVAILABLE_IN_0_17 -gboolean -garrow_file_info_is_dir(GArrowFileInfo *file_info); +gboolean garrow_file_info_is_dir(GArrowFileInfo *file_info); GARROW_AVAILABLE_IN_0_17 -gchar * -garrow_file_info_to_string(GArrowFileInfo *file_info); +gchar *garrow_file_info_to_string(GArrowFileInfo *file_info); /* arrow::fs::FileSelector */ #define GARROW_TYPE_FILE_SELECTOR (garrow_file_selector_get_type()) -GARROW_AVAILABLE_IN_0_17 -G_DECLARE_DERIVABLE_TYPE( - GArrowFileSelector, garrow_file_selector, GARROW, FILE_SELECTOR, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowFileSelector, + garrow_file_selector, + GARROW, + FILE_SELECTOR, + GObject) struct _GArrowFileSelectorClass { GObjectClass parent_class; @@ -92,9 +94,11 @@ struct _GArrowFileSelectorClass /* arrow::fs::FileSystem */ #define GARROW_TYPE_FILE_SYSTEM (garrow_file_system_get_type()) -GARROW_AVAILABLE_IN_0_17 -G_DECLARE_DERIVABLE_TYPE( - GArrowFileSystem, garrow_file_system, GARROW, FILE_SYSTEM, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowFileSystem, + garrow_file_system, + GARROW, + FILE_SYSTEM, + GObject) struct _GArrowFileSystemClass { GObjectClass parent_class; @@ -102,11 +106,11 @@ struct _GArrowFileSystemClass GARROW_AVAILABLE_IN_3_0 GArrowFileSystem * -garrow_file_system_create(const gchar *uri, GError **error); +garrow_file_system_create(const gchar *uri, + GError **error); GARROW_AVAILABLE_IN_0_17 -gchar * -garrow_file_system_get_type_name(GArrowFileSystem *file_system); +gchar *garrow_file_system_get_type_name(GArrowFileSystem *file_system); GARROW_AVAILABLE_IN_0_17 GArrowFileInfo * @@ -115,11 +119,10 @@ garrow_file_system_get_file_info(GArrowFileSystem *file_system, GError **error); GARROW_AVAILABLE_IN_0_17 -GList * -garrow_file_system_get_file_infos_paths(GArrowFileSystem *file_system, - const gchar **paths, - gsize n_paths, - GError **error); +GList *garrow_file_system_get_file_infos_paths(GArrowFileSystem *file_system, + const gchar **paths, + gsize n_paths, + GError **error); GARROW_AVAILABLE_IN_0_17 GList * @@ -128,50 +131,43 @@ garrow_file_system_get_file_infos_selector(GArrowFileSystem *file_system, GError **error); GARROW_AVAILABLE_IN_0_17 -gboolean -garrow_file_system_create_dir(GArrowFileSystem *file_system, - const gchar *path, - gboolean recursive, - GError **error); - -GARROW_AVAILABLE_IN_0_17 -gboolean -garrow_file_system_delete_dir(GArrowFileSystem *file_system, - const gchar *path, - GError **error); +gboolean garrow_file_system_create_dir(GArrowFileSystem *file_system, + const gchar *path, + gboolean recursive, + GError **error); GARROW_AVAILABLE_IN_0_17 -gboolean -garrow_file_system_delete_dir_contents(GArrowFileSystem *file_system, +gboolean garrow_file_system_delete_dir(GArrowFileSystem *file_system, const gchar *path, GError **error); GARROW_AVAILABLE_IN_0_17 -gboolean -garrow_file_system_delete_file(GArrowFileSystem *file_system, - const gchar *path, - GError **error); +gboolean garrow_file_system_delete_dir_contents(GArrowFileSystem *file_system, + const gchar *path, + GError **error); GARROW_AVAILABLE_IN_0_17 -gboolean -garrow_file_system_delete_files(GArrowFileSystem *file_system, - const gchar **paths, - gsize n_paths, - GError **error); +gboolean garrow_file_system_delete_file(GArrowFileSystem *file_system, + const gchar *path, + GError **error); GARROW_AVAILABLE_IN_0_17 -gboolean -garrow_file_system_move(GArrowFileSystem *file_system, - const gchar *src, - const gchar *dest, - GError **error); +gboolean garrow_file_system_delete_files(GArrowFileSystem *file_system, + const gchar **paths, + gsize n_paths, + GError **error); GARROW_AVAILABLE_IN_0_17 -gboolean -garrow_file_system_copy_file(GArrowFileSystem *file_system, - const gchar *src, - const gchar *dest, - GError **error); +gboolean garrow_file_system_move(GArrowFileSystem *file_system, + const gchar *src, + const gchar *dest, + GError **error); + +GARROW_AVAILABLE_IN_0_17 +gboolean garrow_file_system_copy_file(GArrowFileSystem *file_system, + const gchar *src, + const gchar *dest, + GError **error); GARROW_AVAILABLE_IN_0_17 GArrowInputStream * @@ -200,7 +196,6 @@ garrow_file_system_open_append_stream(GArrowFileSystem *file_system, /* arrow::fs::SubTreeFileSystem */ #define GARROW_TYPE_SUB_TREE_FILE_SYSTEM (garrow_sub_tree_file_system_get_type()) -GARROW_AVAILABLE_IN_0_17 G_DECLARE_DERIVABLE_TYPE(GArrowSubTreeFileSystem, garrow_sub_tree_file_system, GARROW, @@ -219,7 +214,6 @@ garrow_sub_tree_file_system_new(const gchar *base_path, /* arrow::fs::SlowFileSystem */ #define GARROW_TYPE_SLOW_FILE_SYSTEM (garrow_slow_file_system_get_type()) -GARROW_AVAILABLE_IN_0_17 G_DECLARE_DERIVABLE_TYPE(GArrowSlowFileSystem, garrow_slow_file_system, GARROW, @@ -248,8 +242,9 @@ garrow_slow_file_system_new_average_latency_and_seed(GArrowFileSystem *base_file gdouble average_latency, gint32 seed); + + #define GARROW_TYPE_MOCK_FILE_SYSTEM (garrow_mock_file_system_get_type()) -GARROW_AVAILABLE_IN_0_17 G_DECLARE_DERIVABLE_TYPE(GArrowMockFileSystem, garrow_mock_file_system, GARROW, @@ -260,8 +255,8 @@ struct _GArrowMockFileSystemClass GArrowFileSystemClass parent_class; }; + #define GARROW_TYPE_HDFS_FILE_SYSTEM (garrow_hdfs_file_system_get_type()) -GARROW_AVAILABLE_IN_0_17 G_DECLARE_DERIVABLE_TYPE(GArrowHDFSFileSystem, garrow_hdfs_file_system, GARROW, @@ -272,6 +267,7 @@ struct _GArrowHDFSFileSystemClass GArrowFileSystemClass parent_class; }; + /** * GArrowS3LogLevel: * @GARROW_S3_LOG_LEVEL_OFF: Off. @@ -296,10 +292,13 @@ typedef enum { GARROW_S3_LOG_LEVEL_TRACE, } GArrowS3LogLevel; + #define GARROW_TYPE_S3_GLOBAL_OPTIONS (garrow_s3_global_options_get_type()) -GARROW_AVAILABLE_IN_7_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowS3GlobalOptions, garrow_s3_global_options, GARROW, S3_GLOBAL_OPTIONS, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowS3GlobalOptions, + garrow_s3_global_options, + GARROW, + S3_GLOBAL_OPTIONS, + GObject) struct _GArrowS3GlobalOptionsClass { GObjectClass parent_class; @@ -309,44 +308,41 @@ GARROW_AVAILABLE_IN_7_0 GArrowS3GlobalOptions * garrow_s3_global_options_new(void); + GARROW_AVAILABLE_IN_7_0 gboolean garrow_s3_is_enabled(void); GARROW_AVAILABLE_IN_7_0 gboolean -garrow_s3_initialize(GArrowS3GlobalOptions *options, GError **error); +garrow_s3_initialize(GArrowS3GlobalOptions *options, + GError **error); GARROW_AVAILABLE_IN_7_0 gboolean garrow_s3_finalize(GError **error); + #define GARROW_TYPE_S3_FILE_SYSTEM (garrow_s3_file_system_get_type()) -GARROW_AVAILABLE_IN_7_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowS3FileSystem, garrow_s3_file_system, GARROW, S3_FILE_SYSTEM, GArrowFileSystem) +G_DECLARE_DERIVABLE_TYPE(GArrowS3FileSystem, + garrow_s3_file_system, + GARROW, + S3_FILE_SYSTEM, + GArrowFileSystem) struct _GArrowS3FileSystemClass { GArrowFileSystemClass parent_class; }; -#define GARROW_TYPE_GCS_FILE_SYSTEM (garrow_gcs_file_system_get_type()) -GARROW_AVAILABLE_IN_7_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowGCSFileSystem, garrow_gcs_file_system, GARROW, GCS_FILE_SYSTEM, GArrowFileSystem) -struct _GArrowGCSFileSystemClass -{ - GArrowFileSystemClass parent_class; -}; -#define GARROW_TYPE_AZURE_FILE_SYSTEM (garrow_azure_file_system_get_type()) -GARROW_AVAILABLE_IN_18_0 -G_DECLARE_DERIVABLE_TYPE(GArrowAzureFileSystem, - garrow_azure_file_system, +#define GARROW_TYPE_GCS_FILE_SYSTEM (garrow_gcs_file_system_get_type()) +G_DECLARE_DERIVABLE_TYPE(GArrowGCSFileSystem, + garrow_gcs_file_system, GARROW, - AZURE_FILE_SYSTEM, + GCS_FILE_SYSTEM, GArrowFileSystem) -struct _GArrowAzureFileSystemClass +struct _GArrowGCSFileSystemClass { GArrowFileSystemClass parent_class; }; + G_END_DECLS diff --git a/c_glib/arrow-glib/file-system.hpp b/c_glib/arrow-glib/file-system.hpp index c535958301c..6d33ba74fb1 100644 --- a/c_glib/arrow-glib/file-system.hpp +++ b/c_glib/arrow-glib/file-system.hpp @@ -23,35 +23,31 @@ #include -GARROW_EXTERN GArrowFileInfo * garrow_file_info_new_raw(const arrow::fs::FileInfo &arrow_file_info); -GARROW_EXTERN arrow::fs::FileInfo * garrow_file_info_get_raw(GArrowFileInfo *file_info); -GARROW_EXTERN GArrowFileSystem * -garrow_file_system_new_raw(std::shared_ptr *arrow_file_system); +garrow_file_system_new_raw( + std::shared_ptr *arrow_file_system); -GARROW_EXTERN std::shared_ptr garrow_file_system_get_raw(GArrowFileSystem *file_system); -GARROW_EXTERN GArrowSubTreeFileSystem * garrow_sub_tree_file_system_new_raw( std::shared_ptr *arrow_file_system, GArrowFileSystem *base_file_system); -GARROW_EXTERN GArrowSlowFileSystem * -garrow_slow_file_system_new_raw(std::shared_ptr *arrow_file_system, - GArrowFileSystem *base_file_system); +garrow_slow_file_system_new_raw( + std::shared_ptr *arrow_file_system, + GArrowFileSystem *base_file_system); + #ifdef ARROW_S3 -GARROW_EXTERN arrow::fs::S3GlobalOptions * garrow_s3_global_options_get_raw(GArrowS3GlobalOptions *options); #endif diff --git a/c_glib/arrow-glib/file.cpp b/c_glib/arrow-glib/file.cpp index 5ab77154ab1..422336b908f 100644 --- a/c_glib/arrow-glib/file.cpp +++ b/c_glib/arrow-glib/file.cpp @@ -33,7 +33,9 @@ G_BEGIN_DECLS * #GArrowFile is an interface for file. */ -G_DEFINE_INTERFACE(GArrowFile, garrow_file, G_TYPE_OBJECT) +G_DEFINE_INTERFACE(GArrowFile, + garrow_file, + G_TYPE_OBJECT) static void garrow_file_default_init(GArrowFileInterface *iface) @@ -48,7 +50,8 @@ garrow_file_default_init(GArrowFileInterface *iface) * Returns: %TRUE on success, %FALSE if there was an error. */ gboolean -garrow_file_close(GArrowFile *file, GError **error) +garrow_file_close(GArrowFile *file, + GError **error) { auto arrow_file = garrow_file_get_raw(file); @@ -79,7 +82,8 @@ garrow_file_is_closed(GArrowFile *file) * Returns: The current offset on success, -1 if there was an error. */ gint64 -garrow_file_tell(GArrowFile *file, GError **error) +garrow_file_tell(GArrowFile *file, + GError **error) { auto arrow_file = garrow_file_get_raw(file); diff --git a/c_glib/arrow-glib/file.h b/c_glib/arrow-glib/file.h index 799dd83b9c2..45319b85c96 100644 --- a/c_glib/arrow-glib/file.h +++ b/c_glib/arrow-glib/file.h @@ -19,31 +19,25 @@ #pragma once -#include - #include +#include #include G_BEGIN_DECLS #define GARROW_TYPE_FILE (garrow_file_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_INTERFACE(GArrowFile, garrow_file, GARROW, FILE, GObject) - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_file_close(GArrowFile *file, GError **error); - +G_DECLARE_INTERFACE(GArrowFile, + garrow_file, + GARROW, + FILE, + GObject) + +gboolean garrow_file_close(GArrowFile *file, + GError **error); GARROW_AVAILABLE_IN_0_13 -gboolean -garrow_file_is_closed(GArrowFile *file); - -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_file_tell(GArrowFile *file, GError **error); - -GARROW_AVAILABLE_IN_ALL -GArrowFileMode -garrow_file_get_mode(GArrowFile *file); +gboolean garrow_file_is_closed(GArrowFile *file); +gint64 garrow_file_tell(GArrowFile *file, + GError **error); +GArrowFileMode garrow_file_get_mode(GArrowFile *file); G_END_DECLS diff --git a/c_glib/arrow-glib/file.hpp b/c_glib/arrow-glib/file.hpp index 298d308ef2f..c4cc78747cf 100644 --- a/c_glib/arrow-glib/file.hpp +++ b/c_glib/arrow-glib/file.hpp @@ -35,5 +35,4 @@ struct _GArrowFileInterface std::shared_ptr (*get_raw)(GArrowFile *file); }; -std::shared_ptr -garrow_file_get_raw(GArrowFile *file); +std::shared_ptr garrow_file_get_raw(GArrowFile *file); diff --git a/c_glib/arrow-glib/gobject-type.h b/c_glib/arrow-glib/gobject-type.h new file mode 100644 index 00000000000..c9ac9ea8175 --- /dev/null +++ b/c_glib/arrow-glib/gobject-type.h @@ -0,0 +1,116 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#pragma once + +#include + +#ifndef G_DECLARE_DERIVABLE_TYPE +# define G_DECLARE_DERIVABLE_TYPE(ObjectName, \ + object_name, \ + MODULE_NAME, \ + OBJECT_NAME, \ + ParentName) \ + typedef struct _ ## ObjectName ObjectName; \ + typedef struct _ ## ObjectName ## Class ObjectName ## Class; \ + \ + struct _ ## ObjectName \ + { \ + ParentName parent_instance; \ + }; \ + \ + GType object_name ## _get_type(void) G_GNUC_CONST; \ + \ + static inline ObjectName * \ + MODULE_NAME ## _ ## OBJECT_NAME(gpointer object) \ + { \ + return G_TYPE_CHECK_INSTANCE_CAST(object, \ + object_name ## _get_type(), \ + ObjectName); \ + } \ + \ + static inline ObjectName ## Class * \ + MODULE_NAME ## _ ## OBJECT_NAME ## _CLASS(gpointer klass) \ + { \ + return G_TYPE_CHECK_CLASS_CAST(klass, \ + object_name ## _get_type(), \ + ObjectName ## Class); \ + } \ + \ + static inline gboolean \ + MODULE_NAME ## _IS_ ## OBJECT_NAME(gpointer object) \ + { \ + return G_TYPE_CHECK_INSTANCE_TYPE(object, \ + object_name ## _get_type()); \ + } \ + \ + static inline gboolean \ + MODULE_NAME ## _IS_ ## OBJECT_NAME ## _CLASS(gpointer klass) \ + { \ + return G_TYPE_CHECK_CLASS_TYPE(klass, \ + object_name ## _get_type()); \ + } \ + \ + static inline ObjectName ## Class * \ + MODULE_NAME ## _ ## ObjectName ## _GET_CLASS(gpointer object) \ + { \ + return G_TYPE_INSTANCE_GET_CLASS(object, \ + object_name ## _get_type(), \ + ObjectName ## Class); \ + } +#endif + +#ifndef G_DECLARE_INTERFACE +# define G_DECLARE_INTERFACE(ModuleObjectName, \ + module_object_name, \ + MODULE_NAME, \ + OBJECT_NAME, \ + PrerequisiteName) \ + typedef struct \ + _ ## ModuleObjectName \ + ModuleObjectName; \ + typedef struct \ + _ ## ModuleObjectName ## Interface \ + ModuleObjectName ## Interface; \ + \ + GType module_object_name ## _get_type(void); \ + \ + static inline ModuleObjectName * \ + MODULE_NAME ## _ ## OBJECT_NAME(gpointer object) \ + { \ + return G_TYPE_CHECK_INSTANCE_CAST(object, \ + module_object_name ## _get_type(), \ + ModuleObjectName); \ + } \ + \ + static inline gboolean \ + MODULE_NAME ## _IS_ ## OBJECT_NAME(gpointer object) \ + { \ + return G_TYPE_CHECK_INSTANCE_TYPE( \ + object, module_object_name ## _get_type()); \ + } \ + \ + static inline ModuleObjectName ## Interface * \ + MODULE_NAME ## _ ## OBJECT_NAME ## _GET_IFACE(gpointer object) \ + { \ + return G_TYPE_INSTANCE_GET_INTERFACE(object, \ + module_object_name ## _get_type(), \ + ModuleObjectName ## Interface); \ + } +#endif diff --git a/c_glib/arrow-glib/input-stream.cpp b/c_glib/arrow-glib/input-stream.cpp index 52c79993e4c..844c83d629b 100644 --- a/c_glib/arrow-glib/input-stream.cpp +++ b/c_glib/arrow-glib/input-stream.cpp @@ -35,22 +35,6 @@ #include #include -static std::shared_ptr -garrow_input_stream_get_raw_file_interface(GArrowFile *file) -{ - auto input_stream = GARROW_INPUT_STREAM(file); - auto arrow_input_stream = garrow_input_stream_get_raw(input_stream); - return arrow_input_stream; -} - -static std::shared_ptr -garrow_input_stream_get_raw_readable_interface(GArrowReadable *readable) -{ - auto input_stream = GARROW_INPUT_STREAM(readable); - auto arrow_input_stream = garrow_input_stream_get_raw(input_stream); - return arrow_input_stream; -} - G_BEGIN_DECLS /** @@ -78,8 +62,7 @@ G_BEGIN_DECLS * compressed input stream. */ -typedef struct GArrowInputStreamPrivate_ -{ +typedef struct GArrowInputStreamPrivate_ { std::shared_ptr input_stream; } GArrowInputStreamPrivate; @@ -87,30 +70,48 @@ enum { PROP_INPUT_STREAM = 1 }; +static std::shared_ptr +garrow_input_stream_get_raw_file_interface(GArrowFile *file) +{ + auto input_stream = GARROW_INPUT_STREAM(file); + auto arrow_input_stream = + garrow_input_stream_get_raw(input_stream); + return arrow_input_stream; +} + static void garrow_input_stream_file_interface_init(GArrowFileInterface *iface) { iface->get_raw = garrow_input_stream_get_raw_file_interface; } +static std::shared_ptr +garrow_input_stream_get_raw_readable_interface(GArrowReadable *readable) +{ + auto input_stream = GARROW_INPUT_STREAM(readable); + auto arrow_input_stream = garrow_input_stream_get_raw(input_stream); + return arrow_input_stream; +} + static void garrow_input_stream_readable_interface_init(GArrowReadableInterface *iface) { iface->get_raw = garrow_input_stream_get_raw_readable_interface; } -G_DEFINE_TYPE_WITH_CODE( - GArrowInputStream, - garrow_input_stream, - G_TYPE_INPUT_STREAM, - G_ADD_PRIVATE(GArrowInputStream) - G_IMPLEMENT_INTERFACE(GARROW_TYPE_FILE, garrow_input_stream_file_interface_init) - G_IMPLEMENT_INTERFACE(GARROW_TYPE_READABLE, - garrow_input_stream_readable_interface_init)) +G_DEFINE_TYPE_WITH_CODE(GArrowInputStream, + garrow_input_stream, + G_TYPE_INPUT_STREAM, + G_ADD_PRIVATE(GArrowInputStream) + G_IMPLEMENT_INTERFACE(GARROW_TYPE_FILE, + garrow_input_stream_file_interface_init) + G_IMPLEMENT_INTERFACE(GARROW_TYPE_READABLE, + garrow_input_stream_readable_interface_init)) -#define GARROW_INPUT_STREAM_GET_PRIVATE(obj) \ - static_cast( \ - garrow_input_stream_get_instance_private(GARROW_INPUT_STREAM(obj))) +#define GARROW_INPUT_STREAM_GET_PRIVATE(obj) \ + static_cast( \ + garrow_input_stream_get_instance_private( \ + GARROW_INPUT_STREAM(obj))) static void garrow_input_stream_finalize(GObject *object) @@ -164,7 +165,8 @@ garrow_input_stream_read(GInputStream *stream, if (g_cancellable_set_error_if_cancelled(cancellable, error)) { return -1; } - auto arrow_input_stream = garrow_input_stream_get_raw(GARROW_INPUT_STREAM(stream)); + auto arrow_input_stream = + garrow_input_stream_get_raw(GARROW_INPUT_STREAM(stream)); auto n_read_bytes = arrow_input_stream->Read(count, buffer); if (!garrow::check(error, n_read_bytes, "[input-stream][read]")) { return -1; @@ -181,7 +183,8 @@ garrow_input_stream_skip(GInputStream *stream, if (g_cancellable_set_error_if_cancelled(cancellable, error)) { return -1; } - auto arrow_input_stream = garrow_input_stream_get_raw(GARROW_INPUT_STREAM(stream)); + auto arrow_input_stream = + garrow_input_stream_get_raw(GARROW_INPUT_STREAM(stream)); auto status = arrow_input_stream->Advance(count); if (!garrow_error_check(error, status, "[input-stream][skip]")) { return -1; @@ -190,12 +193,15 @@ garrow_input_stream_skip(GInputStream *stream, } static gboolean -garrow_input_stream_close(GInputStream *stream, GCancellable *cancellable, GError **error) +garrow_input_stream_close(GInputStream *stream, + GCancellable *cancellable, + GError **error) { if (g_cancellable_set_error_if_cancelled(cancellable, error)) { return FALSE; } - auto arrow_input_stream = garrow_input_stream_get_raw(GARROW_INPUT_STREAM(stream)); + auto arrow_input_stream = + garrow_input_stream_get_raw(GARROW_INPUT_STREAM(stream)); auto status = arrow_input_stream->Close(); return garrow_error_check(error, status, "[input-stream][close]"); } @@ -204,14 +210,14 @@ static void garrow_input_stream_init(GArrowInputStream *object) { auto priv = GARROW_INPUT_STREAM_GET_PRIVATE(object); - new (&priv->input_stream) std::shared_ptr; + new(&priv->input_stream) std::shared_ptr; } static void garrow_input_stream_class_init(GArrowInputStreamClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_input_stream_finalize; + gobject_class->finalize = garrow_input_stream_finalize; gobject_class->set_property = garrow_input_stream_set_property; gobject_class->get_property = garrow_input_stream_get_property; @@ -221,11 +227,11 @@ garrow_input_stream_class_init(GArrowInputStreamClass *klass) input_stream_class->close_fn = garrow_input_stream_close; GParamSpec *spec; - spec = g_param_spec_pointer( - "input-stream", - "Input stream", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("input-stream", + "Input stream", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_INPUT_STREAM, spec); } @@ -266,7 +272,8 @@ garrow_input_stream_align(GArrowInputStream *input_stream, GError **error) { auto arrow_input_stream = garrow_input_stream_get_raw(input_stream); - auto status = arrow::ipc::AlignStream(arrow_input_stream.get(), alignment); + auto status = arrow::ipc::AlignStream(arrow_input_stream.get(), + alignment); return garrow_error_check(error, status, "[input-stream][align]"); } @@ -281,7 +288,8 @@ garrow_input_stream_align(GArrowInputStream *input_stream, * Since: 0.11.0 */ GArrowTensor * -garrow_input_stream_read_tensor(GArrowInputStream *input_stream, GError **error) +garrow_input_stream_read_tensor(GArrowInputStream *input_stream, + GError **error) { auto arrow_input_stream = garrow_input_stream_get_raw(input_stream); @@ -316,23 +324,30 @@ garrow_input_stream_read_record_batch(GArrowInputStream *input_stream, if (options) { auto arrow_options = garrow_read_options_get_raw(options); - auto arrow_dictionary_memo = garrow_read_options_get_dictionary_memo_raw(options); - auto arrow_record_batch = arrow::ipc::ReadRecordBatch(arrow_schema, - arrow_dictionary_memo, - *arrow_options, - arrow_input_stream.get()); - if (garrow::check(error, arrow_record_batch, "[input-stream][read-record-batch]")) { + auto arrow_dictionary_memo = + garrow_read_options_get_dictionary_memo_raw(options); + auto arrow_record_batch = + arrow::ipc::ReadRecordBatch(arrow_schema, + arrow_dictionary_memo, + *arrow_options, + arrow_input_stream.get()); + if (garrow::check(error, + arrow_record_batch, + "[input-stream][read-record-batch]")) { return garrow_record_batch_new_raw(&(*arrow_record_batch)); } else { return NULL; } } else { auto arrow_options = arrow::ipc::IpcReadOptions::Defaults(); - auto arrow_record_batch = arrow::ipc::ReadRecordBatch(arrow_schema, - nullptr, - arrow_options, - arrow_input_stream.get()); - if (garrow::check(error, arrow_record_batch, "[input-stream][read-record-batch]")) { + auto arrow_record_batch = + arrow::ipc::ReadRecordBatch(arrow_schema, + nullptr, + arrow_options, + arrow_input_stream.get()); + if (garrow::check(error, + arrow_record_batch, + "[input-stream][read-record-batch]")) { return garrow_record_batch_new_raw(&(*arrow_record_batch)); } else { return NULL; @@ -340,6 +355,7 @@ garrow_input_stream_read_record_batch(GArrowInputStream *input_stream, } } + G_DEFINE_TYPE(GArrowSeekableInputStream, garrow_seekable_input_stream, GARROW_TYPE_INPUT_STREAM); @@ -365,7 +381,8 @@ guint64 garrow_seekable_input_stream_get_size(GArrowSeekableInputStream *input_stream, GError **error) { - auto arrow_random_access_file = garrow_seekable_input_stream_get_raw(input_stream); + auto arrow_random_access_file = + garrow_seekable_input_stream_get_raw(input_stream); auto size = arrow_random_access_file->GetSize(); if (garrow::check(error, size, "[seekable-input-stream][get-size]")) { return size.ValueOrDie(); @@ -381,10 +398,10 @@ garrow_seekable_input_stream_get_size(GArrowSeekableInputStream *input_stream, * Returns: Whether zero copy read is supported or not. */ gboolean -garrow_seekable_input_stream_get_support_zero_copy( - GArrowSeekableInputStream *input_stream) +garrow_seekable_input_stream_get_support_zero_copy(GArrowSeekableInputStream *input_stream) { - auto arrow_random_access_file = garrow_seekable_input_stream_get_raw(input_stream); + auto arrow_random_access_file = + garrow_seekable_input_stream_get_raw(input_stream); return arrow_random_access_file->supports_zero_copy(); } @@ -404,7 +421,8 @@ garrow_seekable_input_stream_read_at(GArrowSeekableInputStream *input_stream, gint64 n_bytes, GError **error) { - auto arrow_random_access_file = garrow_seekable_input_stream_get_raw(input_stream); + auto arrow_random_access_file = + garrow_seekable_input_stream_get_raw(input_stream); auto arrow_buffer = arrow_random_access_file->ReadAt(position, n_bytes); if (garrow::check(error, arrow_buffer, "[seekable-input-stream][read-at]")) { @@ -432,7 +450,8 @@ garrow_seekable_input_stream_read_at_bytes(GArrowSeekableInputStream *input_stre gint64 n_bytes, GError **error) { - auto arrow_random_access_file = garrow_seekable_input_stream_get_raw(input_stream); + auto arrow_random_access_file = + garrow_seekable_input_stream_get_raw(input_stream); auto arrow_buffer_result = arrow_random_access_file->ReadAt(position, n_bytes); if (!garrow::check(error, @@ -442,7 +461,8 @@ garrow_seekable_input_stream_read_at_bytes(GArrowSeekableInputStream *input_stre } auto arrow_cpu_buffer_result = - arrow::Buffer::ViewOrCopy(*arrow_buffer_result, arrow::default_cpu_memory_manager()); + arrow::Buffer::ViewOrCopy(*arrow_buffer_result, + arrow::default_cpu_memory_manager()); if (!garrow::check(error, arrow_cpu_buffer_result, "[seekable-input-stream][read-at][bytes][view-or-copy]")) { @@ -450,9 +470,11 @@ garrow_seekable_input_stream_read_at_bytes(GArrowSeekableInputStream *input_stre } auto arrow_cpu_buffer = *arrow_cpu_buffer_result; - return g_bytes_new(arrow_cpu_buffer->data(), arrow_cpu_buffer->size()); + return g_bytes_new(arrow_cpu_buffer->data(), + arrow_cpu_buffer->size()); } + /** * garrow_seekable_input_stream_peek: * @input_stream: A #GArrowSeekableInputStream. @@ -472,7 +494,8 @@ garrow_seekable_input_stream_peek(GArrowSeekableInputStream *input_stream, gint64 n_bytes, GError **error) { - auto arrow_random_access_file = garrow_seekable_input_stream_get_raw(input_stream); + auto arrow_random_access_file = + garrow_seekable_input_stream_get_raw(input_stream); auto view_result = arrow_random_access_file->Peek(n_bytes); if (garrow::check(error, view_result, "[seekable-input-stream][peek]")) { @@ -483,8 +506,8 @@ garrow_seekable_input_stream_peek(GArrowSeekableInputStream *input_stream, } } -typedef struct GArrowBufferInputStreamPrivate_ -{ + +typedef struct GArrowBufferInputStreamPrivate_ { GArrowBuffer *buffer; } GArrowBufferInputStreamPrivate; @@ -496,9 +519,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowBufferInputStream, garrow_buffer_input_stream, GARROW_TYPE_SEEKABLE_INPUT_STREAM); -#define GARROW_BUFFER_INPUT_STREAM_GET_PRIVATE(obj) \ - static_cast( \ - garrow_buffer_input_stream_get_instance_private(GARROW_BUFFER_INPUT_STREAM(obj))) +#define GARROW_BUFFER_INPUT_STREAM_GET_PRIVATE(obj) \ + static_cast( \ + garrow_buffer_input_stream_get_instance_private( \ + GARROW_BUFFER_INPUT_STREAM(obj))) static void garrow_buffer_input_stream_dispose(GObject *object) @@ -559,17 +583,17 @@ garrow_buffer_input_stream_class_init(GArrowBufferInputStreamClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_buffer_input_stream_dispose; + gobject_class->dispose = garrow_buffer_input_stream_dispose; gobject_class->set_property = garrow_buffer_input_stream_set_property; gobject_class->get_property = garrow_buffer_input_stream_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "buffer", - "Buffer", - "The data", - GARROW_TYPE_BUFFER, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("buffer", + "Buffer", + "The data", + GARROW_TYPE_BUFFER, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_BUFFER, spec); } @@ -583,7 +607,8 @@ GArrowBufferInputStream * garrow_buffer_input_stream_new(GArrowBuffer *buffer) { auto arrow_buffer = garrow_buffer_get_raw(buffer); - auto arrow_buffer_reader = std::make_shared(arrow_buffer); + auto arrow_buffer_reader = + std::make_shared(arrow_buffer); return garrow_buffer_input_stream_new_raw(&arrow_buffer_reader, buffer); } @@ -607,6 +632,7 @@ garrow_buffer_input_stream_get_buffer(GArrowBufferInputStream *input_stream) return garrow_buffer_new_raw(&arrow_buffer); } + G_DEFINE_TYPE(GArrowFileInputStream, garrow_file_input_stream, GARROW_TYPE_SEEKABLE_INPUT_STREAM); @@ -632,7 +658,8 @@ garrow_file_input_stream_class_init(GArrowFileInputStreamClass *klass) * Since: 6.0.0 */ GArrowFileInputStream * -garrow_file_input_stream_new(const gchar *path, GError **error) +garrow_file_input_stream_new(const gchar *path, + GError **error) { auto arrow_stream_result = arrow::io::ReadableFile::Open(path); if (garrow::check(error, arrow_stream_result, "[file-input-stream][new]")) { @@ -654,7 +681,8 @@ garrow_file_input_stream_new(const gchar *path, GError **error) * Since: 6.0.0 */ GArrowFileInputStream * -garrow_file_input_stream_new_file_descriptor(gint file_descriptor, GError **error) +garrow_file_input_stream_new_file_descriptor(gint file_descriptor, + GError **error) { auto arrow_stream_result = arrow::io::ReadableFile::Open(file_descriptor); if (garrow::check(error, @@ -669,7 +697,7 @@ garrow_file_input_stream_new_file_descriptor(gint file_descriptor, GError **erro /** * garrow_file_input_stream_get_file_descriptor: - * @stream: A #GArrowFileInputStream. + * @stream: A #GArrowFileInuptStream. * * Returns: The file descriptor of @stream. * @@ -678,11 +706,13 @@ garrow_file_input_stream_new_file_descriptor(gint file_descriptor, GError **erro gint garrow_file_input_stream_get_file_descriptor(GArrowFileInputStream *stream) { - auto arrow_stream = std::static_pointer_cast( - garrow_input_stream_get_raw(GARROW_INPUT_STREAM(stream))); + auto arrow_stream = + std::static_pointer_cast( + garrow_input_stream_get_raw(GARROW_INPUT_STREAM(stream))); return arrow_stream->file_descriptor(); } + G_DEFINE_TYPE(GArrowMemoryMappedInputStream, garrow_memory_mapped_input_stream, GARROW_TYPE_SEEKABLE_INPUT_STREAM); @@ -706,11 +736,14 @@ garrow_memory_mapped_input_stream_class_init(GArrowMemoryMappedInputStreamClass * or %NULL on error. */ GArrowMemoryMappedInputStream * -garrow_memory_mapped_input_stream_new(const gchar *path, GError **error) +garrow_memory_mapped_input_stream_new(const gchar *path, + GError **error) { auto arrow_stream_result = arrow::io::MemoryMappedFile::Open(path, arrow::io::FileMode::READ); - if (garrow::check(error, arrow_stream_result, "[memory-mapped-input-stream][new]")) { + if (garrow::check(error, + arrow_stream_result, + "[memory-mapped-input-stream][new]")) { auto arrow_stream = *arrow_stream_result; return garrow_memory_mapped_input_stream_new_raw(&arrow_stream); } else { @@ -718,33 +751,31 @@ garrow_memory_mapped_input_stream_new(const gchar *path, GError **error) } } + G_END_DECLS namespace garrow { class GIOInputStream : public arrow::io::RandomAccessFile { public: - GIOInputStream(GInputStream *input_stream) : input_stream_(input_stream), lock_() - { + GIOInputStream(GInputStream *input_stream) : + input_stream_(input_stream), + lock_() { g_object_ref(input_stream_); } - ~GIOInputStream() { g_object_unref(input_stream_); } + ~GIOInputStream() { + g_object_unref(input_stream_); + } - GInputStream * - get_input_stream() - { + GInputStream *get_input_stream() { return input_stream_; } - bool - closed() const override - { + bool closed() const override { return static_cast(g_input_stream_is_closed(input_stream_)); } - arrow::Status - Close() override - { + arrow::Status Close() override { std::lock_guard guard(lock_); GError *error = NULL; if (g_input_stream_close(input_stream_, NULL, &error)) { @@ -756,9 +787,7 @@ namespace garrow { } } - arrow::Result - Tell() const override - { + arrow::Result Tell() const override { if (!(G_IS_SEEKABLE(input_stream_) && g_seekable_can_seek(G_SEEKABLE(input_stream_)))) { std::string message("[gio-input-stream][tell] " @@ -771,14 +800,16 @@ namespace garrow { return g_seekable_tell(G_SEEKABLE(input_stream_)); } - arrow::Result - Read(int64_t n_bytes, void *out) override - { + arrow::Result Read(int64_t n_bytes, void *out) override { std::lock_guard guard(lock_); GError *error = NULL; gsize n_read_bytes = 0; - auto success = - g_input_stream_read_all(input_stream_, out, n_bytes, &n_read_bytes, NULL, &error); + auto success = g_input_stream_read_all(input_stream_, + out, + n_bytes, + &n_read_bytes, + NULL, + &error); if (success) { return n_read_bytes; } else { @@ -788,21 +819,19 @@ namespace garrow { } } - arrow::Result - ReadAt(int64_t position, int64_t n_bytes, void *out) override - { + arrow::Result ReadAt(int64_t position, + int64_t n_bytes, + void* out) override { return arrow::io::RandomAccessFile::ReadAt(position, n_bytes, out); } arrow::Result> - ReadAt(int64_t position, int64_t n_bytes) override - { + ReadAt(int64_t position, int64_t n_bytes) override { return arrow::io::RandomAccessFile::ReadAt(position, n_bytes); } arrow::Result> - Read(int64_t n_bytes) override - { + Read(int64_t n_bytes) override { ARROW_ASSIGN_OR_RAISE(auto buffer, arrow::AllocateResizableBuffer(n_bytes)); std::lock_guard guard(lock_); @@ -826,9 +855,7 @@ namespace garrow { } } - arrow::Result - Peek(int64_t nbytes) override - { + arrow::Result Peek(int64_t nbytes) override { if (!G_IS_BUFFERED_INPUT_STREAM(input_stream_)) { std::string message("[gio-input-stream][peek] " "not peekable input stream: <"); @@ -841,7 +868,8 @@ namespace garrow { auto available_n_bytes = g_buffered_input_stream_get_available(stream); if (available_n_bytes < static_cast(nbytes)) { GError *error = NULL; - auto filled_size = g_buffered_input_stream_fill(stream, nbytes, NULL, &error); + auto filled_size = + g_buffered_input_stream_fill(stream, nbytes, NULL, &error); if (filled_size == -1) { return garrow_error_to_status(error, arrow::StatusCode::IOError, @@ -857,9 +885,7 @@ namespace garrow { return std::string_view(static_cast(data), data_size); } - arrow::Status - Seek(int64_t position) override - { + arrow::Status Seek(int64_t position) override { if (!G_IS_SEEKABLE(input_stream_)) { std::string message("[gio-input-stream][seek] " "not seekable input stream: <"); @@ -883,9 +909,7 @@ namespace garrow { } } - arrow::Result - GetSize() override - { + arrow::Result GetSize() override { if (!G_IS_SEEKABLE(input_stream_)) { std::string message("[gio-input-stream][size] " "not seekable input stream: <"); @@ -897,7 +921,11 @@ namespace garrow { std::lock_guard guard(lock_); auto current_position = g_seekable_tell(G_SEEKABLE(input_stream_)); GError *error = NULL; - if (!g_seekable_seek(G_SEEKABLE(input_stream_), 0, G_SEEK_END, NULL, &error)) { + if (!g_seekable_seek(G_SEEKABLE(input_stream_), + 0, + G_SEEK_END, + NULL, + &error)) { return garrow_error_to_status(error, arrow::StatusCode::IOError, "[gio-input-stream][size][seek]"); @@ -915,9 +943,7 @@ namespace garrow { return size; } - bool - supports_zero_copy() const override - { + bool supports_zero_copy() const override { return false; } @@ -925,12 +951,12 @@ namespace garrow { GInputStream *input_stream_; std::mutex lock_; }; -}; // namespace garrow +}; G_BEGIN_DECLS -typedef struct GArrowGIOInputStreamPrivate_ -{ + +typedef struct GArrowGIOInputStreamPrivate_ { GInputStream *raw; } GArrowGIOInputStreamPrivate; @@ -942,9 +968,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowGIOInputStream, garrow_gio_input_stream, GARROW_TYPE_SEEKABLE_INPUT_STREAM); -#define GARROW_GIO_INPUT_STREAM_GET_PRIVATE(object) \ - static_cast( \ - garrow_gio_input_stream_get_instance_private(GARROW_GIO_INPUT_STREAM(object))) +#define GARROW_GIO_INPUT_STREAM_GET_PRIVATE(object) \ + static_cast( \ + garrow_gio_input_stream_get_instance_private( \ + GARROW_GIO_INPUT_STREAM(object))) static void garrow_gio_input_stream_dispose(GObject *object) @@ -1005,17 +1032,17 @@ garrow_gio_input_stream_class_init(GArrowGIOInputStreamClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_gio_input_stream_dispose; + gobject_class->dispose = garrow_gio_input_stream_dispose; gobject_class->set_property = garrow_gio_input_stream_set_property; gobject_class->get_property = garrow_gio_input_stream_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "raw", - "Raw", - "The raw GInputStream *", - G_TYPE_INPUT_STREAM, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("raw", + "Raw", + "The raw GInputStream *", + G_TYPE_INPUT_STREAM, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_GIO_RAW, spec); } @@ -1030,12 +1057,11 @@ garrow_gio_input_stream_class_init(GArrowGIOInputStreamClass *klass) GArrowGIOInputStream * garrow_gio_input_stream_new(GInputStream *gio_input_stream) { - auto arrow_input_stream = std::make_shared(gio_input_stream); + auto arrow_input_stream = + std::make_shared(gio_input_stream); auto object = g_object_new(GARROW_TYPE_GIO_INPUT_STREAM, - "input-stream", - &arrow_input_stream, - "raw", - gio_input_stream, + "input-stream", &arrow_input_stream, + "raw", gio_input_stream, NULL); auto input_stream = GARROW_GIO_INPUT_STREAM(object); return input_stream; @@ -1058,8 +1084,7 @@ garrow_gio_input_stream_get_raw(GArrowGIOInputStream *input_stream) return priv->raw; } -typedef struct GArrowCompressedInputStreamPrivate_ -{ +typedef struct GArrowCompressedInputStreamPrivate_ { GArrowCodec *codec; GArrowInputStream *raw; } GArrowCompressedInputStreamPrivate; @@ -1073,9 +1098,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowCompressedInputStream, garrow_compressed_input_stream, GARROW_TYPE_INPUT_STREAM) -#define GARROW_COMPRESSED_INPUT_STREAM_GET_PRIVATE(object) \ - static_cast( \ - garrow_compressed_input_stream_get_instance_private( \ +#define GARROW_COMPRESSED_INPUT_STREAM_GET_PRIVATE(object) \ + static_cast( \ + garrow_compressed_input_stream_get_instance_private( \ GARROW_COMPRESSED_INPUT_STREAM(object))) static void @@ -1148,25 +1173,25 @@ garrow_compressed_input_stream_class_init(GArrowCompressedInputStreamClass *klas { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_compressed_input_stream_dispose; + gobject_class->dispose = garrow_compressed_input_stream_dispose; gobject_class->set_property = garrow_compressed_input_stream_set_property; gobject_class->get_property = garrow_compressed_input_stream_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "codec", - "Codec", - "The codec for the stream", - GARROW_TYPE_CODEC, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("codec", + "Codec", + "The codec for the stream", + GARROW_TYPE_CODEC, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_CODEC, spec); - spec = g_param_spec_object( - "raw", - "Raw", - "The underlying raw input stream", - GARROW_TYPE_INPUT_STREAM, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("raw", + "Raw", + "The underlying raw input stream", + GARROW_TYPE_INPUT_STREAM, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_RAW, spec); } @@ -1187,7 +1212,8 @@ garrow_compressed_input_stream_new(GArrowCodec *codec, { auto arrow_codec = garrow_codec_get_raw(codec).get(); auto arrow_raw = garrow_input_stream_get_raw(raw); - auto arrow_stream = arrow::io::CompressedInputStream::Make(arrow_codec, arrow_raw); + auto arrow_stream = + arrow::io::CompressedInputStream::Make(arrow_codec, arrow_raw); if (garrow::check(error, arrow_stream, "[compressed-input-stream][new]")) { return garrow_compressed_input_stream_new_raw(&(arrow_stream.ValueOrDie()), codec, @@ -1202,8 +1228,10 @@ G_END_DECLS GArrowInputStream * garrow_input_stream_new_raw(std::shared_ptr *arrow_input_stream) { - auto input_stream = GARROW_INPUT_STREAM( - g_object_new(GARROW_TYPE_INPUT_STREAM, "input-stream", arrow_input_stream, NULL)); + auto input_stream = + GARROW_INPUT_STREAM(g_object_new(GARROW_TYPE_INPUT_STREAM, + "input-stream", arrow_input_stream, + NULL)); return input_stream; } @@ -1219,14 +1247,14 @@ garrow_seekable_input_stream_new_raw( std::shared_ptr *arrow_random_access_file) { auto object = g_object_new(GARROW_TYPE_SEEKABLE_INPUT_STREAM, - "input-stream", - arrow_random_access_file, + "input-stream", arrow_random_access_file, NULL); return GARROW_SEEKABLE_INPUT_STREAM(object); } std::shared_ptr -garrow_seekable_input_stream_get_raw(GArrowSeekableInputStream *seekable_input_stream) +garrow_seekable_input_stream_get_raw( + GArrowSeekableInputStream *seekable_input_stream) { auto arrow_input_stream = garrow_input_stream_get_raw(GARROW_INPUT_STREAM(seekable_input_stream)); @@ -1236,15 +1264,13 @@ garrow_seekable_input_stream_get_raw(GArrowSeekableInputStream *seekable_input_s } GArrowBufferInputStream * -garrow_buffer_input_stream_new_raw( - std::shared_ptr *arrow_buffer_reader, GArrowBuffer *buffer) +garrow_buffer_input_stream_new_raw(std::shared_ptr *arrow_buffer_reader, + GArrowBuffer *buffer) { auto buffer_input_stream = GARROW_BUFFER_INPUT_STREAM(g_object_new(GARROW_TYPE_BUFFER_INPUT_STREAM, - "input-stream", - arrow_buffer_reader, - "buffer", - buffer, + "input-stream", arrow_buffer_reader, + "buffer", buffer, NULL)); return buffer_input_stream; } @@ -1259,44 +1285,44 @@ garrow_buffer_input_stream_get_raw(GArrowBufferInputStream *buffer_input_stream) return arrow_buffer_reader; } + GArrowFileInputStream * -garrow_file_input_stream_new_raw(std::shared_ptr *arrow_stream) +garrow_file_input_stream_new_raw( + std::shared_ptr *arrow_stream) { - return GARROW_FILE_INPUT_STREAM( - g_object_new(GARROW_TYPE_FILE_INPUT_STREAM, "input-stream", arrow_stream, NULL)); + return GARROW_FILE_INPUT_STREAM(g_object_new(GARROW_TYPE_FILE_INPUT_STREAM, + "input-stream", arrow_stream, + NULL)); } + GArrowMemoryMappedInputStream * garrow_memory_mapped_input_stream_new_raw( std::shared_ptr *arrow_stream) { return GARROW_MEMORY_MAPPED_INPUT_STREAM( g_object_new(GARROW_TYPE_MEMORY_MAPPED_INPUT_STREAM, - "input-stream", - arrow_stream, + "input-stream", arrow_stream, NULL)); } + GArrowCompressedInputStream * -garrow_compressed_input_stream_new_raw( - std::shared_ptr *arrow_raw, - GArrowCodec *codec, - GArrowInputStream *raw) -{ - auto compressed_input_stream = g_object_new(GARROW_TYPE_COMPRESSED_INPUT_STREAM, - "input-stream", - arrow_raw, - "codec", - codec, - "raw", - raw, - NULL); +garrow_compressed_input_stream_new_raw(std::shared_ptr *arrow_raw, + GArrowCodec *codec, + GArrowInputStream *raw) +{ + auto compressed_input_stream = + g_object_new(GARROW_TYPE_COMPRESSED_INPUT_STREAM, + "input-stream", arrow_raw, + "codec", codec, + "raw", raw, + NULL); return GARROW_COMPRESSED_INPUT_STREAM(compressed_input_stream); } std::shared_ptr -garrow_compressed_input_stream_get_raw( - GArrowCompressedInputStream *compressed_input_stream) +garrow_compressed_input_stream_get_raw(GArrowCompressedInputStream *compressed_input_stream) { auto input_stream = GARROW_INPUT_STREAM(compressed_input_stream); auto arrow_input_stream = garrow_input_stream_get_raw(input_stream); diff --git a/c_glib/arrow-glib/input-stream.h b/c_glib/arrow-glib/input-stream.h index 676f2f44b00..5f583c80486 100644 --- a/c_glib/arrow-glib/input-stream.h +++ b/c_glib/arrow-glib/input-stream.h @@ -30,30 +30,24 @@ G_BEGIN_DECLS #define GARROW_TYPE_INPUT_STREAM (garrow_input_stream_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowInputStream, garrow_input_stream, GARROW, INPUT_STREAM, GInputStream) +G_DECLARE_DERIVABLE_TYPE(GArrowInputStream, + garrow_input_stream, + GARROW, + INPUT_STREAM, + GInputStream) struct _GArrowInputStreamClass { GInputStreamClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_input_stream_advance(GArrowInputStream *input_stream, - gint64 n_bytes, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_input_stream_align(GArrowInputStream *input_stream, - gint32 alignment, - GError **error); - -GARROW_AVAILABLE_IN_ALL -GArrowTensor * -garrow_input_stream_read_tensor(GArrowInputStream *input_stream, GError **error); - +gboolean garrow_input_stream_advance(GArrowInputStream *input_stream, + gint64 n_bytes, + GError **error); +gboolean garrow_input_stream_align(GArrowInputStream *input_stream, + gint32 alignment, + GError **error); +GArrowTensor *garrow_input_stream_read_tensor(GArrowInputStream *input_stream, + GError **error); GARROW_AVAILABLE_IN_1_0 GArrowRecordBatch * garrow_input_stream_read_record_batch(GArrowInputStream *input_stream, @@ -61,8 +55,8 @@ garrow_input_stream_read_record_batch(GArrowInputStream *input_stream, GArrowReadOptions *options, GError **error); -#define GARROW_TYPE_SEEKABLE_INPUT_STREAM (garrow_seekable_input_stream_get_type()) -GARROW_AVAILABLE_IN_ALL +#define GARROW_TYPE_SEEKABLE_INPUT_STREAM \ + (garrow_seekable_input_stream_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowSeekableInputStream, garrow_seekable_input_stream, GARROW, @@ -73,17 +67,9 @@ struct _GArrowSeekableInputStreamClass GArrowInputStreamClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -guint64 -garrow_seekable_input_stream_get_size(GArrowSeekableInputStream *input_stream, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_seekable_input_stream_get_support_zero_copy( - GArrowSeekableInputStream *input_stream); - -GARROW_AVAILABLE_IN_ALL +guint64 garrow_seekable_input_stream_get_size(GArrowSeekableInputStream *input_stream, + GError **error); +gboolean garrow_seekable_input_stream_get_support_zero_copy(GArrowSeekableInputStream *input_stream); GArrowBuffer * garrow_seekable_input_stream_read_at(GArrowSeekableInputStream *input_stream, gint64 position, @@ -96,13 +82,13 @@ garrow_seekable_input_stream_read_at_bytes(GArrowSeekableInputStream *input_stre gint64 n_bytes, GError **error); GARROW_AVAILABLE_IN_0_12 -GBytes * -garrow_seekable_input_stream_peek(GArrowSeekableInputStream *input_stream, - gint64 n_bytes, - GError **error); +GBytes *garrow_seekable_input_stream_peek(GArrowSeekableInputStream *input_stream, + gint64 n_bytes, + GError **error); + -#define GARROW_TYPE_BUFFER_INPUT_STREAM (garrow_buffer_input_stream_get_type()) -GARROW_AVAILABLE_IN_ALL +#define GARROW_TYPE_BUFFER_INPUT_STREAM \ + (garrow_buffer_input_stream_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowBufferInputStream, garrow_buffer_input_stream, GARROW, @@ -113,16 +99,12 @@ struct _GArrowBufferInputStreamClass GArrowSeekableInputStreamClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowBufferInputStream * -garrow_buffer_input_stream_new(GArrowBuffer *buffer); +GArrowBufferInputStream *garrow_buffer_input_stream_new(GArrowBuffer *buffer); + +GArrowBuffer *garrow_buffer_input_stream_get_buffer(GArrowBufferInputStream *input_stream); -GARROW_AVAILABLE_IN_ALL -GArrowBuffer * -garrow_buffer_input_stream_get_buffer(GArrowBufferInputStream *input_stream); #define GARROW_TYPE_FILE_INPUT_STREAM (garrow_file_input_stream_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowFileInputStream, garrow_file_input_stream, GARROW, @@ -133,21 +115,18 @@ struct _GArrowFileInputStreamClass GArrowSeekableInputStreamClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowFileInputStream * -garrow_file_input_stream_new(const gchar *path, GError **error); - -GARROW_AVAILABLE_IN_ALL +garrow_file_input_stream_new(const gchar *path, + GError **error); GArrowFileInputStream * -garrow_file_input_stream_new_file_descriptor(gint file_descriptor, GError **error); - -GARROW_AVAILABLE_IN_ALL +garrow_file_input_stream_new_file_descriptor(gint file_descriptor, + GError **error); gint garrow_file_input_stream_get_file_descriptor(GArrowFileInputStream *stream); -#define GARROW_TYPE_MEMORY_MAPPED_INPUT_STREAM \ + +#define GARROW_TYPE_MEMORY_MAPPED_INPUT_STREAM \ (garrow_memory_mapped_input_stream_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowMemoryMappedInputStream, garrow_memory_mapped_input_stream, GARROW, @@ -158,35 +137,66 @@ struct _GArrowMemoryMappedInputStreamClass GArrowSeekableInputStreamClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowMemoryMappedInputStream * -garrow_memory_mapped_input_stream_new(const gchar *path, GError **error); +garrow_memory_mapped_input_stream_new(const gchar *path, + GError **error); -#define GARROW_TYPE_GIO_INPUT_STREAM (garrow_gio_input_stream_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowGIOInputStream, - garrow_gio_input_stream, - GARROW, - GIO_INPUT_STREAM, - GArrowSeekableInputStream) + +#define GARROW_TYPE_GIO_INPUT_STREAM \ + (garrow_gio_input_stream_get_type()) +#define GARROW_GIO_INPUT_STREAM(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_GIO_INPUT_STREAM, \ + GArrowGIOInputStream)) +#define GARROW_GIO_INPUT_STREAM_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_GIO_INPUT_STREAM, \ + GArrowGIOInputStreamClass)) +#define GARROW_IS_GIO_INPUT_STREAM(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_GIO_INPUT_STREAM)) +#define GARROW_IS_GIO_INPUT_STREAM_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_GIO_INPUT_STREAM)) +#define GARROW_GIO_INPUT_STREAM_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_GIO_INPUT_STREAM, \ + GArrowGIOInputStreamClass)) + +typedef struct _GArrowGIOInputStream GArrowGIOInputStream; +#ifndef __GTK_DOC_IGNORE__ +typedef struct _GArrowGIOInputStreamClass GArrowGIOInputStreamClass; +#endif + +/** + * GArrowGIOInputStream: + * + * It's an input stream for `GInputStream`. + */ +struct _GArrowGIOInputStream +{ + /*< private >*/ + GArrowSeekableInputStream parent_instance; +}; + +#ifndef __GTK_DOC_IGNORE__ struct _GArrowGIOInputStreamClass { GArrowSeekableInputStreamClass parent_class; }; +#endif -GARROW_AVAILABLE_IN_ALL -GArrowGIOInputStream * -garrow_gio_input_stream_new(GInputStream *gio_input_stream); +GType garrow_gio_input_stream_get_type(void) G_GNUC_CONST; +GArrowGIOInputStream *garrow_gio_input_stream_new(GInputStream *gio_input_stream); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL G_GNUC_DEPRECATED GInputStream * garrow_gio_input_stream_get_raw(GArrowGIOInputStream *input_stream); #endif -#define GARROW_TYPE_COMPRESSED_INPUT_STREAM (garrow_compressed_input_stream_get_type()) -GARROW_AVAILABLE_IN_ALL +#define GARROW_TYPE_COMPRESSED_INPUT_STREAM \ + (garrow_compressed_input_stream_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowCompressedInputStream, garrow_compressed_input_stream, GARROW, @@ -197,7 +207,6 @@ struct _GArrowCompressedInputStreamClass GArrowInputStreamClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowCompressedInputStream * garrow_compressed_input_stream_new(GArrowCodec *codec, GArrowInputStream *raw, diff --git a/c_glib/arrow-glib/input-stream.hpp b/c_glib/arrow-glib/input-stream.hpp index 0400398c477..2a0a3d3ddcc 100644 --- a/c_glib/arrow-glib/input-stream.hpp +++ b/c_glib/arrow-glib/input-stream.hpp @@ -26,48 +26,34 @@ #include -GARROW_EXTERN -GArrowInputStream * -garrow_input_stream_new_raw(std::shared_ptr *arrow_input_stream); +GArrowInputStream *garrow_input_stream_new_raw(std::shared_ptr *arrow_input_stream); +std::shared_ptr garrow_input_stream_get_raw(GArrowInputStream *input_stream); -GARROW_EXTERN -std::shared_ptr -garrow_input_stream_get_raw(GArrowInputStream *input_stream); - -GARROW_EXTERN GArrowSeekableInputStream * garrow_seekable_input_stream_new_raw( std::shared_ptr *arrow_random_access_file); - -GARROW_EXTERN std::shared_ptr garrow_seekable_input_stream_get_raw(GArrowSeekableInputStream *input_stream); -GARROW_EXTERN GArrowBufferInputStream * -garrow_buffer_input_stream_new_raw( - std::shared_ptr *arrow_buffer_reader, GArrowBuffer *buffer); +garrow_buffer_input_stream_new_raw(std::shared_ptr *arrow_buffer_reader, + GArrowBuffer *buffer); +std::shared_ptr garrow_buffer_input_stream_get_raw(GArrowBufferInputStream *input_stream); -GARROW_EXTERN -std::shared_ptr -garrow_buffer_input_stream_get_raw(GArrowBufferInputStream *input_stream); -GARROW_EXTERN GArrowFileInputStream * -garrow_file_input_stream_new_raw(std::shared_ptr *arrow_stream); +garrow_file_input_stream_new_raw( + std::shared_ptr *arrow_stream); + -GARROW_EXTERN GArrowMemoryMappedInputStream * garrow_memory_mapped_input_stream_new_raw( std::shared_ptr *arrow_stream); -GARROW_EXTERN -GArrowCompressedInputStream * -garrow_compressed_input_stream_new_raw( - std::shared_ptr *arrow_raw, - GArrowCodec *codec, - GArrowInputStream *raw); -GARROW_EXTERN +GArrowCompressedInputStream * +garrow_compressed_input_stream_new_raw(std::shared_ptr *arrow_raw, + GArrowCodec *codec, + GArrowInputStream *raw); std::shared_ptr garrow_compressed_input_stream_get_raw(GArrowCompressedInputStream *stream); diff --git a/c_glib/arrow-glib/internal-hash-table.hpp b/c_glib/arrow-glib/internal-hash-table.hpp index 27ec060994c..3def4606cd6 100644 --- a/c_glib/arrow-glib/internal-hash-table.hpp +++ b/c_glib/arrow-glib/internal-hash-table.hpp @@ -27,13 +27,15 @@ static inline std::shared_ptr garrow_internal_hash_table_to_metadata(GHashTable *metadata) { auto arrow_metadata = std::make_shared(); - g_hash_table_foreach( - metadata, - [](gpointer key, gpointer value, gpointer user_data) { - auto arrow_metadata = - static_cast *>(user_data); - (*arrow_metadata)->Append(static_cast(key), static_cast(value)); - }, - &arrow_metadata); + g_hash_table_foreach(metadata, + [](gpointer key, + gpointer value, + gpointer user_data) { + auto arrow_metadata = + static_cast *>(user_data); + (*arrow_metadata)->Append(static_cast(key), + static_cast(value)); + }, + &arrow_metadata); return arrow_metadata; } diff --git a/c_glib/arrow-glib/interval.cpp b/c_glib/arrow-glib/interval.cpp index 0bde364bb78..3a2a82f66bc 100644 --- a/c_glib/arrow-glib/interval.cpp +++ b/c_glib/arrow-glib/interval.cpp @@ -38,16 +38,18 @@ G_BEGIN_DECLS * Since: 8.0.0 */ -typedef struct GArrowDayMillisecondPrivate_ -{ +typedef struct GArrowDayMillisecondPrivate_ { arrow::DayTimeIntervalType::DayMilliseconds day_millisecond; } GArrowDayMillisecondPrivate; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowDayMillisecond, garrow_day_millisecond, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowDayMillisecond, + garrow_day_millisecond, + G_TYPE_OBJECT) -#define GARROW_DAY_MILLISECOND_GET_PRIVATE(object) \ - static_cast( \ - garrow_day_millisecond_get_instance_private(GARROW_DAY_MILLISECOND(object))) +#define GARROW_DAY_MILLISECOND_GET_PRIVATE(object) \ + static_cast( \ + garrow_day_millisecond_get_instance_private( \ + GARROW_DAY_MILLISECOND(object))) enum { PROP_DAY_MILLISECOND_DAY = 1, @@ -127,7 +129,9 @@ garrow_day_millisecond_class_init(GArrowDayMillisecondClass *klass) G_MAXINT32, day_millisecond.days, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_DAY_MILLISECOND_DAY, spec); + g_object_class_install_property(gobject_class, + PROP_DAY_MILLISECOND_DAY, + spec); /** * GArrowDayMillisecond:millisecond: @@ -143,7 +147,9 @@ garrow_day_millisecond_class_init(GArrowDayMillisecondClass *klass) G_MAXINT32, day_millisecond.milliseconds, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_DAY_MILLISECOND_MILLISECOND, spec); + g_object_class_install_property(gobject_class, + PROP_DAY_MILLISECOND_MILLISECOND, + spec); } /** @@ -159,7 +165,8 @@ garrow_day_millisecond_class_init(GArrowDayMillisecondClass *klass) GArrowDayMillisecond * garrow_day_millisecond_new(gint32 day, gint32 millisecond) { - arrow::DayTimeIntervalType::DayMilliseconds arrow_day_millisecond(day, millisecond); + arrow::DayTimeIntervalType::DayMilliseconds + arrow_day_millisecond(day, millisecond); return garrow_day_millisecond_new_raw(&arrow_day_millisecond); } @@ -201,16 +208,19 @@ garrow_day_millisecond_less_than(GArrowDayMillisecond *day_millisecond, return priv->day_millisecond < other_priv->day_millisecond; } -typedef struct GArrowMonthDayNanoPrivate_ -{ + +typedef struct GArrowMonthDayNanoPrivate_ { arrow::MonthDayNanoIntervalType::MonthDayNanos month_day_nano; } GArrowMonthDayNanoPrivate; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowMonthDayNano, garrow_month_day_nano, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowMonthDayNano, + garrow_month_day_nano, + G_TYPE_OBJECT) -#define GARROW_MONTH_DAY_NANO_GET_PRIVATE(object) \ - static_cast( \ - garrow_month_day_nano_get_instance_private(GARROW_MONTH_DAY_NANO(object))) +#define GARROW_MONTH_DAY_NANO_GET_PRIVATE(object) \ + static_cast( \ + garrow_month_day_nano_get_instance_private( \ + GARROW_MONTH_DAY_NANO(object))) enum { PROP_MONTH_DAY_NANO_MONTH = 1, @@ -298,7 +308,9 @@ garrow_month_day_nano_class_init(GArrowMonthDayNanoClass *klass) G_MAXINT32, month_day_nano.months, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_MONTH_DAY_NANO_MONTH, spec); + g_object_class_install_property(gobject_class, + PROP_MONTH_DAY_NANO_MONTH, + spec); /** * GArrowMonthDayNano:day: @@ -314,7 +326,9 @@ garrow_month_day_nano_class_init(GArrowMonthDayNanoClass *klass) G_MAXINT32, month_day_nano.days, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_MONTH_DAY_NANO_DAY, spec); + g_object_class_install_property(gobject_class, + PROP_MONTH_DAY_NANO_DAY, + spec); /** * GArrowMonthDayNano:nanosecond: @@ -330,7 +344,9 @@ garrow_month_day_nano_class_init(GArrowMonthDayNanoClass *klass) G_MAXINT64, month_day_nano.nanoseconds, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_MONTH_DAY_NANO_NANOSECOND, spec); + g_object_class_install_property(gobject_class, + PROP_MONTH_DAY_NANO_NANOSECOND, + spec); } /** @@ -373,18 +389,18 @@ garrow_month_day_nano_equal(GArrowMonthDayNano *month_nano_day, return priv->month_day_nano == other_priv->month_day_nano; } + G_END_DECLS GArrowDayMillisecond * garrow_day_millisecond_new_raw( arrow::DayTimeIntervalType::DayMilliseconds *arrow_day_millisecond) { - auto day_millisecond = g_object_new(garrow_day_millisecond_get_type(), - "day", - arrow_day_millisecond->days, - "millisecond", - arrow_day_millisecond->milliseconds, - NULL); + auto day_millisecond = + g_object_new(garrow_day_millisecond_get_type(), + "day", arrow_day_millisecond->days, + "millisecond", arrow_day_millisecond->milliseconds, + NULL); return GARROW_DAY_MILLISECOND(day_millisecond); } @@ -403,18 +419,17 @@ garrow_day_millisecond_get_raw(const GArrowDayMillisecond *day_millisecond) return &priv->day_millisecond; } + GArrowMonthDayNano * garrow_month_day_nano_new_raw( arrow::MonthDayNanoIntervalType::MonthDayNanos *arrow_month_day_nano) { - auto month_day_nano = g_object_new(garrow_month_day_nano_get_type(), - "month", - arrow_month_day_nano->months, - "day", - arrow_month_day_nano->days, - "nanosecond", - arrow_month_day_nano->nanoseconds, - NULL); + auto month_day_nano = + g_object_new(garrow_month_day_nano_get_type(), + "month", arrow_month_day_nano->months, + "day", arrow_month_day_nano->days, + "nanosecond", arrow_month_day_nano->nanoseconds, + NULL); return GARROW_MONTH_DAY_NANO(month_day_nano); } @@ -426,9 +441,10 @@ garrow_month_day_nano_get_raw(GArrowMonthDayNano *month_day_nano) } const arrow::MonthDayNanoIntervalType::MonthDayNanos * -garrow_month_day_nano_get_raw(const GArrowMonthDayNano *month_day_nano) +garrow_month_day_nano_get_raw( + const GArrowMonthDayNano *month_day_nano) { - auto priv = - GARROW_MONTH_DAY_NANO_GET_PRIVATE(const_cast(month_day_nano)); + auto priv = GARROW_MONTH_DAY_NANO_GET_PRIVATE( + const_cast(month_day_nano)); return &priv->month_day_nano; } diff --git a/c_glib/arrow-glib/interval.h b/c_glib/arrow-glib/interval.h index 8c23b9a509b..88d974e1b3e 100644 --- a/c_glib/arrow-glib/interval.h +++ b/c_glib/arrow-glib/interval.h @@ -19,16 +19,17 @@ #pragma once -#include - +#include #include G_BEGIN_DECLS #define GARROW_TYPE_DAY_MILLISECOND (garrow_day_millisecond_get_type()) -GARROW_AVAILABLE_IN_8_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowDayMillisecond, garrow_day_millisecond, GARROW, DAY_MILLISECOND, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowDayMillisecond, + garrow_day_millisecond, + GARROW, + DAY_MILLISECOND, + GObject) struct _GArrowDayMillisecondClass { @@ -47,10 +48,13 @@ gboolean garrow_day_millisecond_less_than(GArrowDayMillisecond *day_millisecond, GArrowDayMillisecond *other_day_millisecond); + #define GARROW_TYPE_MONTH_DAY_NANO (garrow_month_day_nano_get_type()) -GARROW_AVAILABLE_IN_8_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowMonthDayNano, garrow_month_day_nano, GARROW, MONTH_DAY_NANO, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowMonthDayNano, + garrow_month_day_nano, + GARROW, + MONTH_DAY_NANO, + GObject) struct _GArrowMonthDayNanoClass { @@ -65,4 +69,5 @@ gboolean garrow_month_day_nano_equal(GArrowMonthDayNano *month_nano_day, GArrowMonthDayNano *other_month_nano_day); + G_END_DECLS diff --git a/c_glib/arrow-glib/interval.hpp b/c_glib/arrow-glib/interval.hpp index fb22c3e697d..3123d920805 100644 --- a/c_glib/arrow-glib/interval.hpp +++ b/c_glib/arrow-glib/interval.hpp @@ -40,3 +40,4 @@ arrow::MonthDayNanoIntervalType::MonthDayNanos * garrow_month_day_nano_get_raw(GArrowMonthDayNano *month_day_nano); const arrow::MonthDayNanoIntervalType::MonthDayNanos * garrow_month_day_nano_get_raw(const GArrowMonthDayNano *month_day_nano); + diff --git a/c_glib/arrow-glib/ipc-options.cpp b/c_glib/arrow-glib/ipc-options.cpp index 3e1e3e7eae6..86bae4adf4f 100644 --- a/c_glib/arrow-glib/ipc-options.cpp +++ b/c_glib/arrow-glib/ipc-options.cpp @@ -34,8 +34,7 @@ G_BEGIN_DECLS * #GArrowWriteOptions provides options for writing data. */ -typedef struct GArrowReadOptionsPrivate_ -{ +typedef struct GArrowReadOptionsPrivate_ { arrow::ipc::IpcReadOptions options; arrow::ipc::DictionaryMemo dictionary_memo; } GArrowReadOptionsPrivate; @@ -45,11 +44,14 @@ enum { PROP_READ_OPTIONS_USE_THREADS, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowReadOptions, garrow_read_options, G_TYPE_OBJECT); +G_DEFINE_TYPE_WITH_PRIVATE(GArrowReadOptions, + garrow_read_options, + G_TYPE_OBJECT); -#define GARROW_READ_OPTIONS_GET_PRIVATE(obj) \ - static_cast( \ - garrow_read_options_get_instance_private(GARROW_READ_OPTIONS(obj))) +#define GARROW_READ_OPTIONS_GET_PRIVATE(obj) \ + static_cast( \ + garrow_read_options_get_instance_private( \ + GARROW_READ_OPTIONS(obj))) static void garrow_read_options_finalize(GObject *object) @@ -108,9 +110,9 @@ static void garrow_read_options_init(GArrowReadOptions *object) { auto priv = GARROW_READ_OPTIONS_GET_PRIVATE(object); - new (&priv->options) arrow::ipc::IpcReadOptions; + new(&priv->options) arrow::ipc::IpcReadOptions; priv->options = arrow::ipc::IpcReadOptions::Defaults(); - new (&priv->dictionary_memo) arrow::ipc::DictionaryMemo; + new(&priv->dictionary_memo) arrow::ipc::DictionaryMemo; } static void @@ -118,7 +120,7 @@ garrow_read_options_class_init(GArrowReadOptionsClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_read_options_finalize; + gobject_class->finalize = garrow_read_options_finalize; gobject_class->set_property = garrow_read_options_set_property; gobject_class->get_property = garrow_read_options_get_property; @@ -156,7 +158,9 @@ garrow_read_options_class_init(GArrowReadOptionsClass *klass) "Whether to use the global CPU thread pool", options.use_threads, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_READ_OPTIONS_USE_THREADS, spec); + g_object_class_install_property(gobject_class, + PROP_READ_OPTIONS_USE_THREADS, + spec); } /** @@ -187,7 +191,8 @@ garrow_read_options_new(void) * Since: 1.0.0 */ int * -garrow_read_options_get_included_fields(GArrowReadOptions *options, gsize *n_fields) +garrow_read_options_get_included_fields(GArrowReadOptions *options, + gsize *n_fields) { auto priv = GARROW_READ_OPTIONS_GET_PRIVATE(options); if (priv->options.included_fields.empty()) { @@ -231,8 +236,8 @@ garrow_read_options_set_included_fields(GArrowReadOptions *options, } } -typedef struct GArrowWriteOptionsPrivate_ -{ + +typedef struct GArrowWriteOptionsPrivate_ { arrow::ipc::IpcWriteOptions options; GArrowCodec *codec; } GArrowWriteOptionsPrivate; @@ -246,11 +251,14 @@ enum { PROP_WRITE_OPTIONS_USE_THREADS, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowWriteOptions, garrow_write_options, G_TYPE_OBJECT); +G_DEFINE_TYPE_WITH_PRIVATE(GArrowWriteOptions, + garrow_write_options, + G_TYPE_OBJECT); -#define GARROW_WRITE_OPTIONS_GET_PRIVATE(obj) \ - static_cast( \ - garrow_write_options_get_instance_private(GARROW_WRITE_OPTIONS(obj))) +#define GARROW_WRITE_OPTIONS_GET_PRIVATE(obj) \ + static_cast( \ + garrow_write_options_get_instance_private( \ + GARROW_WRITE_OPTIONS(obj))) static void garrow_write_options_dispose(GObject *object) @@ -349,7 +357,7 @@ static void garrow_write_options_init(GArrowWriteOptions *object) { auto priv = GARROW_WRITE_OPTIONS_GET_PRIVATE(object); - new (&priv->options) arrow::ipc::IpcWriteOptions; + new(&priv->options) arrow::ipc::IpcWriteOptions; priv->options = arrow::ipc::IpcWriteOptions::Defaults(); if (priv->options.codec) { priv->codec = garrow_codec_new_raw(&(priv->options.codec)); @@ -363,8 +371,8 @@ garrow_write_options_class_init(GArrowWriteOptionsClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_write_options_dispose; - gobject_class->finalize = garrow_write_options_finalize; + gobject_class->dispose = garrow_write_options_dispose; + gobject_class->finalize = garrow_write_options_finalize; gobject_class->set_property = garrow_write_options_set_property; gobject_class->get_property = garrow_write_options_get_property; @@ -386,7 +394,9 @@ garrow_write_options_class_init(GArrowWriteOptionsClass *klass) "for field length", options.allow_64bit, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_WRITE_OPTIONS_ALLOW_64BIT, spec); + g_object_class_install_property(gobject_class, + PROP_WRITE_OPTIONS_ALLOW_64BIT, + spec); /** * GArrowWriteOptions:max-recursion-depth: @@ -422,7 +432,9 @@ garrow_write_options_class_init(GArrowWriteOptionsClass *klass) G_MAXINT, options.alignment, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_WRITE_OPTIONS_ALIGNMENT, spec); + g_object_class_install_property(gobject_class, + PROP_WRITE_OPTIONS_ALIGNMENT, + spec); /** * GArrowWriteOptions:write-legacy-ipc-format: @@ -458,7 +470,9 @@ garrow_write_options_class_init(GArrowWriteOptionsClass *klass) "compressing record batch body buffers.", GARROW_TYPE_CODEC, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_WRITE_OPTIONS_CODEC, spec); + g_object_class_install_property(gobject_class, + PROP_WRITE_OPTIONS_CODEC, + spec); /** * GArrowWriteOptions:use-threads: @@ -472,7 +486,9 @@ garrow_write_options_class_init(GArrowWriteOptionsClass *klass) "Whether to use the global CPU thread pool", options.use_threads, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_WRITE_OPTIONS_USE_THREADS, spec); + g_object_class_install_property(gobject_class, + PROP_WRITE_OPTIONS_USE_THREADS, + spec); } /** diff --git a/c_glib/arrow-glib/ipc-options.h b/c_glib/arrow-glib/ipc-options.h index 1ddff059d2f..3b1d99e38c8 100644 --- a/c_glib/arrow-glib/ipc-options.h +++ b/c_glib/arrow-glib/ipc-options.h @@ -19,16 +19,17 @@ #pragma once -#include - +#include #include G_BEGIN_DECLS #define GARROW_TYPE_READ_OPTIONS (garrow_read_options_get_type()) -GARROW_AVAILABLE_IN_1_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowReadOptions, garrow_read_options, GARROW, READ_OPTIONS, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowReadOptions, + garrow_read_options, + GARROW, + READ_OPTIONS, + GObject) struct _GArrowReadOptionsClass { GObjectClass parent_class; @@ -39,7 +40,8 @@ GArrowReadOptions * garrow_read_options_new(void); GARROW_AVAILABLE_IN_1_0 int * -garrow_read_options_get_included_fields(GArrowReadOptions *options, gsize *n_fields); +garrow_read_options_get_included_fields(GArrowReadOptions *options, + gsize *n_fields); GARROW_AVAILABLE_IN_1_0 void garrow_read_options_set_included_fields(GArrowReadOptions *options, @@ -47,9 +49,11 @@ garrow_read_options_set_included_fields(GArrowReadOptions *options, gsize n_fields); #define GARROW_TYPE_WRITE_OPTIONS (garrow_write_options_get_type()) -GARROW_AVAILABLE_IN_1_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowWriteOptions, garrow_write_options, GARROW, WRITE_OPTIONS, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowWriteOptions, + garrow_write_options, + GARROW, + WRITE_OPTIONS, + GObject) struct _GArrowWriteOptionsClass { GObjectClass parent_class; diff --git a/c_glib/arrow-glib/ipc-options.hpp b/c_glib/arrow-glib/ipc-options.hpp index 838d05d41db..f57fbd3c11e 100644 --- a/c_glib/arrow-glib/ipc-options.hpp +++ b/c_glib/arrow-glib/ipc-options.hpp @@ -23,14 +23,10 @@ #include -GARROW_EXTERN arrow::ipc::IpcReadOptions * garrow_read_options_get_raw(GArrowReadOptions *options); - -GARROW_EXTERN arrow::ipc::DictionaryMemo * garrow_read_options_get_dictionary_memo_raw(GArrowReadOptions *options); -GARROW_EXTERN arrow::ipc::IpcWriteOptions * garrow_write_options_get_raw(GArrowWriteOptions *options); diff --git a/c_glib/arrow-glib/local-file-system.cpp b/c_glib/arrow-glib/local-file-system.cpp index ee16bfe4128..c4b29658e31 100644 --- a/c_glib/arrow-glib/local-file-system.cpp +++ b/c_glib/arrow-glib/local-file-system.cpp @@ -28,15 +28,14 @@ G_BEGIN_DECLS * @title: Local file system classes * @include: arrow-glib/arrow-glib.h * - * #GArrowLocalFileSystemOptions is a class for specifying options of + * #GArrowLocalFileSystemOptions is a class for specifyiing options of * an instance of #GArrowLocalFileSystem. * * #GArrowLocalFileSystem is a class for an implementation of a file system * that accesses files on the local machine. */ -typedef struct GArrowLocalFileSystemOptionsPrivate_ -{ +typedef struct GArrowLocalFileSystemOptionsPrivate_ { arrow::fs::LocalFileSystemOptions local_file_system_options; } GArrowLocalFileSystemOptionsPrivate; @@ -48,10 +47,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowLocalFileSystemOptions, garrow_local_file_system_options, G_TYPE_OBJECT) -#define GARROW_LOCAL_FILE_SYSTEM_OPTIONS_GET_PRIVATE(obj) \ - static_cast( \ - garrow_local_file_system_options_get_instance_private( \ - GARROW_LOCAL_FILE_SYSTEM_OPTIONS(obj))) +#define GARROW_LOCAL_FILE_SYSTEM_OPTIONS_GET_PRIVATE(obj) \ + static_cast( \ + garrow_local_file_system_options_get_instance_private( \ + GARROW_LOCAL_FILE_SYSTEM_OPTIONS(obj))) static void garrow_local_file_system_options_finalize(GObject *object) @@ -103,7 +102,7 @@ static void garrow_local_file_system_options_init(GArrowLocalFileSystemOptions *object) { auto priv = GARROW_LOCAL_FILE_SYSTEM_OPTIONS_GET_PRIVATE(object); - new (&priv->local_file_system_options) arrow::fs::LocalFileSystemOptions; + new(&priv->local_file_system_options) arrow::fs::LocalFileSystemOptions; } static void @@ -113,7 +112,7 @@ garrow_local_file_system_options_class_init(GArrowLocalFileSystemOptionsClass *k auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_local_file_system_options_finalize; + gobject_class->finalize = garrow_local_file_system_options_finalize; gobject_class->set_property = garrow_local_file_system_options_set_property; gobject_class->get_property = garrow_local_file_system_options_get_property; @@ -153,7 +152,9 @@ garrow_local_file_system_options_new(void) /* arrow::fs::LocalFileSystem */ -G_DEFINE_TYPE(GArrowLocalFileSystem, garrow_local_file_system, GARROW_TYPE_FILE_SYSTEM) +G_DEFINE_TYPE(GArrowLocalFileSystem, + garrow_local_file_system, + GARROW_TYPE_FILE_SYSTEM) static void garrow_local_file_system_init(GArrowLocalFileSystem *file_system) @@ -177,13 +178,16 @@ GArrowLocalFileSystem * garrow_local_file_system_new(GArrowLocalFileSystemOptions *options) { if (options) { - const auto &arrow_options = garrow_local_file_system_options_get_raw(options); - auto arrow_local_file_system = std::static_pointer_cast( - std::make_shared(arrow_options)); + const auto &arrow_options = + garrow_local_file_system_options_get_raw(options); + auto arrow_local_file_system = + std::static_pointer_cast( + std::make_shared(arrow_options)); return garrow_local_file_system_new_raw(&arrow_local_file_system); } else { - auto arrow_local_file_system = std::static_pointer_cast( - std::make_shared()); + auto arrow_local_file_system = + std::static_pointer_cast( + std::make_shared()); return garrow_local_file_system_new_raw(&arrow_local_file_system); } } @@ -198,9 +202,10 @@ garrow_local_file_system_options_get_raw(GArrowLocalFileSystemOptions *options) } GArrowLocalFileSystem * -garrow_local_file_system_new_raw( - std::shared_ptr *arrow_file_system) +garrow_local_file_system_new_raw(std::shared_ptr *arrow_file_system) { return GARROW_LOCAL_FILE_SYSTEM( - g_object_new(GARROW_TYPE_LOCAL_FILE_SYSTEM, "file-system", arrow_file_system, NULL)); + g_object_new(GARROW_TYPE_LOCAL_FILE_SYSTEM, + "file-system", arrow_file_system, + NULL)); } diff --git a/c_glib/arrow-glib/local-file-system.h b/c_glib/arrow-glib/local-file-system.h index 6ad2ee9f231..77414979634 100644 --- a/c_glib/arrow-glib/local-file-system.h +++ b/c_glib/arrow-glib/local-file-system.h @@ -25,9 +25,7 @@ G_BEGIN_DECLS /* arrow::fs::LocalFileSystemOptions */ -#define GARROW_TYPE_LOCAL_FILE_SYSTEM_OPTIONS \ - (garrow_local_file_system_options_get_type()) -GARROW_AVAILABLE_IN_0_17 +#define GARROW_TYPE_LOCAL_FILE_SYSTEM_OPTIONS (garrow_local_file_system_options_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowLocalFileSystemOptions, garrow_local_file_system_options, GARROW, @@ -45,7 +43,6 @@ garrow_local_file_system_options_new(void); /* arrow::fs::LocalFileSystem */ #define GARROW_TYPE_LOCAL_FILE_SYSTEM (garrow_local_file_system_get_type()) -GARROW_AVAILABLE_IN_0_17 G_DECLARE_DERIVABLE_TYPE(GArrowLocalFileSystem, garrow_local_file_system, GARROW, diff --git a/c_glib/arrow-glib/local-file-system.hpp b/c_glib/arrow-glib/local-file-system.hpp index 0ef69ca1275..ac7a9de0a07 100644 --- a/c_glib/arrow-glib/local-file-system.hpp +++ b/c_glib/arrow-glib/local-file-system.hpp @@ -29,3 +29,4 @@ garrow_local_file_system_options_get_raw(GArrowLocalFileSystemOptions *options); GArrowLocalFileSystem * garrow_local_file_system_new_raw( std::shared_ptr *arrow_file_system); + diff --git a/c_glib/arrow-glib/memory-pool.cpp b/c_glib/arrow-glib/memory-pool.cpp index 4fdc5bcc738..e0d9035f88c 100644 --- a/c_glib/arrow-glib/memory-pool.cpp +++ b/c_glib/arrow-glib/memory-pool.cpp @@ -30,8 +30,7 @@ G_BEGIN_DECLS * #GArrowMemoryPool is a class for memory allocation. */ -typedef struct GArrowMemoryPoolPrivate_ -{ +typedef struct GArrowMemoryPoolPrivate_ { arrow::MemoryPool *memory_pool; } GArrowMemoryPoolPrivate; @@ -41,9 +40,10 @@ enum { G_DEFINE_TYPE_WITH_PRIVATE(GArrowMemoryPool, garrow_memory_pool, G_TYPE_OBJECT) -#define GARROW_MEMORY_POOL_GET_PRIVATE(obj) \ - static_cast( \ - garrow_memory_pool_get_instance_private(GARROW_MEMORY_POOL(obj))) +#define GARROW_MEMORY_POOL_GET_PRIVATE(obj) \ + static_cast( \ + garrow_memory_pool_get_instance_private( \ + GARROW_MEMORY_POOL(obj))) static void garrow_memory_pool_set_property(GObject *object, @@ -55,7 +55,8 @@ garrow_memory_pool_set_property(GObject *object, switch (prop_id) { case PROP_MEMORY_POOL: - priv->memory_pool = static_cast(g_value_get_pointer(value)); + priv->memory_pool = + static_cast(g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -77,11 +78,11 @@ garrow_memory_pool_class_init(GArrowMemoryPoolClass *klass) gobject_class->set_property = garrow_memory_pool_set_property; - spec = g_param_spec_pointer( - "memory-pool", - "Memory Pool", - "The raw arrow::MemoryPool *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("memory-pool", + "Memory Pool", + "The raw arrow::MemoryPool *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_MEMORY_POOL, spec); } @@ -157,8 +158,9 @@ G_END_DECLS GArrowMemoryPool * garrow_memory_pool_new_raw(arrow::MemoryPool *memory_pool) { - return GARROW_MEMORY_POOL( - g_object_new(GARROW_TYPE_MEMORY_POOL, "memory-pool", memory_pool, NULL)); + return GARROW_MEMORY_POOL(g_object_new(GARROW_TYPE_MEMORY_POOL, + "memory-pool", memory_pool, + NULL)); } arrow::MemoryPool * diff --git a/c_glib/arrow-glib/memory-pool.h b/c_glib/arrow-glib/memory-pool.h index 7da15a9eb1b..d6bba176d3d 100644 --- a/c_glib/arrow-glib/memory-pool.h +++ b/c_glib/arrow-glib/memory-pool.h @@ -19,35 +19,25 @@ #pragma once -#include - -#include +#include G_BEGIN_DECLS #define GARROW_TYPE_MEMORY_POOL (garrow_memory_pool_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowMemoryPool, garrow_memory_pool, GARROW, MEMORY_POOL, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowMemoryPool, + garrow_memory_pool, + GARROW, + MEMORY_POOL, + GObject) struct _GArrowMemoryPoolClass { GObjectClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowMemoryPool * -garrow_memory_pool_default(); - -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_memory_pool_get_bytes_allocated(GArrowMemoryPool *memory_pool); - -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_memory_pool_get_max_memory(GArrowMemoryPool *memory_pool); +GArrowMemoryPool *garrow_memory_pool_default(); +gint64 garrow_memory_pool_get_bytes_allocated(GArrowMemoryPool *memory_pool); +gint64 garrow_memory_pool_get_max_memory(GArrowMemoryPool *memory_pool); +gchar *garrow_memory_pool_get_backend_name(GArrowMemoryPool *memory_pool); -GARROW_AVAILABLE_IN_ALL -gchar * -garrow_memory_pool_get_backend_name(GArrowMemoryPool *memory_pool); G_END_DECLS diff --git a/c_glib/arrow-glib/meson.build b/c_glib/arrow-glib/meson.build index 36a8274513e..b26dcc4c080 100644 --- a/c_glib/arrow-glib/meson.build +++ b/c_glib/arrow-glib/meson.build @@ -36,10 +36,9 @@ sources = files( 'record-batch.cpp', 'scalar.cpp', 'schema.cpp', - 'table-builder.cpp', 'table.cpp', + 'table-builder.cpp', 'tensor.cpp', - 'timestamp-parser.cpp', 'type.cpp', ) @@ -94,15 +93,15 @@ c_headers = files( 'error.h', 'expression.h', 'field.h', + 'gobject-type.h', 'interval.h', 'memory-pool.h', 'record-batch.h', 'scalar.h', 'schema.h', - 'table-builder.h', 'table.h', + 'table-builder.h', 'tensor.h', - 'timestamp-parser.h', 'type.h', ) @@ -161,10 +160,9 @@ cpp_headers = files( 'record-batch.hpp', 'scalar.hpp', 'schema.hpp', - 'table-builder.hpp', 'table.hpp', + 'table-builder.hpp', 'tensor.hpp', - 'timestamp-parser.hpp', 'type.hpp', ) @@ -205,12 +203,14 @@ cpp_internal_headers = files( 'internal-index.hpp', ) -version_h = configure_file( - input: 'version.h.in', - output: 'version.h', - command: [python3, generate_version_header_py, '--library', 'GARROW', '--version', version, '--input', '@INPUT@', '--output', '@OUTPUT@'], -) - +version_h_conf = configuration_data() +version_h_conf.set('GARROW_VERSION_MAJOR', version_major) +version_h_conf.set('GARROW_VERSION_MINOR', version_minor) +version_h_conf.set('GARROW_VERSION_MICRO', version_micro) +version_h_conf.set('GARROW_VERSION_TAG', version_tag) +version_h = configure_file(input: 'version.h.in', + output: 'version.h', + configuration: version_h_conf) c_headers += version_h enums = gnome.mkenums('enums', @@ -224,9 +224,11 @@ enums = gnome.mkenums('enums', enums_source = enums[0] enums_header = enums[1] + headers = c_headers + cpp_headers install_headers(headers, subdir: meson.project_name()) + gobject = dependency('gobject-2.0') gobject_libdir = gobject.get_variable(pkgconfig: 'libdir') # This is for Homebrew. "pkg-config --cflags gio-2.0" includes the @@ -249,8 +251,6 @@ libarrow_glib = library('arrow-glib', dependencies: dependencies, implicit_include_directories: false, include_directories: base_include_directories, - cpp_args: ['-DGARROW_COMPILATION'], - c_args: ['-DGARROW_COMPILATION'], soversion: so_version, version: library_version) arrow_glib = declare_dependency(link_with: libarrow_glib, @@ -279,16 +279,18 @@ if have_gi extra_args: [ '--warn-all', ], + fatal_warnings: gi_fatal_warnings, header: 'arrow-glib/arrow-glib.h', identifier_prefix: 'GArrow', includes: [ 'GObject-2.0', 'Gio-2.0', ], + install: true, namespace: 'Arrow', + nsversion: api_version, sources: sources + c_headers + enums, - symbol_prefix: 'garrow', - kwargs: generate_gi_common_args) + symbol_prefix: 'garrow') if generate_vapi arrow_glib_vapi = gnome.generate_vapi('arrow-glib', diff --git a/c_glib/arrow-glib/metadata-version.cpp b/c_glib/arrow-glib/metadata-version.cpp index ffefeb2f08d..69cbaec37e9 100644 --- a/c_glib/arrow-glib/metadata-version.cpp +++ b/c_glib/arrow-glib/metadata-version.cpp @@ -22,7 +22,7 @@ /** * SECTION: metadata-version * @title: GArrowMetadataVersion - * @short_description: Metadata version mapping between Arrow and arrow-glib + * @short_description: Metadata version mapgging between Arrow and arrow-glib * * #GArrowMetadataVersion provides metadata versions corresponding * to `arrow::ipc::MetadataVersion` values. diff --git a/c_glib/arrow-glib/metadata-version.hpp b/c_glib/arrow-glib/metadata-version.hpp index c5241e0f51f..7b3865e5921 100644 --- a/c_glib/arrow-glib/metadata-version.hpp +++ b/c_glib/arrow-glib/metadata-version.hpp @@ -23,7 +23,5 @@ #include -GArrowMetadataVersion -garrow_metadata_version_from_raw(arrow::ipc::MetadataVersion version); -arrow::ipc::MetadataVersion -garrow_metadata_version_to_raw(GArrowMetadataVersion version); +GArrowMetadataVersion garrow_metadata_version_from_raw(arrow::ipc::MetadataVersion version); +arrow::ipc::MetadataVersion garrow_metadata_version_to_raw(GArrowMetadataVersion version); diff --git a/c_glib/arrow-glib/orc-file-reader.cpp b/c_glib/arrow-glib/orc-file-reader.cpp index dd51c08651a..084198a82a5 100644 --- a/c_glib/arrow-glib/orc-file-reader.cpp +++ b/c_glib/arrow-glib/orc-file-reader.cpp @@ -36,8 +36,7 @@ G_BEGIN_DECLS * format from input. */ -typedef struct GArrowORCFileReaderPrivate_ -{ +typedef struct GArrowORCFileReaderPrivate_ { GArrowSeekableInputStream *input; arrow::adapters::orc::ORCFileReader *orc_file_reader; GArray *field_indices; @@ -49,11 +48,14 @@ enum { PROP_ORC_FILE_READER }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowORCFileReader, garrow_orc_file_reader, G_TYPE_OBJECT); +G_DEFINE_TYPE_WITH_PRIVATE(GArrowORCFileReader, + garrow_orc_file_reader, + G_TYPE_OBJECT); -#define GARROW_ORC_FILE_READER_GET_PRIVATE(obj) \ - static_cast( \ - garrow_orc_file_reader_get_instance_private(GARROW_ORC_FILE_READER(obj))) +#define GARROW_ORC_FILE_READER_GET_PRIVATE(obj) \ + static_cast( \ + garrow_orc_file_reader_get_instance_private( \ + GARROW_ORC_FILE_READER(obj))) static void garrow_orc_file_reader_dispose(GObject *object) @@ -132,28 +134,29 @@ garrow_orc_file_reader_class_init(GArrowORCFileReaderClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_orc_file_reader_dispose; - gobject_class->finalize = garrow_orc_file_reader_finalize; + gobject_class->dispose = garrow_orc_file_reader_dispose; + gobject_class->finalize = garrow_orc_file_reader_finalize; gobject_class->set_property = garrow_orc_file_reader_set_property; gobject_class->get_property = garrow_orc_file_reader_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "input", - "Input", - "The input stream", - GARROW_TYPE_SEEKABLE_INPUT_STREAM, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("input", + "Input", + "The input stream", + GARROW_TYPE_SEEKABLE_INPUT_STREAM, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_INPUT, spec); - spec = g_param_spec_pointer( - "orc-file-reader", - "arrow::adapters::orc::ORCFileReader", - "The raw arrow::adapters::orc::ORCFileReader *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("orc-file-reader", + "arrow::adapters::orc::ORCFileReader", + "The raw arrow::adapters::orc::ORCFileReader *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_ORC_FILE_READER, spec); } + /** * garrow_orc_file_reader_new: * @file: The file to be read. @@ -165,14 +168,17 @@ garrow_orc_file_reader_class_init(GArrowORCFileReaderClass *klass) * Since: 0.10.0 */ GArrowORCFileReader * -garrow_orc_file_reader_new(GArrowSeekableInputStream *input, GError **error) +garrow_orc_file_reader_new(GArrowSeekableInputStream *input, + GError **error) { auto arrow_random_access_file = garrow_seekable_input_stream_get_raw(input); auto pool = arrow::default_memory_pool(); auto arrow_reader_result = - arrow::adapters::orc::ORCFileReader::Open(arrow_random_access_file, pool); + arrow::adapters::orc::ORCFileReader::Open(arrow_random_access_file, + pool); if (garrow::check(error, arrow_reader_result, "[orc-file-reader][new]")) { - return garrow_orc_file_reader_new_raw(input, (*arrow_reader_result).release()); + return garrow_orc_file_reader_new_raw(input, + (*arrow_reader_result).release()); } else { return NULL; } @@ -195,7 +201,9 @@ garrow_orc_file_reader_set_field_indexes(GArrowORCFileReader *reader, const gint *field_indexes, guint n_field_indexes) { - garrow_orc_file_reader_set_field_indices(reader, field_indexes, n_field_indexes); + garrow_orc_file_reader_set_field_indices(reader, + field_indexes, + n_field_indexes); } /** @@ -219,7 +227,10 @@ garrow_orc_file_reader_set_field_indices(GArrowORCFileReader *reader, if (n_field_indices == 0) { priv->field_indices = NULL; } else { - priv->field_indices = g_array_sized_new(FALSE, FALSE, sizeof(gint), n_field_indices); + priv->field_indices = g_array_sized_new(FALSE, + FALSE, + sizeof(gint), + n_field_indices); g_array_append_vals(priv->field_indices, field_indices, n_field_indices); } } @@ -279,11 +290,14 @@ garrow_orc_file_reader_get_field_indices(GArrowORCFileReader *reader, * Since: 0.10.0 */ GArrowSchema * -garrow_orc_file_reader_read_type(GArrowORCFileReader *reader, GError **error) +garrow_orc_file_reader_read_type(GArrowORCFileReader *reader, + GError **error) { auto arrow_reader = garrow_orc_file_reader_get_raw(reader); auto arrow_schema_result = arrow_reader->ReadSchema(); - if (garrow::check(error, arrow_schema_result, "[orc-file-reader][read-type]")) { + if (garrow::check(error, + arrow_schema_result, + "[orc-file-reader][read-type]")) { auto arrow_schema = *arrow_schema_result; return garrow_schema_new_raw(&arrow_schema); } else { @@ -302,7 +316,8 @@ garrow_orc_file_reader_read_type(GArrowORCFileReader *reader, GError **error) * Since: 0.10.0 */ GArrowTable * -garrow_orc_file_reader_read_stripes(GArrowORCFileReader *reader, GError **error) +garrow_orc_file_reader_read_stripes(GArrowORCFileReader *reader, + GError **error) { auto arrow_reader = garrow_orc_file_reader_get_raw(reader); auto priv = GARROW_ORC_FILE_READER_GET_PRIVATE(reader); @@ -313,7 +328,9 @@ garrow_orc_file_reader_read_stripes(GArrowORCFileReader *reader, GError **error) arrow_field_indices.push_back(g_array_index(field_indices, gint, i)); } auto arrow_table_result = arrow_reader->Read(arrow_field_indices); - if (garrow::check(error, arrow_table_result, "[orc-file-reader][read-stripes]")) { + if (garrow::check(error, + arrow_table_result, + "[orc-file-reader][read-stripes]")) { auto arrow_table = *arrow_table_result; return garrow_table_new_raw(&arrow_table); } else { @@ -321,7 +338,9 @@ garrow_orc_file_reader_read_stripes(GArrowORCFileReader *reader, GError **error) } } else { auto arrow_table_result = arrow_reader->Read(); - if (garrow::check(error, arrow_table_result, "[orc-file-reader][read-stripes]")) { + if (garrow::check(error, + arrow_table_result, + "[orc-file-reader][read-stripes]")) { auto arrow_table = *arrow_table_result; return garrow_table_new_raw(&arrow_table); } else { @@ -342,7 +361,9 @@ garrow_orc_file_reader_read_stripes(GArrowORCFileReader *reader, GError **error) * Since: 0.10.0 */ GArrowRecordBatch * -garrow_orc_file_reader_read_stripe(GArrowORCFileReader *reader, gint64 i, GError **error) +garrow_orc_file_reader_read_stripe(GArrowORCFileReader *reader, + gint64 i, + GError **error) { auto arrow_reader = garrow_orc_file_reader_get_raw(reader); if (i < 0) { @@ -356,7 +377,8 @@ garrow_orc_file_reader_read_stripe(GArrowORCFileReader *reader, gint64 i, GError arrow_field_indices.push_back(g_array_index(field_indices, gint, j)); } std::shared_ptr arrow_record_batch; - auto arrow_record_batch_result = arrow_reader->ReadStripe(i, arrow_field_indices); + auto arrow_record_batch_result = + arrow_reader->ReadStripe(i, arrow_field_indices); if (garrow::check(error, arrow_record_batch_result, "[orc-file-reader][read-stripe]")) { @@ -408,18 +430,19 @@ garrow_orc_file_reader_get_n_rows(GArrowORCFileReader *reader) return arrow_reader->NumberOfRows(); } + G_END_DECLS + GArrowORCFileReader * garrow_orc_file_reader_new_raw(GArrowSeekableInputStream *input, arrow::adapters::orc::ORCFileReader *arrow_reader) { - auto reader = GARROW_ORC_FILE_READER(g_object_new(GARROW_TYPE_ORC_FILE_READER, - "input", - input, - "orc-file-reader", - arrow_reader, - NULL)); + auto reader = + GARROW_ORC_FILE_READER(g_object_new(GARROW_TYPE_ORC_FILE_READER, + "input", input, + "orc-file-reader", arrow_reader, + NULL)); return reader; } diff --git a/c_glib/arrow-glib/orc-file-reader.h b/c_glib/arrow-glib/orc-file-reader.h index 4eb3df5242e..9551d52e0fd 100644 --- a/c_glib/arrow-glib/orc-file-reader.h +++ b/c_glib/arrow-glib/orc-file-reader.h @@ -24,20 +24,21 @@ G_BEGIN_DECLS #define GARROW_TYPE_ORC_FILE_READER (garrow_orc_file_reader_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowORCFileReader, garrow_orc_file_reader, GARROW, ORC_FILE_READER, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowORCFileReader, + garrow_orc_file_reader, + GARROW, + ORC_FILE_READER, + GObject) struct _GArrowORCFileReaderClass { GObjectClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowORCFileReader * -garrow_orc_file_reader_new(GArrowSeekableInputStream *file, GError **error); +garrow_orc_file_reader_new(GArrowSeekableInputStream *file, + GError **error); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_orc_file_reader_set_field_indices) void garrow_orc_file_reader_set_field_indexes(GArrowORCFileReader *reader, @@ -50,7 +51,6 @@ garrow_orc_file_reader_set_field_indices(GArrowORCFileReader *reader, const gint *field_indices, guint n_field_indices); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_12_FOR(garrow_orc_file_reader_get_field_indices) const gint * garrow_orc_file_reader_get_field_indexes(GArrowORCFileReader *reader, @@ -60,25 +60,17 @@ GARROW_AVAILABLE_IN_0_12 const gint * garrow_orc_file_reader_get_field_indices(GArrowORCFileReader *reader, guint *n_field_indices); - -GARROW_AVAILABLE_IN_ALL GArrowSchema * -garrow_orc_file_reader_read_type(GArrowORCFileReader *reader, GError **error); - -GARROW_AVAILABLE_IN_ALL +garrow_orc_file_reader_read_type(GArrowORCFileReader *reader, + GError **error); GArrowTable * -garrow_orc_file_reader_read_stripes(GArrowORCFileReader *reader, GError **error); - -GARROW_AVAILABLE_IN_ALL +garrow_orc_file_reader_read_stripes(GArrowORCFileReader *reader, + GError **error); GArrowRecordBatch * -garrow_orc_file_reader_read_stripe(GArrowORCFileReader *reader, gint64 i, GError **error); - -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_orc_file_reader_get_n_stripes(GArrowORCFileReader *reader); - -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_orc_file_reader_get_n_rows(GArrowORCFileReader *reader); +garrow_orc_file_reader_read_stripe(GArrowORCFileReader *reader, + gint64 i, + GError **error); +gint64 garrow_orc_file_reader_get_n_stripes(GArrowORCFileReader *reader); +gint64 garrow_orc_file_reader_get_n_rows(GArrowORCFileReader *reader); G_END_DECLS diff --git a/c_glib/arrow-glib/output-stream.cpp b/c_glib/arrow-glib/output-stream.cpp index d9bdf7ad8b7..b5b51584c49 100644 --- a/c_glib/arrow-glib/output-stream.cpp +++ b/c_glib/arrow-glib/output-stream.cpp @@ -33,22 +33,6 @@ #include #include -static std::shared_ptr -garrow_output_stream_get_raw_file_interface(GArrowFile *file) -{ - auto output_stream = GARROW_OUTPUT_STREAM(file); - auto arrow_output_stream = garrow_output_stream_get_raw(output_stream); - return arrow_output_stream; -} - -static std::shared_ptr -garrow_output_stream_get_raw_writable_interface(GArrowWritable *writable) -{ - auto output_stream = GARROW_OUTPUT_STREAM(writable); - auto arrow_output_stream = garrow_output_stream_get_raw(output_stream); - return arrow_output_stream; -} - G_BEGIN_DECLS /** @@ -71,8 +55,7 @@ G_BEGIN_DECLS * output stream. */ -typedef struct GArrowOutputStreamPrivate_ -{ +typedef struct GArrowOutputStreamPrivate_ { std::shared_ptr output_stream; } GArrowOutputStreamPrivate; @@ -81,30 +64,47 @@ enum { PROP_OUTPUT_STREAM }; +static std::shared_ptr +garrow_output_stream_get_raw_file_interface(GArrowFile *file) +{ + auto output_stream = GARROW_OUTPUT_STREAM(file); + auto arrow_output_stream = garrow_output_stream_get_raw(output_stream); + return arrow_output_stream; +} + static void garrow_output_stream_file_interface_init(GArrowFileInterface *iface) { iface->get_raw = garrow_output_stream_get_raw_file_interface; } +static std::shared_ptr +garrow_output_stream_get_raw_writable_interface(GArrowWritable *writable) +{ + auto output_stream = GARROW_OUTPUT_STREAM(writable); + auto arrow_output_stream = garrow_output_stream_get_raw(output_stream); + return arrow_output_stream; +} + static void garrow_output_stream_writable_interface_init(GArrowWritableInterface *iface) { iface->get_raw = garrow_output_stream_get_raw_writable_interface; } -G_DEFINE_TYPE_WITH_CODE( - GArrowOutputStream, - garrow_output_stream, - G_TYPE_OBJECT, - G_ADD_PRIVATE(GArrowOutputStream) - G_IMPLEMENT_INTERFACE(GARROW_TYPE_FILE, garrow_output_stream_file_interface_init) - G_IMPLEMENT_INTERFACE(GARROW_TYPE_WRITABLE, - garrow_output_stream_writable_interface_init)); +G_DEFINE_TYPE_WITH_CODE(GArrowOutputStream, + garrow_output_stream, + G_TYPE_OBJECT, + G_ADD_PRIVATE(GArrowOutputStream) + G_IMPLEMENT_INTERFACE(GARROW_TYPE_FILE, + garrow_output_stream_file_interface_init) + G_IMPLEMENT_INTERFACE(GARROW_TYPE_WRITABLE, + garrow_output_stream_writable_interface_init)); -#define GARROW_OUTPUT_STREAM_GET_PRIVATE(obj) \ - static_cast( \ - garrow_output_stream_get_instance_private(GARROW_OUTPUT_STREAM(obj))) +#define GARROW_OUTPUT_STREAM_GET_PRIVATE(obj) \ + static_cast( \ + garrow_output_stream_get_instance_private( \ + GARROW_OUTPUT_STREAM(obj))) static void garrow_output_stream_finalize(GObject *object) @@ -118,16 +118,16 @@ garrow_output_stream_finalize(GObject *object) static void garrow_output_stream_set_property(GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) + guint prop_id, + const GValue *value, + GParamSpec *pspec) { auto priv = GARROW_OUTPUT_STREAM_GET_PRIVATE(object); switch (prop_id) { case PROP_OUTPUT_STREAM: - priv->output_stream = *static_cast *>( - g_value_get_pointer(value)); + priv->output_stream = + *static_cast *>(g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -152,7 +152,7 @@ static void garrow_output_stream_init(GArrowOutputStream *object) { auto priv = GARROW_OUTPUT_STREAM_GET_PRIVATE(object); - new (&priv->output_stream) std::shared_ptr; + new(&priv->output_stream) std::shared_ptr; } static void @@ -160,16 +160,16 @@ garrow_output_stream_class_init(GArrowOutputStreamClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_output_stream_finalize; + gobject_class->finalize = garrow_output_stream_finalize; gobject_class->set_property = garrow_output_stream_set_property; gobject_class->get_property = garrow_output_stream_get_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "output-stream", - "io::OutputStream", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("output-stream", + "io::OutputStream", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_OUTPUT_STREAM, spec); } @@ -185,7 +185,9 @@ garrow_output_stream_class_init(GArrowOutputStreamClass *klass) * Since: 0.11.0 */ gboolean -garrow_output_stream_align(GArrowOutputStream *stream, gint32 alignment, GError **error) +garrow_output_stream_align(GArrowOutputStream *stream, + gint32 alignment, + GError **error) { auto arrow_stream = garrow_output_stream_get_raw(stream); auto status = arrow::ipc::AlignStream(arrow_stream.get(), alignment); @@ -269,6 +271,7 @@ garrow_output_stream_write_record_batch(GArrowOutputStream *stream, } } + G_DEFINE_TYPE(GArrowFileOutputStream, garrow_file_output_stream, GARROW_TYPE_OUTPUT_STREAM); @@ -293,12 +296,15 @@ garrow_file_output_stream_class_init(GArrowFileOutputStreamClass *klass) * %NULL on error. */ GArrowFileOutputStream * -garrow_file_output_stream_new(const gchar *path, gboolean append, GError **error) +garrow_file_output_stream_new(const gchar *path, + gboolean append, + GError **error) { auto arrow_file_output_stream_result = arrow::io::FileOutputStream::Open(std::string(path), append); if (arrow_file_output_stream_result.ok()) { - auto arrow_file_output_stream = arrow_file_output_stream_result.ValueOrDie(); + auto arrow_file_output_stream = + arrow_file_output_stream_result.ValueOrDie(); return garrow_file_output_stream_new_raw(&arrow_file_output_stream); } else { std::string context("[io][file-output-stream][open]: <"); @@ -309,6 +315,7 @@ garrow_file_output_stream_new(const gchar *path, gboolean append, GError **error } } + G_DEFINE_TYPE(GArrowBufferOutputStream, garrow_buffer_output_stream, GARROW_TYPE_OUTPUT_STREAM); @@ -342,33 +349,29 @@ garrow_buffer_output_stream_new(GArrowResizableBuffer *buffer) G_END_DECLS + namespace garrow { class GIOOutputStream : public arrow::io::OutputStream { public: - GIOOutputStream(GOutputStream *output_stream) - : output_stream_(output_stream), - position_(0) - { + GIOOutputStream(GOutputStream *output_stream) : + output_stream_(output_stream), + position_(0) { g_object_ref(output_stream_); } - ~GIOOutputStream() { g_object_unref(output_stream_); } + ~GIOOutputStream() { + g_object_unref(output_stream_); + } - GOutputStream * - get_output_stream() - { + GOutputStream *get_output_stream() { return output_stream_; } - bool - closed() const override - { + bool closed() const override { return static_cast(g_output_stream_is_closed(output_stream_)); } - arrow::Status - Close() override - { + arrow::Status Close() override { GError *error = NULL; if (g_output_stream_close(output_stream_, NULL, &error)) { return arrow::Status::OK(); @@ -379,9 +382,7 @@ namespace garrow { } } - arrow::Result - Tell() const override - { + arrow::Result Tell() const override { if (G_IS_SEEKABLE(output_stream_) && g_seekable_can_seek(G_SEEKABLE(output_stream_))) { return g_seekable_tell(G_SEEKABLE(output_stream_)); @@ -390,18 +391,17 @@ namespace garrow { } } - arrow::Status - Write(const void *data, int64_t n_bytes) override - { + arrow::Status Write(const void *data, + int64_t n_bytes) override { GError *error = NULL; gsize n_written_bytes; - auto succeeded = g_output_stream_write_all(output_stream_, + auto successed = g_output_stream_write_all(output_stream_, data, n_bytes, &n_written_bytes, NULL, &error); - if (succeeded) { + if (successed) { position_ += n_written_bytes; return arrow::Status::OK(); } else { @@ -413,12 +413,10 @@ namespace garrow { } } - arrow::Status - Flush() override - { + arrow::Status Flush() override { GError *error = NULL; - auto succeeded = g_output_stream_flush(output_stream_, NULL, &error); - if (succeeded) { + auto successed = g_output_stream_flush(output_stream_, NULL, &error); + if (successed) { return arrow::Status::OK(); } else { return garrow_error_to_status(error, @@ -431,12 +429,11 @@ namespace garrow { GOutputStream *output_stream_; int64_t position_; }; -}; // namespace garrow +}; G_BEGIN_DECLS -typedef struct GArrowGIOOutputStreamPrivate_ -{ +typedef struct GArrowGIOOutputStreamPrivate_ { GOutputStream *raw; } GArrowGIOOutputStreamPrivate; @@ -448,9 +445,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowGIOOutputStream, garrow_gio_output_stream, GARROW_TYPE_OUTPUT_STREAM); -#define GARROW_GIO_OUTPUT_STREAM_GET_PRIVATE(object) \ - static_cast( \ - garrow_gio_output_stream_get_instance_private(GARROW_GIO_OUTPUT_STREAM(object))) +#define GARROW_GIO_OUTPUT_STREAM_GET_PRIVATE(object) \ + static_cast( \ + garrow_gio_output_stream_get_instance_private( \ + GARROW_GIO_OUTPUT_STREAM(object))) static void garrow_gio_output_stream_dispose(GObject *object) @@ -511,17 +509,17 @@ garrow_gio_output_stream_class_init(GArrowGIOOutputStreamClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_gio_output_stream_dispose; + gobject_class->dispose = garrow_gio_output_stream_dispose; gobject_class->set_property = garrow_gio_output_stream_set_property; gobject_class->get_property = garrow_gio_output_stream_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "raw", - "Raw", - "The raw GOutputStream *", - G_TYPE_OUTPUT_STREAM, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("raw", + "Raw", + "The raw GOutputStream *", + G_TYPE_OUTPUT_STREAM, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_GIO_RAW, spec); } @@ -534,12 +532,11 @@ garrow_gio_output_stream_class_init(GArrowGIOOutputStreamClass *klass) GArrowGIOOutputStream * garrow_gio_output_stream_new(GOutputStream *gio_output_stream) { - auto arrow_output_stream = std::make_shared(gio_output_stream); + auto arrow_output_stream = + std::make_shared(gio_output_stream); auto object = g_object_new(GARROW_TYPE_GIO_OUTPUT_STREAM, - "output-stream", - &arrow_output_stream, - "raw", - gio_output_stream, + "output-stream", &arrow_output_stream, + "raw", gio_output_stream, NULL); auto output_stream = GARROW_GIO_OUTPUT_STREAM(object); return output_stream; @@ -562,8 +559,7 @@ garrow_gio_output_stream_get_raw(GArrowGIOOutputStream *output_stream) return priv->raw; } -typedef struct GArrowCompressedOutputStreamPrivate_ -{ +typedef struct GArrowCompressedOutputStreamPrivate_ { GArrowCodec *codec; GArrowOutputStream *raw; } GArrowCompressedOutputStreamPrivate; @@ -577,9 +573,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowCompressedOutputStream, garrow_compressed_output_stream, GARROW_TYPE_OUTPUT_STREAM) -#define GARROW_COMPRESSED_OUTPUT_STREAM_GET_PRIVATE(object) \ - static_cast( \ - garrow_compressed_output_stream_get_instance_private( \ +#define GARROW_COMPRESSED_OUTPUT_STREAM_GET_PRIVATE(object) \ + static_cast( \ + garrow_compressed_output_stream_get_instance_private( \ GARROW_COMPRESSED_OUTPUT_STREAM(object))) static void @@ -652,25 +648,25 @@ garrow_compressed_output_stream_class_init(GArrowCompressedOutputStreamClass *kl { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_compressed_output_stream_dispose; + gobject_class->dispose = garrow_compressed_output_stream_dispose; gobject_class->set_property = garrow_compressed_output_stream_set_property; gobject_class->get_property = garrow_compressed_output_stream_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "codec", - "Codec", - "The codec for the stream", - GARROW_TYPE_CODEC, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("codec", + "Codec", + "The codec for the stream", + GARROW_TYPE_CODEC, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_CODEC, spec); - spec = g_param_spec_object( - "raw", - "Raw", - "The underlying raw output stream", - GARROW_TYPE_OUTPUT_STREAM, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("raw", + "Raw", + "The underlying raw output stream", + GARROW_TYPE_OUTPUT_STREAM, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_RAW, spec); } @@ -691,7 +687,8 @@ garrow_compressed_output_stream_new(GArrowCodec *codec, { auto arrow_codec = garrow_codec_get_raw(codec).get(); auto arrow_raw = garrow_output_stream_get_raw(raw); - auto arrow_stream = arrow::io::CompressedOutputStream::Make(arrow_codec, arrow_raw); + auto arrow_stream = arrow::io::CompressedOutputStream::Make(arrow_codec, + arrow_raw); if (garrow::check(error, arrow_stream, "[compressed-output-stream][new]")) { return garrow_compressed_output_stream_new_raw(&(arrow_stream.ValueOrDie()), codec, @@ -703,12 +700,14 @@ garrow_compressed_output_stream_new(GArrowCodec *codec, G_END_DECLS + GArrowOutputStream * -garrow_output_stream_new_raw( - std::shared_ptr *arrow_output_stream) +garrow_output_stream_new_raw(std::shared_ptr *arrow_output_stream) { - auto output_stream = GARROW_OUTPUT_STREAM( - g_object_new(GARROW_TYPE_OUTPUT_STREAM, "output-stream", arrow_output_stream, NULL)); + auto output_stream = + GARROW_OUTPUT_STREAM(g_object_new(GARROW_TYPE_OUTPUT_STREAM, + "output-stream", arrow_output_stream, + NULL)); return output_stream; } @@ -719,50 +718,43 @@ garrow_output_stream_get_raw(GArrowOutputStream *output_stream) return priv->output_stream; } + GArrowFileOutputStream * -garrow_file_output_stream_new_raw( - std::shared_ptr *arrow_file_output_stream) +garrow_file_output_stream_new_raw(std::shared_ptr *arrow_file_output_stream) { auto file_output_stream = GARROW_FILE_OUTPUT_STREAM(g_object_new(GARROW_TYPE_FILE_OUTPUT_STREAM, - "output-stream", - arrow_file_output_stream, + "output-stream", arrow_file_output_stream, NULL)); return file_output_stream; } GArrowBufferOutputStream * -garrow_buffer_output_stream_new_raw( - std::shared_ptr *arrow_buffer_output_stream) +garrow_buffer_output_stream_new_raw(std::shared_ptr *arrow_buffer_output_stream) { auto buffer_output_stream = GARROW_BUFFER_OUTPUT_STREAM(g_object_new(GARROW_TYPE_BUFFER_OUTPUT_STREAM, - "output-stream", - arrow_buffer_output_stream, + "output-stream", arrow_buffer_output_stream, NULL)); return buffer_output_stream; } GArrowCompressedOutputStream * -garrow_compressed_output_stream_new_raw( - std::shared_ptr *arrow_raw, - GArrowCodec *codec, - GArrowOutputStream *raw) -{ - auto compressed_output_stream = g_object_new(GARROW_TYPE_COMPRESSED_OUTPUT_STREAM, - "output-stream", - arrow_raw, - "codec", - codec, - "raw", - raw, - NULL); +garrow_compressed_output_stream_new_raw(std::shared_ptr *arrow_raw, + GArrowCodec *codec, + GArrowOutputStream *raw) +{ + auto compressed_output_stream = + g_object_new(GARROW_TYPE_COMPRESSED_OUTPUT_STREAM, + "output-stream", arrow_raw, + "codec", codec, + "raw", raw, + NULL); return GARROW_COMPRESSED_OUTPUT_STREAM(compressed_output_stream); } std::shared_ptr -garrow_compressed_output_stream_get_raw( - GArrowCompressedOutputStream *compressed_output_stream) +garrow_compressed_output_stream_get_raw(GArrowCompressedOutputStream *compressed_output_stream) { auto output_stream = GARROW_OUTPUT_STREAM(compressed_output_stream); auto arrow_output_stream = garrow_output_stream_get_raw(output_stream); diff --git a/c_glib/arrow-glib/output-stream.h b/c_glib/arrow-glib/output-stream.h index 5c8b4b9374f..eeef2489179 100644 --- a/c_glib/arrow-glib/output-stream.h +++ b/c_glib/arrow-glib/output-stream.h @@ -30,23 +30,22 @@ G_BEGIN_DECLS #define GARROW_TYPE_OUTPUT_STREAM (garrow_output_stream_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowOutputStream, garrow_output_stream, GARROW, OUTPUT_STREAM, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowOutputStream, + garrow_output_stream, + GARROW, + OUTPUT_STREAM, + GObject) struct _GArrowOutputStreamClass { GObjectClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_output_stream_align(GArrowOutputStream *stream, gint32 alignment, GError **error); - -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_output_stream_write_tensor(GArrowOutputStream *stream, - GArrowTensor *tensor, - GError **error); +gboolean garrow_output_stream_align(GArrowOutputStream *stream, + gint32 alignment, + GError **error); +gint64 garrow_output_stream_write_tensor(GArrowOutputStream *stream, + GArrowTensor *tensor, + GError **error); GARROW_AVAILABLE_IN_1_0 gint64 garrow_output_stream_write_record_batch(GArrowOutputStream *stream, @@ -54,63 +53,162 @@ garrow_output_stream_write_record_batch(GArrowOutputStream *stream, GArrowWriteOptions *options, GError **error); -#define GARROW_TYPE_FILE_OUTPUT_STREAM (garrow_file_output_stream_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowFileOutputStream, - garrow_file_output_stream, - GARROW, - FILE_OUTPUT_STREAM, - GArrowOutputStream) + +#define GARROW_TYPE_FILE_OUTPUT_STREAM \ + (garrow_file_output_stream_get_type()) +#define GARROW_FILE_OUTPUT_STREAM(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_FILE_OUTPUT_STREAM, \ + GArrowFileOutputStream)) +#define GARROW_FILE_OUTPUT_STREAM_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_FILE_OUTPUT_STREAM, \ + GArrowFileOutputStreamClass)) +#define GARROW_IS_FILE_OUTPUT_STREAM(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_FILE_OUTPUT_STREAM)) +#define GARROW_IS_FILE_OUTPUT_STREAM_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_FILE_OUTPUT_STREAM)) +#define GARROW_FILE_OUTPUT_STREAM_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_FILE_OUTPUT_STREAM, \ + GArrowFileOutputStreamClass)) + +typedef struct _GArrowFileOutputStream GArrowFileOutputStream; +#ifndef __GTK_DOC_IGNORE__ +typedef struct _GArrowFileOutputStreamClass GArrowFileOutputStreamClass; +#endif + +/** + * GArrowFileOutputStream: + * + * It wraps `arrow::io::FileOutputStream`. + */ +struct _GArrowFileOutputStream +{ + /*< private >*/ + GArrowOutputStream parent_instance; +}; + +#ifndef __GTK_DOC_IGNORE__ struct _GArrowFileOutputStreamClass { GArrowOutputStreamClass parent_class; }; +#endif -GARROW_AVAILABLE_IN_ALL -GArrowFileOutputStream * -garrow_file_output_stream_new(const gchar *path, gboolean append, GError **error); +GType garrow_file_output_stream_get_type(void) G_GNUC_CONST; + +GArrowFileOutputStream *garrow_file_output_stream_new(const gchar *path, + gboolean append, + GError **error); + + +#define GARROW_TYPE_BUFFER_OUTPUT_STREAM \ + (garrow_buffer_output_stream_get_type()) +#define GARROW_BUFFER_OUTPUT_STREAM(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_BUFFER_OUTPUT_STREAM, \ + GArrowBufferOutputStream)) +#define GARROW_BUFFER_OUTPUT_STREAM_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_BUFFER_OUTPUT_STREAM, \ + GArrowBufferOutputStreamClass)) +#define GARROW_IS_BUFFER_OUTPUT_STREAM(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_BUFFER_OUTPUT_STREAM)) +#define GARROW_IS_BUFFER_OUTPUT_STREAM_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_BUFFER_OUTPUT_STREAM)) +#define GARROW_BUFFER_OUTPUT_STREAM_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_BUFFER_OUTPUT_STREAM, \ + GArrowBufferOutputStreamClass)) + +typedef struct _GArrowBufferOutputStream GArrowBufferOutputStream; +#ifndef __GTK_DOC_IGNORE__ +typedef struct _GArrowBufferOutputStreamClass GArrowBufferOutputStreamClass; +#endif -#define GARROW_TYPE_BUFFER_OUTPUT_STREAM (garrow_buffer_output_stream_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowBufferOutputStream, - garrow_buffer_output_stream, - GARROW, - BUFFER_OUTPUT_STREAM, - GArrowOutputStream) +/** + * GArrowBufferOutputStream: + * + * It wraps `arrow::io::BufferOutputStream`. + */ +struct _GArrowBufferOutputStream +{ + /*< private >*/ + GArrowOutputStream parent_instance; +}; + +#ifndef __GTK_DOC_IGNORE__ struct _GArrowBufferOutputStreamClass { GArrowOutputStreamClass parent_class; }; +#endif + +GType garrow_buffer_output_stream_get_type(void) G_GNUC_CONST; + +GArrowBufferOutputStream *garrow_buffer_output_stream_new(GArrowResizableBuffer *buffer); + + +#define GARROW_TYPE_GIO_OUTPUT_STREAM \ + (garrow_gio_output_stream_get_type()) +#define GARROW_GIO_OUTPUT_STREAM(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_GIO_OUTPUT_STREAM, \ + GArrowGIOOutputStream)) +#define GARROW_GIO_OUTPUT_STREAM_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_GIO_OUTPUT_STREAM, \ + GArrowGIOOutputStreamClass)) +#define GARROW_IS_GIO_OUTPUT_STREAM(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_GIO_OUTPUT_STREAM)) +#define GARROW_IS_GIO_OUTPUT_STREAM_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_GIO_OUTPUT_STREAM)) +#define GARROW_GIO_OUTPUT_STREAM_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_GIO_OUTPUT_STREAM, \ + GArrowGIOOutputStreamClass)) + +typedef struct _GArrowGIOOutputStream GArrowGIOOutputStream; +#ifndef __GTK_DOC_IGNORE__ +typedef struct _GArrowGIOOutputStreamClass GArrowGIOOutputStreamClass; +#endif -GARROW_AVAILABLE_IN_ALL -GArrowBufferOutputStream * -garrow_buffer_output_stream_new(GArrowResizableBuffer *buffer); +/** + * GArrowGIOOutputStream: + * + * It's an output stream for `GOutputStream`. + */ +struct _GArrowGIOOutputStream +{ + /*< private >*/ + GArrowOutputStream parent_instance; +}; -#define GARROW_TYPE_GIO_OUTPUT_STREAM (garrow_gio_output_stream_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowGIOOutputStream, - garrow_gio_output_stream, - GARROW, - GIO_OUTPUT_STREAM, - GArrowOutputStream) +#ifndef __GTK_DOC_IGNORE__ struct _GArrowGIOOutputStreamClass { GArrowOutputStreamClass parent_class; }; +#endif -GARROW_AVAILABLE_IN_ALL -GArrowGIOOutputStream * -garrow_gio_output_stream_new(GOutputStream *gio_output_stream); +GType garrow_gio_output_stream_get_type(void) G_GNUC_CONST; +GArrowGIOOutputStream *garrow_gio_output_stream_new(GOutputStream *gio_output_stream); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL G_GNUC_DEPRECATED GOutputStream * garrow_gio_output_stream_get_raw(GArrowGIOOutputStream *output_stream); #endif -#define GARROW_TYPE_COMPRESSED_OUTPUT_STREAM (garrow_compressed_output_stream_get_type()) -GARROW_AVAILABLE_IN_ALL +#define GARROW_TYPE_COMPRESSED_OUTPUT_STREAM \ + (garrow_compressed_output_stream_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowCompressedOutputStream, garrow_compressed_output_stream, GARROW, @@ -121,7 +219,6 @@ struct _GArrowCompressedOutputStreamClass GArrowOutputStreamClass parent_class; }; -GARROW_AVAILABLE_IN_ALL GArrowCompressedOutputStream * garrow_compressed_output_stream_new(GArrowCodec *codec, GArrowOutputStream *raw, diff --git a/c_glib/arrow-glib/output-stream.hpp b/c_glib/arrow-glib/output-stream.hpp index 515d969efc2..b39b3bdfcfb 100644 --- a/c_glib/arrow-glib/output-stream.hpp +++ b/c_glib/arrow-glib/output-stream.hpp @@ -25,32 +25,16 @@ #include -GARROW_EXTERN -GArrowOutputStream * -garrow_output_stream_new_raw( - std::shared_ptr *arrow_output_stream); +GArrowOutputStream *garrow_output_stream_new_raw(std::shared_ptr *arrow_output_stream); +std::shared_ptr garrow_output_stream_get_raw(GArrowOutputStream *output_stream); -GARROW_EXTERN -std::shared_ptr -garrow_output_stream_get_raw(GArrowOutputStream *output_stream); - -GARROW_EXTERN -GArrowFileOutputStream * -garrow_file_output_stream_new_raw( - std::shared_ptr *arrow_file_output_stream); -GARROW_EXTERN -GArrowBufferOutputStream * -garrow_buffer_output_stream_new_raw( - std::shared_ptr *arrow_buffer_output_stream); +GArrowFileOutputStream *garrow_file_output_stream_new_raw(std::shared_ptr *arrow_file_output_stream); +GArrowBufferOutputStream *garrow_buffer_output_stream_new_raw(std::shared_ptr *arrow_buffer_output_stream); -GARROW_EXTERN GArrowCompressedOutputStream * -garrow_compressed_output_stream_new_raw( - std::shared_ptr *arrow_raw, - GArrowCodec *codec, - GArrowOutputStream *raw); - -GARROW_EXTERN +garrow_compressed_output_stream_new_raw(std::shared_ptr *arrow_raw, + GArrowCodec *codec, + GArrowOutputStream *raw); std::shared_ptr garrow_compressed_output_stream_get_raw(GArrowCompressedOutputStream *stream); diff --git a/c_glib/arrow-glib/readable.cpp b/c_glib/arrow-glib/readable.cpp index e7bd603f25f..fbe5270c749 100644 --- a/c_glib/arrow-glib/readable.cpp +++ b/c_glib/arrow-glib/readable.cpp @@ -34,10 +34,12 @@ G_BEGIN_DECLS * readable. */ -G_DEFINE_INTERFACE(GArrowReadable, garrow_readable, G_TYPE_OBJECT) +G_DEFINE_INTERFACE(GArrowReadable, + garrow_readable, + G_TYPE_OBJECT) static void -garrow_readable_default_init(GArrowReadableInterface *iface) +garrow_readable_default_init (GArrowReadableInterface *iface) { iface->buffer_new_raw = garrow_buffer_new_raw; } @@ -52,7 +54,9 @@ garrow_readable_default_init(GArrowReadableInterface *iface) * data on success, %NULL if there was an error. */ GArrowBuffer * -garrow_readable_read(GArrowReadable *readable, gint64 n_bytes, GError **error) +garrow_readable_read(GArrowReadable *readable, + gint64 n_bytes, + GError **error) { const auto arrow_readable = garrow_readable_get_raw(readable); @@ -77,7 +81,9 @@ garrow_readable_read(GArrowReadable *readable, gint64 n_bytes, GError **error) * Since: 0.17.0 */ GBytes * -garrow_readable_read_bytes(GArrowReadable *readable, gint64 n_bytes, GError **error) +garrow_readable_read_bytes(GArrowReadable *readable, + gint64 n_bytes, + GError **error) { const auto arrow_readable = garrow_readable_get_raw(readable); @@ -86,14 +92,16 @@ garrow_readable_read_bytes(GArrowReadable *readable, gint64 n_bytes, GError **er return NULL; } auto arrow_cpu_buffer_result = - arrow::Buffer::ViewOrCopy(*arrow_buffer_result, arrow::default_cpu_memory_manager()); + arrow::Buffer::ViewOrCopy(*arrow_buffer_result, + arrow::default_cpu_memory_manager()); if (!garrow::check(error, arrow_cpu_buffer_result, "[readable][read-bytes][view-or-copy]")) { return NULL; } auto arrow_cpu_buffer = *arrow_cpu_buffer_result; - return g_bytes_new(arrow_cpu_buffer->data(), arrow_cpu_buffer->size()); + return g_bytes_new(arrow_cpu_buffer->data(), + arrow_cpu_buffer->size()); } G_END_DECLS diff --git a/c_glib/arrow-glib/readable.h b/c_glib/arrow-glib/readable.h index 266b4584905..bb70f4b54ea 100644 --- a/c_glib/arrow-glib/readable.h +++ b/c_glib/arrow-glib/readable.h @@ -20,20 +20,24 @@ #pragma once #include +#include #include G_BEGIN_DECLS #define GARROW_TYPE_READABLE (garrow_readable_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_INTERFACE(GArrowReadable, garrow_readable, GARROW, READABLE, GObject) - -GARROW_AVAILABLE_IN_ALL -GArrowBuffer * -garrow_readable_read(GArrowReadable *readable, gint64 n_bytes, GError **error); +G_DECLARE_INTERFACE(GArrowReadable, + garrow_readable, + GARROW, + READABLE, + GObject) +GArrowBuffer *garrow_readable_read(GArrowReadable *readable, + gint64 n_bytes, + GError **error); GARROW_AVAILABLE_IN_0_17 -GBytes * -garrow_readable_read_bytes(GArrowReadable *readable, gint64 n_bytes, GError **error); +GBytes *garrow_readable_read_bytes(GArrowReadable *readable, + gint64 n_bytes, + GError **error); G_END_DECLS diff --git a/c_glib/arrow-glib/readable.hpp b/c_glib/arrow-glib/readable.hpp index 0439dee624a..b002de40d1a 100644 --- a/c_glib/arrow-glib/readable.hpp +++ b/c_glib/arrow-glib/readable.hpp @@ -36,5 +36,4 @@ struct _GArrowReadableInterface std::shared_ptr (*get_raw)(GArrowReadable *file); }; -std::shared_ptr -garrow_readable_get_raw(GArrowReadable *readable); +std::shared_ptr garrow_readable_get_raw(GArrowReadable *readable); diff --git a/c_glib/arrow-glib/reader.cpp b/c_glib/arrow-glib/reader.cpp index 8a1c3722d4a..997b865a645 100644 --- a/c_glib/arrow-glib/reader.cpp +++ b/c_glib/arrow-glib/reader.cpp @@ -29,7 +29,6 @@ #include #include #include -#include #include @@ -60,8 +59,7 @@ G_BEGIN_DECLS * input. */ -struct GArrowRecordBatchReaderPrivate -{ +struct GArrowRecordBatchReaderPrivate { std::shared_ptr record_batch_reader; GList *sources; }; @@ -75,9 +73,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowRecordBatchReader, garrow_record_batch_reader, G_TYPE_OBJECT); -#define GARROW_RECORD_BATCH_READER_GET_PRIVATE(obj) \ - static_cast( \ - garrow_record_batch_reader_get_instance_private(GARROW_RECORD_BATCH_READER(obj))) +#define GARROW_RECORD_BATCH_READER_GET_PRIVATE(obj) \ + static_cast( \ + garrow_record_batch_reader_get_instance_private( \ + GARROW_RECORD_BATCH_READER(obj))) static void garrow_record_batch_reader_finalize(GObject *object) @@ -111,8 +110,7 @@ garrow_record_batch_reader_set_property(GObject *object, switch (prop_id) { case PROP_RECORD_BATCH_READER: priv->record_batch_reader = - *static_cast *>( - g_value_get_pointer(value)); + *static_cast *>(g_value_get_pointer(value)); break; case PROP_SOURCES: priv->sources = g_list_copy_deep(static_cast(g_value_get_pointer(value)), @@ -129,30 +127,30 @@ static void garrow_record_batch_reader_init(GArrowRecordBatchReader *object) { auto priv = GARROW_RECORD_BATCH_READER_GET_PRIVATE(object); - new (&priv->record_batch_reader) std::shared_ptr; + new(&priv->record_batch_reader) std::shared_ptr; } static void garrow_record_batch_reader_class_init(GArrowRecordBatchReaderClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_record_batch_reader_finalize; - gobject_class->dispose = garrow_record_batch_reader_dispose; + gobject_class->finalize = garrow_record_batch_reader_finalize; + gobject_class->finalize = garrow_record_batch_reader_dispose; gobject_class->set_property = garrow_record_batch_reader_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "record-batch-reader", - "arrow::ipc::RecordBatchReader", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("record-batch-reader", + "arrow::ipc::RecordBatchReader", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_RECORD_BATCH_READER, spec); - spec = g_param_spec_pointer( - "sources", - "Sources", - "The sources of this reader", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("sources", + "Sources", + "The sources of this reader", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_SOURCES, spec); } @@ -173,8 +171,11 @@ GArrowRecordBatchReader * garrow_record_batch_reader_import(gpointer c_abi_array_stream, GError **error) { auto arrow_reader_result = - arrow::ImportRecordBatchReader(static_cast(c_abi_array_stream)); - if (garrow::check(error, arrow_reader_result, "[record-batch-reader][import]")) { + arrow::ImportRecordBatchReader( + static_cast(c_abi_array_stream)); + if (garrow::check(error, + arrow_reader_result, + "[record-batch-reader][import]")) { return garrow_record_batch_reader_new_raw(&(*arrow_reader_result), nullptr); } else { return NULL; @@ -188,7 +189,7 @@ garrow_record_batch_reader_import(gpointer c_abi_array_stream, GError **error) * @schema: (nullable): A #GArrowSchema to confirm to. * @error: (nullable): Return location for a #GError or %NULL. * - * Returns: A newly created #GArrowRecordBatchReader. + * Returns: The schema in the stream on success, %NULL on error. * * Since: 6.0.0 */ @@ -208,8 +209,11 @@ garrow_record_batch_reader_new(GList *record_batches, } auto arrow_reader_result = arrow::RecordBatchReader::Make(arrow_record_batches, arrow_schema); - if (garrow::check(error, arrow_reader_result, "[record-batch-stream-reader][new]")) { - return garrow_record_batch_reader_new_raw(&*arrow_reader_result, record_batches); + if (garrow::check(error, + arrow_reader_result, + "[record-batch-stream-reader][new]")) { + return garrow_record_batch_reader_new_raw(&*arrow_reader_result, + record_batches); } else { return NULL; } @@ -230,11 +234,13 @@ garrow_record_batch_reader_new(GList *record_batches, * Since: 6.0.0 */ gpointer -garrow_record_batch_reader_export(GArrowRecordBatchReader *reader, GError **error) +garrow_record_batch_reader_export(GArrowRecordBatchReader *reader, + GError **error) { auto arrow_reader = garrow_record_batch_reader_get_raw(reader); auto c_abi_array_stream = g_new(ArrowArrayStream, 1); - auto status = arrow::ExportRecordBatchReader(arrow_reader, c_abi_array_stream); + auto status = arrow::ExportRecordBatchReader(arrow_reader, + c_abi_array_stream); if (garrow::check(error, status, "[record-batch-reader][export]")) { return c_abi_array_stream; } else { @@ -310,13 +316,16 @@ garrow_record_batch_reader_read_next_record_batch(GArrowRecordBatchReader *reade * Since: 0.8.0 */ GArrowRecordBatch * -garrow_record_batch_reader_read_next(GArrowRecordBatchReader *reader, GError **error) +garrow_record_batch_reader_read_next(GArrowRecordBatchReader *reader, + GError **error) { auto arrow_reader = garrow_record_batch_reader_get_raw(reader); std::shared_ptr arrow_record_batch; auto status = arrow_reader->ReadNext(&arrow_record_batch); - if (garrow_error_check(error, status, "[record-batch-reader][read-next]")) { + if (garrow_error_check(error, + status, + "[record-batch-reader][read-next]")) { if (arrow_record_batch == nullptr) { return NULL; } else { @@ -338,13 +347,16 @@ garrow_record_batch_reader_read_next(GArrowRecordBatchReader *reader, GError **e * Since: 6.0.0 */ GArrowTable * -garrow_record_batch_reader_read_all(GArrowRecordBatchReader *reader, GError **error) +garrow_record_batch_reader_read_all(GArrowRecordBatchReader *reader, + GError **error) { auto arrow_reader = garrow_record_batch_reader_get_raw(reader); std::shared_ptr arrow_table; auto status = arrow_reader->ToTable().Value(&arrow_table); - if (garrow::check(error, status, "[record-batch-reader][read-all]")) { + if (garrow::check(error, + status, + "[record-batch-reader][read-all]")) { return garrow_table_new_raw(&arrow_table); } else { return NULL; @@ -367,6 +379,7 @@ garrow_record_batch_reader_get_sources(GArrowRecordBatchReader *reader) return priv->sources; } + G_DEFINE_TYPE(GArrowTableBatchReader, garrow_table_batch_reader, GARROW_TYPE_RECORD_BATCH_READER); @@ -393,7 +406,8 @@ GArrowTableBatchReader * garrow_table_batch_reader_new(GArrowTable *table) { auto arrow_table = garrow_table_get_raw(table); - auto arrow_table_batch_reader = std::make_shared(*arrow_table); + auto arrow_table_batch_reader = + std::make_shared(*arrow_table); return garrow_table_batch_reader_new_raw(&arrow_table_batch_reader, table); } @@ -417,6 +431,7 @@ garrow_table_batch_reader_set_max_chunk_size(GArrowTableBatchReader *reader, arrow_reader->set_chunksize(max_chunk_size); } + G_DEFINE_TYPE(GArrowRecordBatchStreamReader, garrow_record_batch_stream_reader, GARROW_TYPE_RECORD_BATCH_READER); @@ -442,7 +457,8 @@ garrow_record_batch_stream_reader_class_init(GArrowRecordBatchStreamReaderClass * Since: 0.4.0 */ GArrowRecordBatchStreamReader * -garrow_record_batch_stream_reader_new(GArrowInputStream *stream, GError **error) +garrow_record_batch_stream_reader_new(GArrowInputStream *stream, + GError **error) { using ReaderType = arrow::ipc::RecordBatchStreamReader; @@ -456,8 +472,8 @@ garrow_record_batch_stream_reader_new(GArrowInputStream *stream, GError **error) } } -typedef struct GArrowRecordBatchFileReaderPrivate_ -{ + +typedef struct GArrowRecordBatchFileReaderPrivate_ { std::shared_ptr record_batch_file_reader; } GArrowRecordBatchFileReaderPrivate; @@ -470,10 +486,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowRecordBatchFileReader, garrow_record_batch_file_reader, G_TYPE_OBJECT); -#define GARROW_RECORD_BATCH_FILE_READER_GET_PRIVATE(obj) \ - static_cast( \ - garrow_record_batch_file_reader_get_instance_private( \ - GARROW_RECORD_BATCH_FILE_READER(obj))) +#define GARROW_RECORD_BATCH_FILE_READER_GET_PRIVATE(obj) \ + static_cast( \ + garrow_record_batch_file_reader_get_instance_private( \ + GARROW_RECORD_BATCH_FILE_READER(obj))) static void garrow_record_batch_file_reader_finalize(GObject *object) @@ -496,8 +512,7 @@ garrow_record_batch_file_reader_set_property(GObject *object, switch (prop_id) { case PROP_RECORD_BATCH_FILE_READER: priv->record_batch_file_reader = - *static_cast *>( - g_value_get_pointer(value)); + *static_cast *>(g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -522,7 +537,7 @@ static void garrow_record_batch_file_reader_init(GArrowRecordBatchFileReader *object) { auto priv = GARROW_RECORD_BATCH_FILE_READER_GET_PRIVATE(object); - new (&priv->record_batch_file_reader) + new(&priv->record_batch_file_reader) std::shared_ptr; } @@ -534,18 +549,19 @@ garrow_record_batch_file_reader_class_init(GArrowRecordBatchFileReaderClass *kla gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_record_batch_file_reader_finalize; + gobject_class->finalize = garrow_record_batch_file_reader_finalize; gobject_class->set_property = garrow_record_batch_file_reader_set_property; gobject_class->get_property = garrow_record_batch_file_reader_get_property; - spec = g_param_spec_pointer( - "record-batch-file-reader", - "arrow::ipc::RecordBatchFileReader", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("record-batch-file-reader", + "arrow::ipc::RecordBatchFileReader", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_RECORD_BATCH_FILE_READER, spec); } + /** * garrow_record_batch_file_reader_new: * @file: The file to be read. @@ -557,7 +573,8 @@ garrow_record_batch_file_reader_class_init(GArrowRecordBatchFileReaderClass *kla * Since: 0.4.0 */ GArrowRecordBatchFileReader * -garrow_record_batch_file_reader_new(GArrowSeekableInputStream *file, GError **error) +garrow_record_batch_file_reader_new(GArrowSeekableInputStream *file, + GError **error) { using ReaderType = arrow::ipc::RecordBatchFileReader; @@ -659,8 +676,7 @@ garrow_record_batch_file_reader_read_record_batch(GArrowRecordBatchFileReader *r auto arrow_reader = garrow_record_batch_file_reader_get_raw(reader); auto arrow_record_batch = arrow_reader->ReadRecordBatch(i); - if (garrow::check(error, - arrow_record_batch, + if (garrow::check(error, arrow_record_batch, "[record-batch-file-reader][read-record-batch]")) { return garrow_record_batch_new_raw(&(*arrow_record_batch)); } else { @@ -668,8 +684,8 @@ garrow_record_batch_file_reader_read_record_batch(GArrowRecordBatchFileReader *r } } -typedef struct GArrowFeatherFileReaderPrivate_ -{ + +typedef struct GArrowFeatherFileReaderPrivate_ { std::shared_ptr feather_reader; } GArrowFeatherFileReaderPrivate; @@ -681,9 +697,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowFeatherFileReader, garrow_feather_file_reader, G_TYPE_OBJECT); -#define GARROW_FEATHER_FILE_READER_GET_PRIVATE(obj) \ - static_cast( \ - garrow_feather_file_reader_get_instance_private(GARROW_FEATHER_FILE_READER(obj))) +#define GARROW_FEATHER_FILE_READER_GET_PRIVATE(obj) \ + static_cast( \ + garrow_feather_file_reader_get_instance_private( \ + GARROW_FEATHER_FILE_READER(obj))) static void garrow_feather_file_reader_finalize(GObject *object) @@ -705,8 +722,8 @@ garrow_feather_file_reader_set_property(GObject *object, switch (prop_id) { case PROP_FEATHER_READER: - priv->feather_reader = *static_cast *>( - g_value_get_pointer(value)); + priv->feather_reader = + *static_cast *>(g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -737,19 +754,20 @@ garrow_feather_file_reader_class_init(GArrowFeatherFileReaderClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_feather_file_reader_finalize; + gobject_class->finalize = garrow_feather_file_reader_finalize; gobject_class->set_property = garrow_feather_file_reader_set_property; gobject_class->get_property = garrow_feather_file_reader_get_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "feather-reader", - "arrow::ipc::feather::Reader", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("feather-reader", + "arrow::ipc::feather::Reader", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FEATHER_READER, spec); } + /** * garrow_feather_file_reader_new: * @file: The file to be read. @@ -761,7 +779,8 @@ garrow_feather_file_reader_class_init(GArrowFeatherFileReaderClass *klass) * Since: 0.4.0 */ GArrowFeatherFileReader * -garrow_feather_file_reader_new(GArrowSeekableInputStream *file, GError **error) +garrow_feather_file_reader_new(GArrowSeekableInputStream *file, + GError **error) { auto arrow_random_access_file = garrow_seekable_input_stream_get_raw(file); auto reader = arrow::ipc::feather::Reader::Open(arrow_random_access_file); @@ -797,7 +816,8 @@ garrow_feather_file_reader_get_version(GArrowFeatherFileReader *reader) * Since: 0.12.0 */ GArrowTable * -garrow_feather_file_reader_read(GArrowFeatherFileReader *reader, GError **error) +garrow_feather_file_reader_read(GArrowFeatherFileReader *reader, + GError **error) { auto arrow_reader = garrow_feather_file_reader_get_raw(reader); std::shared_ptr arrow_table; @@ -873,13 +893,12 @@ garrow_feather_file_reader_read_names(GArrowFeatherFileReader *reader, } } -struct GArrowCSVReadOptionsPrivate -{ + +typedef struct GArrowCSVReadOptionsPrivate_ { arrow::csv::ReadOptions read_options; arrow::csv::ParseOptions parse_options; arrow::csv::ConvertOptions convert_options; - GList *timestamp_parsers; -}; +} GArrowCSVReadOptionsPrivate; enum { PROP_USE_THREADS = 1, @@ -898,22 +917,14 @@ enum { PROP_GENERATE_COLUMN_NAMES }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowCSVReadOptions, garrow_csv_read_options, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowCSVReadOptions, + garrow_csv_read_options, + G_TYPE_OBJECT) -#define GARROW_CSV_READ_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_csv_read_options_get_instance_private(GARROW_CSV_READ_OPTIONS(object))) - -static void -garrow_csv_read_options_dispose(GObject *object) -{ - auto priv = GARROW_CSV_READ_OPTIONS_GET_PRIVATE(object); - - g_list_free_full(priv->timestamp_parsers, g_object_unref); - priv->timestamp_parsers = nullptr; - - G_OBJECT_CLASS(garrow_csv_read_options_parent_class)->dispose(object); -} +#define GARROW_CSV_READ_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_csv_read_options_get_instance_private( \ + GARROW_CSV_READ_OPTIONS(object))) static void garrow_csv_read_options_set_property(GObject *object, @@ -1045,7 +1056,6 @@ garrow_csv_read_options_class_init(GArrowCSVReadOptionsClass *klass) auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_csv_read_options_dispose; gobject_class->set_property = garrow_csv_read_options_set_property; gobject_class->get_property = garrow_csv_read_options_get_property; @@ -1112,17 +1122,17 @@ garrow_csv_read_options_class_init(GArrowCSVReadOptionsClass *klass) * * Since: 0.15.0 */ - spec = - g_param_spec_boolean("generate-column-names", - "Generate column names", - "Whether to autogenerate column names if column-names is empty. " - "If TRUE, column names will be of the form 'f0', 'f1'... " - "If FALSE, column names will be read from the first CSV row " - "after n-skip-rows", - read_options.autogenerate_column_names, - static_cast(G_PARAM_READWRITE)); + spec = g_param_spec_boolean("generate-column-names", + "Generate column names", + "Whether to autogenerate column names if column-names is empty. " + "If TRUE, column names will be of the form 'f0', 'f1'... " + "If FALSE, column names will be read from the first CSV row " + "after n-skip-rows", + read_options.autogenerate_column_names, + static_cast(G_PARAM_READWRITE)); g_object_class_install_property(gobject_class, PROP_GENERATE_COLUMN_NAMES, spec); + auto parse_options = arrow::csv::ParseOptions::Defaults(); /** @@ -1230,7 +1240,9 @@ garrow_csv_read_options_class_init(GArrowCSVReadOptionsClass *klass) "CR (0x0d) and LF (0x0a) characters.", parse_options.newlines_in_values, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_ALLOW_NEWLINES_IN_VALUES, spec); + g_object_class_install_property(gobject_class, + PROP_ALLOW_NEWLINES_IN_VALUES, + spec); /** * GArrowCSVReadOptions:ignore-empty-lines: @@ -1248,7 +1260,9 @@ garrow_csv_read_options_class_init(GArrowCSVReadOptionsClass *klass) "(assuming a one-column CSV file).", parse_options.ignore_empty_lines, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_IGNORE_EMPTY_LINES, spec); + g_object_class_install_property(gobject_class, + PROP_IGNORE_EMPTY_LINES, + spec); auto convert_options = arrow::csv::ConvertOptions::Defaults(); @@ -1275,14 +1289,13 @@ garrow_csv_read_options_class_init(GArrowCSVReadOptionsClass *klass) * * Since: 0.14.0 */ - spec = g_param_spec_boolean( - "allow-null-strings", - "Allow null strings", - "Whether string / binary columns can have null values. " - "If TRUE, then strings in null_values are considered null for string columns. " - "If FALSE, then all strings are valid string values.", - convert_options.strings_can_be_null, - static_cast(G_PARAM_READWRITE)); + spec = g_param_spec_boolean("allow-null-strings", + "Allow null strings", + "Whether string / binary columns can have null values. " + "If TRUE, then strings in null_values are considered null for string columns. " + "If FALSE, then all strings are valid string values.", + convert_options.strings_can_be_null, + static_cast(G_PARAM_READWRITE)); g_object_class_install_property(gobject_class, PROP_ALLOW_NULL_STRINGS, spec); } @@ -1330,7 +1343,8 @@ garrow_csv_read_options_add_column_type(GArrowCSVReadOptions *options, * Since: 0.12.0 */ void -garrow_csv_read_options_add_schema(GArrowCSVReadOptions *options, GArrowSchema *schema) +garrow_csv_read_options_add_schema(GArrowCSVReadOptions *options, + GArrowSchema *schema) { auto priv = GARROW_CSV_READ_OPTIONS_GET_PRIVATE(options); auto arrow_schema = garrow_schema_get_raw(schema); @@ -1352,8 +1366,10 @@ GHashTable * garrow_csv_read_options_get_column_types(GArrowCSVReadOptions *options) { auto priv = GARROW_CSV_READ_OPTIONS_GET_PRIVATE(options); - GHashTable *types = - g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref); + GHashTable *types = g_hash_table_new_full(g_str_hash, + g_str_equal, + g_free, + g_object_unref); for (const auto &iter : priv->convert_options.column_types) { auto arrow_name = iter.first; auto arrow_data_type = iter.second; @@ -1637,73 +1653,7 @@ garrow_csv_read_options_add_column_name(GArrowCSVReadOptions *options, priv->read_options.column_names.push_back(column_name); } -/** - * garrow_csv_read_options_set_timestamp_parsers: - * @options: A #GArrowCSVReadOptions. - * @parsers: (element-type GArrowTimestampParser): The list of - * #GArrowTimestampParser to be added. - * - * Since: 16.0.0 - */ -void -garrow_csv_read_options_set_timestamp_parsers(GArrowCSVReadOptions *options, - GList *parsers) -{ - auto priv = GARROW_CSV_READ_OPTIONS_GET_PRIVATE(options); - g_list_free_full(priv->timestamp_parsers, g_object_unref); - priv->convert_options.timestamp_parsers.clear(); - for (auto node = parsers; node; node = g_list_next(node)) { - if (!node->data) { - continue; - } - auto parser = GARROW_TIMESTAMP_PARSER(node->data); - g_object_ref(parser); - priv->timestamp_parsers = g_list_prepend(priv->timestamp_parsers, parser); - priv->convert_options.timestamp_parsers.push_back( - garrow_timestamp_parser_get_raw(parser)); - } - priv->timestamp_parsers = g_list_reverse(priv->timestamp_parsers); -} - -/** - * garrow_csv_read_options_get_timestamp_parsers: - * @options: A #GArrowCSVReadOptions. - * - * Returns: (element-type GArrowTimestampParser) (transfer none): - * - * The list of #GArrowTimestampParsers to be used. - * - * Since: 16.0.0 - */ -GList * -garrow_csv_read_options_get_timestamp_parsers(GArrowCSVReadOptions *options) -{ - auto priv = GARROW_CSV_READ_OPTIONS_GET_PRIVATE(options); - return priv->timestamp_parsers; -} - -/** - * garrow_csv_read_options_add_timestamp_parser: - * @options: A #GArrowCSVReadOptions. - * @parser: The #GArrowTimestampParser to be added. - * - * Since: 16.0.0 - */ -void -garrow_csv_read_options_add_timestamp_parser(GArrowCSVReadOptions *options, - GArrowTimestampParser *parser) -{ - auto priv = GARROW_CSV_READ_OPTIONS_GET_PRIVATE(options); - if (parser) { - g_object_ref(parser); - priv->timestamp_parsers = g_list_append(priv->timestamp_parsers, parser); - priv->convert_options.timestamp_parsers.push_back( - garrow_timestamp_parser_get_raw(parser)); - } -} - -typedef struct GArrowCSVReaderPrivate_ -{ +typedef struct GArrowCSVReaderPrivate_ { std::shared_ptr reader; GArrowInputStream *input; } GArrowCSVReaderPrivate; @@ -1713,11 +1663,14 @@ enum { PROP_CSV_READER_INPUT, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowCSVReader, garrow_csv_reader, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowCSVReader, + garrow_csv_reader, + G_TYPE_OBJECT) -#define GARROW_CSV_READER_GET_PRIVATE(object) \ - static_cast( \ - garrow_csv_reader_get_instance_private(GARROW_CSV_READER(object))) +#define GARROW_CSV_READER_GET_PRIVATE(object) \ + static_cast( \ + garrow_csv_reader_get_instance_private( \ + GARROW_CSV_READER(object))) static void garrow_csv_reader_dispose(GObject *object) @@ -1752,8 +1705,8 @@ garrow_csv_reader_set_property(GObject *object, switch (prop_id) { case PROP_CSV_TABLE_READER: - priv->reader = *static_cast *>( - g_value_get_pointer(value)); + priv->reader = + *static_cast *>(g_value_get_pointer(value)); break; case PROP_CSV_READER_INPUT: priv->input = GARROW_INPUT_STREAM(g_value_dup_object(value)); @@ -1786,7 +1739,7 @@ static void garrow_csv_reader_init(GArrowCSVReader *object) { auto priv = GARROW_CSV_READER_GET_PRIVATE(object); - new (&priv->reader) std::shared_ptr; + new(&priv->reader) std::shared_ptr; } static void @@ -1794,26 +1747,28 @@ garrow_csv_reader_class_init(GArrowCSVReaderClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_csv_reader_dispose; - gobject_class->finalize = garrow_csv_reader_finalize; + gobject_class->dispose = garrow_csv_reader_dispose; + gobject_class->finalize = garrow_csv_reader_finalize; gobject_class->set_property = garrow_csv_reader_set_property; gobject_class->get_property = garrow_csv_reader_get_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "csv-table-reader", - "CSV table reader", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("csv-table-reader", + "CSV table reader", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_CSV_TABLE_READER, spec); - spec = g_param_spec_object( - "input", - "Input", - "The input stream to be read", - GARROW_TYPE_INPUT_STREAM, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property(gobject_class, PROP_CSV_READER_INPUT, spec); + spec = g_param_spec_object("input", + "Input", + "The input stream to be read", + GARROW_TYPE_INPUT_STREAM, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property(gobject_class, + PROP_CSV_READER_INPUT, + spec); } /** @@ -1846,11 +1801,12 @@ garrow_csv_reader_new(GArrowInputStream *input, convert_options = arrow::csv::ConvertOptions::Defaults(); } - auto arrow_reader = arrow::csv::TableReader::Make(arrow::io::default_io_context(), - arrow_input, - read_options, - parse_options, - convert_options); + auto arrow_reader = + arrow::csv::TableReader::Make(arrow::io::default_io_context(), + arrow_input, + read_options, + parse_options, + convert_options); if (garrow::check(error, arrow_reader, "[csv-reader][new]")) { return garrow_csv_reader_new_raw(&(*arrow_reader), input); } else { @@ -1868,7 +1824,8 @@ garrow_csv_reader_new(GArrowInputStream *input, * Since: 0.12.0 */ GArrowTable * -garrow_csv_reader_read(GArrowCSVReader *reader, GError **error) +garrow_csv_reader_read(GArrowCSVReader *reader, + GError **error) { auto arrow_reader = garrow_csv_reader_get_raw(reader); auto arrow_table = arrow_reader->Read(); @@ -1879,8 +1836,8 @@ garrow_csv_reader_read(GArrowCSVReader *reader, GError **error) } } -typedef struct GArrowJSONReadOptionsPrivate_ -{ + +typedef struct GArrowJSONReadOptionsPrivate_ { arrow::json::ReadOptions read_options; arrow::json::ParseOptions parse_options; GArrowSchema *schema; @@ -1894,11 +1851,14 @@ enum { PROP_JSON_READ_OPTIONS_SCHEMA, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowJSONReadOptions, garrow_json_read_options, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowJSONReadOptions, + garrow_json_read_options, + G_TYPE_OBJECT) -#define GARROW_JSON_READ_OPTIONS_GET_PRIVATE(object) \ - static_cast( \ - garrow_json_read_options_get_instance_private(GARROW_JSON_READ_OPTIONS(object))) +#define GARROW_JSON_READ_OPTIONS_GET_PRIVATE(object) \ + static_cast( \ + garrow_json_read_options_get_instance_private( \ + GARROW_JSON_READ_OPTIONS(object))) static void garrow_json_read_options_dispose(GObject *object) @@ -1975,8 +1935,7 @@ garrow_json_read_options_get_property(GObject *object, g_value_set_boolean(value, priv->parse_options.newlines_in_values); break; case PROP_JSON_READ_OPTIONS_UNEXPECTED_FIELD_BEHAVIOR: - g_value_set_enum(value, - static_cast(priv->parse_options.unexpected_field_behavior)); + g_value_set_enum(value, static_cast(priv->parse_options.unexpected_field_behavior)); break; case PROP_JSON_READ_OPTIONS_SCHEMA: g_value_set_object(value, priv->schema); @@ -2002,7 +1961,7 @@ garrow_json_read_options_class_init(GArrowJSONReadOptionsClass *klass) auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_json_read_options_dispose; + gobject_class->dispose = garrow_json_read_options_dispose; gobject_class->set_property = garrow_json_read_options_set_property; gobject_class->get_property = garrow_json_read_options_get_property; @@ -2041,7 +2000,10 @@ garrow_json_read_options_class_init(GArrowJSONReadOptionsClass *klass) G_MAXINT, read_options.block_size, static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_JSON_READ_OPTIONS_BLOCK_SIZE, spec); + g_object_class_install_property(gobject_class, + PROP_JSON_READ_OPTIONS_BLOCK_SIZE, + spec); + auto parse_options = arrow::json::ParseOptions::Defaults(); @@ -2091,9 +2053,11 @@ garrow_json_read_options_class_init(GArrowJSONReadOptionsClass *klass) spec = g_param_spec_object("schema", "Schema", "Schema for passing custom conversion rules.", - GARROW_TYPE_SCHEMA, - static_cast(G_PARAM_READWRITE)); - g_object_class_install_property(gobject_class, PROP_JSON_READ_OPTIONS_SCHEMA, spec); + GARROW_TYPE_SCHEMA, + static_cast(G_PARAM_READWRITE)); + g_object_class_install_property(gobject_class, + PROP_JSON_READ_OPTIONS_SCHEMA, + spec); } /** @@ -2110,8 +2074,8 @@ garrow_json_read_options_new(void) return GARROW_JSON_READ_OPTIONS(json_read_options); } -typedef struct GArrowJSONReaderPrivate_ -{ + +typedef struct GArrowJSONReaderPrivate_ { std::shared_ptr reader; GArrowInputStream *input; } GArrowJSONReaderPrivate; @@ -2121,11 +2085,14 @@ enum { PROP_JSON_READER_INPUT, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowJSONReader, garrow_json_reader, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowJSONReader, + garrow_json_reader, + G_TYPE_OBJECT) -#define GARROW_JSON_READER_GET_PRIVATE(object) \ - static_cast( \ - garrow_json_reader_get_instance_private(GARROW_JSON_READER(object))) +#define GARROW_JSON_READER_GET_PRIVATE(object) \ + static_cast( \ + garrow_json_reader_get_instance_private( \ + GARROW_JSON_READER(object))) static void garrow_json_reader_dispose(GObject *object) @@ -2160,8 +2127,8 @@ garrow_json_reader_set_property(GObject *object, switch (prop_id) { case PROP_JSON_TABLE_READER: - priv->reader = *static_cast *>( - g_value_get_pointer(value)); + priv->reader = + *static_cast *>(g_value_get_pointer(value)); break; case PROP_JSON_READER_INPUT: priv->input = GARROW_INPUT_STREAM(g_value_dup_object(value)); @@ -2194,7 +2161,7 @@ static void garrow_json_reader_init(GArrowJSONReader *object) { auto priv = GARROW_JSON_READER_GET_PRIVATE(object); - new (&priv->reader) std::shared_ptr; + new(&priv->reader) std::shared_ptr; } static void @@ -2202,26 +2169,28 @@ garrow_json_reader_class_init(GArrowJSONReaderClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_json_reader_dispose; - gobject_class->finalize = garrow_json_reader_finalize; + gobject_class->dispose = garrow_json_reader_dispose; + gobject_class->finalize = garrow_json_reader_finalize; gobject_class->set_property = garrow_json_reader_set_property; gobject_class->get_property = garrow_json_reader_get_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "json-table-reader", - "JSON table reader", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("json-table-reader", + "JSON table reader", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_JSON_TABLE_READER, spec); - spec = g_param_spec_object( - "input", - "Input", - "The input stream to be read", - GARROW_TYPE_INPUT_STREAM, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property(gobject_class, PROP_JSON_READER_INPUT, spec); + spec = g_param_spec_object("input", + "Input", + "The input stream to be read", + GARROW_TYPE_INPUT_STREAM, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property(gobject_class, + PROP_JSON_READER_INPUT, + spec); } /** @@ -2273,7 +2242,8 @@ garrow_json_reader_new(GArrowInputStream *input, * Since: 0.14.0 */ GArrowTable * -garrow_json_reader_read(GArrowJSONReader *reader, GError **error) +garrow_json_reader_read(GArrowJSONReader *reader, + GError **error) { auto arrow_reader = garrow_json_reader_get_raw(reader); auto arrow_table = arrow_reader->Read(); @@ -2288,14 +2258,14 @@ G_END_DECLS GArrowRecordBatchReader * garrow_record_batch_reader_new_raw( - std::shared_ptr *arrow_reader, GList *sources) + std::shared_ptr *arrow_reader, + GList *sources) { - return GARROW_RECORD_BATCH_READER(g_object_new(GARROW_TYPE_RECORD_BATCH_READER, - "record-batch-reader", - arrow_reader, - "sources", - sources, - NULL)); + return GARROW_RECORD_BATCH_READER( + g_object_new(GARROW_TYPE_RECORD_BATCH_READER, + "record-batch-reader", arrow_reader, + "sources", sources, + NULL)); } std::shared_ptr @@ -2306,16 +2276,16 @@ garrow_record_batch_reader_get_raw(GArrowRecordBatchReader *reader) } GArrowTableBatchReader * -garrow_table_batch_reader_new_raw(std::shared_ptr *arrow_reader, - GArrowTable *table) +garrow_table_batch_reader_new_raw( + std::shared_ptr *arrow_reader, + GArrowTable *table) { auto sources = g_list_prepend(nullptr, table); - auto reader = GARROW_TABLE_BATCH_READER(g_object_new(GARROW_TYPE_TABLE_BATCH_READER, - "record-batch-reader", - arrow_reader, - "sources", - sources, - NULL)); + auto reader = + GARROW_TABLE_BATCH_READER(g_object_new(GARROW_TYPE_TABLE_BATCH_READER, + "record-batch-reader", arrow_reader, + "sources", sources, + NULL)); g_list_free(sources); return reader; } @@ -2328,26 +2298,24 @@ garrow_table_batch_reader_get_raw(GArrowTableBatchReader *reader) } GArrowRecordBatchStreamReader * -garrow_record_batch_stream_reader_new_raw( - std::shared_ptr *arrow_reader) +garrow_record_batch_stream_reader_new_raw(std::shared_ptr *arrow_reader) { auto reader = - GARROW_RECORD_BATCH_STREAM_READER(g_object_new(GARROW_TYPE_RECORD_BATCH_STREAM_READER, - "record-batch-reader", - arrow_reader, - NULL)); + GARROW_RECORD_BATCH_STREAM_READER( + g_object_new(GARROW_TYPE_RECORD_BATCH_STREAM_READER, + "record-batch-reader", arrow_reader, + NULL)); return reader; } GArrowRecordBatchFileReader * -garrow_record_batch_file_reader_new_raw( - std::shared_ptr *arrow_reader) +garrow_record_batch_file_reader_new_raw(std::shared_ptr *arrow_reader) { auto reader = - GARROW_RECORD_BATCH_FILE_READER(g_object_new(GARROW_TYPE_RECORD_BATCH_FILE_READER, - "record-batch-file-reader", - arrow_reader, - NULL)); + GARROW_RECORD_BATCH_FILE_READER( + g_object_new(GARROW_TYPE_RECORD_BATCH_FILE_READER, + "record-batch-file-reader", arrow_reader, + NULL)); return reader; } @@ -2359,11 +2327,13 @@ garrow_record_batch_file_reader_get_raw(GArrowRecordBatchFileReader *reader) } GArrowFeatherFileReader * -garrow_feather_file_reader_new_raw( - std::shared_ptr *arrow_reader) +garrow_feather_file_reader_new_raw(std::shared_ptr *arrow_reader) { - auto reader = GARROW_FEATHER_FILE_READER( - g_object_new(GARROW_TYPE_FEATHER_FILE_READER, "feather-reader", arrow_reader, NULL)); + auto reader = + GARROW_FEATHER_FILE_READER( + g_object_new(GARROW_TYPE_FEATHER_FILE_READER, + "feather-reader", arrow_reader, + NULL)); return reader; } @@ -2379,10 +2349,8 @@ garrow_csv_reader_new_raw(std::shared_ptr *arrow_reader GArrowInputStream *input) { auto reader = GARROW_CSV_READER(g_object_new(GARROW_TYPE_CSV_READER, - "csv-table-reader", - arrow_reader, - "input", - input, + "csv-table-reader", arrow_reader, + "input", input, NULL)); return reader; } @@ -2399,10 +2367,8 @@ garrow_json_reader_new_raw(std::shared_ptr *arrow_read GArrowInputStream *input) { auto reader = GARROW_JSON_READER(g_object_new(GARROW_TYPE_JSON_READER, - "json-table-reader", - arrow_reader, - "input", - input, + "json-table-reader", arrow_reader, + "input", input, NULL)); return reader; } diff --git a/c_glib/arrow-glib/reader.h b/c_glib/arrow-glib/reader.h index 5401aa3bb1f..1ae26478cbe 100644 --- a/c_glib/arrow-glib/reader.h +++ b/c_glib/arrow-glib/reader.h @@ -19,17 +19,18 @@ #pragma once -#include -#include +#include #include #include #include -#include + +#include + +#include G_BEGIN_DECLS #define GARROW_TYPE_RECORD_BATCH_READER (garrow_record_batch_reader_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowRecordBatchReader, garrow_record_batch_reader, GARROW, @@ -42,7 +43,8 @@ struct _GArrowRecordBatchReaderClass GARROW_AVAILABLE_IN_6_0 GArrowRecordBatchReader * -garrow_record_batch_reader_import(gpointer c_abi_array_stream, GError **error); +garrow_record_batch_reader_import(gpointer c_abi_array_stream, + GError **error); GARROW_AVAILABLE_IN_6_0 GArrowRecordBatchReader * @@ -52,41 +54,36 @@ garrow_record_batch_reader_new(GList *record_batches, GARROW_AVAILABLE_IN_6_0 gpointer -garrow_record_batch_reader_export(GArrowRecordBatchReader *reader, GError **error); - -GARROW_AVAILABLE_IN_ALL -GArrowSchema * -garrow_record_batch_reader_get_schema(GArrowRecordBatchReader *reader); +garrow_record_batch_reader_export(GArrowRecordBatchReader *reader, + GError **error); +GArrowSchema *garrow_record_batch_reader_get_schema( + GArrowRecordBatchReader *reader); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL G_GNUC_DEPRECATED_FOR(garrow_record_batch_reader_read_next) -GArrowRecordBatch * -garrow_record_batch_reader_get_next_record_batch(GArrowRecordBatchReader *reader, - GError **error); +GArrowRecordBatch *garrow_record_batch_reader_get_next_record_batch( + GArrowRecordBatchReader *reader, + GError **error); #endif #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL G_GNUC_DEPRECATED_FOR(garrow_record_batch_reader_read_next) -GArrowRecordBatch * -garrow_record_batch_reader_read_next_record_batch(GArrowRecordBatchReader *reader, - GError **error); +GArrowRecordBatch *garrow_record_batch_reader_read_next_record_batch( + GArrowRecordBatchReader *reader, + GError **error); #endif - -GARROW_AVAILABLE_IN_ALL -GArrowRecordBatch * -garrow_record_batch_reader_read_next(GArrowRecordBatchReader *reader, GError **error); - +GArrowRecordBatch *garrow_record_batch_reader_read_next( + GArrowRecordBatchReader *reader, + GError **error); GARROW_AVAILABLE_IN_6_0 GArrowTable * -garrow_record_batch_reader_read_all(GArrowRecordBatchReader *reader, GError **error); +garrow_record_batch_reader_read_all(GArrowRecordBatchReader *reader, + GError **error); GARROW_AVAILABLE_IN_13_0 GList * garrow_record_batch_reader_get_sources(GArrowRecordBatchReader *reader); #define GARROW_TYPE_TABLE_BATCH_READER (garrow_table_batch_reader_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowTableBatchReader, garrow_table_batch_reader, GARROW, @@ -97,77 +94,135 @@ struct _GArrowTableBatchReaderClass GArrowRecordBatchReaderClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowTableBatchReader * -garrow_table_batch_reader_new(GArrowTable *table); +GArrowTableBatchReader *garrow_table_batch_reader_new(GArrowTable *table); GARROW_AVAILABLE_IN_12_0 void garrow_table_batch_reader_set_max_chunk_size(GArrowTableBatchReader *reader, gint64 max_chunk_size); -#define GARROW_TYPE_RECORD_BATCH_STREAM_READER \ + +#define GARROW_TYPE_RECORD_BATCH_STREAM_READER \ (garrow_record_batch_stream_reader_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowRecordBatchStreamReader, - garrow_record_batch_stream_reader, - GARROW, - RECORD_BATCH_STREAM_READER, - GArrowRecordBatchReader) +#define GARROW_RECORD_BATCH_STREAM_READER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_RECORD_BATCH_STREAM_READER, \ + GArrowRecordBatchStreamReader)) +#define GARROW_RECORD_BATCH_STREAM_READER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_RECORD_BATCH_STREAM_READER, \ + GArrowRecordBatchStreamReaderClass)) +#define GARROW_IS_RECORD_BATCH_STREAM_READER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_RECORD_BATCH_STREAM_READER)) +#define GARROW_IS_RECORD_BATCH_STREAM_READER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_RECORD_BATCH_STREAM_READER)) +#define GARROW_RECORD_BATCH_STREAM_READER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_RECORD_BATCH_STREAM_READER, \ + GArrowRecordBatchStreamReaderClass)) + +typedef struct _GArrowRecordBatchStreamReader GArrowRecordBatchStreamReader; +#ifndef __GTK_DOC_IGNORE__ +typedef struct _GArrowRecordBatchStreamReaderClass GArrowRecordBatchStreamReaderClass; +#endif + +/** + * GArrowRecordBatchStreamReader: + * + * It wraps `arrow::ipc::RecordBatchStreamReader`. + */ +struct _GArrowRecordBatchStreamReader +{ + /*< private >*/ + GArrowRecordBatchReader parent_instance; +}; + +#ifndef __GTK_DOC_IGNORE__ struct _GArrowRecordBatchStreamReaderClass { GArrowRecordBatchReaderClass parent_class; }; +#endif -GARROW_AVAILABLE_IN_ALL -GArrowRecordBatchStreamReader * -garrow_record_batch_stream_reader_new(GArrowInputStream *stream, GError **error); +GType garrow_record_batch_stream_reader_get_type(void) G_GNUC_CONST; + +GArrowRecordBatchStreamReader *garrow_record_batch_stream_reader_new( + GArrowInputStream *stream, + GError **error); + + +#define GARROW_TYPE_RECORD_BATCH_FILE_READER \ + (garrow_record_batch_file_reader_get_type()) +#define GARROW_RECORD_BATCH_FILE_READER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_RECORD_BATCH_FILE_READER, \ + GArrowRecordBatchFileReader)) +#define GARROW_RECORD_BATCH_FILE_READER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_RECORD_BATCH_FILE_READER, \ + GArrowRecordBatchFileReaderClass)) +#define GARROW_IS_RECORD_BATCH_FILE_READER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_RECORD_BATCH_FILE_READER)) +#define GARROW_IS_RECORD_BATCH_FILE_READER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_RECORD_BATCH_FILE_READER)) +#define GARROW_RECORD_BATCH_FILE_READER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_RECORD_BATCH_FILE_READER, \ + GArrowRecordBatchFileReaderClass)) + +typedef struct _GArrowRecordBatchFileReader GArrowRecordBatchFileReader; +#ifndef __GTK_DOC_IGNORE__ +typedef struct _GArrowRecordBatchFileReaderClass GArrowRecordBatchFileReaderClass; +#endif -#define GARROW_TYPE_RECORD_BATCH_FILE_READER (garrow_record_batch_file_reader_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowRecordBatchFileReader, - garrow_record_batch_file_reader, - GARROW, - RECORD_BATCH_FILE_READER, - GObject) +/** + * GArrowRecordBatchFileReader: + * + * It wraps `arrow::ipc::RecordBatchFileReader`. + */ +struct _GArrowRecordBatchFileReader +{ + /*< private >*/ + GObject parent_instance; +}; + +#ifndef __GTK_DOC_IGNORE__ struct _GArrowRecordBatchFileReaderClass { GObjectClass parent_class; }; +#endif -GARROW_AVAILABLE_IN_ALL -GArrowRecordBatchFileReader * -garrow_record_batch_file_reader_new(GArrowSeekableInputStream *file, GError **error); - -GARROW_AVAILABLE_IN_ALL -GArrowSchema * -garrow_record_batch_file_reader_get_schema(GArrowRecordBatchFileReader *reader); - -GARROW_AVAILABLE_IN_ALL -guint -garrow_record_batch_file_reader_get_n_record_batches(GArrowRecordBatchFileReader *reader); +GType garrow_record_batch_file_reader_get_type(void) G_GNUC_CONST; -GARROW_AVAILABLE_IN_ALL -GArrowMetadataVersion -garrow_record_batch_file_reader_get_version(GArrowRecordBatchFileReader *reader); +GArrowRecordBatchFileReader *garrow_record_batch_file_reader_new( + GArrowSeekableInputStream *file, + GError **error); +GArrowSchema *garrow_record_batch_file_reader_get_schema( + GArrowRecordBatchFileReader *reader); +guint garrow_record_batch_file_reader_get_n_record_batches( + GArrowRecordBatchFileReader *reader); +GArrowMetadataVersion garrow_record_batch_file_reader_get_version( + GArrowRecordBatchFileReader *reader); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL G_GNUC_DEPRECATED_FOR(garrow_record_batch_file_reader_read_record_batch) -GArrowRecordBatch * -garrow_record_batch_file_reader_get_record_batch(GArrowRecordBatchFileReader *reader, - guint i, - GError **error); +GArrowRecordBatch *garrow_record_batch_file_reader_get_record_batch( + GArrowRecordBatchFileReader *reader, + guint i, + GError **error); #endif +GArrowRecordBatch *garrow_record_batch_file_reader_read_record_batch( + GArrowRecordBatchFileReader *reader, + guint i, + GError **error); -GARROW_AVAILABLE_IN_ALL -GArrowRecordBatch * -garrow_record_batch_file_reader_read_record_batch(GArrowRecordBatchFileReader *reader, - guint i, - GError **error); #define GARROW_TYPE_FEATHER_FILE_READER (garrow_feather_file_reader_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowFeatherFileReader, garrow_feather_file_reader, GARROW, @@ -178,26 +233,20 @@ struct _GArrowFeatherFileReaderClass GObjectClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowFeatherFileReader * -garrow_feather_file_reader_new(GArrowSeekableInputStream *file, GError **error); - -GARROW_AVAILABLE_IN_ALL -gint -garrow_feather_file_reader_get_version(GArrowFeatherFileReader *reader); +GArrowFeatherFileReader *garrow_feather_file_reader_new( + GArrowSeekableInputStream *file, + GError **error); -GARROW_AVAILABLE_IN_ALL +gint garrow_feather_file_reader_get_version( + GArrowFeatherFileReader *reader); GArrowTable * -garrow_feather_file_reader_read(GArrowFeatherFileReader *reader, GError **error); - -GARROW_AVAILABLE_IN_ALL +garrow_feather_file_reader_read(GArrowFeatherFileReader *reader, + GError **error); GArrowTable * garrow_feather_file_reader_read_indices(GArrowFeatherFileReader *reader, const gint *indices, guint n_indices, GError **error); - -GARROW_AVAILABLE_IN_ALL GArrowTable * garrow_feather_file_reader_read_names(GArrowFeatherFileReader *reader, const gchar **names, @@ -205,31 +254,26 @@ garrow_feather_file_reader_read_names(GArrowFeatherFileReader *reader, GError **error); #define GARROW_TYPE_CSV_READ_OPTIONS (garrow_csv_read_options_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowCSVReadOptions, garrow_csv_read_options, GARROW, CSV_READ_OPTIONS, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowCSVReadOptions, + garrow_csv_read_options, + GARROW, + CSV_READ_OPTIONS, + GObject) struct _GArrowCSVReadOptionsClass { GObjectClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowCSVReadOptions * -garrow_csv_read_options_new(void); - -GARROW_AVAILABLE_IN_ALL +GArrowCSVReadOptions *garrow_csv_read_options_new(void); void garrow_csv_read_options_add_column_type(GArrowCSVReadOptions *options, const gchar *name, GArrowDataType *data_type); -GARROW_AVAILABLE_IN_ALL void -garrow_csv_read_options_add_schema(GArrowCSVReadOptions *options, GArrowSchema *schema); - -GARROW_AVAILABLE_IN_ALL +garrow_csv_read_options_add_schema(GArrowCSVReadOptions *options, + GArrowSchema *schema); GHashTable * garrow_csv_read_options_get_column_types(GArrowCSVReadOptions *options); - GARROW_AVAILABLE_IN_0_14 void garrow_csv_read_options_set_null_values(GArrowCSVReadOptions *options, @@ -278,35 +322,24 @@ GARROW_AVAILABLE_IN_0_15 void garrow_csv_read_options_add_column_name(GArrowCSVReadOptions *options, const gchar *column_name); -GARROW_AVAILABLE_IN_16_0 -void -garrow_csv_read_options_set_timestamp_parsers(GArrowCSVReadOptions *options, - GList *parsers); -GARROW_AVAILABLE_IN_16_0 -GList * -garrow_csv_read_options_get_timestamp_parsers(GArrowCSVReadOptions *options); -GARROW_AVAILABLE_IN_16_0 -void -garrow_csv_read_options_add_timestamp_parser(GArrowCSVReadOptions *options, - GArrowTimestampParser *parser); #define GARROW_TYPE_CSV_READER (garrow_csv_reader_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowCSVReader, garrow_csv_reader, GARROW, CSV_READER, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowCSVReader, + garrow_csv_reader, + GARROW, + CSV_READER, + GObject) struct _GArrowCSVReaderClass { GObjectClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowCSVReader * -garrow_csv_reader_new(GArrowInputStream *input, - GArrowCSVReadOptions *options, - GError **error); +GArrowCSVReader *garrow_csv_reader_new(GArrowInputStream *input, + GArrowCSVReadOptions *options, + GError **error); +GArrowTable *garrow_csv_reader_read(GArrowCSVReader *reader, + GError **error); -GARROW_AVAILABLE_IN_ALL -GArrowTable * -garrow_csv_reader_read(GArrowCSVReader *reader, GError **error); /** * GArrowJSONReadUnexpectedFieldBehavior: @@ -323,34 +356,36 @@ typedef enum { } GArrowJSONReadUnexpectedFieldBehavior; #define GARROW_TYPE_JSON_READ_OPTIONS (garrow_json_read_options_get_type()) -GARROW_AVAILABLE_IN_0_14 -G_DECLARE_DERIVABLE_TYPE( - GArrowJSONReadOptions, garrow_json_read_options, GARROW, JSON_READ_OPTIONS, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowJSONReadOptions, + garrow_json_read_options, + GARROW, + JSON_READ_OPTIONS, + GObject) struct _GArrowJSONReadOptionsClass { GObjectClass parent_class; }; GARROW_AVAILABLE_IN_0_14 -GArrowJSONReadOptions * -garrow_json_read_options_new(void); +GArrowJSONReadOptions *garrow_json_read_options_new(void); #define GARROW_TYPE_JSON_READER (garrow_json_reader_get_type()) -GARROW_AVAILABLE_IN_0_14 -G_DECLARE_DERIVABLE_TYPE( - GArrowJSONReader, garrow_json_reader, GARROW, JSON_READER, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowJSONReader, + garrow_json_reader, + GARROW, + JSON_READER, + GObject) struct _GArrowJSONReaderClass { GObjectClass parent_class; }; GARROW_AVAILABLE_IN_0_14 -GArrowJSONReader * -garrow_json_reader_new(GArrowInputStream *input, - GArrowJSONReadOptions *options, - GError **error); +GArrowJSONReader *garrow_json_reader_new(GArrowInputStream *input, + GArrowJSONReadOptions *options, + GError **error); GARROW_AVAILABLE_IN_0_14 -GArrowTable * -garrow_json_reader_read(GArrowJSONReader *reader, GError **error); +GArrowTable *garrow_json_reader_read(GArrowJSONReader *reader, + GError **error); G_END_DECLS diff --git a/c_glib/arrow-glib/reader.hpp b/c_glib/arrow-glib/reader.hpp index beec6766af2..3efb9f9e075 100644 --- a/c_glib/arrow-glib/reader.hpp +++ b/c_glib/arrow-glib/reader.hpp @@ -27,61 +27,39 @@ #include -GARROW_EXTERN GArrowRecordBatchReader * garrow_record_batch_reader_new_raw( - std::shared_ptr *arrow_reader, GList *sources); - -GARROW_EXTERN + std::shared_ptr *arrow_reader, + GList *sources); std::shared_ptr garrow_record_batch_reader_get_raw(GArrowRecordBatchReader *reader); -GARROW_EXTERN GArrowTableBatchReader * -garrow_table_batch_reader_new_raw(std::shared_ptr *arrow_reader, - GArrowTable *table); - -GARROW_EXTERN +garrow_table_batch_reader_new_raw( + std::shared_ptr *arrow_reader, + GArrowTable *table); std::shared_ptr garrow_table_batch_reader_get_raw(GArrowTableBatchReader *reader); -GARROW_EXTERN -GArrowRecordBatchStreamReader * -garrow_record_batch_stream_reader_new_raw( - std::shared_ptr *arrow_reader); +GArrowRecordBatchStreamReader *garrow_record_batch_stream_reader_new_raw(std::shared_ptr *arrow_reader); -GARROW_EXTERN GArrowRecordBatchFileReader * -garrow_record_batch_file_reader_new_raw( - std::shared_ptr *arrow_reader); - -GARROW_EXTERN -std::shared_ptr -garrow_record_batch_file_reader_get_raw(GArrowRecordBatchFileReader *reader); +garrow_record_batch_file_reader_new_raw(std::shared_ptr *arrow_reader); +std::shared_ptr garrow_record_batch_file_reader_get_raw(GArrowRecordBatchFileReader *reader); -GARROW_EXTERN GArrowFeatherFileReader * -garrow_feather_file_reader_new_raw( - std::shared_ptr *arrow_reader); - -GARROW_EXTERN +garrow_feather_file_reader_new_raw(std::shared_ptr *arrow_reader); std::shared_ptr garrow_feather_file_reader_get_raw(GArrowFeatherFileReader *reader); -GARROW_EXTERN GArrowCSVReader * garrow_csv_reader_new_raw(std::shared_ptr *arrow_reader, GArrowInputStream *input); - -GARROW_EXTERN std::shared_ptr garrow_csv_reader_get_raw(GArrowCSVReader *reader); -GARROW_EXTERN GArrowJSONReader * garrow_json_reader_new_raw(std::shared_ptr *arrow_reader, GArrowInputStream *input); - -GARROW_EXTERN std::shared_ptr garrow_json_reader_get_raw(GArrowJSONReader *reader); diff --git a/c_glib/arrow-glib/record-batch.cpp b/c_glib/arrow-glib/record-batch.cpp index be9b361ae03..9cc987b4565 100644 --- a/c_glib/arrow-glib/record-batch.cpp +++ b/c_glib/arrow-glib/record-batch.cpp @@ -49,8 +49,7 @@ G_BEGIN_DECLS * batches. */ -typedef struct GArrowRecordBatchPrivate_ -{ +typedef struct GArrowRecordBatchPrivate_ { std::shared_ptr record_batch; } GArrowRecordBatchPrivate; @@ -58,11 +57,14 @@ enum { PROP_RECORD_BATCH = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowRecordBatch, garrow_record_batch, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowRecordBatch, + garrow_record_batch, + G_TYPE_OBJECT) -#define GARROW_RECORD_BATCH_GET_PRIVATE(obj) \ - static_cast( \ - garrow_record_batch_get_instance_private(GARROW_RECORD_BATCH(obj))) +#define GARROW_RECORD_BATCH_GET_PRIVATE(obj) \ + static_cast( \ + garrow_record_batch_get_instance_private( \ + GARROW_RECORD_BATCH(obj))) static void garrow_record_batch_finalize(GObject *object) @@ -110,7 +112,7 @@ static void garrow_record_batch_init(GArrowRecordBatch *object) { auto priv = GARROW_RECORD_BATCH_GET_PRIVATE(object); - new (&priv->record_batch) std::shared_ptr; + new(&priv->record_batch) std::shared_ptr; } static void @@ -121,15 +123,15 @@ garrow_record_batch_class_init(GArrowRecordBatchClass *klass) gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_record_batch_finalize; + gobject_class->finalize = garrow_record_batch_finalize; gobject_class->set_property = garrow_record_batch_set_property; gobject_class->get_property = garrow_record_batch_get_property; - spec = g_param_spec_pointer( - "record-batch", - "RecordBatch", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("record-batch", + "RecordBatch", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_RECORD_BATCH, spec); } @@ -148,12 +150,17 @@ garrow_record_batch_class_init(GArrowRecordBatchClass *klass) * Since: 6.0.0 */ GArrowRecordBatch * -garrow_record_batch_import(gpointer c_abi_array, GArrowSchema *schema, GError **error) +garrow_record_batch_import(gpointer c_abi_array, + GArrowSchema *schema, + GError **error) { auto arrow_schema = garrow_schema_get_raw(schema); auto arrow_record_batch_result = - arrow::ImportRecordBatch(static_cast(c_abi_array), arrow_schema); - if (garrow::check(error, arrow_record_batch_result, "[record-batch][import]")) { + arrow::ImportRecordBatch(static_cast(c_abi_array), + arrow_schema); + if (garrow::check(error, + arrow_record_batch_result, + "[record-batch][import]")) { return garrow_record_batch_new_raw(&(*arrow_record_batch_result)); } else { return NULL; @@ -185,12 +192,14 @@ garrow_record_batch_new(GArrowSchema *schema, const auto &arrow_schema = garrow_schema_get_raw(schema); if (arrow_schema->num_fields() != static_cast(arrow_columns.size())) { - auto status = arrow::Status::Invalid("Number of columns did not match schema"); + auto status = + arrow::Status::Invalid("Number of columns did not match schema"); garrow_error_check(error, status, tag); return NULL; } - auto arrow_record_batch = arrow::RecordBatch::Make(arrow_schema, n_rows, arrow_columns); + auto arrow_record_batch = + arrow::RecordBatch::Make(arrow_schema, n_rows, arrow_columns); auto status = arrow_record_batch->Validate(); if (garrow_error_check(error, status, tag)) { return garrow_record_batch_new_raw(&arrow_record_batch); @@ -261,7 +270,8 @@ garrow_record_batch_equal(GArrowRecordBatch *record_batch, GArrowRecordBatch *other_record_batch) { const auto arrow_record_batch = garrow_record_batch_get_raw(record_batch); - const auto arrow_other_record_batch = garrow_record_batch_get_raw(other_record_batch); + const auto arrow_other_record_batch = + garrow_record_batch_get_raw(other_record_batch); return arrow_record_batch->Equals(*arrow_other_record_batch); } @@ -313,7 +323,8 @@ garrow_record_batch_get_schema(GArrowRecordBatch *record_batch) * Since: 0.15.0 */ GArrowArray * -garrow_record_batch_get_column_data(GArrowRecordBatch *record_batch, gint i) +garrow_record_batch_get_column_data(GArrowRecordBatch *record_batch, + gint i) { const auto &arrow_record_batch = garrow_record_batch_get_raw(record_batch); if (!garrow_internal_index_adjust(i, arrow_record_batch->num_columns())) { @@ -334,7 +345,8 @@ garrow_record_batch_get_column_data(GArrowRecordBatch *record_batch, gint i) * on success, %NULL on out of index */ const gchar * -garrow_record_batch_get_column_name(GArrowRecordBatch *record_batch, gint i) +garrow_record_batch_get_column_name(GArrowRecordBatch *record_batch, + gint i) { const auto &arrow_record_batch = garrow_record_batch_get_raw(record_batch); if (!garrow_internal_index_adjust(i, arrow_record_batch->num_columns())) { @@ -381,7 +393,9 @@ garrow_record_batch_get_n_rows(GArrowRecordBatch *record_batch) * #GArrowRecordBatch. */ GArrowRecordBatch * -garrow_record_batch_slice(GArrowRecordBatch *record_batch, gint64 offset, gint64 length) +garrow_record_batch_slice(GArrowRecordBatch *record_batch, + gint64 offset, + gint64 length) { const auto arrow_record_batch = garrow_record_batch_get_raw(record_batch); auto arrow_sub_record_batch = arrow_record_batch->Slice(offset, length); @@ -433,7 +447,9 @@ garrow_record_batch_add_column(GArrowRecordBatch *record_batch, const auto arrow_column = garrow_array_get_raw(column); auto arrow_new_record_batch = arrow_record_batch->AddColumn(i, arrow_field, arrow_column); - if (garrow::check(error, arrow_new_record_batch, "[record-batch][add-column]")) { + if (garrow::check(error, + arrow_new_record_batch, + "[record-batch][add-column]")) { return garrow_record_batch_new_raw(&(*arrow_new_record_batch)); } else { return NULL; @@ -458,7 +474,9 @@ garrow_record_batch_remove_column(GArrowRecordBatch *record_batch, { const auto arrow_record_batch = garrow_record_batch_get_raw(record_batch); auto arrow_new_record_batch = arrow_record_batch->RemoveColumn(i); - if (garrow::check(error, arrow_new_record_batch, "[record-batch][remove-column]")) { + if (garrow::check(error, + arrow_new_record_batch, + "[record-batch][remove-column]")) { return garrow_record_batch_new_raw(&(*arrow_new_record_batch)); } else { return NULL; @@ -486,8 +504,8 @@ garrow_record_batch_serialize(GArrowRecordBatch *record_batch, arrow::Result> arrow_buffer; if (options) { auto arrow_options = garrow_write_options_get_raw(options); - auto arrow_buffer = - arrow::ipc::SerializeRecordBatch(*arrow_record_batch, *arrow_options); + auto arrow_buffer = arrow::ipc::SerializeRecordBatch(*arrow_record_batch, + *arrow_options); if (garrow::check(error, arrow_buffer, "[record-batch][serialize]")) { return garrow_buffer_new_raw(&(*arrow_buffer)); } else { @@ -495,8 +513,8 @@ garrow_record_batch_serialize(GArrowRecordBatch *record_batch, } } else { const auto arrow_options = arrow::ipc::IpcWriteOptions::Defaults(); - auto arrow_buffer = - arrow::ipc::SerializeRecordBatch(*arrow_record_batch, arrow_options); + auto arrow_buffer = arrow::ipc::SerializeRecordBatch(*arrow_record_batch, + arrow_options); if (garrow::check(error, arrow_buffer, "[record-batch][serialize]")) { return garrow_buffer_new_raw(&(*arrow_buffer)); } else { @@ -505,8 +523,8 @@ garrow_record_batch_serialize(GArrowRecordBatch *record_batch, } } -typedef struct GArrowRecordBatchIteratorPrivate_ -{ + +typedef struct GArrowRecordBatchIteratorPrivate_ { arrow::RecordBatchIterator iterator; } GArrowRecordBatchIteratorPrivate; @@ -518,10 +536,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowRecordBatchIterator, garrow_record_batch_iterator, G_TYPE_OBJECT) -#define GARROW_RECORD_BATCH_ITERATOR_GET_PRIVATE(obj) \ - static_cast( \ - garrow_record_batch_iterator_get_instance_private( \ - GARROW_RECORD_BATCH_ITERATOR(obj))) +#define GARROW_RECORD_BATCH_ITERATOR_GET_PRIVATE(obj) \ + static_cast( \ + garrow_record_batch_iterator_get_instance_private( \ + GARROW_RECORD_BATCH_ITERATOR(obj))) static void garrow_record_batch_iterator_finalize(GObject *object) @@ -556,7 +574,7 @@ static void garrow_record_batch_iterator_init(GArrowRecordBatchIterator *object) { auto priv = GARROW_RECORD_BATCH_ITERATOR_GET_PRIVATE(object); - new (&priv->iterator) arrow::RecordBatchIterator; + new(&priv->iterator) arrow::RecordBatchIterator; } static void @@ -564,16 +582,16 @@ garrow_record_batch_iterator_class_init(GArrowRecordBatchIteratorClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_record_batch_iterator_finalize; + gobject_class->finalize = garrow_record_batch_iterator_finalize; gobject_class->set_property = garrow_record_batch_iterator_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "iterator", - "Iterator", - "The raw arrow::RecordBatchIterator", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("iterator", + "Iterator", + "The raw arrow::RecordBatchIterator", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_ITERATOR, spec); } @@ -610,7 +628,8 @@ garrow_record_batch_iterator_new(GList *record_batches) * Since: 0.17.0 */ GArrowRecordBatch * -garrow_record_batch_iterator_next(GArrowRecordBatchIterator *iterator, GError **error) +garrow_record_batch_iterator_next(GArrowRecordBatchIterator *iterator, + GError **error) { auto priv = GARROW_RECORD_BATCH_ITERATOR_GET_PRIVATE(iterator); @@ -652,8 +671,9 @@ garrow_record_batch_iterator_equal(GArrowRecordBatchIterator *iterator, * * Since: 0.17.0 */ -GList * -garrow_record_batch_iterator_to_list(GArrowRecordBatchIterator *iterator, GError **error) +GList* +garrow_record_batch_iterator_to_list(GArrowRecordBatchIterator *iterator, + GError **error) { auto priv = GARROW_RECORD_BATCH_ITERATOR_GET_PRIVATE(iterator); GList *record_batches = NULL; @@ -676,8 +696,10 @@ G_END_DECLS GArrowRecordBatch * garrow_record_batch_new_raw(std::shared_ptr *arrow_record_batch) { - auto record_batch = GARROW_RECORD_BATCH( - g_object_new(GARROW_TYPE_RECORD_BATCH, "record-batch", arrow_record_batch, NULL)); + auto record_batch = + GARROW_RECORD_BATCH(g_object_new(GARROW_TYPE_RECORD_BATCH, + "record-batch", arrow_record_batch, + NULL)); return record_batch; } @@ -691,8 +713,9 @@ garrow_record_batch_get_raw(GArrowRecordBatch *record_batch) GArrowRecordBatchIterator * garrow_record_batch_iterator_new_raw(arrow::RecordBatchIterator *arrow_iterator) { - auto iterator = - g_object_new(GARROW_TYPE_RECORD_BATCH_ITERATOR, "iterator", arrow_iterator, NULL); + auto iterator = g_object_new(GARROW_TYPE_RECORD_BATCH_ITERATOR, + "iterator", arrow_iterator, + NULL); return GARROW_RECORD_BATCH_ITERATOR(iterator); } diff --git a/c_glib/arrow-glib/record-batch.h b/c_glib/arrow-glib/record-batch.h index e7ffd83795e..deca3c21b0e 100644 --- a/c_glib/arrow-glib/record-batch.h +++ b/c_glib/arrow-glib/record-batch.h @@ -26,9 +26,11 @@ G_BEGIN_DECLS #define GARROW_TYPE_RECORD_BATCH (garrow_record_batch_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE( - GArrowRecordBatch, garrow_record_batch, GARROW, RECORD_BATCH, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowRecordBatch, + garrow_record_batch, + GARROW, + RECORD_BATCH, + GObject) struct _GArrowRecordBatchClass { GObjectClass parent_class; @@ -36,14 +38,14 @@ struct _GArrowRecordBatchClass GARROW_AVAILABLE_IN_6_0 GArrowRecordBatch * -garrow_record_batch_import(gpointer c_abi_array, GArrowSchema *schema, GError **error); +garrow_record_batch_import(gpointer c_abi_array, + GArrowSchema *schema, + GError **error); -GARROW_AVAILABLE_IN_ALL -GArrowRecordBatch * -garrow_record_batch_new(GArrowSchema *schema, - guint32 n_rows, - GList *columns, - GError **error); +GArrowRecordBatch *garrow_record_batch_new(GArrowSchema *schema, + guint32 n_rows, + GList *columns, + GError **error); GARROW_AVAILABLE_IN_6_0 gboolean @@ -52,65 +54,45 @@ garrow_record_batch_export(GArrowRecordBatch *record_batch, gpointer *c_abi_schema, GError **error); -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_record_batch_equal(GArrowRecordBatch *record_batch, - GArrowRecordBatch *other_record_batch); +gboolean garrow_record_batch_equal(GArrowRecordBatch *record_batch, + GArrowRecordBatch *other_record_batch); GARROW_AVAILABLE_IN_0_17 gboolean garrow_record_batch_equal_metadata(GArrowRecordBatch *record_batch, GArrowRecordBatch *other_record_batch, gboolean check_metadata); -GARROW_AVAILABLE_IN_ALL -GArrowSchema * -garrow_record_batch_get_schema(GArrowRecordBatch *record_batch); - +GArrowSchema *garrow_record_batch_get_schema (GArrowRecordBatch *record_batch); GARROW_AVAILABLE_IN_0_15 -GArrowArray * -garrow_record_batch_get_column_data(GArrowRecordBatch *record_batch, gint i); - -GARROW_AVAILABLE_IN_ALL -const gchar * -garrow_record_batch_get_column_name(GArrowRecordBatch *record_batch, gint i); - -GARROW_AVAILABLE_IN_ALL -guint -garrow_record_batch_get_n_columns(GArrowRecordBatch *record_batch); - -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_record_batch_get_n_rows(GArrowRecordBatch *record_batch); - -GARROW_AVAILABLE_IN_ALL -GArrowRecordBatch * -garrow_record_batch_slice(GArrowRecordBatch *record_batch, gint64 offset, gint64 length); - -GARROW_AVAILABLE_IN_ALL -gchar * -garrow_record_batch_to_string(GArrowRecordBatch *record_batch, GError **error); - -GARROW_AVAILABLE_IN_ALL -GArrowRecordBatch * -garrow_record_batch_add_column(GArrowRecordBatch *record_batch, - guint i, - GArrowField *field, - GArrowArray *column, - GError **error); - -GARROW_AVAILABLE_IN_ALL -GArrowRecordBatch * -garrow_record_batch_remove_column(GArrowRecordBatch *record_batch, - guint i, - GError **error); +GArrowArray *garrow_record_batch_get_column_data(GArrowRecordBatch *record_batch, + gint i); +const gchar *garrow_record_batch_get_column_name(GArrowRecordBatch *record_batch, + gint i); +guint garrow_record_batch_get_n_columns (GArrowRecordBatch *record_batch); +gint64 garrow_record_batch_get_n_rows (GArrowRecordBatch *record_batch); +GArrowRecordBatch *garrow_record_batch_slice (GArrowRecordBatch *record_batch, + gint64 offset, + gint64 length); + +gchar *garrow_record_batch_to_string (GArrowRecordBatch *record_batch, + GError **error); +GArrowRecordBatch *garrow_record_batch_add_column(GArrowRecordBatch *record_batch, + guint i, + GArrowField *field, + GArrowArray *column, + GError **error); +GArrowRecordBatch *garrow_record_batch_remove_column(GArrowRecordBatch *record_batch, + guint i, + GError **error); GARROW_AVAILABLE_IN_1_0 GArrowBuffer * garrow_record_batch_serialize(GArrowRecordBatch *record_batch, GArrowWriteOptions *options, GError **error); -#define GARROW_TYPE_RECORD_BATCH_ITERATOR (garrow_record_batch_iterator_get_type()) -GARROW_AVAILABLE_IN_0_17 + +#define GARROW_TYPE_RECORD_BATCH_ITERATOR \ + (garrow_record_batch_iterator_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowRecordBatchIterator, garrow_record_batch_iterator, GARROW, @@ -127,7 +109,8 @@ garrow_record_batch_iterator_new(GList *record_batches); GARROW_AVAILABLE_IN_0_17 GArrowRecordBatch * -garrow_record_batch_iterator_next(GArrowRecordBatchIterator *iterator, GError **error); +garrow_record_batch_iterator_next(GArrowRecordBatchIterator *iterator, + GError **error); GARROW_AVAILABLE_IN_0_17 gboolean @@ -136,6 +119,7 @@ garrow_record_batch_iterator_equal(GArrowRecordBatchIterator *iterator, GARROW_AVAILABLE_IN_0_17 GList * -garrow_record_batch_iterator_to_list(GArrowRecordBatchIterator *iterator, GError **error); +garrow_record_batch_iterator_to_list(GArrowRecordBatchIterator *iterator, + GError **error); G_END_DECLS diff --git a/c_glib/arrow-glib/record-batch.hpp b/c_glib/arrow-glib/record-batch.hpp index 75c0432b390..50681100088 100644 --- a/c_glib/arrow-glib/record-batch.hpp +++ b/c_glib/arrow-glib/record-batch.hpp @@ -23,18 +23,11 @@ #include -GARROW_EXTERN -GArrowRecordBatch * -garrow_record_batch_new_raw(std::shared_ptr *arrow_record_batch); +GArrowRecordBatch *garrow_record_batch_new_raw(std::shared_ptr *arrow_record_batch); +std::shared_ptr garrow_record_batch_get_raw(GArrowRecordBatch *record_batch); -GARROW_EXTERN -std::shared_ptr -garrow_record_batch_get_raw(GArrowRecordBatch *record_batch); - -GARROW_EXTERN GArrowRecordBatchIterator * garrow_record_batch_iterator_new_raw(arrow::RecordBatchIterator *arrow_iterator); -GARROW_EXTERN arrow::RecordBatchIterator * garrow_record_batch_iterator_get_raw(GArrowRecordBatchIterator *iterator); diff --git a/c_glib/arrow-glib/scalar.cpp b/c_glib/arrow-glib/scalar.cpp index f965b497030..c45fca81c0f 100644 --- a/c_glib/arrow-glib/scalar.cpp +++ b/c_glib/arrow-glib/scalar.cpp @@ -130,8 +130,7 @@ G_BEGIN_DECLS * scalar. */ -typedef struct GArrowScalarPrivate_ -{ +typedef struct GArrowScalarPrivate_ { std::shared_ptr scalar; GArrowDataType *data_type; } GArrowScalarPrivate; @@ -141,11 +140,14 @@ enum { PROP_DATA_TYPE, }; -G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowScalar, garrow_scalar, G_TYPE_OBJECT) +G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowScalar, + garrow_scalar, + G_TYPE_OBJECT) -#define GARROW_SCALAR_GET_PRIVATE(obj) \ - static_cast( \ - garrow_scalar_get_instance_private(GARROW_SCALAR(obj))) +#define GARROW_SCALAR_GET_PRIVATE(obj) \ + static_cast( \ + garrow_scalar_get_instance_private( \ + GARROW_SCALAR(obj))) static void garrow_scalar_dispose(GObject *object) @@ -196,7 +198,7 @@ static void garrow_scalar_init(GArrowScalar *object) { auto priv = GARROW_SCALAR_GET_PRIVATE(object); - new (&priv->scalar) std::shared_ptr; + new(&priv->scalar) std::shared_ptr; } static void @@ -204,16 +206,16 @@ garrow_scalar_class_init(GArrowScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_scalar_dispose; - gobject_class->finalize = garrow_scalar_finalize; + gobject_class->dispose = garrow_scalar_dispose; + gobject_class->finalize = garrow_scalar_finalize; gobject_class->set_property = garrow_scalar_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "scalar", - "Scalar", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("scalar", + "Scalar", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_SCALAR, spec); /** @@ -223,12 +225,12 @@ garrow_scalar_class_init(GArrowScalarClass *klass) * * Since: 5.0.0 */ - spec = g_param_spec_object( - "data-type", - "Data type", - "The data type of the scalar", - GARROW_TYPE_DATA_TYPE, - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("data-type", + "Data type", + "The data type of the scalar", + GARROW_TYPE_DATA_TYPE, + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_DATA_TYPE, spec); } @@ -252,15 +254,14 @@ garrow_scalar_parse(GArrowDataType *data_type, GError **error) { const auto arrow_data_type = garrow_data_type_get_raw(data_type); - auto arrow_data = std::string_view(reinterpret_cast(data), size); + auto arrow_data = std::string_view(reinterpret_cast(data), + size); auto arrow_scalar_result = arrow::Scalar::Parse(arrow_data_type, arrow_data); if (garrow::check(error, arrow_scalar_result, "[scalar][parse]")) { auto arrow_scalar = *arrow_scalar_result; return garrow_scalar_new_raw(&arrow_scalar, - "scalar", - &arrow_scalar, - "data-type", - data_type, + "scalar", &arrow_scalar, + "data-type", data_type, NULL); } else { return NULL; @@ -311,7 +312,8 @@ garrow_scalar_is_valid(GArrowScalar *scalar) * Since: 5.0.0 */ gboolean -garrow_scalar_equal(GArrowScalar *scalar, GArrowScalar *other_scalar) +garrow_scalar_equal(GArrowScalar *scalar, + GArrowScalar *other_scalar) { return garrow_scalar_equal_options(scalar, other_scalar, NULL); } @@ -389,17 +391,18 @@ garrow_scalar_cast(GArrowScalar *scalar, if (garrow::check(error, arrow_casted_scalar_result, "[scalar][cast]")) { auto arrow_casted_scalar = (*arrow_casted_scalar_result).scalar(); return garrow_scalar_new_raw(&arrow_casted_scalar, - "scalar", - &arrow_casted_scalar, - "data-type", - data_type, + "scalar", &arrow_casted_scalar, + "data-type", data_type, NULL); } else { return NULL; } } -G_DEFINE_TYPE(GArrowNullScalar, garrow_null_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowNullScalar, + garrow_null_scalar, + GARROW_TYPE_SCALAR) static void garrow_null_scalar_init(GArrowNullScalar *object) @@ -422,11 +425,15 @@ GArrowNullScalar * garrow_null_scalar_new(void) { auto arrow_scalar = - std::static_pointer_cast(std::make_shared()); + std::static_pointer_cast( + std::make_shared()); return GARROW_NULL_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } -G_DEFINE_TYPE(GArrowBooleanScalar, garrow_boolean_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowBooleanScalar, + garrow_boolean_scalar, + GARROW_TYPE_SCALAR) static void garrow_boolean_scalar_init(GArrowBooleanScalar *object) @@ -449,8 +456,9 @@ garrow_boolean_scalar_class_init(GArrowBooleanScalarClass *klass) GArrowBooleanScalar * garrow_boolean_scalar_new(gboolean value) { - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(value)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(value)); return GARROW_BOOLEAN_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -465,12 +473,16 @@ garrow_boolean_scalar_new(gboolean value) gboolean garrow_boolean_scalar_get_value(GArrowBooleanScalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowInt8Scalar, garrow_int8_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowInt8Scalar, + garrow_int8_scalar, + GARROW_TYPE_SCALAR) static void garrow_int8_scalar_init(GArrowInt8Scalar *object) @@ -494,7 +506,8 @@ GArrowInt8Scalar * garrow_int8_scalar_new(gint8 value) { auto arrow_scalar = - std::static_pointer_cast(std::make_shared(value)); + std::static_pointer_cast( + std::make_shared(value)); return GARROW_INT8_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -509,12 +522,16 @@ garrow_int8_scalar_new(gint8 value) gint8 garrow_int8_scalar_get_value(GArrowInt8Scalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowInt16Scalar, garrow_int16_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowInt16Scalar, + garrow_int16_scalar, + GARROW_TYPE_SCALAR) static void garrow_int16_scalar_init(GArrowInt16Scalar *object) @@ -538,7 +555,8 @@ GArrowInt16Scalar * garrow_int16_scalar_new(gint16 value) { auto arrow_scalar = - std::static_pointer_cast(std::make_shared(value)); + std::static_pointer_cast( + std::make_shared(value)); return GARROW_INT16_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -553,12 +571,16 @@ garrow_int16_scalar_new(gint16 value) gint16 garrow_int16_scalar_get_value(GArrowInt16Scalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowInt32Scalar, garrow_int32_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowInt32Scalar, + garrow_int32_scalar, + GARROW_TYPE_SCALAR) static void garrow_int32_scalar_init(GArrowInt32Scalar *object) @@ -582,7 +604,8 @@ GArrowInt32Scalar * garrow_int32_scalar_new(gint32 value) { auto arrow_scalar = - std::static_pointer_cast(std::make_shared(value)); + std::static_pointer_cast( + std::make_shared(value)); return GARROW_INT32_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -597,12 +620,16 @@ garrow_int32_scalar_new(gint32 value) gint32 garrow_int32_scalar_get_value(GArrowInt32Scalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowInt64Scalar, garrow_int64_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowInt64Scalar, + garrow_int64_scalar, + GARROW_TYPE_SCALAR) static void garrow_int64_scalar_init(GArrowInt64Scalar *object) @@ -626,7 +653,8 @@ GArrowInt64Scalar * garrow_int64_scalar_new(gint64 value) { auto arrow_scalar = - std::static_pointer_cast(std::make_shared(value)); + std::static_pointer_cast( + std::make_shared(value)); return GARROW_INT64_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -641,12 +669,16 @@ garrow_int64_scalar_new(gint64 value) gint64 garrow_int64_scalar_get_value(GArrowInt64Scalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowUInt8Scalar, garrow_uint8_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowUInt8Scalar, + garrow_uint8_scalar, + GARROW_TYPE_SCALAR) static void garrow_uint8_scalar_init(GArrowUInt8Scalar *object) @@ -670,7 +702,8 @@ GArrowUInt8Scalar * garrow_uint8_scalar_new(guint8 value) { auto arrow_scalar = - std::static_pointer_cast(std::make_shared(value)); + std::static_pointer_cast( + std::make_shared(value)); return GARROW_UINT8_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -685,12 +718,16 @@ garrow_uint8_scalar_new(guint8 value) guint8 garrow_uint8_scalar_get_value(GArrowUInt8Scalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowUInt16Scalar, garrow_uint16_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowUInt16Scalar, + garrow_uint16_scalar, + GARROW_TYPE_SCALAR) static void garrow_uint16_scalar_init(GArrowUInt16Scalar *object) @@ -714,7 +751,8 @@ GArrowUInt16Scalar * garrow_uint16_scalar_new(guint16 value) { auto arrow_scalar = - std::static_pointer_cast(std::make_shared(value)); + std::static_pointer_cast( + std::make_shared(value)); return GARROW_UINT16_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -729,12 +767,16 @@ garrow_uint16_scalar_new(guint16 value) guint16 garrow_uint16_scalar_get_value(GArrowUInt16Scalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowUInt32Scalar, garrow_uint32_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowUInt32Scalar, + garrow_uint32_scalar, + GARROW_TYPE_SCALAR) static void garrow_uint32_scalar_init(GArrowUInt32Scalar *object) @@ -758,7 +800,8 @@ GArrowUInt32Scalar * garrow_uint32_scalar_new(guint32 value) { auto arrow_scalar = - std::static_pointer_cast(std::make_shared(value)); + std::static_pointer_cast( + std::make_shared(value)); return GARROW_UINT32_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -773,12 +816,16 @@ garrow_uint32_scalar_new(guint32 value) guint32 garrow_uint32_scalar_get_value(GArrowUInt32Scalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowUInt64Scalar, garrow_uint64_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowUInt64Scalar, + garrow_uint64_scalar, + GARROW_TYPE_SCALAR) static void garrow_uint64_scalar_init(GArrowUInt64Scalar *object) @@ -802,7 +849,8 @@ GArrowUInt64Scalar * garrow_uint64_scalar_new(guint64 value) { auto arrow_scalar = - std::static_pointer_cast(std::make_shared(value)); + std::static_pointer_cast( + std::make_shared(value)); return GARROW_UINT64_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -817,12 +865,16 @@ garrow_uint64_scalar_new(guint64 value) guint64 garrow_uint64_scalar_get_value(GArrowUInt64Scalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowHalfFloatScalar, garrow_half_float_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowHalfFloatScalar, + garrow_half_float_scalar, + GARROW_TYPE_SCALAR) static void garrow_half_float_scalar_init(GArrowHalfFloatScalar *object) @@ -845,8 +897,9 @@ garrow_half_float_scalar_class_init(GArrowHalfFloatScalarClass *klass) GArrowHalfFloatScalar * garrow_half_float_scalar_new(guint16 value) { - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(value)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(value)); return GARROW_HALF_FLOAT_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -861,12 +914,16 @@ garrow_half_float_scalar_new(guint16 value) guint16 garrow_half_float_scalar_get_value(GArrowHalfFloatScalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowFloatScalar, garrow_float_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowFloatScalar, + garrow_float_scalar, + GARROW_TYPE_SCALAR) static void garrow_float_scalar_init(GArrowFloatScalar *object) @@ -890,7 +947,8 @@ GArrowFloatScalar * garrow_float_scalar_new(gfloat value) { auto arrow_scalar = - std::static_pointer_cast(std::make_shared(value)); + std::static_pointer_cast( + std::make_shared(value)); return GARROW_FLOAT_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -905,12 +963,16 @@ garrow_float_scalar_new(gfloat value) gfloat garrow_float_scalar_get_value(GArrowFloatScalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowDoubleScalar, garrow_double_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowDoubleScalar, + garrow_double_scalar, + GARROW_TYPE_SCALAR) static void garrow_double_scalar_init(GArrowDoubleScalar *object) @@ -934,7 +996,8 @@ GArrowDoubleScalar * garrow_double_scalar_new(gdouble value) { auto arrow_scalar = - std::static_pointer_cast(std::make_shared(value)); + std::static_pointer_cast( + std::make_shared(value)); return GARROW_DOUBLE_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -949,13 +1012,14 @@ garrow_double_scalar_new(gdouble value) gdouble garrow_double_scalar_get_value(GArrowDoubleScalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -typedef struct GArrowBaseBinaryScalarPrivate_ -{ + +typedef struct GArrowBaseBinaryScalarPrivate_ { GArrowBuffer *value; } GArrowBaseBinaryScalarPrivate; @@ -967,9 +1031,10 @@ G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowBaseBinaryScalar, garrow_base_binary_scalar, GARROW_TYPE_SCALAR) -#define GARROW_BASE_BINARY_SCALAR_GET_PRIVATE(obj) \ - static_cast( \ - garrow_base_binary_scalar_get_instance_private(GARROW_BASE_BINARY_SCALAR(obj))) +#define GARROW_BASE_BINARY_SCALAR_GET_PRIVATE(obj) \ + static_cast( \ + garrow_base_binary_scalar_get_instance_private( \ + GARROW_BASE_BINARY_SCALAR(obj))) static void garrow_base_binary_scalar_dispose(GObject *object) @@ -1011,7 +1076,7 @@ static void garrow_base_binary_scalar_class_init(GArrowBaseBinaryScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_base_binary_scalar_dispose; + gobject_class->dispose = garrow_base_binary_scalar_dispose; gobject_class->set_property = garrow_base_binary_scalar_set_property; GParamSpec *spec; @@ -1022,28 +1087,27 @@ garrow_base_binary_scalar_class_init(GArrowBaseBinaryScalarClass *klass) * * Since: 5.0.0 */ - spec = g_param_spec_object( - "value", - "Value", - "The value of the scalar", - GARROW_TYPE_BUFFER, - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("value", + "Value", + "The value of the scalar", + GARROW_TYPE_BUFFER, + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } G_END_DECLS -template +template GArrowScalar * garrow_base_binary_scalar_new(GArrowBuffer *value) { auto arrow_value = garrow_buffer_get_raw(value); - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(arrow_value)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(arrow_value)); return garrow_scalar_new_raw(&arrow_scalar, - "scalar", - &arrow_scalar, - "value", - value, + "scalar", &arrow_scalar, + "value", value, NULL); } G_BEGIN_DECLS @@ -1061,15 +1125,18 @@ garrow_base_binary_scalar_get_value(GArrowBaseBinaryScalar *scalar) { auto priv = GARROW_BASE_BINARY_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); - priv->value = garrow_buffer_new_raw( - const_cast *>(&(arrow_scalar->value))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + priv->value = garrow_buffer_new_raw(&(arrow_scalar->value)); } return priv->value; } -G_DEFINE_TYPE(GArrowBinaryScalar, garrow_binary_scalar, GARROW_TYPE_BASE_BINARY_SCALAR) + +G_DEFINE_TYPE(GArrowBinaryScalar, + garrow_binary_scalar, + GARROW_TYPE_BASE_BINARY_SCALAR) static void garrow_binary_scalar_init(GArrowBinaryScalar *object) @@ -1092,10 +1159,14 @@ garrow_binary_scalar_class_init(GArrowBinaryScalarClass *klass) GArrowBinaryScalar * garrow_binary_scalar_new(GArrowBuffer *value) { - return GARROW_BINARY_SCALAR(garrow_base_binary_scalar_new(value)); + return GARROW_BINARY_SCALAR( + garrow_base_binary_scalar_new(value)); } -G_DEFINE_TYPE(GArrowStringScalar, garrow_string_scalar, GARROW_TYPE_BASE_BINARY_SCALAR) + +G_DEFINE_TYPE(GArrowStringScalar, + garrow_string_scalar, + GARROW_TYPE_BASE_BINARY_SCALAR) static void garrow_string_scalar_init(GArrowStringScalar *object) @@ -1118,9 +1189,11 @@ garrow_string_scalar_class_init(GArrowStringScalarClass *klass) GArrowStringScalar * garrow_string_scalar_new(GArrowBuffer *value) { - return GARROW_STRING_SCALAR(garrow_base_binary_scalar_new(value)); + return GARROW_STRING_SCALAR( + garrow_base_binary_scalar_new(value)); } + G_DEFINE_TYPE(GArrowLargeBinaryScalar, garrow_large_binary_scalar, GARROW_TYPE_BASE_BINARY_SCALAR) @@ -1150,6 +1223,7 @@ garrow_large_binary_scalar_new(GArrowBuffer *value) garrow_base_binary_scalar_new(value)); } + G_DEFINE_TYPE(GArrowLargeStringScalar, garrow_large_string_scalar, GARROW_TYPE_BASE_BINARY_SCALAR) @@ -1179,6 +1253,7 @@ garrow_large_string_scalar_new(GArrowBuffer *value) garrow_base_binary_scalar_new(value)); } + G_DEFINE_TYPE(GArrowFixedSizeBinaryScalar, garrow_fixed_size_binary_scalar, GARROW_TYPE_BASE_BINARY_SCALAR) @@ -1189,7 +1264,8 @@ garrow_fixed_size_binary_scalar_init(GArrowFixedSizeBinaryScalar *object) } static void -garrow_fixed_size_binary_scalar_class_init(GArrowFixedSizeBinaryScalarClass *klass) +garrow_fixed_size_binary_scalar_class_init( + GArrowFixedSizeBinaryScalarClass *klass) { } @@ -1208,19 +1284,22 @@ garrow_fixed_size_binary_scalar_new(GArrowFixedSizeBinaryDataType *data_type, { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_value = garrow_buffer_get_raw(value); - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(arrow_value, arrow_data_type)); - return GARROW_FIXED_SIZE_BINARY_SCALAR(garrow_scalar_new_raw(&arrow_scalar, - "scalar", - &arrow_scalar, - "data-type", - data_type, - "value", - value, - NULL)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared( + arrow_value, arrow_data_type)); + return GARROW_FIXED_SIZE_BINARY_SCALAR( + garrow_scalar_new_raw(&arrow_scalar, + "scalar", &arrow_scalar, + "data-type", data_type, + "value", value, + NULL)); } -G_DEFINE_TYPE(GArrowDate32Scalar, garrow_date32_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowDate32Scalar, + garrow_date32_scalar, + GARROW_TYPE_SCALAR) static void garrow_date32_scalar_init(GArrowDate32Scalar *object) @@ -1244,7 +1323,8 @@ GArrowDate32Scalar * garrow_date32_scalar_new(gint32 value) { auto arrow_scalar = - std::static_pointer_cast(std::make_shared(value)); + std::static_pointer_cast( + std::make_shared(value)); return GARROW_DATE32_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -1259,12 +1339,16 @@ garrow_date32_scalar_new(gint32 value) gint32 garrow_date32_scalar_get_value(GArrowDate32Scalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowDate64Scalar, garrow_date64_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowDate64Scalar, + garrow_date64_scalar, + GARROW_TYPE_SCALAR) static void garrow_date64_scalar_init(GArrowDate64Scalar *object) @@ -1288,7 +1372,8 @@ GArrowDate64Scalar * garrow_date64_scalar_new(gint64 value) { auto arrow_scalar = - std::static_pointer_cast(std::make_shared(value)); + std::static_pointer_cast( + std::make_shared(value)); return GARROW_DATE64_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -1303,12 +1388,16 @@ garrow_date64_scalar_new(gint64 value) gint64 garrow_date64_scalar_get_value(GArrowDate64Scalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowTime32Scalar, garrow_time32_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowTime32Scalar, + garrow_time32_scalar, + GARROW_TYPE_SCALAR) static void garrow_time32_scalar_init(GArrowTime32Scalar *object) @@ -1330,17 +1419,18 @@ garrow_time32_scalar_class_init(GArrowTime32ScalarClass *klass) * Since: 5.0.0 */ GArrowTime32Scalar * -garrow_time32_scalar_new(GArrowTime32DataType *data_type, gint32 value) +garrow_time32_scalar_new(GArrowTime32DataType *data_type, + gint32 value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(value, arrow_data_type)); - return GARROW_TIME32_SCALAR(garrow_scalar_new_raw(&arrow_scalar, - "scalar", - &arrow_scalar, - "data-type", - data_type, - NULL)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(value, arrow_data_type)); + return GARROW_TIME32_SCALAR( + garrow_scalar_new_raw(&arrow_scalar, + "scalar", &arrow_scalar, + "data-type", data_type, + NULL)); } /** @@ -1354,12 +1444,16 @@ garrow_time32_scalar_new(GArrowTime32DataType *data_type, gint32 value) gint32 garrow_time32_scalar_get_value(GArrowTime32Scalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowTime64Scalar, garrow_time64_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowTime64Scalar, + garrow_time64_scalar, + GARROW_TYPE_SCALAR) static void garrow_time64_scalar_init(GArrowTime64Scalar *object) @@ -1381,17 +1475,18 @@ garrow_time64_scalar_class_init(GArrowTime64ScalarClass *klass) * Since: 5.0.0 */ GArrowTime64Scalar * -garrow_time64_scalar_new(GArrowTime64DataType *data_type, gint64 value) +garrow_time64_scalar_new(GArrowTime64DataType *data_type, + gint64 value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(value, arrow_data_type)); - return GARROW_TIME64_SCALAR(garrow_scalar_new_raw(&arrow_scalar, - "scalar", - &arrow_scalar, - "data-type", - data_type, - NULL)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(value, arrow_data_type)); + return GARROW_TIME64_SCALAR( + garrow_scalar_new_raw(&arrow_scalar, + "scalar", &arrow_scalar, + "data-type", data_type, + NULL)); } /** @@ -1405,12 +1500,16 @@ garrow_time64_scalar_new(GArrowTime64DataType *data_type, gint64 value) gint64 garrow_time64_scalar_get_value(GArrowTime64Scalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowTimestampScalar, garrow_timestamp_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowTimestampScalar, + garrow_timestamp_scalar, + GARROW_TYPE_SCALAR) static void garrow_timestamp_scalar_init(GArrowTimestampScalar *object) @@ -1432,17 +1531,18 @@ garrow_timestamp_scalar_class_init(GArrowTimestampScalarClass *klass) * Since: 5.0.0 */ GArrowTimestampScalar * -garrow_timestamp_scalar_new(GArrowTimestampDataType *data_type, gint64 value) +garrow_timestamp_scalar_new(GArrowTimestampDataType *data_type, + gint64 value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(value, arrow_data_type)); - return GARROW_TIMESTAMP_SCALAR(garrow_scalar_new_raw(&arrow_scalar, - "scalar", - &arrow_scalar, - "data-type", - data_type, - NULL)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(value, arrow_data_type)); + return GARROW_TIMESTAMP_SCALAR( + garrow_scalar_new_raw(&arrow_scalar, + "scalar", &arrow_scalar, + "data-type", data_type, + NULL)); } /** @@ -1456,12 +1556,16 @@ garrow_timestamp_scalar_new(GArrowTimestampDataType *data_type, gint64 value) gint64 garrow_timestamp_scalar_get_value(GArrowTimestampScalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -G_DEFINE_TYPE(GArrowMonthIntervalScalar, garrow_month_interval_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowMonthIntervalScalar, + garrow_month_interval_scalar, + GARROW_TYPE_SCALAR) static void garrow_month_interval_scalar_init(GArrowMonthIntervalScalar *object) @@ -1484,8 +1588,9 @@ garrow_month_interval_scalar_class_init(GArrowMonthIntervalScalarClass *klass) GArrowMonthIntervalScalar * garrow_month_interval_scalar_new(gint32 value) { - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(value)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(value)); return GARROW_MONTH_INTERVAL_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -1500,13 +1605,14 @@ garrow_month_interval_scalar_new(gint32 value) gint32 garrow_month_interval_scalar_get_value(GArrowMonthIntervalScalar *scalar) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->value; } -typedef struct GArrowDayTimeIntervalScalarPrivate_ -{ + +typedef struct GArrowDayTimeIntervalScalarPrivate_ { GArrowDayMillisecond *value; } GArrowDayTimeIntervalScalarPrivate; @@ -1514,9 +1620,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowDayTimeIntervalScalar, garrow_day_time_interval_scalar, GARROW_TYPE_SCALAR) -#define GARROW_DAY_TIME_INTERVAL_SCALAR_GET_PRIVATE(obj) \ - static_cast( \ - garrow_day_time_interval_scalar_get_instance_private( \ +#define GARROW_DAY_TIME_INTERVAL_SCALAR_GET_PRIVATE(obj) \ + static_cast( \ + garrow_day_time_interval_scalar_get_instance_private( \ GARROW_DAY_TIME_INTERVAL_SCALAR(obj))) static void @@ -1525,7 +1631,8 @@ garrow_day_time_interval_scalar_init(GArrowDayTimeIntervalScalar *object) } static void -garrow_day_time_interval_scalar_class_init(GArrowDayTimeIntervalScalarClass *klass) +garrow_day_time_interval_scalar_class_init( + GArrowDayTimeIntervalScalarClass *klass) { } @@ -1541,8 +1648,9 @@ GArrowDayTimeIntervalScalar * garrow_day_time_interval_scalar_new(GArrowDayMillisecond *value) { auto arrow_value = garrow_day_millisecond_get_raw(value); - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(*arrow_value)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(*arrow_value)); return GARROW_DAY_TIME_INTERVAL_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); } @@ -1559,8 +1667,9 @@ garrow_day_time_interval_scalar_get_value(GArrowDayTimeIntervalScalar *scalar) { auto priv = GARROW_DAY_TIME_INTERVAL_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { - auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); auto arrow_value = arrow_scalar->value; priv->value = garrow_day_millisecond_new_raw(&arrow_value); } @@ -1568,8 +1677,8 @@ garrow_day_time_interval_scalar_get_value(GArrowDayTimeIntervalScalar *scalar) return priv->value; } -typedef struct GArrowMonthDayNanoIntervalScalarPrivate_ -{ + +typedef struct GArrowMonthDayNanoIntervalScalarPrivate_ { GArrowMonthDayNano *value; } GArrowMonthDayNanoIntervalScalarPrivate; @@ -1577,13 +1686,14 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowMonthDayNanoIntervalScalar, garrow_month_day_nano_interval_scalar, GARROW_TYPE_SCALAR) -#define GARROW_MONTH_DAY_NANO_INTERVAL_SCALAR_GET_PRIVATE(obj) \ - static_cast( \ - garrow_month_day_nano_interval_scalar_get_instance_private( \ +#define GARROW_MONTH_DAY_NANO_INTERVAL_SCALAR_GET_PRIVATE(obj) \ + static_cast( \ + garrow_month_day_nano_interval_scalar_get_instance_private( \ GARROW_MONTH_DAY_NANO_INTERVAL_SCALAR(obj))) static void -garrow_month_day_nano_interval_scalar_init(GArrowMonthDayNanoIntervalScalar *object) +garrow_month_day_nano_interval_scalar_init( + GArrowMonthDayNanoIntervalScalar *object) { } @@ -1605,9 +1715,11 @@ GArrowMonthDayNanoIntervalScalar * garrow_month_day_nano_interval_scalar_new(GArrowMonthDayNano *value) { auto arrow_value = garrow_month_day_nano_get_raw(value); - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(*arrow_value)); - return GARROW_MONTH_DAY_NANO_INTERVAL_SCALAR(garrow_scalar_new_raw(&arrow_scalar)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(*arrow_value)); + return GARROW_MONTH_DAY_NANO_INTERVAL_SCALAR( + garrow_scalar_new_raw(&arrow_scalar)); } /** @@ -1623,16 +1735,17 @@ garrow_month_day_nano_interval_scalar_get_value(GArrowMonthDayNanoIntervalScalar { auto priv = GARROW_MONTH_DAY_NANO_INTERVAL_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { - auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); priv->value = garrow_month_day_nano_new_raw(&arrow_scalar->value); } return priv->value; } -typedef struct GArrowDecimal128ScalarPrivate_ -{ + +typedef struct GArrowDecimal128ScalarPrivate_ { GArrowDecimal128 *value; } GArrowDecimal128ScalarPrivate; @@ -1640,9 +1753,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowDecimal128Scalar, garrow_decimal128_scalar, GARROW_TYPE_SCALAR) -#define GARROW_DECIMAL128_SCALAR_GET_PRIVATE(obj) \ - static_cast( \ - garrow_decimal128_scalar_get_instance_private(GARROW_DECIMAL128_SCALAR(obj))) +#define GARROW_DECIMAL128_SCALAR_GET_PRIVATE(obj) \ + static_cast( \ + garrow_decimal128_scalar_get_instance_private( \ + GARROW_DECIMAL128_SCALAR(obj))) static void garrow_decimal128_scalar_dispose(GObject *object) @@ -1685,7 +1799,7 @@ garrow_decimal128_scalar_class_init(GArrowDecimal128ScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_decimal128_scalar_dispose; + gobject_class->dispose = garrow_decimal128_scalar_dispose; gobject_class->set_property = garrow_decimal128_scalar_set_property; GParamSpec *spec; @@ -1696,12 +1810,12 @@ garrow_decimal128_scalar_class_init(GArrowDecimal128ScalarClass *klass) * * Since: 5.0.0 */ - spec = g_param_spec_object( - "value", - "Value", - "The value of the scalar", - garrow_decimal128_get_type(), - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("value", + "Value", + "The value of the scalar", + garrow_decimal128_get_type(), + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } @@ -1715,20 +1829,20 @@ garrow_decimal128_scalar_class_init(GArrowDecimal128ScalarClass *klass) * Since: 5.0.0 */ GArrowDecimal128Scalar * -garrow_decimal128_scalar_new(GArrowDecimal128DataType *data_type, GArrowDecimal128 *value) +garrow_decimal128_scalar_new(GArrowDecimal128DataType *data_type, + GArrowDecimal128 *value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_value = garrow_decimal128_get_raw(value); - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(*arrow_value, arrow_data_type)); - return GARROW_DECIMAL128_SCALAR(garrow_scalar_new_raw(&arrow_scalar, - "scalar", - &arrow_scalar, - "data-type", - data_type, - "value", - value, - NULL)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(*arrow_value, arrow_data_type)); + return GARROW_DECIMAL128_SCALAR( + garrow_scalar_new_raw(&arrow_scalar, + "scalar", &arrow_scalar, + "data-type", data_type, + "value", value, + NULL)); } /** @@ -1744,16 +1858,17 @@ garrow_decimal128_scalar_get_value(GArrowDecimal128Scalar *scalar) { auto priv = GARROW_DECIMAL128_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { - auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); auto arrow_value = std::make_shared(arrow_scalar->value); priv->value = garrow_decimal128_new_raw(&arrow_value); } return priv->value; } -typedef struct GArrowDecimal256ScalarPrivate_ -{ + +typedef struct GArrowDecimal256ScalarPrivate_ { GArrowDecimal256 *value; } GArrowDecimal256ScalarPrivate; @@ -1761,9 +1876,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowDecimal256Scalar, garrow_decimal256_scalar, GARROW_TYPE_SCALAR) -#define GARROW_DECIMAL256_SCALAR_GET_PRIVATE(obj) \ - static_cast( \ - garrow_decimal256_scalar_get_instance_private(GARROW_DECIMAL256_SCALAR(obj))) +#define GARROW_DECIMAL256_SCALAR_GET_PRIVATE(obj) \ + static_cast( \ + garrow_decimal256_scalar_get_instance_private( \ + GARROW_DECIMAL256_SCALAR(obj))) static void garrow_decimal256_scalar_dispose(GObject *object) @@ -1806,7 +1922,7 @@ garrow_decimal256_scalar_class_init(GArrowDecimal256ScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_decimal256_scalar_dispose; + gobject_class->dispose = garrow_decimal256_scalar_dispose; gobject_class->set_property = garrow_decimal256_scalar_set_property; GParamSpec *spec; @@ -1817,12 +1933,12 @@ garrow_decimal256_scalar_class_init(GArrowDecimal256ScalarClass *klass) * * Since: 5.0.0 */ - spec = g_param_spec_object( - "value", - "Value", - "The value of the scalar", - garrow_decimal256_get_type(), - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("value", + "Value", + "The value of the scalar", + garrow_decimal256_get_type(), + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } @@ -1836,19 +1952,18 @@ garrow_decimal256_scalar_class_init(GArrowDecimal256ScalarClass *klass) * Since: 5.0.0 */ GArrowDecimal256Scalar * -garrow_decimal256_scalar_new(GArrowDecimal256DataType *data_type, GArrowDecimal256 *value) +garrow_decimal256_scalar_new(GArrowDecimal256DataType *data_type, + GArrowDecimal256 *value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_value = garrow_decimal256_get_raw(value); - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(*arrow_value, arrow_data_type)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(*arrow_value, arrow_data_type)); return GARROW_DECIMAL256_SCALAR(garrow_scalar_new_raw(&arrow_scalar, - "scalar", - &arrow_scalar, - "data-type", - data_type, - "value", - value, + "scalar", &arrow_scalar, + "data-type", data_type, + "value", value, NULL)); } @@ -1865,16 +1980,17 @@ garrow_decimal256_scalar_get_value(GArrowDecimal256Scalar *scalar) { auto priv = GARROW_DECIMAL256_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { - auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); auto arrow_value = std::make_shared(arrow_scalar->value); priv->value = garrow_decimal256_new_raw(&arrow_value); } return priv->value; } -typedef struct GArrowBaseListScalarPrivate_ -{ + +typedef struct GArrowBaseListScalarPrivate_ { GArrowArray *value; } GArrowBaseListScalarPrivate; @@ -1882,9 +1998,10 @@ G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowBaseListScalar, garrow_base_list_scalar, GARROW_TYPE_SCALAR) -#define GARROW_BASE_LIST_SCALAR_GET_PRIVATE(obj) \ - static_cast( \ - garrow_base_list_scalar_get_instance_private(GARROW_BASE_LIST_SCALAR(obj))) +#define GARROW_BASE_LIST_SCALAR_GET_PRIVATE(obj) \ + static_cast( \ + garrow_base_list_scalar_get_instance_private( \ + GARROW_BASE_LIST_SCALAR(obj))) static void garrow_base_list_scalar_dispose(GObject *object) @@ -1927,7 +2044,7 @@ garrow_base_list_scalar_class_init(GArrowBaseListScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_base_list_scalar_dispose; + gobject_class->dispose = garrow_base_list_scalar_dispose; gobject_class->set_property = garrow_base_list_scalar_set_property; GParamSpec *spec; @@ -1938,31 +2055,29 @@ garrow_base_list_scalar_class_init(GArrowBaseListScalarClass *klass) * * Since: 5.0.0 */ - spec = g_param_spec_object( - "value", - "Value", - "The value of the scalar", - GARROW_TYPE_ARRAY, - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("value", + "Value", + "The value of the scalar", + GARROW_TYPE_ARRAY, + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } G_END_DECLS -template +template GArrowScalar * garrow_base_list_scalar_new(GArrowArray *value) { auto arrow_value = garrow_array_get_raw(value); - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(arrow_value)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(arrow_value)); auto data_type = garrow_array_get_value_data_type(value); auto scalar = garrow_scalar_new_raw(&arrow_scalar, - "scalar", - &arrow_scalar, - "data-type", - data_type, - "value", - value, + "scalar", &arrow_scalar, + "data-type", data_type, + "value", value, NULL); g_object_unref(data_type); return scalar; @@ -1982,15 +2097,18 @@ garrow_base_list_scalar_get_value(GArrowBaseListScalar *scalar) { auto priv = GARROW_BASE_LIST_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { - const auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); - priv->value = garrow_array_new_raw( - const_cast *>(&(arrow_scalar->value))); + const auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + priv->value = garrow_array_new_raw(&(arrow_scalar->value)); } return priv->value; } -G_DEFINE_TYPE(GArrowListScalar, garrow_list_scalar, GARROW_TYPE_BASE_LIST_SCALAR) + +G_DEFINE_TYPE(GArrowListScalar, + garrow_list_scalar, + GARROW_TYPE_BASE_LIST_SCALAR) static void garrow_list_scalar_init(GArrowListScalar *object) @@ -2017,6 +2135,7 @@ garrow_list_scalar_new(GArrowListArray *value) garrow_base_list_scalar_new(GARROW_ARRAY(value))); } + G_DEFINE_TYPE(GArrowLargeListScalar, garrow_large_list_scalar, GARROW_TYPE_BASE_LIST_SCALAR) @@ -2046,7 +2165,10 @@ garrow_large_list_scalar_new(GArrowLargeListArray *value) garrow_base_list_scalar_new(GARROW_ARRAY(value))); } -G_DEFINE_TYPE(GArrowMapScalar, garrow_map_scalar, GARROW_TYPE_BASE_LIST_SCALAR) + +G_DEFINE_TYPE(GArrowMapScalar, + garrow_map_scalar, + GARROW_TYPE_BASE_LIST_SCALAR) static void garrow_map_scalar_init(GArrowMapScalar *object) @@ -2073,16 +2195,19 @@ garrow_map_scalar_new(GArrowStructArray *value) garrow_base_list_scalar_new(GARROW_ARRAY(value))); } -typedef struct GArrowStructScalarPrivate_ -{ + +typedef struct GArrowStructScalarPrivate_ { GList *value; } GArrowStructScalarPrivate; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowStructScalar, garrow_struct_scalar, GARROW_TYPE_SCALAR) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowStructScalar, + garrow_struct_scalar, + GARROW_TYPE_SCALAR) -#define GARROW_STRUCT_SCALAR_GET_PRIVATE(obj) \ - static_cast( \ - garrow_struct_scalar_get_instance_private(GARROW_STRUCT_SCALAR(obj))) +#define GARROW_STRUCT_SCALAR_GET_PRIVATE(obj) \ + static_cast( \ + garrow_struct_scalar_get_instance_private( \ + GARROW_STRUCT_SCALAR(obj))) static void garrow_struct_scalar_dispose(GObject *object) @@ -2119,7 +2244,8 @@ garrow_struct_scalar_class_init(GArrowStructScalarClass *klass) * Since: 5.0.0 */ GArrowStructScalar * -garrow_struct_scalar_new(GArrowStructDataType *data_type, GList *value) +garrow_struct_scalar_new(GArrowStructDataType *data_type, + GList *value) { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); std::vector> arrow_value; @@ -2128,16 +2254,19 @@ garrow_struct_scalar_new(GArrowStructDataType *data_type, GList *value) auto arrow_field = garrow_scalar_get_raw(field); arrow_value.push_back(arrow_field); } - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(arrow_value, arrow_data_type)); - auto scalar = GARROW_STRUCT_SCALAR(garrow_scalar_new_raw(&arrow_scalar, - "scalar", - &arrow_scalar, - "data-type", - data_type, - NULL)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(arrow_value, arrow_data_type)); + auto scalar = + GARROW_STRUCT_SCALAR( + garrow_scalar_new_raw(&arrow_scalar, + "scalar", &arrow_scalar, + "data-type", data_type, + NULL)); auto priv = GARROW_STRUCT_SCALAR_GET_PRIVATE(scalar); - priv->value = g_list_copy_deep(value, reinterpret_cast(g_object_ref), NULL); + priv->value = g_list_copy_deep(value, + reinterpret_cast(g_object_ref), + NULL); return scalar; } @@ -2155,18 +2284,20 @@ garrow_struct_scalar_get_value(GArrowStructScalar *scalar) { auto priv = GARROW_STRUCT_SCALAR_GET_PRIVATE(scalar); if (!priv->value) { - auto arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + auto arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); for (auto arrow_element : arrow_scalar->value) { - priv->value = g_list_prepend(priv->value, garrow_scalar_new_raw(&arrow_element)); + priv->value = g_list_prepend(priv->value, + garrow_scalar_new_raw(&arrow_element)); } priv->value = g_list_reverse(priv->value); } return priv->value; } -typedef struct GArrowUnionScalarPrivate_ -{ + +typedef struct GArrowUnionScalarPrivate_ { GArrowScalar *value; } GArrowUnionScalarPrivate; @@ -2174,9 +2305,10 @@ G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowUnionScalar, garrow_union_scalar, GARROW_TYPE_SCALAR) -#define GARROW_UNION_SCALAR_GET_PRIVATE(obj) \ - static_cast( \ - garrow_union_scalar_get_instance_private(GARROW_UNION_SCALAR(obj))) +#define GARROW_UNION_SCALAR_GET_PRIVATE(obj) \ + static_cast( \ + garrow_union_scalar_get_instance_private( \ + GARROW_UNION_SCALAR(obj))) static void garrow_union_scalar_dispose(GObject *object) @@ -2218,7 +2350,7 @@ static void garrow_union_scalar_class_init(GArrowUnionScalarClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_union_scalar_dispose; + gobject_class->dispose = garrow_union_scalar_dispose; gobject_class->set_property = garrow_union_scalar_set_property; GParamSpec *spec; @@ -2229,31 +2361,32 @@ garrow_union_scalar_class_init(GArrowUnionScalarClass *klass) * * Since: 5.0.0 */ - spec = g_param_spec_object( - "value", - "Value", - "The value of the scalar", - GARROW_TYPE_SCALAR, - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("value", + "Value", + "The value of the scalar", + GARROW_TYPE_SCALAR, + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_VALUE, spec); } G_END_DECLS -template +template GArrowScalar * -garrow_union_scalar_new(GArrowDataType *data_type, gint8 type_code, GArrowScalar *value) +garrow_union_scalar_new(GArrowDataType *data_type, + gint8 type_code, + GArrowScalar *value) { auto arrow_data_type = garrow_data_type_get_raw(data_type); auto arrow_value = garrow_scalar_get_raw(value); - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(arrow_value, type_code, arrow_data_type)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(arrow_value, type_code, + arrow_data_type)); auto scalar = garrow_scalar_new_raw(&arrow_scalar, - "scalar", - &arrow_scalar, - "data-type", - data_type, - "value", - value, + "scalar", &arrow_scalar, + "data-type", data_type, + "value", value, NULL); return scalar; } @@ -2270,8 +2403,9 @@ G_BEGIN_DECLS gint8 garrow_union_scalar_get_type_code(GArrowUnionScalar *scalar) { - const auto &arrow_scalar = std::static_pointer_cast( - garrow_scalar_get_raw(GARROW_SCALAR(scalar))); + const auto &arrow_scalar = + std::static_pointer_cast( + garrow_scalar_get_raw(GARROW_SCALAR(scalar))); return arrow_scalar->type_code; } @@ -2290,6 +2424,7 @@ garrow_union_scalar_get_value(GArrowUnionScalar *scalar) return priv->value; } + G_DEFINE_TYPE(GArrowSparseUnionScalar, garrow_sparse_union_scalar, GARROW_TYPE_UNION_SCALAR) @@ -2321,7 +2456,8 @@ garrow_sparse_union_scalar_new(GArrowSparseUnionDataType *data_type, { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); const auto &arrow_type_codes = - std::dynamic_pointer_cast(arrow_data_type)->type_codes(); + std::dynamic_pointer_cast( + arrow_data_type)->type_codes(); auto arrow_value = garrow_scalar_get_raw(value); arrow::SparseUnionScalar::ValueType arrow_field_values; for (int i = 0; i < arrow_data_type->num_fields(); ++i) { @@ -2332,22 +2468,23 @@ garrow_sparse_union_scalar_new(GArrowSparseUnionDataType *data_type, arrow::MakeNullScalar(arrow_data_type->field(i)->type())); } } - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(arrow_field_values, - type_code, - arrow_data_type)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(arrow_field_values, + type_code, + arrow_data_type)); auto scalar = garrow_scalar_new_raw(&arrow_scalar, - "scalar", - &arrow_scalar, - "data-type", - data_type, - "value", - value, + "scalar", &arrow_scalar, + "data-type", data_type, + "value", value, NULL); return GARROW_SPARSE_UNION_SCALAR(scalar); } -G_DEFINE_TYPE(GArrowDenseUnionScalar, garrow_dense_union_scalar, GARROW_TYPE_UNION_SCALAR) + +G_DEFINE_TYPE(GArrowDenseUnionScalar, + garrow_dense_union_scalar, + GARROW_TYPE_UNION_SCALAR) static void garrow_dense_union_scalar_init(GArrowDenseUnionScalar *object) @@ -2376,20 +2513,23 @@ garrow_dense_union_scalar_new(GArrowDenseUnionDataType *data_type, { auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); auto arrow_value = garrow_scalar_get_raw(value); - auto arrow_scalar = std::static_pointer_cast( - std::make_shared(arrow_value, type_code, arrow_data_type)); + auto arrow_scalar = + std::static_pointer_cast( + std::make_shared(arrow_value, + type_code, + arrow_data_type)); auto scalar = garrow_scalar_new_raw(&arrow_scalar, - "scalar", - &arrow_scalar, - "data-type", - data_type, - "value", - value, + "scalar", &arrow_scalar, + "data-type", data_type, + "value", value, NULL); return GARROW_DENSE_UNION_SCALAR(scalar); } -G_DEFINE_TYPE(GArrowExtensionScalar, garrow_extension_scalar, GARROW_TYPE_SCALAR) + +G_DEFINE_TYPE(GArrowExtensionScalar, + garrow_extension_scalar, + GARROW_TYPE_SCALAR) static void garrow_extension_scalar_init(GArrowExtensionScalar *object) @@ -2401,12 +2541,15 @@ garrow_extension_scalar_class_init(GArrowExtensionScalarClass *klass) { } + G_END_DECLS GArrowScalar * garrow_scalar_new_raw(std::shared_ptr *arrow_scalar) { - return garrow_scalar_new_raw(arrow_scalar, "scalar", arrow_scalar, NULL); + return garrow_scalar_new_raw(arrow_scalar, + "scalar", arrow_scalar, + NULL); } GArrowScalar * @@ -2416,7 +2559,9 @@ garrow_scalar_new_raw(std::shared_ptr *arrow_scalar, { va_list args; va_start(args, first_property_name); - auto array = garrow_scalar_new_raw_valist(arrow_scalar, first_property_name, args); + auto array = garrow_scalar_new_raw_valist(arrow_scalar, + first_property_name, + args); va_end(args); return array; } @@ -2520,11 +2665,11 @@ garrow_scalar_new_raw_valist(std::shared_ptr *arrow_scalar, case arrow::Type::type::LARGE_LIST: type = GARROW_TYPE_LARGE_LIST_SCALAR; break; - /* - case arrow::Type::type::FIXED_SIZE_LIST: - type = GARROW_TYPE_FIXED_SIZE_LIST_SCALAR; - break; - */ +/* + case arrow::Type::type::FIXED_SIZE_LIST: + type = GARROW_TYPE_FIXED_SIZE_LIST_SCALAR; + break; +*/ case arrow::Type::type::MAP: type = GARROW_TYPE_MAP_SCALAR; break; @@ -2544,7 +2689,9 @@ garrow_scalar_new_raw_valist(std::shared_ptr *arrow_scalar, type = GARROW_TYPE_SCALAR; break; } - scalar = GARROW_SCALAR(g_object_new_valist(type, first_property_name, args)); + scalar = GARROW_SCALAR(g_object_new_valist(type, + first_property_name, + args)); return scalar; } diff --git a/c_glib/arrow-glib/scalar.h b/c_glib/arrow-glib/scalar.h index 5f9015d29c6..f90160e35e0 100644 --- a/c_glib/arrow-glib/scalar.h +++ b/c_glib/arrow-glib/scalar.h @@ -25,8 +25,11 @@ G_BEGIN_DECLS #define GARROW_TYPE_SCALAR (garrow_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE(GArrowScalar, garrow_scalar, GARROW, SCALAR, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowScalar, + garrow_scalar, + GARROW, + SCALAR, + GObject) struct _GArrowScalarClass { GObjectClass parent_class; @@ -47,7 +50,8 @@ gboolean garrow_scalar_is_valid(GArrowScalar *scalar); GARROW_AVAILABLE_IN_5_0 gboolean -garrow_scalar_equal(GArrowScalar *scalar, GArrowScalar *other_scalar); +garrow_scalar_equal(GArrowScalar *scalar, + GArrowScalar *other_scalar); GARROW_AVAILABLE_IN_5_0 gboolean garrow_scalar_equal_options(GArrowScalar *scalar, @@ -64,10 +68,13 @@ garrow_scalar_cast(GArrowScalar *scalar, GArrowCastOptions *options, GError **error); + #define GARROW_TYPE_NULL_SCALAR (garrow_null_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowNullScalar, garrow_null_scalar, GARROW, NULL_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowNullScalar, + garrow_null_scalar, + GARROW, + NULL_SCALAR, + GArrowScalar) struct _GArrowNullScalarClass { GArrowScalarClass parent_class; @@ -77,10 +84,13 @@ GARROW_AVAILABLE_IN_5_0 GArrowNullScalar * garrow_null_scalar_new(void); + #define GARROW_TYPE_BOOLEAN_SCALAR (garrow_boolean_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowBooleanScalar, garrow_boolean_scalar, GARROW, BOOLEAN_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowBooleanScalar, + garrow_boolean_scalar, + GARROW, + BOOLEAN_SCALAR, + GArrowScalar) struct _GArrowBooleanScalarClass { GArrowScalarClass parent_class; @@ -93,10 +103,13 @@ GARROW_AVAILABLE_IN_5_0 gboolean garrow_boolean_scalar_get_value(GArrowBooleanScalar *scalar); + #define GARROW_TYPE_INT8_SCALAR (garrow_int8_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowInt8Scalar, garrow_int8_scalar, GARROW, INT8_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowInt8Scalar, + garrow_int8_scalar, + GARROW, + INT8_SCALAR, + GArrowScalar) struct _GArrowInt8ScalarClass { GArrowScalarClass parent_class; @@ -109,10 +122,13 @@ GARROW_AVAILABLE_IN_5_0 gint8 garrow_int8_scalar_get_value(GArrowInt8Scalar *scalar); + #define GARROW_TYPE_INT16_SCALAR (garrow_int16_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowInt16Scalar, garrow_int16_scalar, GARROW, INT16_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowInt16Scalar, + garrow_int16_scalar, + GARROW, + INT16_SCALAR, + GArrowScalar) struct _GArrowInt16ScalarClass { GArrowScalarClass parent_class; @@ -125,10 +141,13 @@ GARROW_AVAILABLE_IN_5_0 gint16 garrow_int16_scalar_get_value(GArrowInt16Scalar *scalar); + #define GARROW_TYPE_INT32_SCALAR (garrow_int32_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowInt32Scalar, garrow_int32_scalar, GARROW, INT32_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowInt32Scalar, + garrow_int32_scalar, + GARROW, + INT32_SCALAR, + GArrowScalar) struct _GArrowInt32ScalarClass { GArrowScalarClass parent_class; @@ -141,10 +160,13 @@ GARROW_AVAILABLE_IN_5_0 gint32 garrow_int32_scalar_get_value(GArrowInt32Scalar *scalar); + #define GARROW_TYPE_INT64_SCALAR (garrow_int64_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowInt64Scalar, garrow_int64_scalar, GARROW, INT64_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowInt64Scalar, + garrow_int64_scalar, + GARROW, + INT64_SCALAR, + GArrowScalar) struct _GArrowInt64ScalarClass { GArrowScalarClass parent_class; @@ -157,10 +179,13 @@ GARROW_AVAILABLE_IN_5_0 gint64 garrow_int64_scalar_get_value(GArrowInt64Scalar *scalar); + #define GARROW_TYPE_UINT8_SCALAR (garrow_uint8_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowUInt8Scalar, garrow_uint8_scalar, GARROW, UINT8_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowUInt8Scalar, + garrow_uint8_scalar, + GARROW, + UINT8_SCALAR, + GArrowScalar) struct _GArrowUInt8ScalarClass { GArrowScalarClass parent_class; @@ -173,10 +198,13 @@ GARROW_AVAILABLE_IN_5_0 guint8 garrow_uint8_scalar_get_value(GArrowUInt8Scalar *scalar); + #define GARROW_TYPE_UINT16_SCALAR (garrow_uint16_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowUInt16Scalar, garrow_uint16_scalar, GARROW, UINT16_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowUInt16Scalar, + garrow_uint16_scalar, + GARROW, + UINT16_SCALAR, + GArrowScalar) struct _GArrowUInt16ScalarClass { GArrowScalarClass parent_class; @@ -189,10 +217,13 @@ GARROW_AVAILABLE_IN_5_0 guint16 garrow_uint16_scalar_get_value(GArrowUInt16Scalar *scalar); + #define GARROW_TYPE_UINT32_SCALAR (garrow_uint32_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowUInt32Scalar, garrow_uint32_scalar, GARROW, UINT32_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowUInt32Scalar, + garrow_uint32_scalar, + GARROW, + UINT32_SCALAR, + GArrowScalar) struct _GArrowUInt32ScalarClass { GArrowScalarClass parent_class; @@ -205,10 +236,13 @@ GARROW_AVAILABLE_IN_5_0 guint32 garrow_uint32_scalar_get_value(GArrowUInt32Scalar *scalar); + #define GARROW_TYPE_UINT64_SCALAR (garrow_uint64_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowUInt64Scalar, garrow_uint64_scalar, GARROW, UINT64_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowUInt64Scalar, + garrow_uint64_scalar, + GARROW, + UINT64_SCALAR, + GArrowScalar) struct _GArrowUInt64ScalarClass { GArrowScalarClass parent_class; @@ -221,8 +255,8 @@ GARROW_AVAILABLE_IN_5_0 guint64 garrow_uint64_scalar_get_value(GArrowUInt64Scalar *scalar); + #define GARROW_TYPE_HALF_FLOAT_SCALAR (garrow_half_float_scalar_get_type()) -GARROW_AVAILABLE_IN_11_0 G_DECLARE_DERIVABLE_TYPE(GArrowHalfFloatScalar, garrow_half_float_scalar, GARROW, @@ -240,10 +274,13 @@ GARROW_AVAILABLE_IN_11_0 guint16 garrow_half_float_scalar_get_value(GArrowHalfFloatScalar *scalar); + #define GARROW_TYPE_FLOAT_SCALAR (garrow_float_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowFloatScalar, garrow_float_scalar, GARROW, FLOAT_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowFloatScalar, + garrow_float_scalar, + GARROW, + FLOAT_SCALAR, + GArrowScalar) struct _GArrowFloatScalarClass { GArrowScalarClass parent_class; @@ -256,10 +293,13 @@ GARROW_AVAILABLE_IN_5_0 gfloat garrow_float_scalar_get_value(GArrowFloatScalar *scalar); + #define GARROW_TYPE_DOUBLE_SCALAR (garrow_double_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowDoubleScalar, garrow_double_scalar, GARROW, DOUBLE_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowDoubleScalar, + garrow_double_scalar, + GARROW, + DOUBLE_SCALAR, + GArrowScalar) struct _GArrowDoubleScalarClass { GArrowScalarClass parent_class; @@ -272,8 +312,8 @@ GARROW_AVAILABLE_IN_5_0 gdouble garrow_double_scalar_get_value(GArrowDoubleScalar *scalar); + #define GARROW_TYPE_BASE_BINARY_SCALAR (garrow_base_binary_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 G_DECLARE_DERIVABLE_TYPE(GArrowBaseBinaryScalar, garrow_base_binary_scalar, GARROW, @@ -288,10 +328,13 @@ GARROW_AVAILABLE_IN_5_0 GArrowBuffer * garrow_base_binary_scalar_get_value(GArrowBaseBinaryScalar *scalar); + #define GARROW_TYPE_BINARY_SCALAR (garrow_binary_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowBinaryScalar, garrow_binary_scalar, GARROW, BINARY_SCALAR, GArrowBaseBinaryScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowBinaryScalar, + garrow_binary_scalar, + GARROW, + BINARY_SCALAR, + GArrowBaseBinaryScalar) struct _GArrowBinaryScalarClass { GArrowBaseBinaryScalarClass parent_class; @@ -301,10 +344,13 @@ GARROW_AVAILABLE_IN_5_0 GArrowBinaryScalar * garrow_binary_scalar_new(GArrowBuffer *value); + #define GARROW_TYPE_STRING_SCALAR (garrow_string_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowStringScalar, garrow_string_scalar, GARROW, STRING_SCALAR, GArrowBaseBinaryScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowStringScalar, + garrow_string_scalar, + GARROW, + STRING_SCALAR, + GArrowBaseBinaryScalar) struct _GArrowStringScalarClass { GArrowBaseBinaryScalarClass parent_class; @@ -314,8 +360,8 @@ GARROW_AVAILABLE_IN_5_0 GArrowStringScalar * garrow_string_scalar_new(GArrowBuffer *value); + #define GARROW_TYPE_LARGE_BINARY_SCALAR (garrow_large_binary_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 G_DECLARE_DERIVABLE_TYPE(GArrowLargeBinaryScalar, garrow_large_binary_scalar, GARROW, @@ -330,8 +376,8 @@ GARROW_AVAILABLE_IN_5_0 GArrowLargeBinaryScalar * garrow_large_binary_scalar_new(GArrowBuffer *value); + #define GARROW_TYPE_LARGE_STRING_SCALAR (garrow_large_string_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 G_DECLARE_DERIVABLE_TYPE(GArrowLargeStringScalar, garrow_large_string_scalar, GARROW, @@ -346,8 +392,9 @@ GARROW_AVAILABLE_IN_5_0 GArrowLargeStringScalar * garrow_large_string_scalar_new(GArrowBuffer *value); -#define GARROW_TYPE_FIXED_SIZE_BINARY_SCALAR (garrow_fixed_size_binary_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 + +#define GARROW_TYPE_FIXED_SIZE_BINARY_SCALAR \ + (garrow_fixed_size_binary_scalar_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowFixedSizeBinaryScalar, garrow_fixed_size_binary_scalar, GARROW, @@ -363,10 +410,13 @@ GArrowFixedSizeBinaryScalar * garrow_fixed_size_binary_scalar_new(GArrowFixedSizeBinaryDataType *data_type, GArrowBuffer *value); + #define GARROW_TYPE_DATE32_SCALAR (garrow_date32_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowDate32Scalar, garrow_date32_scalar, GARROW, DATE32_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowDate32Scalar, + garrow_date32_scalar, + GARROW, + DATE32_SCALAR, + GArrowScalar) struct _GArrowDate32ScalarClass { GArrowScalarClass parent_class; @@ -379,10 +429,13 @@ GARROW_AVAILABLE_IN_5_0 gint32 garrow_date32_scalar_get_value(GArrowDate32Scalar *scalar); + #define GARROW_TYPE_DATE64_SCALAR (garrow_date64_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowDate64Scalar, garrow_date64_scalar, GARROW, DATE64_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowDate64Scalar, + garrow_date64_scalar, + GARROW, + DATE64_SCALAR, + GArrowScalar) struct _GArrowDate64ScalarClass { GArrowScalarClass parent_class; @@ -395,10 +448,13 @@ GARROW_AVAILABLE_IN_5_0 gint64 garrow_date64_scalar_get_value(GArrowDate64Scalar *scalar); + #define GARROW_TYPE_TIME32_SCALAR (garrow_time32_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowTime32Scalar, garrow_time32_scalar, GARROW, TIME32_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowTime32Scalar, + garrow_time32_scalar, + GARROW, + TIME32_SCALAR, + GArrowScalar) struct _GArrowTime32ScalarClass { GArrowScalarClass parent_class; @@ -406,15 +462,19 @@ struct _GArrowTime32ScalarClass GARROW_AVAILABLE_IN_5_0 GArrowTime32Scalar * -garrow_time32_scalar_new(GArrowTime32DataType *data_type, gint32 value); +garrow_time32_scalar_new(GArrowTime32DataType *data_type, + gint32 value); GARROW_AVAILABLE_IN_5_0 gint32 garrow_time32_scalar_get_value(GArrowTime32Scalar *scalar); + #define GARROW_TYPE_TIME64_SCALAR (garrow_time64_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowTime64Scalar, garrow_time64_scalar, GARROW, TIME64_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowTime64Scalar, + garrow_time64_scalar, + GARROW, + TIME64_SCALAR, + GArrowScalar) struct _GArrowTime64ScalarClass { GArrowScalarClass parent_class; @@ -422,15 +482,19 @@ struct _GArrowTime64ScalarClass GARROW_AVAILABLE_IN_5_0 GArrowTime64Scalar * -garrow_time64_scalar_new(GArrowTime64DataType *data_type, gint64 value); +garrow_time64_scalar_new(GArrowTime64DataType *data_type, + gint64 value); GARROW_AVAILABLE_IN_5_0 gint64 garrow_time64_scalar_get_value(GArrowTime64Scalar *scalar); + #define GARROW_TYPE_TIMESTAMP_SCALAR (garrow_timestamp_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowTimestampScalar, garrow_timestamp_scalar, GARROW, TIMESTAMP_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowTimestampScalar, + garrow_timestamp_scalar, + GARROW, + TIMESTAMP_SCALAR, + GArrowScalar) struct _GArrowTimestampScalarClass { GArrowScalarClass parent_class; @@ -438,13 +502,15 @@ struct _GArrowTimestampScalarClass GARROW_AVAILABLE_IN_5_0 GArrowTimestampScalar * -garrow_timestamp_scalar_new(GArrowTimestampDataType *data_type, gint64 value); +garrow_timestamp_scalar_new(GArrowTimestampDataType *data_type, + gint64 value); GARROW_AVAILABLE_IN_5_0 gint64 garrow_timestamp_scalar_get_value(GArrowTimestampScalar *scalar); -#define GARROW_TYPE_MONTH_INTERVAL_SCALAR (garrow_month_interval_scalar_get_type()) -GARROW_AVAILABLE_IN_8_0 + +#define GARROW_TYPE_MONTH_INTERVAL_SCALAR \ + (garrow_month_interval_scalar_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowMonthIntervalScalar, garrow_month_interval_scalar, GARROW, @@ -462,8 +528,9 @@ GARROW_AVAILABLE_IN_8_0 gint32 garrow_month_interval_scalar_get_value(GArrowMonthIntervalScalar *scalar); -#define GARROW_TYPE_DAY_TIME_INTERVAL_SCALAR (garrow_day_time_interval_scalar_get_type()) -GARROW_AVAILABLE_IN_8_0 + +#define GARROW_TYPE_DAY_TIME_INTERVAL_SCALAR \ + (garrow_day_time_interval_scalar_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowDayTimeIntervalScalar, garrow_day_time_interval_scalar, GARROW, @@ -481,9 +548,9 @@ GARROW_AVAILABLE_IN_8_0 GArrowDayMillisecond * garrow_day_time_interval_scalar_get_value(GArrowDayTimeIntervalScalar *scalar); -#define GARROW_TYPE_MONTH_DAY_NANO_INTERVAL_SCALAR \ + +#define GARROW_TYPE_MONTH_DAY_NANO_INTERVAL_SCALAR \ (garrow_month_day_nano_interval_scalar_get_type()) -GARROW_AVAILABLE_IN_8_0 G_DECLARE_DERIVABLE_TYPE(GArrowMonthDayNanoIntervalScalar, garrow_month_day_nano_interval_scalar, GARROW, @@ -499,10 +566,11 @@ GArrowMonthDayNanoIntervalScalar * garrow_month_day_nano_interval_scalar_new(GArrowMonthDayNano *value); GARROW_AVAILABLE_IN_8_0 GArrowMonthDayNano * -garrow_month_day_nano_interval_scalar_get_value(GArrowMonthDayNanoIntervalScalar *scalar); +garrow_month_day_nano_interval_scalar_get_value( + GArrowMonthDayNanoIntervalScalar *scalar); + #define GARROW_TYPE_DECIMAL128_SCALAR (garrow_decimal128_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 G_DECLARE_DERIVABLE_TYPE(GArrowDecimal128Scalar, garrow_decimal128_scalar, GARROW, @@ -521,8 +589,8 @@ GARROW_AVAILABLE_IN_5_0 GArrowDecimal128 * garrow_decimal128_scalar_get_value(GArrowDecimal128Scalar *scalar); + #define GARROW_TYPE_DECIMAL256_SCALAR (garrow_decimal256_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 G_DECLARE_DERIVABLE_TYPE(GArrowDecimal256Scalar, garrow_decimal256_scalar, GARROW, @@ -541,10 +609,13 @@ GARROW_AVAILABLE_IN_5_0 GArrowDecimal256 * garrow_decimal256_scalar_get_value(GArrowDecimal256Scalar *scalar); + #define GARROW_TYPE_BASE_LIST_SCALAR (garrow_base_list_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowBaseListScalar, garrow_base_list_scalar, GARROW, BASE_LIST_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowBaseListScalar, + garrow_base_list_scalar, + GARROW, + BASE_LIST_SCALAR, + GArrowScalar) struct _GArrowBaseListScalarClass { GArrowScalarClass parent_class; @@ -555,9 +626,11 @@ GArrowArray * garrow_base_list_scalar_get_value(GArrowBaseListScalar *scalar); #define GARROW_TYPE_LIST_SCALAR (garrow_list_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowListScalar, garrow_list_scalar, GARROW, LIST_SCALAR, GArrowBaseListScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowListScalar, + garrow_list_scalar, + GARROW, + LIST_SCALAR, + GArrowBaseListScalar) struct _GArrowListScalarClass { GArrowBaseListScalarClass parent_class; @@ -567,8 +640,8 @@ GARROW_AVAILABLE_IN_5_0 GArrowListScalar * garrow_list_scalar_new(GArrowListArray *value); + #define GARROW_TYPE_LARGE_LIST_SCALAR (garrow_large_list_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 G_DECLARE_DERIVABLE_TYPE(GArrowLargeListScalar, garrow_large_list_scalar, GARROW, @@ -583,10 +656,13 @@ GARROW_AVAILABLE_IN_5_0 GArrowLargeListScalar * garrow_large_list_scalar_new(GArrowLargeListArray *value); + #define GARROW_TYPE_MAP_SCALAR (garrow_map_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowMapScalar, garrow_map_scalar, GARROW, MAP_SCALAR, GArrowBaseListScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowMapScalar, + garrow_map_scalar, + GARROW, + MAP_SCALAR, + GArrowBaseListScalar) struct _GArrowMapScalarClass { GArrowBaseListScalarClass parent_class; @@ -596,10 +672,13 @@ GARROW_AVAILABLE_IN_5_0 GArrowMapScalar * garrow_map_scalar_new(GArrowStructArray *value); + #define GARROW_TYPE_STRUCT_SCALAR (garrow_struct_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowStructScalar, garrow_struct_scalar, GARROW, STRUCT_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowStructScalar, + garrow_struct_scalar, + GARROW, + STRUCT_SCALAR, + GArrowScalar) struct _GArrowStructScalarClass { GArrowScalarClass parent_class; @@ -607,15 +686,19 @@ struct _GArrowStructScalarClass GARROW_AVAILABLE_IN_5_0 GArrowStructScalar * -garrow_struct_scalar_new(GArrowStructDataType *data_type, GList *value); +garrow_struct_scalar_new(GArrowStructDataType *data_type, + GList *value); GARROW_AVAILABLE_IN_5_0 GList * garrow_struct_scalar_get_value(GArrowStructScalar *scalar); + #define GARROW_TYPE_UNION_SCALAR (garrow_union_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowUnionScalar, garrow_union_scalar, GARROW, UNION_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowUnionScalar, + garrow_union_scalar, + GARROW, + UNION_SCALAR, + GArrowScalar) struct _GArrowUnionScalarClass { GArrowScalarClass parent_class; @@ -628,8 +711,8 @@ GARROW_AVAILABLE_IN_5_0 GArrowScalar * garrow_union_scalar_get_value(GArrowUnionScalar *scalar); + #define GARROW_TYPE_SPARSE_UNION_SCALAR (garrow_sparse_union_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 G_DECLARE_DERIVABLE_TYPE(GArrowSparseUnionScalar, garrow_sparse_union_scalar, GARROW, @@ -646,8 +729,8 @@ garrow_sparse_union_scalar_new(GArrowSparseUnionDataType *data_type, gint8 type_code, GArrowScalar *value); + #define GARROW_TYPE_DENSE_UNION_SCALAR (garrow_dense_union_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 G_DECLARE_DERIVABLE_TYPE(GArrowDenseUnionScalar, garrow_dense_union_scalar, GARROW, @@ -664,10 +747,13 @@ garrow_dense_union_scalar_new(GArrowDenseUnionDataType *data_type, gint8 type_code, GArrowScalar *value); + #define GARROW_TYPE_EXTENSION_SCALAR (garrow_extension_scalar_get_type()) -GARROW_AVAILABLE_IN_5_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowExtensionScalar, garrow_extension_scalar, GARROW, EXTENSION_SCALAR, GArrowScalar) +G_DECLARE_DERIVABLE_TYPE(GArrowExtensionScalar, + garrow_extension_scalar, + GARROW, + EXTENSION_SCALAR, + GArrowScalar) struct _GArrowExtensionScalarClass { GArrowScalarClass parent_class; diff --git a/c_glib/arrow-glib/schema.cpp b/c_glib/arrow-glib/schema.cpp index 994753c3223..666e74e69f0 100644 --- a/c_glib/arrow-glib/schema.cpp +++ b/c_glib/arrow-glib/schema.cpp @@ -35,8 +35,7 @@ G_BEGIN_DECLS * table. It has zero or more #GArrowFields. */ -typedef struct GArrowSchemaPrivate_ -{ +typedef struct GArrowSchemaPrivate_ { std::shared_ptr schema; } GArrowSchemaPrivate; @@ -45,11 +44,14 @@ enum { PROP_SCHEMA }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowSchema, garrow_schema, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowSchema, + garrow_schema, + G_TYPE_OBJECT) -#define GARROW_SCHEMA_GET_PRIVATE(obj) \ - static_cast( \ - garrow_schema_get_instance_private(GARROW_SCHEMA(obj))) +#define GARROW_SCHEMA_GET_PRIVATE(obj) \ + static_cast( \ + garrow_schema_get_instance_private( \ + GARROW_SCHEMA(obj))) static void garrow_schema_finalize(GObject *object) @@ -97,7 +99,7 @@ static void garrow_schema_init(GArrowSchema *object) { auto priv = GARROW_SCHEMA_GET_PRIVATE(object); - new (&priv->schema) std::shared_ptr; + new(&priv->schema) std::shared_ptr; } static void @@ -108,15 +110,15 @@ garrow_schema_class_init(GArrowSchemaClass *klass) gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_schema_finalize; + gobject_class->finalize = garrow_schema_finalize; gobject_class->set_property = garrow_schema_set_property; gobject_class->get_property = garrow_schema_get_property; - spec = g_param_spec_pointer( - "schema", - "Schema", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("schema", + "Schema", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_SCHEMA, spec); } @@ -232,7 +234,8 @@ garrow_schema_get_field(GArrowSchema *schema, guint i) * Returns: (transfer full): The found field or %NULL. */ GArrowField * -garrow_schema_get_field_by_name(GArrowSchema *schema, const gchar *name) +garrow_schema_get_field_by_name(GArrowSchema *schema, + const gchar *name) { const auto arrow_schema = garrow_schema_get_raw(schema); auto arrow_field = arrow_schema->GetFieldByName(std::string(name)); @@ -254,7 +257,8 @@ garrow_schema_get_field_by_name(GArrowSchema *schema, const gchar *name) * Since: 0.15.0 */ gint -garrow_schema_get_field_index(GArrowSchema *schema, const gchar *name) +garrow_schema_get_field_index(GArrowSchema *schema, + const gchar *name) { const auto &arrow_schema = garrow_schema_get_raw(schema); return arrow_schema->GetFieldIndex(std::string(name)); @@ -340,7 +344,10 @@ garrow_schema_to_string_metadata(GArrowSchema *schema, gboolean show_metadata) * Since: 0.10.0 */ GArrowSchema * -garrow_schema_add_field(GArrowSchema *schema, guint i, GArrowField *field, GError **error) +garrow_schema_add_field(GArrowSchema *schema, + guint i, + GArrowField *field, + GError **error) { const auto arrow_schema = garrow_schema_get_raw(schema); const auto arrow_field = garrow_field_get_raw(field); @@ -364,7 +371,9 @@ garrow_schema_add_field(GArrowSchema *schema, guint i, GArrowField *field, GErro * Since: 0.10.0 */ GArrowSchema * -garrow_schema_remove_field(GArrowSchema *schema, guint i, GError **error) +garrow_schema_remove_field(GArrowSchema *schema, + guint i, + GError **error) { const auto arrow_schema = garrow_schema_get_raw(schema); auto maybe_new_schema = arrow_schema->RemoveField(i); @@ -458,7 +467,8 @@ garrow_schema_get_metadata(GArrowSchema *schema) * Since: 0.17.0 */ GArrowSchema * -garrow_schema_with_metadata(GArrowSchema *schema, GHashTable *metadata) +garrow_schema_with_metadata(GArrowSchema *schema, + GHashTable *metadata) { const auto arrow_schema = garrow_schema_get_raw(schema); auto arrow_metadata = garrow_internal_hash_table_to_metadata(metadata); @@ -466,13 +476,15 @@ garrow_schema_with_metadata(GArrowSchema *schema, GHashTable *metadata) return garrow_schema_new_raw(&arrow_new_schema); } + G_END_DECLS GArrowSchema * garrow_schema_new_raw(std::shared_ptr *arrow_schema) { - auto schema = - GARROW_SCHEMA(g_object_new(GARROW_TYPE_SCHEMA, "schema", arrow_schema, NULL)); + auto schema = GARROW_SCHEMA(g_object_new(GARROW_TYPE_SCHEMA, + "schema", arrow_schema, + NULL)); return schema; } diff --git a/c_glib/arrow-glib/schema.h b/c_glib/arrow-glib/schema.h index aab740397b7..25519000bb0 100644 --- a/c_glib/arrow-glib/schema.h +++ b/c_glib/arrow-glib/schema.h @@ -24,8 +24,11 @@ G_BEGIN_DECLS #define GARROW_TYPE_SCHEMA (garrow_schema_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowSchema, garrow_schema, GARROW, SCHEMA, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowSchema, + garrow_schema, + GARROW, + SCHEMA, + GObject) struct _GArrowSchemaClass { GObjectClass parent_class; @@ -33,63 +36,45 @@ struct _GArrowSchemaClass GARROW_AVAILABLE_IN_6_0 GArrowSchema * -garrow_schema_import(gpointer c_abi_schema, GError **error); +garrow_schema_import(gpointer c_abi_schema, + GError **error); -GARROW_AVAILABLE_IN_ALL -GArrowSchema * -garrow_schema_new(GList *fields); +GArrowSchema *garrow_schema_new (GList *fields); GARROW_AVAILABLE_IN_6_0 gpointer -garrow_schema_export(GArrowSchema *schema, GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_schema_equal(GArrowSchema *schema, GArrowSchema *other_schema); - -GARROW_AVAILABLE_IN_ALL -GArrowField * -garrow_schema_get_field(GArrowSchema *schema, guint i); - -GARROW_AVAILABLE_IN_ALL -GArrowField * -garrow_schema_get_field_by_name(GArrowSchema *schema, const gchar *name); +garrow_schema_export(GArrowSchema *schema, + GError **error); + +gboolean garrow_schema_equal (GArrowSchema *schema, + GArrowSchema *other_schema); +GArrowField *garrow_schema_get_field (GArrowSchema *schema, + guint i); +GArrowField *garrow_schema_get_field_by_name(GArrowSchema *schema, + const gchar *name); GARROW_AVAILABLE_IN_0_15 -gint -garrow_schema_get_field_index(GArrowSchema *schema, const gchar *name); - -GARROW_AVAILABLE_IN_ALL -guint -garrow_schema_n_fields(GArrowSchema *schema); +gint garrow_schema_get_field_index (GArrowSchema *schema, + const gchar *name); -GARROW_AVAILABLE_IN_ALL -GList * -garrow_schema_get_fields(GArrowSchema *schema); - -GARROW_AVAILABLE_IN_ALL -gchar * -garrow_schema_to_string(GArrowSchema *schema); +guint garrow_schema_n_fields (GArrowSchema *schema); +GList *garrow_schema_get_fields (GArrowSchema *schema); +gchar *garrow_schema_to_string(GArrowSchema *schema); GARROW_AVAILABLE_IN_0_17 -gchar * -garrow_schema_to_string_metadata(GArrowSchema *schema, gboolean show_metadata); - -GARROW_AVAILABLE_IN_ALL -GArrowSchema * -garrow_schema_add_field(GArrowSchema *schema, - guint i, - GArrowField *field, - GError **error); -GARROW_AVAILABLE_IN_ALL -GArrowSchema * -garrow_schema_remove_field(GArrowSchema *schema, guint i, GError **error); - -GARROW_AVAILABLE_IN_ALL -GArrowSchema * -garrow_schema_replace_field(GArrowSchema *schema, - guint i, - GArrowField *field, - GError **error); +gchar *garrow_schema_to_string_metadata(GArrowSchema *schema, + gboolean show_metadata); + +GArrowSchema *garrow_schema_add_field (GArrowSchema *schema, + guint i, + GArrowField *field, + GError **error); +GArrowSchema *garrow_schema_remove_field (GArrowSchema *schema, + guint i, + GError **error); +GArrowSchema *garrow_schema_replace_field (GArrowSchema *schema, + guint i, + GArrowField *field, + GError **error); GARROW_AVAILABLE_IN_3_0 gboolean @@ -99,6 +84,7 @@ GHashTable * garrow_schema_get_metadata(GArrowSchema *schema); GARROW_AVAILABLE_IN_0_17 GArrowSchema * -garrow_schema_with_metadata(GArrowSchema *schema, GHashTable *metadata); +garrow_schema_with_metadata(GArrowSchema *schema, + GHashTable *metadata); G_END_DECLS diff --git a/c_glib/arrow-glib/schema.hpp b/c_glib/arrow-glib/schema.hpp index ba6c4594954..0d025340844 100644 --- a/c_glib/arrow-glib/schema.hpp +++ b/c_glib/arrow-glib/schema.hpp @@ -23,10 +23,5 @@ #include -GARROW_EXTERN -GArrowSchema * -garrow_schema_new_raw(std::shared_ptr *arrow_schema); - -GARROW_EXTERN -std::shared_ptr -garrow_schema_get_raw(GArrowSchema *schema); +GArrowSchema *garrow_schema_new_raw(std::shared_ptr *arrow_schema); +std::shared_ptr garrow_schema_get_raw(GArrowSchema *schema); diff --git a/c_glib/arrow-glib/table-builder.cpp b/c_glib/arrow-glib/table-builder.cpp index 04b17e44c70..5b423f8e491 100644 --- a/c_glib/arrow-glib/table-builder.cpp +++ b/c_glib/arrow-glib/table-builder.cpp @@ -35,8 +35,7 @@ G_BEGIN_DECLS * new #GArrowRecordBatch. */ -typedef struct GArrowRecordBatchBuilderPrivate_ -{ +typedef struct GArrowRecordBatchBuilderPrivate_ { arrow::RecordBatchBuilder *record_batch_builder; GPtrArray *column_builders; } GArrowRecordBatchBuilderPrivate; @@ -50,9 +49,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowRecordBatchBuilder, garrow_record_batch_builder, G_TYPE_OBJECT) -#define GARROW_RECORD_BATCH_BUILDER_GET_PRIVATE(object) \ - static_cast( \ - garrow_record_batch_builder_get_instance_private( \ +#define GARROW_RECORD_BATCH_BUILDER_GET_PRIVATE(object) \ + static_cast( \ + garrow_record_batch_builder_get_instance_private( \ GARROW_RECORD_BATCH_BUILDER(object))) static void @@ -124,18 +123,20 @@ garrow_record_batch_builder_class_init(GArrowRecordBatchBuilderClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->constructed = garrow_record_batch_builder_constructed; - gobject_class->finalize = garrow_record_batch_builder_finalize; + gobject_class->constructed = garrow_record_batch_builder_constructed; + gobject_class->finalize = garrow_record_batch_builder_finalize; gobject_class->set_property = garrow_record_batch_builder_set_property; gobject_class->get_property = garrow_record_batch_builder_get_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "record-batch-builder", - "RecordBatch builder", - "The raw arrow::RecordBatchBuilder *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property(gobject_class, PROP_RECORD_BATCH_BUILDER, spec); + spec = g_param_spec_pointer("record-batch-builder", + "RecordBatch builder", + "The raw arrow::RecordBatchBuilder *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property(gobject_class, + PROP_RECORD_BATCH_BUILDER, + spec); } /** @@ -156,8 +157,7 @@ garrow_record_batch_builder_new(GArrowSchema *schema, GError **error) auto builder_result = arrow::RecordBatchBuilder::Make(arrow_schema, memory_pool); if (garrow::check(error, builder_result, "[record-batch-builder][new]")) { - std::unique_ptr arrow_builder = - std::move(builder_result).ValueOrDie(); + std::unique_ptr arrow_builder = std::move(builder_result).ValueOrDie(); return garrow_record_batch_builder_new_raw(arrow_builder.release()); } else { return NULL; @@ -257,7 +257,8 @@ garrow_record_batch_builder_get_n_columns(GArrowRecordBatchBuilder *builder) * Use garrow_record_batch_builder_get_column_builder() instead. */ GArrowArrayBuilder * -garrow_record_batch_builder_get_field(GArrowRecordBatchBuilder *builder, gint i) +garrow_record_batch_builder_get_field(GArrowRecordBatchBuilder *builder, + gint i) { return garrow_record_batch_builder_get_column_builder(builder, i); } @@ -274,7 +275,8 @@ garrow_record_batch_builder_get_field(GArrowRecordBatchBuilder *builder, gint i) * Since: 0.13.0 */ GArrowArrayBuilder * -garrow_record_batch_builder_get_column_builder(GArrowRecordBatchBuilder *builder, gint i) +garrow_record_batch_builder_get_column_builder(GArrowRecordBatchBuilder *builder, + gint i) { auto priv = GARROW_RECORD_BATCH_BUILDER_GET_PRIVATE(builder); if (i < 0) { @@ -301,7 +303,8 @@ garrow_record_batch_builder_get_column_builder(GArrowRecordBatchBuilder *builder * Since: 0.8.0 */ GArrowRecordBatch * -garrow_record_batch_builder_flush(GArrowRecordBatchBuilder *builder, GError **error) +garrow_record_batch_builder_flush(GArrowRecordBatchBuilder *builder, + GError **error) { auto arrow_builder = garrow_record_batch_builder_get_raw(builder); auto batch_result = arrow_builder->Flush(); @@ -320,8 +323,7 @@ GArrowRecordBatchBuilder * garrow_record_batch_builder_new_raw(arrow::RecordBatchBuilder *arrow_builder) { auto builder = g_object_new(GARROW_TYPE_RECORD_BATCH_BUILDER, - "record-batch-builder", - arrow_builder, + "record-batch-builder", arrow_builder, NULL); return GARROW_RECORD_BATCH_BUILDER(builder); } diff --git a/c_glib/arrow-glib/table-builder.h b/c_glib/arrow-glib/table-builder.h index 6fad1ae79a4..a76793953c5 100644 --- a/c_glib/arrow-glib/table-builder.h +++ b/c_glib/arrow-glib/table-builder.h @@ -20,13 +20,13 @@ #pragma once #include +#include #include #include G_BEGIN_DECLS #define GARROW_TYPE_RECORD_BATCH_BUILDER (garrow_record_batch_builder_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowRecordBatchBuilder, garrow_record_batch_builder, GARROW, @@ -37,46 +37,33 @@ struct _GArrowRecordBatchBuilderClass GObjectClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowRecordBatchBuilder * -garrow_record_batch_builder_new(GArrowSchema *schema, GError **error); +GArrowRecordBatchBuilder *garrow_record_batch_builder_new(GArrowSchema *schema, + GError **error); -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_record_batch_builder_get_initial_capacity(GArrowRecordBatchBuilder *builder); - -GARROW_AVAILABLE_IN_ALL -void -garrow_record_batch_builder_set_initial_capacity(GArrowRecordBatchBuilder *builder, - gint64 capacity); -GARROW_AVAILABLE_IN_ALL -GArrowSchema * -garrow_record_batch_builder_get_schema(GArrowRecordBatchBuilder *builder); +gint64 garrow_record_batch_builder_get_initial_capacity(GArrowRecordBatchBuilder *builder); +void garrow_record_batch_builder_set_initial_capacity(GArrowRecordBatchBuilder *builder, + gint64 capacity); +GArrowSchema *garrow_record_batch_builder_get_schema(GArrowRecordBatchBuilder *builder); #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_13_FOR(garrow_record_batch_builder_get_n_columns) -gint -garrow_record_batch_builder_get_n_fields(GArrowRecordBatchBuilder *builder); +gint garrow_record_batch_builder_get_n_fields(GArrowRecordBatchBuilder *builder); #endif - GARROW_AVAILABLE_IN_0_13 gint garrow_record_batch_builder_get_n_columns(GArrowRecordBatchBuilder *builder); - #ifndef GARROW_DISABLE_DEPRECATED -GARROW_AVAILABLE_IN_ALL GARROW_DEPRECATED_IN_0_13_FOR(garrow_record_batch_builder_get_column_builder) -GArrowArrayBuilder * -garrow_record_batch_builder_get_field(GArrowRecordBatchBuilder *builder, gint i); +GArrowArrayBuilder *garrow_record_batch_builder_get_field(GArrowRecordBatchBuilder *builder, + gint i); #endif - GARROW_AVAILABLE_IN_0_13 GArrowArrayBuilder * -garrow_record_batch_builder_get_column_builder(GArrowRecordBatchBuilder *builder, gint i); +garrow_record_batch_builder_get_column_builder(GArrowRecordBatchBuilder *builder, + gint i); + +GArrowRecordBatch *garrow_record_batch_builder_flush(GArrowRecordBatchBuilder *builder, + GError **error); -GARROW_AVAILABLE_IN_ALL -GArrowRecordBatch * -garrow_record_batch_builder_flush(GArrowRecordBatchBuilder *builder, GError **error); G_END_DECLS diff --git a/c_glib/arrow-glib/table-builder.hpp b/c_glib/arrow-glib/table-builder.hpp index 4f4e69b1472..cf93ded9b4b 100644 --- a/c_glib/arrow-glib/table-builder.hpp +++ b/c_glib/arrow-glib/table-builder.hpp @@ -23,7 +23,5 @@ #include -GArrowRecordBatchBuilder * -garrow_record_batch_builder_new_raw(arrow::RecordBatchBuilder *arrow_builder); -arrow::RecordBatchBuilder * -garrow_record_batch_builder_get_raw(GArrowRecordBatchBuilder *builder); +GArrowRecordBatchBuilder *garrow_record_batch_builder_new_raw(arrow::RecordBatchBuilder *arrow_builder); +arrow::RecordBatchBuilder *garrow_record_batch_builder_get_raw(GArrowRecordBatchBuilder *builder); diff --git a/c_glib/arrow-glib/table.cpp b/c_glib/arrow-glib/table.cpp index f8569366685..5367f267325 100644 --- a/c_glib/arrow-glib/table.cpp +++ b/c_glib/arrow-glib/table.cpp @@ -49,8 +49,7 @@ G_BEGIN_DECLS * Feather data. */ -typedef struct GArrowTableConcatenateOptionsPrivate_ -{ +typedef struct GArrowTableConcatenateOptionsPrivate_ { arrow::ConcatenateTablesOptions options; } GArrowTableConcatenateOptionsPrivate; @@ -63,9 +62,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowTableConcatenateOptions, garrow_table_concatenate_options, G_TYPE_OBJECT) -#define GARROW_TABLE_CONCATENATE_OPTIONS_GET_PRIVATE(obj) \ - static_cast( \ - garrow_table_concatenate_options_get_instance_private( \ +#define GARROW_TABLE_CONCATENATE_OPTIONS_GET_PRIVATE(obj) \ + static_cast( \ + garrow_table_concatenate_options_get_instance_private( \ GARROW_TABLE_CONCATENATE_OPTIONS(obj))) static void @@ -89,7 +88,8 @@ garrow_table_concatenate_options_set_property(GObject *object, priv->options.unify_schemas = g_value_get_boolean(value); break; case PROP_PROMOTE_NULLABILITY: - priv->options.field_merge_options.promote_nullability = g_value_get_boolean(value); + priv->options.field_merge_options.promote_nullability = + g_value_get_boolean(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -110,7 +110,8 @@ garrow_table_concatenate_options_get_property(GObject *object, g_value_set_boolean(value, priv->options.unify_schemas); break; case PROP_PROMOTE_NULLABILITY: - g_value_set_boolean(value, priv->options.field_merge_options.promote_nullability); + g_value_set_boolean(value, + priv->options.field_merge_options.promote_nullability); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -122,14 +123,15 @@ static void garrow_table_concatenate_options_init(GArrowTableConcatenateOptions *object) { auto priv = GARROW_TABLE_CONCATENATE_OPTIONS_GET_PRIVATE(object); - new (&(priv->options)) arrow::ConcatenateTablesOptions; + new(&(priv->options)) arrow::ConcatenateTablesOptions; } static void -garrow_table_concatenate_options_class_init(GArrowTableConcatenateOptionsClass *klass) +garrow_table_concatenate_options_class_init( + GArrowTableConcatenateOptionsClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_table_concatenate_options_finalize; + gobject_class->finalize = garrow_table_concatenate_options_finalize; gobject_class->set_property = garrow_table_concatenate_options_set_property; gobject_class->get_property = garrow_table_concatenate_options_get_property; @@ -188,11 +190,12 @@ GArrowTableConcatenateOptions * garrow_table_concatenate_options_new(void) { return GARROW_TABLE_CONCATENATE_OPTIONS( - g_object_new(GARROW_TYPE_TABLE_CONCATENATE_OPTIONS, NULL)); + g_object_new(GARROW_TYPE_TABLE_CONCATENATE_OPTIONS, + NULL)); } -typedef struct GArrowTablePrivate_ -{ + +typedef struct GArrowTablePrivate_ { std::shared_ptr table; } GArrowTablePrivate; @@ -200,10 +203,14 @@ enum { PROP_TABLE = 1, }; -G_DEFINE_TYPE_WITH_PRIVATE(GArrowTable, garrow_table, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GArrowTable, + garrow_table, + G_TYPE_OBJECT) -#define GARROW_TABLE_GET_PRIVATE(obj) \ - static_cast(garrow_table_get_instance_private(GARROW_TABLE(obj))) +#define GARROW_TABLE_GET_PRIVATE(obj) \ + static_cast( \ + garrow_table_get_instance_private( \ + GARROW_TABLE(obj))) static void garrow_table_finalize(GObject *object) @@ -251,7 +258,7 @@ static void garrow_table_init(GArrowTable *object) { auto priv = GARROW_TABLE_GET_PRIVATE(object); - new (&priv->table) std::shared_ptr; + new(&priv->table) std::shared_ptr; } static void @@ -262,15 +269,15 @@ garrow_table_class_init(GArrowTableClass *klass) gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_table_finalize; + gobject_class->finalize = garrow_table_finalize; gobject_class->set_property = garrow_table_set_property; gobject_class->get_property = garrow_table_get_property; - spec = g_param_spec_pointer( - "table", - "Table", - "The raw std::shared_ptr *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("table", + "Table", + "The raw std::shared_ptr *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_TABLE, spec); } @@ -287,7 +294,9 @@ garrow_table_class_init(GArrowTableClass *klass) * Since: 0.12.0 */ GArrowTable * -garrow_table_new_values(GArrowSchema *schema, GList *values, GError **error) +garrow_table_new_values(GArrowSchema *schema, + GList *values, + GError **error) { const auto context = "[table][new][values]"; auto arrow_schema = garrow_schema_get_raw(schema); @@ -338,7 +347,8 @@ garrow_table_new_values(GArrowSchema *schema, GList *values, GError **error) } if (!arrow_chunked_arrays.empty()) { - auto arrow_table = arrow::Table::Make(arrow_schema, std::move(arrow_chunked_arrays)); + auto arrow_table = arrow::Table::Make(arrow_schema, + std::move(arrow_chunked_arrays)); auto status = arrow_table->Validate(); if (garrow_error_check(error, status, context)) { return garrow_table_new_raw(&arrow_table); @@ -354,8 +364,8 @@ garrow_table_new_values(GArrowSchema *schema, GList *values, GError **error) return NULL; } } else { - auto maybe_table = - arrow::Table::FromRecordBatches(arrow_schema, std::move(arrow_record_batches)); + auto maybe_table = arrow::Table::FromRecordBatches( + arrow_schema, std::move(arrow_record_batches)); if (garrow::check(error, maybe_table, context)) { return garrow_table_new_raw(&(*maybe_table)); } else { @@ -455,7 +465,8 @@ garrow_table_new_record_batches(GArrowSchema *schema, arrow_record_batches.push_back(arrow_record_batch); } - auto maybe_table = arrow::Table::FromRecordBatches(arrow_schema, arrow_record_batches); + auto maybe_table = arrow::Table::FromRecordBatches(arrow_schema, + arrow_record_batches); if (garrow::check(error, maybe_table, "[table][new][record-batches]")) { return garrow_table_new_raw(&(*maybe_table)); } else { @@ -528,7 +539,8 @@ garrow_table_get_schema(GArrowTable *table) * Since: 0.15.0 */ GArrowChunkedArray * -garrow_table_get_column_data(GArrowTable *table, gint i) +garrow_table_get_column_data(GArrowTable *table, + gint i) { const auto &arrow_table = garrow_table_get_raw(table); if (!garrow_internal_index_adjust(i, arrow_table->num_columns())) { @@ -587,7 +599,9 @@ garrow_table_add_column(GArrowTable *table, const auto arrow_table = garrow_table_get_raw(table); const auto arrow_field = garrow_field_get_raw(field); const auto arrow_chunked_array = garrow_chunked_array_get_raw(chunked_array); - auto maybe_new_table = arrow_table->AddColumn(i, arrow_field, arrow_chunked_array); + auto maybe_new_table = arrow_table->AddColumn(i, + arrow_field, + arrow_chunked_array); if (garrow::check(error, maybe_new_table, "[table][add-column]")) { return garrow_table_new_raw(&(*maybe_new_table)); } else { @@ -607,7 +621,9 @@ garrow_table_add_column(GArrowTable *table, * Since: 0.3.0 */ GArrowTable * -garrow_table_remove_column(GArrowTable *table, guint i, GError **error) +garrow_table_remove_column(GArrowTable *table, + guint i, + GError **error) { const auto arrow_table = garrow_table_get_raw(table); auto maybe_new_table = arrow_table->RemoveColumn(i); @@ -642,7 +658,9 @@ garrow_table_replace_column(GArrowTable *table, const auto arrow_table = garrow_table_get_raw(table); const auto arrow_field = garrow_field_get_raw(field); const auto arrow_chunked_array = garrow_chunked_array_get_raw(chunked_array); - auto maybe_new_table = arrow_table->SetColumn(i, arrow_field, arrow_chunked_array); + auto maybe_new_table = arrow_table->SetColumn(i, + arrow_field, + arrow_chunked_array); if (garrow::check(error, maybe_new_table, "[table][replace-column]")) { return garrow_table_new_raw(&(*maybe_new_table)); } else { @@ -688,7 +706,7 @@ garrow_table_concatenate(GArrowTable *table, GError **error) { auto arrow_table = garrow_table_get_raw(table); - std::vector> arrow_tables = {arrow_table}; + std::vector> arrow_tables = { arrow_table }; for (auto node = other_tables; node; node = g_list_next(node)) { auto arrow_other_table = garrow_table_get_raw(GARROW_TABLE(node->data)); arrow_tables.push_back(arrow_other_table); @@ -700,7 +718,9 @@ garrow_table_concatenate(GArrowTable *table, } auto arrow_concatenated_table_result = arrow::ConcatenateTables(arrow_tables, arrow_options); - if (garrow::check(error, arrow_concatenated_table_result, "[table][concatenate]")) { + if (garrow::check(error, + arrow_concatenated_table_result, + "[table][concatenate]")) { auto arrow_concatenated_table = std::move(*arrow_concatenated_table_result); return garrow_table_new_raw(&arrow_concatenated_table); } else { @@ -723,7 +743,9 @@ garrow_table_concatenate(GArrowTable *table, * Since: 0.14.0 */ GArrowTable * -garrow_table_slice(GArrowTable *table, gint64 offset, gint64 length) +garrow_table_slice(GArrowTable *table, + gint64 offset, + gint64 length) { const auto arrow_table = garrow_table_get_raw(table); if (offset < 0) { @@ -744,7 +766,8 @@ garrow_table_slice(GArrowTable *table, gint64 offset, gint64 length) * Since: 0.16.0 */ GArrowTable * -garrow_table_combine_chunks(GArrowTable *table, GError **error) +garrow_table_combine_chunks(GArrowTable *table, + GError **error) { const auto arrow_table = garrow_table_get_raw(table); @@ -756,8 +779,8 @@ garrow_table_combine_chunks(GArrowTable *table, GError **error) } } -typedef struct GArrowFeatherWritePropertiesPrivate_ -{ + +typedef struct GArrowFeatherWritePropertiesPrivate_ { arrow::ipc::feather::WriteProperties properties; } GArrowFeatherWritePropertiesPrivate; @@ -772,9 +795,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowFeatherWriteProperties, garrow_feather_write_properties, G_TYPE_OBJECT) -#define GARROW_FEATHER_WRITE_PROPERTIES_GET_PRIVATE(obj) \ - static_cast( \ - garrow_feather_write_properties_get_instance_private( \ +#define GARROW_FEATHER_WRITE_PROPERTIES_GET_PRIVATE(obj) \ + static_cast( \ + garrow_feather_write_properties_get_instance_private( \ GARROW_FEATHER_WRITE_PROPERTIES(obj))) static void @@ -828,7 +851,7 @@ static void garrow_feather_write_properties_init(GArrowFeatherWriteProperties *object) { auto priv = GARROW_FEATHER_WRITE_PROPERTIES_GET_PRIVATE(object); - new (&priv->properties) arrow::ipc::feather::WriteProperties; + new(&priv->properties) arrow::ipc::feather::WriteProperties; priv->properties = arrow::ipc::feather::WriteProperties::Defaults(); } @@ -908,8 +931,9 @@ garrow_table_write_as_feather(GArrowTable *table, arrow::Status status; if (properties) { auto arrow_properties = garrow_feather_write_properties_get_raw(properties); - status = - arrow::ipc::feather::WriteTable(*arrow_table, arrow_sink.get(), *arrow_properties); + status = arrow::ipc::feather::WriteTable(*arrow_table, + arrow_sink.get(), + *arrow_properties); } else { status = arrow::ipc::feather::WriteTable(*arrow_table, arrow_sink.get()); } @@ -921,7 +945,9 @@ G_END_DECLS GArrowTable * garrow_table_new_raw(std::shared_ptr *arrow_table) { - auto table = GARROW_TABLE(g_object_new(GARROW_TYPE_TABLE, "table", arrow_table, NULL)); + auto table = GARROW_TABLE(g_object_new(GARROW_TYPE_TABLE, + "table", arrow_table, + NULL)); return table; } diff --git a/c_glib/arrow-glib/table.h b/c_glib/arrow-glib/table.h index d790e413df5..05a95e91ac4 100644 --- a/c_glib/arrow-glib/table.h +++ b/c_glib/arrow-glib/table.h @@ -27,9 +27,8 @@ G_BEGIN_DECLS -#define GARROW_TYPE_TABLE_CONCATENATE_OPTIONS \ +#define GARROW_TYPE_TABLE_CONCATENATE_OPTIONS \ (garrow_table_concatenate_options_get_type()) -GARROW_AVAILABLE_IN_ALL G_DECLARE_DERIVABLE_TYPE(GArrowTableConcatenateOptions, garrow_table_concatenate_options, GARROW, @@ -44,9 +43,13 @@ GARROW_AVAILABLE_IN_6_0 GArrowTableConcatenateOptions * garrow_table_concatenate_options_new(void); + #define GARROW_TYPE_TABLE (garrow_table_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowTable, garrow_table, GARROW, TABLE, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowTable, + garrow_table, + GARROW, + TABLE, + GObject) struct _GArrowTableClass { GObjectClass parent_class; @@ -54,22 +57,21 @@ struct _GArrowTableClass GARROW_AVAILABLE_IN_0_12 GArrowTable * -garrow_table_new_values(GArrowSchema *schema, GList *values, GError **error); - +garrow_table_new_values(GArrowSchema *schema, + GList *values, + GError **error); GARROW_AVAILABLE_IN_0_15 GArrowTable * garrow_table_new_chunked_arrays(GArrowSchema *schema, GArrowChunkedArray **chunked_arrays, gsize n_chunked_arrays, GError **error); - GARROW_AVAILABLE_IN_0_12 GArrowTable * garrow_table_new_arrays(GArrowSchema *schema, GArrowArray **arrays, gsize n_arrays, GError **error); - GARROW_AVAILABLE_IN_0_12 GArrowTable * garrow_table_new_record_batches(GArrowSchema *schema, @@ -77,73 +79,59 @@ garrow_table_new_record_batches(GArrowSchema *schema, gsize n_record_batches, GError **error); -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_table_equal(GArrowTable *table, GArrowTable *other_table); - +gboolean garrow_table_equal (GArrowTable *table, + GArrowTable *other_table); GARROW_AVAILABLE_IN_0_17 gboolean garrow_table_equal_metadata(GArrowTable *table, GArrowTable *other_table, gboolean check_metadata); -GARROW_AVAILABLE_IN_ALL -GArrowSchema * -garrow_table_get_schema(GArrowTable *table); - +GArrowSchema *garrow_table_get_schema (GArrowTable *table); GARROW_AVAILABLE_IN_0_15 GArrowChunkedArray * -garrow_table_get_column_data(GArrowTable *table, gint i); +garrow_table_get_column_data(GArrowTable *table, + gint i); -GARROW_AVAILABLE_IN_ALL -guint -garrow_table_get_n_columns(GArrowTable *table); - -GARROW_AVAILABLE_IN_ALL -guint64 -garrow_table_get_n_rows(GArrowTable *table); +guint garrow_table_get_n_columns (GArrowTable *table); +guint64 garrow_table_get_n_rows (GArrowTable *table); GARROW_AVAILABLE_IN_0_15 -GArrowTable * -garrow_table_add_column(GArrowTable *table, - guint i, - GArrowField *field, - GArrowChunkedArray *chunked_array, - GError **error); - -GARROW_AVAILABLE_IN_ALL -GArrowTable * -garrow_table_remove_column(GArrowTable *table, guint i, GError **error); - +GArrowTable *garrow_table_add_column (GArrowTable *table, + guint i, + GArrowField *field, + GArrowChunkedArray *chunked_array, + GError **error); +GArrowTable *garrow_table_remove_column (GArrowTable *table, + guint i, + GError **error); GARROW_AVAILABLE_IN_0_15 -GArrowTable * -garrow_table_replace_column(GArrowTable *table, - guint i, - GArrowField *field, - GArrowChunkedArray *chunked_array, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gchar * -garrow_table_to_string(GArrowTable *table, GError **error); - +GArrowTable *garrow_table_replace_column(GArrowTable *table, + guint i, + GArrowField *field, + GArrowChunkedArray *chunked_array, + GError **error); +gchar *garrow_table_to_string (GArrowTable *table, + GError **error); GARROW_AVAILABLE_IN_0_14 GArrowTable * garrow_table_concatenate(GArrowTable *table, GList *other_tables, GArrowTableConcatenateOptions *options, GError **error); - GARROW_AVAILABLE_IN_0_14 GArrowTable * -garrow_table_slice(GArrowTable *table, gint64 offset, gint64 length); - +garrow_table_slice(GArrowTable *table, + gint64 offset, + gint64 length); GARROW_AVAILABLE_IN_0_16 GArrowTable * -garrow_table_combine_chunks(GArrowTable *table, GError **error); +garrow_table_combine_chunks(GArrowTable *table, + GError **error); -#define GARROW_TYPE_FEATHER_WRITE_PROPERTIES (garrow_feather_write_properties_get_type()) -GARROW_AVAILABLE_IN_0_17 + +#define GARROW_TYPE_FEATHER_WRITE_PROPERTIES \ + (garrow_feather_write_properties_get_type()) G_DECLARE_DERIVABLE_TYPE(GArrowFeatherWriteProperties, garrow_feather_write_properties, GARROW, diff --git a/c_glib/arrow-glib/table.hpp b/c_glib/arrow-glib/table.hpp index 79fc97471a4..dc972d80cff 100644 --- a/c_glib/arrow-glib/table.hpp +++ b/c_glib/arrow-glib/table.hpp @@ -24,14 +24,8 @@ #include -GARROW_EXTERN -GArrowTable * -garrow_table_new_raw(std::shared_ptr *arrow_table); +GArrowTable *garrow_table_new_raw(std::shared_ptr *arrow_table); +std::shared_ptr garrow_table_get_raw(GArrowTable *table); -GARROW_EXTERN -std::shared_ptr -garrow_table_get_raw(GArrowTable *table); - -GARROW_EXTERN arrow::ipc::feather::WriteProperties * garrow_feather_write_properties_get_raw(GArrowFeatherWriteProperties *properties); diff --git a/c_glib/arrow-glib/tensor.cpp b/c_glib/arrow-glib/tensor.cpp index 0cee235de37..ddbf1189b91 100644 --- a/c_glib/arrow-glib/tensor.cpp +++ b/c_glib/arrow-glib/tensor.cpp @@ -34,8 +34,7 @@ G_BEGIN_DECLS * Since: 0.3.0 */ -typedef struct GArrowTensorPrivate_ -{ +typedef struct GArrowTensorPrivate_ { std::shared_ptr tensor; GArrowBuffer *buffer; } GArrowTensorPrivate; @@ -48,9 +47,10 @@ enum { G_DEFINE_TYPE_WITH_PRIVATE(GArrowTensor, garrow_tensor, G_TYPE_OBJECT) -#define GARROW_TENSOR_GET_PRIVATE(obj) \ - static_cast( \ - garrow_tensor_get_instance_private(GARROW_TENSOR(obj))) +#define GARROW_TENSOR_GET_PRIVATE(obj) \ + static_cast( \ + garrow_tensor_get_instance_private( \ + GARROW_TENSOR(obj))) static void garrow_tensor_dispose(GObject *object) @@ -119,7 +119,7 @@ static void garrow_tensor_init(GArrowTensor *object) { auto priv = GARROW_TENSOR_GET_PRIVATE(object); - new (&priv->tensor) std::shared_ptr; + new(&priv->tensor) std::shared_ptr; } static void @@ -129,24 +129,24 @@ garrow_tensor_class_init(GArrowTensorClass *klass) auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = garrow_tensor_dispose; - gobject_class->finalize = garrow_tensor_finalize; + gobject_class->dispose = garrow_tensor_dispose; + gobject_class->finalize = garrow_tensor_finalize; gobject_class->set_property = garrow_tensor_set_property; gobject_class->get_property = garrow_tensor_get_property; - spec = g_param_spec_pointer( - "tensor", - "Tensor", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("tensor", + "Tensor", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_TENSOR, spec); - spec = g_param_spec_object( - "buffer", - "Buffer", - "The data", - GARROW_TYPE_BUFFER, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("buffer", + "Buffer", + "The data", + GARROW_TYPE_BUFFER, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_BUFFER, spec); } @@ -192,11 +192,12 @@ garrow_tensor_new(GArrowDataType *data_type, for (gsize i = 0; i < n_dimension_names; ++i) { arrow_dimension_names.push_back(dimension_names[i]); } - auto arrow_tensor = std::make_shared(arrow_data_type, - arrow_data, - arrow_shape, - arrow_strides, - arrow_dimension_names); + auto arrow_tensor = + std::make_shared(arrow_data_type, + arrow_data, + arrow_shape, + arrow_strides, + arrow_dimension_names); auto tensor = garrow_tensor_new_raw_buffer(&arrow_tensor, data); return tensor; } @@ -291,7 +292,8 @@ garrow_tensor_get_shape(GArrowTensor *tensor, gint *n_dimensions) auto arrow_tensor = garrow_tensor_get_raw(tensor); auto arrow_shape = arrow_tensor->shape(); auto n_dimensions_raw = arrow_shape.size(); - auto shape = static_cast(g_malloc_n(sizeof(gint64), n_dimensions_raw)); + auto shape = + static_cast(g_malloc_n(sizeof(gint64), n_dimensions_raw)); for (gsize i = 0; i < n_dimensions_raw; ++i) { shape[i] = arrow_shape[i]; } @@ -317,7 +319,8 @@ garrow_tensor_get_strides(GArrowTensor *tensor, gint *n_strides) auto arrow_tensor = garrow_tensor_get_raw(tensor); auto arrow_strides = arrow_tensor->strides(); auto n_strides_raw = arrow_strides.size(); - auto strides = static_cast(g_malloc_n(sizeof(gint64), n_strides_raw)); + auto strides = + static_cast(g_malloc_n(sizeof(gint64), n_strides_raw)); for (gsize i = 0; i < n_strides_raw; ++i) { strides[i] = arrow_strides[i]; } @@ -446,8 +449,10 @@ GArrowTensor * garrow_tensor_new_raw_buffer(std::shared_ptr *arrow_tensor, GArrowBuffer *buffer) { - auto tensor = GARROW_TENSOR( - g_object_new(GARROW_TYPE_TENSOR, "tensor", arrow_tensor, "buffer", buffer, NULL)); + auto tensor = GARROW_TENSOR(g_object_new(GARROW_TYPE_TENSOR, + "tensor", arrow_tensor, + "buffer", buffer, + NULL)); return tensor; } diff --git a/c_glib/arrow-glib/tensor.h b/c_glib/arrow-glib/tensor.h index 5971c3af126..daa3a890541 100644 --- a/c_glib/arrow-glib/tensor.h +++ b/c_glib/arrow-glib/tensor.h @@ -25,73 +25,40 @@ G_BEGIN_DECLS #define GARROW_TYPE_TENSOR (garrow_tensor_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowTensor, garrow_tensor, GARROW, TENSOR, GObject) +G_DECLARE_DERIVABLE_TYPE(GArrowTensor, + garrow_tensor, + GARROW, + TENSOR, + GObject) struct _GArrowTensorClass { GObjectClass parent_class; }; -GARROW_AVAILABLE_IN_ALL -GArrowTensor * -garrow_tensor_new(GArrowDataType *data_type, - GArrowBuffer *data, - gint64 *shape, - gsize n_dimensions, - gint64 *strides, - gsize n_strides, - gchar **dimension_names, - gsize n_dimension_names); -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_tensor_equal(GArrowTensor *tensor, GArrowTensor *other_tensor); - -GARROW_AVAILABLE_IN_ALL -GArrowDataType * -garrow_tensor_get_value_data_type(GArrowTensor *tensor); - -GARROW_AVAILABLE_IN_ALL -GArrowType -garrow_tensor_get_value_type(GArrowTensor *tensor); - -GARROW_AVAILABLE_IN_ALL -GArrowBuffer * -garrow_tensor_get_buffer(GArrowTensor *tensor); - -GARROW_AVAILABLE_IN_ALL -gint64 * -garrow_tensor_get_shape(GArrowTensor *tensor, gint *n_dimensions); - -GARROW_AVAILABLE_IN_ALL -gint64 * -garrow_tensor_get_strides(GArrowTensor *tensor, gint *n_strides); - -GARROW_AVAILABLE_IN_ALL -gint -garrow_tensor_get_n_dimensions(GArrowTensor *tensor); - -GARROW_AVAILABLE_IN_ALL -const gchar * -garrow_tensor_get_dimension_name(GArrowTensor *tensor, gint i); - -GARROW_AVAILABLE_IN_ALL -gint64 -garrow_tensor_get_size(GArrowTensor *tensor); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_tensor_is_mutable(GArrowTensor *tensor); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_tensor_is_contiguous(GArrowTensor *tensor); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_tensor_is_row_major(GArrowTensor *tensor); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_tensor_is_column_major(GArrowTensor *tensor); +GArrowTensor *garrow_tensor_new (GArrowDataType *data_type, + GArrowBuffer *data, + gint64 *shape, + gsize n_dimensions, + gint64 *strides, + gsize n_strides, + gchar **dimension_names, + gsize n_dimension_names); +gboolean garrow_tensor_equal (GArrowTensor *tensor, + GArrowTensor *other_tensor); +GArrowDataType *garrow_tensor_get_value_data_type(GArrowTensor *tensor); +GArrowType garrow_tensor_get_value_type (GArrowTensor *tensor); +GArrowBuffer *garrow_tensor_get_buffer (GArrowTensor *tensor); +gint64 *garrow_tensor_get_shape (GArrowTensor *tensor, + gint *n_dimensions); +gint64 *garrow_tensor_get_strides (GArrowTensor *tensor, + gint *n_strides); +gint garrow_tensor_get_n_dimensions (GArrowTensor *tensor); +const gchar *garrow_tensor_get_dimension_name (GArrowTensor *tensor, + gint i); +gint64 garrow_tensor_get_size (GArrowTensor *tensor); +gboolean garrow_tensor_is_mutable (GArrowTensor *tensor); +gboolean garrow_tensor_is_contiguous (GArrowTensor *tensor); +gboolean garrow_tensor_is_row_major (GArrowTensor *tensor); +gboolean garrow_tensor_is_column_major (GArrowTensor *tensor); G_END_DECLS diff --git a/c_glib/arrow-glib/tensor.hpp b/c_glib/arrow-glib/tensor.hpp index a4395c64db8..c90dc6d4d97 100644 --- a/c_glib/arrow-glib/tensor.hpp +++ b/c_glib/arrow-glib/tensor.hpp @@ -23,10 +23,7 @@ #include -GArrowTensor * -garrow_tensor_new_raw(std::shared_ptr *arrow_tensor); -GArrowTensor * -garrow_tensor_new_raw_buffer(std::shared_ptr *arrow_tensor, - GArrowBuffer *buffer); -std::shared_ptr -garrow_tensor_get_raw(GArrowTensor *tensor); +GArrowTensor *garrow_tensor_new_raw(std::shared_ptr *arrow_tensor); +GArrowTensor *garrow_tensor_new_raw_buffer(std::shared_ptr *arrow_tensor, + GArrowBuffer *buffer); +std::shared_ptr garrow_tensor_get_raw(GArrowTensor *tensor); diff --git a/c_glib/arrow-glib/timestamp-parser.cpp b/c_glib/arrow-glib/timestamp-parser.cpp deleted file mode 100644 index 1e41daf0823..00000000000 --- a/c_glib/arrow-glib/timestamp-parser.cpp +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#include - -G_BEGIN_DECLS - -/** - * SECTION: timestamp-parser - * @section_id: timestamp-parser-classes - * @title: TimestamParser classes - * @include: arrow-glib/arrow-glib.h - * - * #GArrowTimestampParser is a base class for parsing timestamp text. - * - * #GArrowStrptimeTimestampParser is a class for parsing timestamp - * text used by the given stprtime(3) format. - * - * #GArrowISO8601TimestampParser is a class for parsing ISO 8601 - * format timestamp text. - */ - -struct GArrowTimestampParserPrivate -{ - std::shared_ptr parser; -}; - -enum { - PROP_PARSER = 1, -}; - -G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GArrowTimestampParser, - garrow_timestamp_parser, - G_TYPE_OBJECT); - -#define GARROW_TIMESTAMP_PARSER_GET_PRIVATE(obj) \ - static_cast( \ - garrow_timestamp_parser_get_instance_private(GARROW_TIMESTAMP_PARSER(obj))) - -static void -garrow_timestamp_parser_finalize(GObject *object) -{ - auto priv = GARROW_TIMESTAMP_PARSER_GET_PRIVATE(object); - - priv->parser.~shared_ptr(); - - G_OBJECT_CLASS(garrow_timestamp_parser_parent_class)->finalize(object); -} - -static void -garrow_timestamp_parser_set_property(GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - auto priv = GARROW_TIMESTAMP_PARSER_GET_PRIVATE(object); - - switch (prop_id) { - case PROP_PARSER: - priv->parser = - *static_cast *>(g_value_get_pointer(value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); - break; - } -} - -static void -garrow_timestamp_parser_init(GArrowTimestampParser *object) -{ - auto priv = GARROW_TIMESTAMP_PARSER_GET_PRIVATE(object); - new (&priv->parser) std::shared_ptr; -} - -static void -garrow_timestamp_parser_class_init(GArrowTimestampParserClass *klass) -{ - auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_timestamp_parser_finalize; - gobject_class->set_property = garrow_timestamp_parser_set_property; - - GParamSpec *spec; - spec = g_param_spec_pointer( - "parser", - "Parser", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property(gobject_class, PROP_PARSER, spec); -} - -/** - * garrow_timestamp_parser_get_kind: - * @parser: A #GArrowTimestampParser. - * - * Returns: The kind of this timestamp parser. - * - * Since: 16.0.0 - */ -const gchar * -garrow_timestamp_parser_get_kind(GArrowTimestampParser *parser) -{ - auto arrow_parser = garrow_timestamp_parser_get_raw(parser); - return arrow_parser->kind(); -} - -G_DEFINE_TYPE(GArrowStrptimeTimestampParser, - garrow_strptime_timestamp_parser, - GARROW_TYPE_TIMESTAMP_PARSER); - -static void -garrow_strptime_timestamp_parser_init(GArrowStrptimeTimestampParser *object) -{ -} - -static void -garrow_strptime_timestamp_parser_class_init(GArrowStrptimeTimestampParserClass *klass) -{ -} - -/** - * garrow_strptime_timestamp_parser_new: - * @format: A format used by strptime(3). - * - * Returns: (transfer full): A newly allocated #GArrowStrptimeTimestampParser. - * - * Since: 16.0.0 - */ -GArrowStrptimeTimestampParser * -garrow_strptime_timestamp_parser_new(const gchar *format) -{ - auto arrow_parser = arrow::TimestampParser::MakeStrptime(format); - return GARROW_STRPTIME_TIMESTAMP_PARSER( - g_object_new(GARROW_TYPE_STRPTIME_TIMESTAMP_PARSER, - "parser", - &arrow_parser, - nullptr)); -} - -/** - * garrow_strptime_timestamp_parser_get_format: - * @parser: A #GArrowStrptimeTimestampParser. - * - * Returns: The format used by this parser. - * - * Since: 16.0.0 - */ -const gchar * -garrow_strptime_timestamp_parser_get_format(GArrowStrptimeTimestampParser *parser) -{ - auto arrow_parser = garrow_timestamp_parser_get_raw(GARROW_TIMESTAMP_PARSER(parser)); - return arrow_parser->format(); -} - -G_DEFINE_TYPE(GArrowISO8601TimestampParser, - garrow_iso8601_timestamp_parser, - GARROW_TYPE_TIMESTAMP_PARSER); - -static void -garrow_iso8601_timestamp_parser_init(GArrowISO8601TimestampParser *object) -{ -} - -static void -garrow_iso8601_timestamp_parser_class_init(GArrowISO8601TimestampParserClass *klass) -{ -} - -/** - * garrow_iso8601_timestamp_parser_new: - * - * Returns: (transfer full): A newly allocated #GArrowISO8601TimestampParser. - * - * Since: 16.0.0 - */ -GArrowISO8601TimestampParser * -garrow_iso8601_timestamp_parser_new(void) -{ - auto arrow_parser = arrow::TimestampParser::MakeISO8601(); - return GARROW_ISO8601_TIMESTAMP_PARSER( - g_object_new(GARROW_TYPE_ISO8601_TIMESTAMP_PARSER, "parser", &arrow_parser, nullptr)); -} - -G_END_DECLS - -std::shared_ptr -garrow_timestamp_parser_get_raw(GArrowTimestampParser *parser) -{ - auto priv = GARROW_TIMESTAMP_PARSER_GET_PRIVATE(parser); - return priv->parser; -} diff --git a/c_glib/arrow-glib/timestamp-parser.h b/c_glib/arrow-glib/timestamp-parser.h deleted file mode 100644 index a7265d6ef46..00000000000 --- a/c_glib/arrow-glib/timestamp-parser.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#pragma once - -#include - -#include - -G_BEGIN_DECLS - -#define GARROW_TYPE_TIMESTAMP_PARSER (garrow_timestamp_parser_get_type()) -GARROW_AVAILABLE_IN_16_0 -G_DECLARE_DERIVABLE_TYPE( - GArrowTimestampParser, garrow_timestamp_parser, GARROW, TIMESTAMP_PARSER, GObject) -struct _GArrowTimestampParserClass -{ - GObjectClass parent_class; -}; - -GARROW_AVAILABLE_IN_16_0 -const gchar * -garrow_timestamp_parser_get_kind(GArrowTimestampParser *parser); - -#define GARROW_TYPE_STRPTIME_TIMESTAMP_PARSER \ - (garrow_strptime_timestamp_parser_get_type()) -GARROW_AVAILABLE_IN_16_0 -G_DECLARE_DERIVABLE_TYPE(GArrowStrptimeTimestampParser, - garrow_strptime_timestamp_parser, - GARROW, - STRPTIME_TIMESTAMP_PARSER, - GArrowTimestampParser) -struct _GArrowStrptimeTimestampParserClass -{ - GArrowTimestampParserClass parent_class; -}; - -GARROW_AVAILABLE_IN_16_0 -GArrowStrptimeTimestampParser * -garrow_strptime_timestamp_parser_new(const gchar *format); - -GARROW_AVAILABLE_IN_16_0 -const gchar * -garrow_strptime_timestamp_parser_get_format(GArrowStrptimeTimestampParser *parser); - -#define GARROW_TYPE_ISO8601_TIMESTAMP_PARSER (garrow_iso8601_timestamp_parser_get_type()) -GARROW_AVAILABLE_IN_16_0 -G_DECLARE_DERIVABLE_TYPE(GArrowISO8601TimestampParser, - garrow_iso8601_timestamp_parser, - GARROW, - ISO8601_TIMESTAMP_PARSER, - GArrowTimestampParser) -struct _GArrowISO8601TimestampParserClass -{ - GArrowTimestampParserClass parent_class; -}; - -GARROW_AVAILABLE_IN_16_0 -GArrowISO8601TimestampParser * -garrow_iso8601_timestamp_parser_new(); - -G_END_DECLS diff --git a/c_glib/arrow-glib/timestamp-parser.hpp b/c_glib/arrow-glib/timestamp-parser.hpp deleted file mode 100644 index 00c37aed9cd..00000000000 --- a/c_glib/arrow-glib/timestamp-parser.hpp +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#pragma once - -#include - -#include - -std::shared_ptr -garrow_timestamp_parser_get_raw(GArrowTimestampParser *parser); diff --git a/c_glib/arrow-glib/type.h b/c_glib/arrow-glib/type.h index 6f33ad64ef5..f513c7a36a0 100644 --- a/c_glib/arrow-glib/type.h +++ b/c_glib/arrow-glib/type.h @@ -65,8 +65,7 @@ G_BEGIN_DECLS * @GARROW_TYPE_DURATION: Measure of elapsed time in either seconds, * milliseconds, microseconds or nanoseconds. * @GARROW_TYPE_LARGE_STRING: 64bit offsets UTF-8 variable-length string. - * @GARROW_TYPE_LARGE_BINARY: 64bit offsets Variable-length bytes (no guarantee of - * UTF-8-ness). + * @GARROW_TYPE_LARGE_BINARY: 64bit offsets Variable-length bytes (no guarantee of UTF-8-ness). * @GARROW_TYPE_LARGE_LIST: A list of some logical data type with 64-bit offsets. * @GARROW_TYPE_MONTH_DAY_NANO_INTERVAL: MONTH_DAY_NANO interval in SQL style. * @GARROW_TYPE_RUN_END_ENCODED: Run-end encoded data. diff --git a/c_glib/arrow-glib/type.hpp b/c_glib/arrow-glib/type.hpp index 9ae815dda15..097097530bb 100644 --- a/c_glib/arrow-glib/type.hpp +++ b/c_glib/arrow-glib/type.hpp @@ -23,11 +23,7 @@ #include -GArrowType -garrow_type_from_raw(arrow::Type::type type); -GArrowTimeUnit -garrow_time_unit_from_raw(arrow::TimeUnit::type unit); -arrow::TimeUnit::type -garrow_time_unit_to_raw(GArrowTimeUnit unit); -GArrowIntervalType -garrow_interval_type_from_raw(arrow::IntervalType::type type); +GArrowType garrow_type_from_raw(arrow::Type::type type); +GArrowTimeUnit garrow_time_unit_from_raw(arrow::TimeUnit::type unit); +arrow::TimeUnit::type garrow_time_unit_to_raw(GArrowTimeUnit unit); +GArrowIntervalType garrow_interval_type_from_raw(arrow::IntervalType::type type); diff --git a/c_glib/arrow-glib/version.h.in b/c_glib/arrow-glib/version.h.in index b530a088c8e..01760fbfed1 100644 --- a/c_glib/arrow-glib/version.h.in +++ b/c_glib/arrow-glib/version.h.in @@ -38,7 +38,7 @@ * * Since: 0.10.0 */ -#define GARROW_VERSION_MAJOR (@VERSION_MAJOR@) +#define GARROW_VERSION_MAJOR (@GARROW_VERSION_MAJOR@) /** * GARROW_VERSION_MINOR: @@ -47,7 +47,7 @@ * * Since: 0.10.0 */ -#define GARROW_VERSION_MINOR (@VERSION_MINOR@) +#define GARROW_VERSION_MINOR (@GARROW_VERSION_MINOR@) /** * GARROW_VERSION_MICRO: @@ -56,7 +56,7 @@ * * Since: 0.10.0 */ -#define GARROW_VERSION_MICRO (@VERSION_MICRO@) +#define GARROW_VERSION_MICRO (@GARROW_VERSION_MICRO@) /** * GARROW_VERSION_TAG: @@ -66,7 +66,7 @@ * * Since: 0.10.0 */ -#define GARROW_VERSION_TAG "@VERSION_TAG@" +#define GARROW_VERSION_TAG "@GARROW_VERSION_TAG@" /** * GARROW_VERSION_CHECK: @@ -110,7 +110,212 @@ # define GARROW_UNAVAILABLE(major, minor) G_UNAVAILABLE(major, minor) #endif -@ENCODED_VERSIONS@ +/** + * GARROW_VERSION_16_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 16.0.0 + */ +#define GARROW_VERSION_16_0 G_ENCODE_VERSION(16, 0) + +/** + * GARROW_VERSION_15_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 15.0.0 + */ +#define GARROW_VERSION_15_0 G_ENCODE_VERSION(15, 0) + +/** + * GARROW_VERSION_14_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 14.0.0 + */ +#define GARROW_VERSION_14_0 G_ENCODE_VERSION(14, 0) + +/** + * GARROW_VERSION_13_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 13.0.0 + */ +#define GARROW_VERSION_13_0 G_ENCODE_VERSION(13, 0) + +/** + * GARROW_VERSION_12_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 12.0.0 + */ +#define GARROW_VERSION_12_0 G_ENCODE_VERSION(12, 0) + +/** + * GARROW_VERSION_11_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 11.0.0 + */ +#define GARROW_VERSION_11_0 G_ENCODE_VERSION(11, 0) + +/** + * GARROW_VERSION_10_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 10.0.0 + */ +#define GARROW_VERSION_10_0 G_ENCODE_VERSION(10, 0) + +/** + * GARROW_VERSION_9_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 9.0.0 + */ +#define GARROW_VERSION_9_0 G_ENCODE_VERSION(9, 0) + +/** + * GARROW_VERSION_8_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 8.0.0 + */ +#define GARROW_VERSION_8_0 G_ENCODE_VERSION(8, 0) + +/** + * GARROW_VERSION_7_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 7.0.0 + */ +#define GARROW_VERSION_7_0 G_ENCODE_VERSION(7, 0) + +/** + * GARROW_VERSION_6_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 6.0.0 + */ +#define GARROW_VERSION_6_0 G_ENCODE_VERSION(6, 0) + +/** + * GARROW_VERSION_5_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 5.0.0 + */ +#define GARROW_VERSION_5_0 G_ENCODE_VERSION(5, 0) + +/** + * GARROW_VERSION_4_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 4.0.0 + */ +#define GARROW_VERSION_4_0 G_ENCODE_VERSION(4, 0) + +/** + * GARROW_VERSION_3_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 3.0.0 + */ +#define GARROW_VERSION_3_0 G_ENCODE_VERSION(3, 0) + +/** + * GARROW_VERSION_2_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 2.0.0 + */ +#define GARROW_VERSION_2_0 G_ENCODE_VERSION(2, 0) + +/** + * GARROW_VERSION_1_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 1.0.0 + */ +#define GARROW_VERSION_1_0 G_ENCODE_VERSION(1, 0) + +/** + * GARROW_VERSION_0_17: + * + * You can use this macro value for compile time API version check. + * + * Since: 0.17.0 + */ +#define GARROW_VERSION_0_17 G_ENCODE_VERSION(0, 17) + +/** + * GARROW_VERSION_0_16: + * + * You can use this macro value for compile time API version check. + * + * Since: 0.16.0 + */ +#define GARROW_VERSION_0_16 G_ENCODE_VERSION(0, 16) + +/** + * GARROW_VERSION_0_15: + * + * You can use this macro value for compile time API version check. + * + * Since: 0.15.0 + */ +#define GARROW_VERSION_0_15 G_ENCODE_VERSION(0, 15) + +/** + * GARROW_VERSION_0_14: + * + * You can use this macro value for compile time API version check. + * + * Since: 0.14.0 + */ +#define GARROW_VERSION_0_14 G_ENCODE_VERSION(0, 14) + +/** + * GARROW_VERSION_0_13: + * + * You can use this macro value for compile time API version check. + * + * Since: 0.13.0 + */ +#define GARROW_VERSION_0_13 G_ENCODE_VERSION(0, 13) + +/** + * GARROW_VERSION_0_12: + * + * You can use this macro value for compile time API version check. + * + * Since: 0.12.0 + */ +#define GARROW_VERSION_0_12 G_ENCODE_VERSION(0, 12) + +/** + * GARROW_VERSION_0_10: + * + * You can use this macro value for compile time API version check. + * + * Since: 0.10.0 + */ +#define GARROW_VERSION_0_10 G_ENCODE_VERSION(0, 10) /** * GARROW_VERSION_MIN_REQUIRED: @@ -156,6 +361,327 @@ G_ENCODE_VERSION(GARROW_VERSION_MAJOR, GARROW_VERSION_MINOR) #endif -@VISIBILITY_MACROS@ -@AVAILABILITY_MACROS@ +#define GARROW_AVAILABLE_IN_ALL + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_16_0 +# define GARROW_DEPRECATED_IN_16_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_16_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_16_0 +# define GARROW_DEPRECATED_IN_16_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_16_0 +# define GARROW_AVAILABLE_IN_16_0 GARROW_UNAVAILABLE(16, 0) +#else +# define GARROW_AVAILABLE_IN_16_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_15_0 +# define GARROW_DEPRECATED_IN_15_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_15_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_15_0 +# define GARROW_DEPRECATED_IN_15_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_15_0 +# define GARROW_AVAILABLE_IN_15_0 GARROW_UNAVAILABLE(15, 0) +#else +# define GARROW_AVAILABLE_IN_15_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_14_0 +# define GARROW_DEPRECATED_IN_14_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_14_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_14_0 +# define GARROW_DEPRECATED_IN_14_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_14_0 +# define GARROW_AVAILABLE_IN_14_0 GARROW_UNAVAILABLE(14, 0) +#else +# define GARROW_AVAILABLE_IN_14_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_13_0 +# define GARROW_DEPRECATED_IN_13_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_13_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_13_0 +# define GARROW_DEPRECATED_IN_13_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_13_0 +# define GARROW_AVAILABLE_IN_13_0 GARROW_UNAVAILABLE(13, 0) +#else +# define GARROW_AVAILABLE_IN_13_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_12_0 +# define GARROW_DEPRECATED_IN_12_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_12_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_12_0 +# define GARROW_DEPRECATED_IN_12_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_12_0 +# define GARROW_AVAILABLE_IN_12_0 GARROW_UNAVAILABLE(12, 0) +#else +# define GARROW_AVAILABLE_IN_12_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_11_0 +# define GARROW_DEPRECATED_IN_11_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_11_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_11_0 +# define GARROW_DEPRECATED_IN_11_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_11_0 +# define GARROW_AVAILABLE_IN_11_0 GARROW_UNAVAILABLE(11, 0) +#else +# define GARROW_AVAILABLE_IN_11_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_10_0 +# define GARROW_DEPRECATED_IN_10_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_10_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_10_0 +# define GARROW_DEPRECATED_IN_10_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_10_0 +# define GARROW_AVAILABLE_IN_10_0 GARROW_UNAVAILABLE(10, 0) +#else +# define GARROW_AVAILABLE_IN_10_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_9_0 +# define GARROW_DEPRECATED_IN_9_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_9_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_9_0 +# define GARROW_DEPRECATED_IN_9_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_9_0 +# define GARROW_AVAILABLE_IN_9_0 GARROW_UNAVAILABLE(9, 0) +#else +# define GARROW_AVAILABLE_IN_9_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_8_0 +# define GARROW_DEPRECATED_IN_8_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_8_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_8_0 +# define GARROW_DEPRECATED_IN_8_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_8_0 +# define GARROW_AVAILABLE_IN_8_0 GARROW_UNAVAILABLE(8, 0) +#else +# define GARROW_AVAILABLE_IN_8_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_7_0 +# define GARROW_DEPRECATED_IN_7_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_7_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_7_0 +# define GARROW_DEPRECATED_IN_7_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_7_0 +# define GARROW_AVAILABLE_IN_7_0 GARROW_UNAVAILABLE(7, 0) +#else +# define GARROW_AVAILABLE_IN_7_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_6_0 +# define GARROW_DEPRECATED_IN_6_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_6_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_6_0 +# define GARROW_DEPRECATED_IN_6_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_6_0 +# define GARROW_AVAILABLE_IN_6_0 GARROW_UNAVAILABLE(6, 0) +#else +# define GARROW_AVAILABLE_IN_6_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_5_0 +# define GARROW_DEPRECATED_IN_5_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_5_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_5_0 +# define GARROW_DEPRECATED_IN_5_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_5_0 +# define GARROW_AVAILABLE_IN_5_0 GARROW_UNAVAILABLE(5, 0) +#else +# define GARROW_AVAILABLE_IN_5_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_4_0 +# define GARROW_DEPRECATED_IN_4_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_4_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_4_0 +# define GARROW_DEPRECATED_IN_4_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_4_0 +# define GARROW_AVAILABLE_IN_4_0 GARROW_UNAVAILABLE(4, 0) +#else +# define GARROW_AVAILABLE_IN_4_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_3_0 +# define GARROW_DEPRECATED_IN_3_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_3_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_3_0 +# define GARROW_DEPRECATED_IN_3_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_3_0 +# define GARROW_AVAILABLE_IN_3_0 GARROW_UNAVAILABLE(3, 0) +#else +# define GARROW_AVAILABLE_IN_3_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_2_0 +# define GARROW_DEPRECATED_IN_2_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_2_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_2_0 +# define GARROW_DEPRECATED_IN_2_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_2_0 +# define GARROW_AVAILABLE_IN_2_0 GARROW_UNAVAILABLE(2, 0) +#else +# define GARROW_AVAILABLE_IN_2_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_1_0 +# define GARROW_DEPRECATED_IN_1_0 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_1_0_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_1_0 +# define GARROW_DEPRECATED_IN_1_0_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_1_0 +# define GARROW_AVAILABLE_IN_1_0 GARROW_UNAVAILABLE(1, 0) +#else +# define GARROW_AVAILABLE_IN_1_0 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_0_17 +# define GARROW_DEPRECATED_IN_0_17 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_0_17_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_0_17 +# define GARROW_DEPRECATED_IN_0_17_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_0_17 +# define GARROW_AVAILABLE_IN_0_17 GARROW_UNAVAILABLE(0, 17) +#else +# define GARROW_AVAILABLE_IN_0_17 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_0_16 +# define GARROW_DEPRECATED_IN_0_16 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_0_16_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_0_16 +# define GARROW_DEPRECATED_IN_0_16_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_0_16 +# define GARROW_AVAILABLE_IN_0_16 GARROW_UNAVAILABLE(0, 16) +#else +# define GARROW_AVAILABLE_IN_0_16 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_0_15 +# define GARROW_DEPRECATED_IN_0_15 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_0_15_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_0_15 +# define GARROW_DEPRECATED_IN_0_15_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_0_15 +# define GARROW_AVAILABLE_IN_0_15 GARROW_UNAVAILABLE(0, 15) +#else +# define GARROW_AVAILABLE_IN_0_15 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_0_14 +# define GARROW_DEPRECATED_IN_0_14 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_0_14_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_0_14 +# define GARROW_DEPRECATED_IN_0_14_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_0_14 +# define GARROW_AVAILABLE_IN_0_14 GARROW_UNAVAILABLE(0, 14) +#else +# define GARROW_AVAILABLE_IN_0_14 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_0_13 +# define GARROW_DEPRECATED_IN_0_13 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_0_13_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_0_13 +# define GARROW_DEPRECATED_IN_0_13_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_0_13 +# define GARROW_AVAILABLE_IN_0_13 GARROW_UNAVAILABLE(0, 13) +#else +# define GARROW_AVAILABLE_IN_0_13 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_0_12 +# define GARROW_DEPRECATED_IN_0_12 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_0_12_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_0_12 +# define GARROW_DEPRECATED_IN_0_12_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_0_12 +# define GARROW_AVAILABLE_IN_0_12 GARROW_UNAVAILABLE(0, 12) +#else +# define GARROW_AVAILABLE_IN_0_12 +#endif + +#if GARROW_VERSION_MIN_REQUIRED >= GARROW_VERSION_0_10 +# define GARROW_DEPRECATED_IN_0_10 GARROW_DEPRECATED +# define GARROW_DEPRECATED_IN_0_10_FOR(function) GARROW_DEPRECATED_FOR(function) +#else +# define GARROW_DEPRECATED_IN_0_10 +# define GARROW_DEPRECATED_IN_0_10_FOR(function) +#endif + +#if GARROW_VERSION_MAX_ALLOWED < GARROW_VERSION_0_10 +# define GARROW_AVAILABLE_IN_0_10 GARROW_UNAVAILABLE(0, 10) +#else +# define GARROW_AVAILABLE_IN_0_10 +#endif diff --git a/c_glib/arrow-glib/writable-file.cpp b/c_glib/arrow-glib/writable-file.cpp index 85ddea9ac2f..74850ec2089 100644 --- a/c_glib/arrow-glib/writable-file.cpp +++ b/c_glib/arrow-glib/writable-file.cpp @@ -32,7 +32,9 @@ G_BEGIN_DECLS * #GArrowWritableFile is an interface for file output. */ -G_DEFINE_INTERFACE(GArrowWritableFile, garrow_writable_file, G_TYPE_OBJECT) +G_DEFINE_INTERFACE(GArrowWritableFile, + garrow_writable_file, + G_TYPE_OBJECT) static void garrow_writable_file_default_init(GArrowWritableFileInterface *iface) @@ -56,7 +58,8 @@ garrow_writable_file_write_at(GArrowWritableFile *writable_file, gint64 n_bytes, GError **error) { - const auto arrow_writable_file = garrow_writable_file_get_raw(writable_file); + const auto arrow_writable_file = + garrow_writable_file_get_raw(writable_file); auto status = arrow_writable_file->WriteAt(position, data, n_bytes); return garrow_error_check(error, status, "[io][writable-file][write-at]"); diff --git a/c_glib/arrow-glib/writable-file.h b/c_glib/arrow-glib/writable-file.h index e9aa9122e92..78359f6afa9 100644 --- a/c_glib/arrow-glib/writable-file.h +++ b/c_glib/arrow-glib/writable-file.h @@ -19,21 +19,21 @@ #pragma once -#include +#include G_BEGIN_DECLS #define GARROW_TYPE_WRITABLE_FILE (garrow_writable_file_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_INTERFACE( - GArrowWritableFile, garrow_writable_file, GARROW, WRITABLE_FILE, GObject) +G_DECLARE_INTERFACE(GArrowWritableFile, + garrow_writable_file, + GARROW, + WRITABLE_FILE, + GObject) -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_writable_file_write_at(GArrowWritableFile *writable_file, - gint64 position, - const guint8 *data, - gint64 n_bytes, - GError **error); +gboolean garrow_writable_file_write_at(GArrowWritableFile *writable_file, + gint64 position, + const guint8 *data, + gint64 n_bytes, + GError **error); G_END_DECLS diff --git a/c_glib/arrow-glib/writable.cpp b/c_glib/arrow-glib/writable.cpp index 0a61ba72823..47c1f3303b7 100644 --- a/c_glib/arrow-glib/writable.cpp +++ b/c_glib/arrow-glib/writable.cpp @@ -33,7 +33,9 @@ G_BEGIN_DECLS * writable. */ -G_DEFINE_INTERFACE(GArrowWritable, garrow_writable, G_TYPE_OBJECT) +G_DEFINE_INTERFACE(GArrowWritable, + garrow_writable, + G_TYPE_OBJECT) static void garrow_writable_default_init(GArrowWritableInterface *iface) @@ -71,7 +73,8 @@ garrow_writable_write(GArrowWritable *writable, * Returns: %TRUE on success, %FALSE if there was an error. */ gboolean -garrow_writable_flush(GArrowWritable *writable, GError **error) +garrow_writable_flush(GArrowWritable *writable, + GError **error) { const auto arrow_writable = garrow_writable_get_raw(writable); diff --git a/c_glib/arrow-glib/writable.h b/c_glib/arrow-glib/writable.h index dcc1e67668e..151e85d98af 100644 --- a/c_glib/arrow-glib/writable.h +++ b/c_glib/arrow-glib/writable.h @@ -19,23 +19,22 @@ #pragma once -#include +#include G_BEGIN_DECLS #define GARROW_TYPE_WRITABLE (garrow_writable_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_INTERFACE(GArrowWritable, garrow_writable, GARROW, WRITABLE, GObject) +G_DECLARE_INTERFACE(GArrowWritable, + garrow_writable, + GARROW, + WRITABLE, + GObject) -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_writable_write(GArrowWritable *writable, - const guint8 *data, - gint64 n_bytes, - GError **error); - -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_writable_flush(GArrowWritable *writable, GError **error); +gboolean garrow_writable_write(GArrowWritable *writable, + const guint8 *data, + gint64 n_bytes, + GError **error); +gboolean garrow_writable_flush(GArrowWritable *writable, + GError **error); G_END_DECLS diff --git a/c_glib/arrow-glib/writer.cpp b/c_glib/arrow-glib/writer.cpp index b0321d51b3b..3808150179a 100644 --- a/c_glib/arrow-glib/writer.cpp +++ b/c_glib/arrow-glib/writer.cpp @@ -45,8 +45,7 @@ G_BEGIN_DECLS * batches in file format into output. */ -typedef struct GArrowRecordBatchWriterPrivate_ -{ +typedef struct GArrowRecordBatchWriterPrivate_ { std::shared_ptr record_batch_writer; } GArrowRecordBatchWriterPrivate; @@ -59,9 +58,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GArrowRecordBatchWriter, garrow_record_batch_writer, G_TYPE_OBJECT); -#define GARROW_RECORD_BATCH_WRITER_GET_PRIVATE(obj) \ - static_cast( \ - garrow_record_batch_writer_get_instance_private(GARROW_RECORD_BATCH_WRITER(obj))) +#define GARROW_RECORD_BATCH_WRITER_GET_PRIVATE(obj) \ + static_cast( \ + garrow_record_batch_writer_get_instance_private( \ + GARROW_RECORD_BATCH_WRITER(obj))) static void garrow_record_batch_writer_finalize(GObject *object) @@ -84,8 +84,7 @@ garrow_record_batch_writer_set_property(GObject *object, switch (prop_id) { case PROP_RECORD_BATCH_WRITER: priv->record_batch_writer = - *static_cast *>( - g_value_get_pointer(value)); + *static_cast *>(g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -110,7 +109,7 @@ static void garrow_record_batch_writer_init(GArrowRecordBatchWriter *object) { auto priv = GARROW_RECORD_BATCH_WRITER_GET_PRIVATE(object); - new (&priv->record_batch_writer) std::shared_ptr; + new(&priv->record_batch_writer) std::shared_ptr; } static void @@ -121,15 +120,15 @@ garrow_record_batch_writer_class_init(GArrowRecordBatchWriterClass *klass) gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = garrow_record_batch_writer_finalize; + gobject_class->finalize = garrow_record_batch_writer_finalize; gobject_class->set_property = garrow_record_batch_writer_set_property; gobject_class->get_property = garrow_record_batch_writer_get_property; - spec = g_param_spec_pointer( - "record-batch-writer", - "arrow::ipc::RecordBatchWriter", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("record-batch-writer", + "arrow::ipc::RecordBatchWriter", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_RECORD_BATCH_WRITER, spec); } @@ -153,7 +152,9 @@ garrow_record_batch_writer_write_record_batch(GArrowRecordBatchWriter *writer, auto arrow_record_batch_raw = arrow_record_batch.get(); auto status = arrow_writer->WriteRecordBatch(*arrow_record_batch_raw); - return garrow_error_check(error, status, "[record-batch-writer][write-record-batch]"); + return garrow_error_check(error, + status, + "[record-batch-writer][write-record-batch]"); } /** @@ -175,7 +176,9 @@ garrow_record_batch_writer_write_table(GArrowRecordBatchWriter *writer, auto arrow_table = garrow_table_get_raw(table); auto status = arrow_writer->WriteTable(*arrow_table); - return garrow_error_check(error, status, "[record-batch-writer][write-table]"); + return garrow_error_check(error, + status, + "[record-batch-writer][write-table]"); } /** @@ -188,7 +191,8 @@ garrow_record_batch_writer_write_table(GArrowRecordBatchWriter *writer, * Since: 0.4.0 */ gboolean -garrow_record_batch_writer_close(GArrowRecordBatchWriter *writer, GError **error) +garrow_record_batch_writer_close(GArrowRecordBatchWriter *writer, + GError **error) { auto arrow_writer = garrow_record_batch_writer_get_raw(writer); @@ -196,6 +200,7 @@ garrow_record_batch_writer_close(GArrowRecordBatchWriter *writer, GError **error return garrow_error_check(error, status, "[record-batch-writer][close]"); } + G_DEFINE_TYPE(GArrowRecordBatchStreamWriter, garrow_record_batch_stream_writer, GARROW_TYPE_RECORD_BATCH_WRITER); @@ -228,8 +233,11 @@ garrow_record_batch_stream_writer_new(GArrowOutputStream *sink, { auto arrow_sink = garrow_output_stream_get_raw(sink); auto arrow_schema = garrow_schema_get_raw(schema); - auto arrow_writer_result = arrow::ipc::MakeStreamWriter(arrow_sink, arrow_schema); - if (garrow::check(error, arrow_writer_result, "[record-batch-stream-writer][open]")) { + auto arrow_writer_result = + arrow::ipc::MakeStreamWriter(arrow_sink, arrow_schema); + if (garrow::check(error, + arrow_writer_result, + "[record-batch-stream-writer][open]")) { auto arrow_writer = *arrow_writer_result; return garrow_record_batch_stream_writer_new_raw(&arrow_writer); } else { @@ -237,6 +245,7 @@ garrow_record_batch_stream_writer_new(GArrowOutputStream *sink, } } + G_DEFINE_TYPE(GArrowRecordBatchFileWriter, garrow_record_batch_file_writer, GARROW_TYPE_RECORD_BATCH_STREAM_WRITER); @@ -264,14 +273,17 @@ garrow_record_batch_file_writer_class_init(GArrowRecordBatchFileWriterClass *kla */ GArrowRecordBatchFileWriter * garrow_record_batch_file_writer_new(GArrowOutputStream *sink, - GArrowSchema *schema, - GError **error) + GArrowSchema *schema, + GError **error) { auto arrow_sink = garrow_output_stream_get_raw(sink); auto arrow_schema = garrow_schema_get_raw(schema); std::shared_ptr arrow_writer; - auto arrow_writer_result = arrow::ipc::MakeFileWriter(arrow_sink, arrow_schema); - if (garrow::check(error, arrow_writer_result, "[record-batch-file-writer][open]")) { + auto arrow_writer_result = + arrow::ipc::MakeFileWriter(arrow_sink, arrow_schema); + if (garrow::check(error, + arrow_writer_result, + "[record-batch-file-writer][open]")) { auto arrow_writer = *arrow_writer_result; return garrow_record_batch_file_writer_new_raw(&arrow_writer); } else { @@ -282,13 +294,13 @@ garrow_record_batch_file_writer_new(GArrowOutputStream *sink, G_END_DECLS GArrowRecordBatchWriter * -garrow_record_batch_writer_new_raw( - std::shared_ptr *arrow_writer) +garrow_record_batch_writer_new_raw(std::shared_ptr *arrow_writer) { - auto writer = GARROW_RECORD_BATCH_WRITER(g_object_new(GARROW_TYPE_RECORD_BATCH_WRITER, - "record-batch-writer", - arrow_writer, - NULL)); + auto writer = + GARROW_RECORD_BATCH_WRITER( + g_object_new(GARROW_TYPE_RECORD_BATCH_WRITER, + "record-batch-writer", arrow_writer, + NULL)); return writer; } @@ -300,25 +312,23 @@ garrow_record_batch_writer_get_raw(GArrowRecordBatchWriter *writer) } GArrowRecordBatchStreamWriter * -garrow_record_batch_stream_writer_new_raw( - std::shared_ptr *arrow_writer) +garrow_record_batch_stream_writer_new_raw(std::shared_ptr *arrow_writer) { auto writer = - GARROW_RECORD_BATCH_STREAM_WRITER(g_object_new(GARROW_TYPE_RECORD_BATCH_STREAM_WRITER, - "record-batch-writer", - arrow_writer, - NULL)); + GARROW_RECORD_BATCH_STREAM_WRITER( + g_object_new(GARROW_TYPE_RECORD_BATCH_STREAM_WRITER, + "record-batch-writer", arrow_writer, + NULL)); return writer; } GArrowRecordBatchFileWriter * -garrow_record_batch_file_writer_new_raw( - std::shared_ptr *arrow_writer) +garrow_record_batch_file_writer_new_raw(std::shared_ptr *arrow_writer) { auto writer = - GARROW_RECORD_BATCH_FILE_WRITER(g_object_new(GARROW_TYPE_RECORD_BATCH_FILE_WRITER, - "record-batch-writer", - arrow_writer, - NULL)); + GARROW_RECORD_BATCH_FILE_WRITER( + g_object_new(GARROW_TYPE_RECORD_BATCH_FILE_WRITER, + "record-batch-writer", arrow_writer, + NULL)); return writer; } diff --git a/c_glib/arrow-glib/writer.h b/c_glib/arrow-glib/writer.h index 46bbdddec8c..a0d22fe626c 100644 --- a/c_glib/arrow-glib/writer.h +++ b/c_glib/arrow-glib/writer.h @@ -27,67 +27,166 @@ G_BEGIN_DECLS -#define GARROW_TYPE_RECORD_BATCH_WRITER (garrow_record_batch_writer_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowRecordBatchWriter, - garrow_record_batch_writer, - GARROW, - RECORD_BATCH_WRITER, - GObject) +#define GARROW_TYPE_RECORD_BATCH_WRITER \ + (garrow_record_batch_writer_get_type()) +#define GARROW_RECORD_BATCH_WRITER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_RECORD_BATCH_WRITER, \ + GArrowRecordBatchWriter)) +#define GARROW_RECORD_BATCH_WRITER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_RECORD_BATCH_WRITER, \ + GArrowRecordBatchWriterClass)) +#define GARROW_IS_RECORD_BATCH_WRITER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_RECORD_BATCH_WRITER)) +#define GARROW_IS_RECORD_BATCH_WRITER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_RECORD_BATCH_WRITER)) +#define GARROW_RECORD_BATCH_WRITER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_RECORD_BATCH_WRITER, \ + GArrowRecordBatchWriterClass)) + +typedef struct _GArrowRecordBatchWriter GArrowRecordBatchWriter; +#ifndef __GTK_DOC_IGNORE__ +typedef struct _GArrowRecordBatchWriterClass GArrowRecordBatchWriterClass; +#endif + +/** + * GArrowRecordBatchWriter: + * + * It wraps `arrow::ipc::RecordBatchWriter`. + */ +struct _GArrowRecordBatchWriter +{ + /*< private >*/ + GObject parent_instance; +}; + +#ifndef __GTK_DOC_IGNORE__ struct _GArrowRecordBatchWriterClass { GObjectClass parent_class; }; +#endif -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_record_batch_writer_write_record_batch(GArrowRecordBatchWriter *writer, - GArrowRecordBatch *record_batch, - GError **error); -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_record_batch_writer_write_table(GArrowRecordBatchWriter *writer, - GArrowTable *table, - GError **error); -GARROW_AVAILABLE_IN_ALL -gboolean -garrow_record_batch_writer_close(GArrowRecordBatchWriter *writer, GError **error); - -#define GARROW_TYPE_RECORD_BATCH_STREAM_WRITER \ +GType garrow_record_batch_writer_get_type(void) G_GNUC_CONST; + +gboolean garrow_record_batch_writer_write_record_batch( + GArrowRecordBatchWriter *writer, + GArrowRecordBatch *record_batch, + GError **error); +gboolean garrow_record_batch_writer_write_table( + GArrowRecordBatchWriter *writer, + GArrowTable *table, + GError **error); +gboolean garrow_record_batch_writer_close( + GArrowRecordBatchWriter *writer, + GError **error); + + +#define GARROW_TYPE_RECORD_BATCH_STREAM_WRITER \ (garrow_record_batch_stream_writer_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowRecordBatchStreamWriter, - garrow_record_batch_stream_writer, - GARROW, - RECORD_BATCH_STREAM_WRITER, - GArrowRecordBatchWriter) +#define GARROW_RECORD_BATCH_STREAM_WRITER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_RECORD_BATCH_STREAM_WRITER, \ + GArrowRecordBatchStreamWriter)) +#define GARROW_RECORD_BATCH_STREAM_WRITER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_RECORD_BATCH_STREAM_WRITER, \ + GArrowRecordBatchStreamWriterClass)) +#define GARROW_IS_RECORD_BATCH_STREAM_WRITER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_RECORD_BATCH_STREAM_WRITER)) +#define GARROW_IS_RECORD_BATCH_STREAM_WRITER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_RECORD_BATCH_STREAM_WRITER)) +#define GARROW_RECORD_BATCH_STREAM_WRITER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_RECORD_BATCH_STREAM_WRITER, \ + GArrowRecordBatchStreamWriterClass)) + +typedef struct _GArrowRecordBatchStreamWriter GArrowRecordBatchStreamWriter; +#ifndef __GTK_DOC_IGNORE__ +typedef struct _GArrowRecordBatchStreamWriterClass GArrowRecordBatchStreamWriterClass; +#endif + +/** + * GArrowRecordBatchStreamWriter: + * + * It wraps `arrow::ipc::RecordBatchStreamWriter`. + */ +struct _GArrowRecordBatchStreamWriter +{ + /*< private >*/ + GArrowRecordBatchWriter parent_instance; +}; + +#ifndef __GTK_DOC_IGNORE__ struct _GArrowRecordBatchStreamWriterClass { GArrowRecordBatchWriterClass parent_class; }; +#endif + +GType garrow_record_batch_stream_writer_get_type(void) G_GNUC_CONST; + +GArrowRecordBatchStreamWriter *garrow_record_batch_stream_writer_new( + GArrowOutputStream *sink, + GArrowSchema *schema, + GError **error); + + +#define GARROW_TYPE_RECORD_BATCH_FILE_WRITER \ + (garrow_record_batch_file_writer_get_type()) +#define GARROW_RECORD_BATCH_FILE_WRITER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_RECORD_BATCH_FILE_WRITER, \ + GArrowRecordBatchFileWriter)) +#define GARROW_RECORD_BATCH_FILE_WRITER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_RECORD_BATCH_FILE_WRITER, \ + GArrowRecordBatchFileWriterClass)) +#define GARROW_IS_RECORD_BATCH_FILE_WRITER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_RECORD_BATCH_FILE_WRITER)) +#define GARROW_IS_RECORD_BATCH_FILE_WRITER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_RECORD_BATCH_FILE_WRITER)) +#define GARROW_RECORD_BATCH_FILE_WRITER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_RECORD_BATCH_FILE_WRITER, \ + GArrowRecordBatchFileWriterClass)) + +typedef struct _GArrowRecordBatchFileWriter GArrowRecordBatchFileWriter; +#ifndef __GTK_DOC_IGNORE__ +typedef struct _GArrowRecordBatchFileWriterClass GArrowRecordBatchFileWriterClass; +#endif + +/** + * GArrowRecordBatchFileWriter: + * + * It wraps `arrow::ipc::RecordBatchFileWriter`. + */ +struct _GArrowRecordBatchFileWriter +{ + /*< private >*/ + GArrowRecordBatchStreamWriter parent_instance; +}; -GARROW_AVAILABLE_IN_ALL -GArrowRecordBatchStreamWriter * -garrow_record_batch_stream_writer_new(GArrowOutputStream *sink, - GArrowSchema *schema, - GError **error); - -#define GARROW_TYPE_RECORD_BATCH_FILE_WRITER (garrow_record_batch_file_writer_get_type()) -GARROW_AVAILABLE_IN_ALL -G_DECLARE_DERIVABLE_TYPE(GArrowRecordBatchFileWriter, - garrow_record_batch_file_writer, - GARROW, - RECORD_BATCH_FILE_WRITER, - GArrowRecordBatchStreamWriter) +#ifndef __GTK_DOC_IGNORE__ struct _GArrowRecordBatchFileWriterClass { GArrowRecordBatchStreamWriterClass parent_class; }; +#endif + +GType garrow_record_batch_file_writer_get_type(void) G_GNUC_CONST; -GARROW_AVAILABLE_IN_ALL -GArrowRecordBatchFileWriter * -garrow_record_batch_file_writer_new(GArrowOutputStream *sink, - GArrowSchema *schema, - GError **error); +GArrowRecordBatchFileWriter *garrow_record_batch_file_writer_new( + GArrowOutputStream *sink, + GArrowSchema *schema, + GError **error); G_END_DECLS diff --git a/c_glib/arrow-glib/writer.hpp b/c_glib/arrow-glib/writer.hpp index aa87ffe77d7..1e188bd3c68 100644 --- a/c_glib/arrow-glib/writer.hpp +++ b/c_glib/arrow-glib/writer.hpp @@ -25,16 +25,9 @@ #include -GArrowRecordBatchWriter * -garrow_record_batch_writer_new_raw( - std::shared_ptr *arrow_writer); -std::shared_ptr -garrow_record_batch_writer_get_raw(GArrowRecordBatchWriter *writer); +GArrowRecordBatchWriter *garrow_record_batch_writer_new_raw(std::shared_ptr *arrow_writer); +std::shared_ptr garrow_record_batch_writer_get_raw(GArrowRecordBatchWriter *writer); -GArrowRecordBatchStreamWriter * -garrow_record_batch_stream_writer_new_raw( - std::shared_ptr *arrow_writer); +GArrowRecordBatchStreamWriter *garrow_record_batch_stream_writer_new_raw(std::shared_ptr *arrow_writer); -GArrowRecordBatchFileWriter * -garrow_record_batch_file_writer_new_raw( - std::shared_ptr *arrow_writer); +GArrowRecordBatchFileWriter *garrow_record_batch_file_writer_new_raw(std::shared_ptr *arrow_writer); diff --git a/c_glib/doc/arrow-cuda-glib.toml.in b/c_glib/doc/arrow-cuda-glib.toml.in deleted file mode 100644 index fbd491487aa..00000000000 --- a/c_glib/doc/arrow-cuda-glib.toml.in +++ /dev/null @@ -1,55 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -[library] -name = "Apache Arrow CUDA GLib" -version = "@VERSION@" -browse_url = "https://github.com/apache/arrow/tree/@SOURCE_REFERENCE@/c_glib/arrow-cuda-glib/" -repository_url = "https://github.com/apache/arrow.git" -website_url = "https://arrow.apache.org/docs/c_glib/arrow-cuda-glib/" -authors = "The Apache Software Foundation" -license = "Apache-2.0" -description = "Apache Arrow CUDA GLib API" -dependencies = ["Arrow-1.0"] -related = ["Gio-2.0", "GObject-2.0"] -search_index = true - -[dependencies."Arrow-1.0"] -name = "Arrow" -description = "Apache Arrow GLib API" -docs_url = "https://arrow.apache.org/docs/c_glib/arrow-glib/" - -[related."Gio-2.0"] -name = "GIO" -description = "GObject Interfaces and Objects, Networking, IPC, and I/O" -docs_url = "https://docs.gtk.org/gio/" - -[related."GObject-2.0"] -name = "GObject" -description = "The base type system library" -docs_url = "https://docs.gtk.org/gobject/" - -[source-location] -base_url = "https://github.com/apache/arrow/blob/@SOURCE_REFERENCE@/c_glib/arrow-cuda-glib" - -[extra] -content_base_url = "https://github.com/apache/arrow/blob/@SOURCE_REFERENCE@/c_glib/doc/" -content_files = [ -] -content_images = [ -] -urlmap_file = "urlmap.js" diff --git a/c_glib/doc/arrow-dataset-glib.toml.in b/c_glib/doc/arrow-dataset-glib.toml.in deleted file mode 100644 index 1e76bab4db3..00000000000 --- a/c_glib/doc/arrow-dataset-glib.toml.in +++ /dev/null @@ -1,55 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -[library] -name = "Apache Arrow Dataset GLib" -version = "@VERSION@" -browse_url = "https://github.com/apache/arrow/tree/@SOURCE_REFERENCE@/c_glib/arrow-dataset-glib/" -repository_url = "https://github.com/apache/arrow.git" -website_url = "https://arrow.apache.org/docs/c_glib/arrow-dataset-glib/" -authors = "The Apache Software Foundation" -license = "Apache-2.0" -description = "Apache Arrow Dataset GLib API" -dependencies = ["Arrow-1.0"] -related = ["Gio-2.0", "GObject-2.0"] -search_index = true - -[dependencies."Arrow-1.0"] -name = "Arrow" -description = "Apache Arrow GLib API" -docs_url = "https://arrow.apache.org/docs/c_glib/arrow-glib/" - -[related."Gio-2.0"] -name = "GIO" -description = "GObject Interfaces and Objects, Networking, IPC, and I/O" -docs_url = "https://docs.gtk.org/gio/" - -[related."GObject-2.0"] -name = "GObject" -description = "The base type system library" -docs_url = "https://docs.gtk.org/gobject/" - -[source-location] -base_url = "https://github.com/apache/arrow/blob/@SOURCE_REFERENCE@/c_glib/arrow-dataset-glib" - -[extra] -content_base_url = "https://github.com/apache/arrow/blob/@SOURCE_REFERENCE@/c_glib/doc/" -content_files = [ -] -content_images = [ -] -urlmap_file = "urlmap.js" diff --git a/c_glib/doc/arrow-dataset-glib/arrow-dataset-glib-docs.xml b/c_glib/doc/arrow-dataset-glib/arrow-dataset-glib-docs.xml new file mode 100644 index 00000000000..e6066379ceb --- /dev/null +++ b/c_glib/doc/arrow-dataset-glib/arrow-dataset-glib-docs.xml @@ -0,0 +1,92 @@ + + + + + %gtkdocentities; +]> + + + &package_name; Reference Manual + + for &package_string;. + + + + + + Data + + Partitioning + + Dataset + + Dataset factory + + + + Scan + + Fragment + + File format + + + + + + Object Hierarchy + + + + API Index + + + + Index of deprecated API + + + + Index of new symbols in 11.0.0 + + + + Index of new symbols in 6.0.0 + + + + Index of new symbols in 5.0.0 + + + + Index of new symbols in 4.0.0 + + + + Index of new symbols in 3.0.0 + + + + diff --git a/docs/source/c_glib/arrow-cuda-glib/index.md b/c_glib/doc/arrow-dataset-glib/entities.xml.in similarity index 76% rename from docs/source/c_glib/arrow-cuda-glib/index.md rename to c_glib/doc/arrow-dataset-glib/entities.xml.in index 3ca5470a09b..aa5addb4e84 100644 --- a/docs/source/c_glib/arrow-cuda-glib/index.md +++ b/c_glib/doc/arrow-dataset-glib/entities.xml.in @@ -16,8 +16,9 @@ specific language governing permissions and limitations under the License. --> - -(arrow-cuda-glib)= -# Apache Arrow CUDA GLib - -Stub page for the Apache Arrow CUDA GLib docs; actual source is located in c_glib/ sub-directory. + + + + + + diff --git a/c_glib/doc/arrow-dataset-glib/meson.build b/c_glib/doc/arrow-dataset-glib/meson.build new file mode 100644 index 00000000000..ca037b7e36a --- /dev/null +++ b/c_glib/doc/arrow-dataset-glib/meson.build @@ -0,0 +1,83 @@ +# -*- indent-tabs-mode: nil -*- +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +package_id = 'arrow-dataset-glib' +package_name = 'Apache Arrow Dataset GLib' +entities_conf = configuration_data() +entities_conf.set('PACKAGE', package_id) +entities_conf.set('PACKAGE_BUGREPORT', + 'https://issues.apache.org/jira/browse/ARROW') +entities_conf.set('PACKAGE_NAME', package_name) +entities_conf.set('PACKAGE_STRING', + ' '.join([package_id, version])) +entities_conf.set('PACKAGE_URL', 'https://arrow.apache.org/') +entities_conf.set('PACKAGE_VERSION', version) +configure_file(input: 'entities.xml.in', + output: 'entities.xml', + configuration: entities_conf) + +private_headers = [ +] + +content_files = [ +] + +html_images = [ +] + +glib_prefix = dependency('glib-2.0').get_pkgconfig_variable('prefix') +glib_doc_path = join_paths(glib_prefix, 'share', 'gtk-doc', 'html') +arrow_glib_doc_path = join_paths(data_dir, + 'gtk-doc', + 'html', + 'arrow-glib') +doc_path = join_paths(data_dir, 'gtk-doc', 'html', package_id) + +source_directories = [ + join_paths(meson.source_root(), package_id), + join_paths(meson.build_root(), package_id), +] +dependencies = [ + arrow_glib, + arrow_dataset_glib, +] +ignore_headers = [] +gnome.gtkdoc(package_id, + main_xml: package_id + '-docs.xml', + src_dir: source_directories, + dependencies: dependencies, + ignore_headers: ignore_headers, + gobject_typesfile: package_id + '.types', + scan_args: [ + '--rebuild-types', + '--deprecated-guards=GARROW_DISABLE_DEPRECATED', + ], + mkdb_args: [ + '--output-format=xml', + '--name-space=gadataset', + '--source-suffixes=c,cpp,h', + ], + fixxref_args: [ + '--html-dir=' + doc_path, + '--extra-dir=' + join_paths(glib_doc_path, 'glib'), + '--extra-dir=' + join_paths(glib_doc_path, 'gobject'), + '--extra-dir=' + arrow_glib_doc_path, + ], + html_assets: html_images, + install: true) diff --git a/c_glib/doc/arrow-flight-glib.toml.in b/c_glib/doc/arrow-flight-glib.toml.in deleted file mode 100644 index 9fef030f431..00000000000 --- a/c_glib/doc/arrow-flight-glib.toml.in +++ /dev/null @@ -1,55 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -[library] -name = "Apache Arrow Flight GLib" -version = "@VERSION@" -browse_url = "https://github.com/apache/arrow/tree/@SOURCE_REFERENCE@/c_glib/arrow-flight-glib/" -repository_url = "https://github.com/apache/arrow.git" -website_url = "https://arrow.apache.org/docs/c_glib/arrow-flight-glib/" -authors = "The Apache Software Foundation" -license = "Apache-2.0" -description = "Apache Arrow Flight GLib API" -dependencies = ["Arrow-1.0"] -related = ["Gio-2.0", "GObject-2.0"] -search_index = true - -[dependencies."Arrow-1.0"] -name = "Arrow" -description = "Apache Arrow GLib API" -docs_url = "https://arrow.apache.org/docs/c_glib/arrow-glib/" - -[related."Gio-2.0"] -name = "GIO" -description = "GObject Interfaces and Objects, Networking, IPC, and I/O" -docs_url = "https://docs.gtk.org/gio/" - -[related."GObject-2.0"] -name = "GObject" -description = "The base type system library" -docs_url = "https://docs.gtk.org/gobject/" - -[source-location] -base_url = "https://github.com/apache/arrow/blob/@SOURCE_REFERENCE@/c_glib/arrow-flight-glib" - -[extra] -content_base_url = "https://github.com/apache/arrow/blob/@SOURCE_REFERENCE@/c_glib/doc/" -content_files = [ -] -content_images = [ -] -urlmap_file = "urlmap.js" diff --git a/c_glib/doc/arrow-flight-glib/arrow-flight-glib-docs.xml b/c_glib/doc/arrow-flight-glib/arrow-flight-glib-docs.xml new file mode 100644 index 00000000000..e58ff375c59 --- /dev/null +++ b/c_glib/doc/arrow-flight-glib/arrow-flight-glib-docs.xml @@ -0,0 +1,75 @@ + + + + + %gtkdocentities; +]> + + + &package_name; Reference Manual + + for &package_string;. + + + + + + RPC + + + + + + + Object Hierarchy + + + + API Index + + + + Index of deprecated API + + + + Index of new symbols in 14.0.0 + + + + Index of new symbols in 12.0.0 + + + + Index of new symbols in 6.0.0 + + + + Index of new symbols in 5.0.0 + + + + diff --git a/docs/source/c_glib/arrow-dataset-glib/index.md b/c_glib/doc/arrow-flight-glib/entities.xml.in similarity index 76% rename from docs/source/c_glib/arrow-dataset-glib/index.md rename to c_glib/doc/arrow-flight-glib/entities.xml.in index 50101b299c1..aa5addb4e84 100644 --- a/docs/source/c_glib/arrow-dataset-glib/index.md +++ b/c_glib/doc/arrow-flight-glib/entities.xml.in @@ -16,8 +16,9 @@ specific language governing permissions and limitations under the License. --> - -(arrow-dataset-glib)= -# Apache Arrow Dataset GLib - -Stub page for the Apache Arrow Dataset GLib docs; actual source is located in c_glib/ sub-directory. + + + + + + diff --git a/c_glib/doc/arrow-flight-glib/meson.build b/c_glib/doc/arrow-flight-glib/meson.build new file mode 100644 index 00000000000..64524409c72 --- /dev/null +++ b/c_glib/doc/arrow-flight-glib/meson.build @@ -0,0 +1,83 @@ +# -*- indent-tabs-mode: nil -*- +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +package_id = 'arrow-flight-glib' +package_name = 'Apache Arrow Flight GLib' +entities_conf = configuration_data() +entities_conf.set('PACKAGE', package_id) +entities_conf.set('PACKAGE_BUGREPORT', + 'https://issues.apache.org/jira/browse/ARROW') +entities_conf.set('PACKAGE_NAME', package_name) +entities_conf.set('PACKAGE_STRING', + ' '.join([package_id, version])) +entities_conf.set('PACKAGE_URL', 'https://arrow.apache.org/') +entities_conf.set('PACKAGE_VERSION', version) +configure_file(input: 'entities.xml.in', + output: 'entities.xml', + configuration: entities_conf) + +private_headers = [ +] + +content_files = [ +] + +html_images = [ +] + +glib_prefix = dependency('glib-2.0').get_pkgconfig_variable('prefix') +glib_doc_path = join_paths(glib_prefix, 'share', 'gtk-doc', 'html') +arrow_glib_doc_path = join_paths(data_dir, + 'gtk-doc', + 'html', + 'arrow-glib') +doc_path = join_paths(data_dir, 'gtk-doc', 'html', package_id) + +source_directories = [ + join_paths(meson.source_root(), package_id), + join_paths(meson.build_root(), package_id), +] +dependencies = [ + arrow_glib, + arrow_flight_glib, +] +ignore_headers = [] +gnome.gtkdoc(package_id, + main_xml: package_id + '-docs.xml', + src_dir: source_directories, + dependencies: dependencies, + ignore_headers: ignore_headers, + gobject_typesfile: package_id + '.types', + scan_args: [ + '--rebuild-types', + '--deprecated-guards=GARROW_DISABLE_DEPRECATED', + ], + mkdb_args: [ + '--output-format=xml', + '--name-space=gaflight', + '--source-suffixes=c,cpp,h', + ], + fixxref_args: [ + '--html-dir=' + doc_path, + '--extra-dir=' + join_paths(glib_doc_path, 'glib'), + '--extra-dir=' + join_paths(glib_doc_path, 'gobject'), + '--extra-dir=' + arrow_glib_doc_path, + ], + html_assets: html_images, + install: true) diff --git a/c_glib/doc/arrow-flight-sql-glib.toml.in b/c_glib/doc/arrow-flight-sql-glib.toml.in deleted file mode 100644 index e4b9c3a83aa..00000000000 --- a/c_glib/doc/arrow-flight-sql-glib.toml.in +++ /dev/null @@ -1,55 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -[library] -name = "Apache Arrow Flight SQL GLib" -version = "@VERSION@" -browse_url = "https://github.com/apache/arrow/tree/@SOURCE_REFERENCE@/c_glib/arrow-flight-sql-glib/" -repository_url = "https://github.com/apache/arrow.git" -website_url = "https://arrow.apache.org/docs/c_glib/arrow-flight-sql-glib/" -authors = "The Apache Software Foundation" -license = "Apache-2.0" -description = "Apache Arrow Flight SQL GLib API" -dependencies = ["ArrowFlight-1.0", "Arrow-1.0"] -related = ["GObject-2.0"] -search_index = true - -[dependencies."ArrowFlight-1.0"] -name = "ArrowFlight" -description = "Apache Arrow Flight GLib API" -docs_url = "https://arrow.apache.org/docs/c_glib/arrow-flight-glib/" - -[dependencies."Arrow-1.0"] -name = "Arrow" -description = "Apache Arrow GLib API" -docs_url = "https://arrow.apache.org/docs/c_glib/arrow-glib/" - -[related."GObject-2.0"] -name = "GObject" -description = "The base type system library" -docs_url = "https://docs.gtk.org/gobject/" - -[source-location] -base_url = "https://github.com/apache/arrow/blob/@SOURCE_REFERENCE@/c_glib/arrow-flight-sql-glib" - -[extra] -content_base_url = "https://github.com/apache/arrow/blob/@SOURCE_REFERENCE@/c_glib/doc/" -content_files = [ -] -content_images = [ -] -urlmap_file = "urlmap.js" diff --git a/c_glib/doc/arrow-flight-sql-glib/arrow-flight-sql-glib-docs.xml b/c_glib/doc/arrow-flight-sql-glib/arrow-flight-sql-glib-docs.xml new file mode 100644 index 00000000000..f87d6574611 --- /dev/null +++ b/c_glib/doc/arrow-flight-sql-glib/arrow-flight-sql-glib-docs.xml @@ -0,0 +1,70 @@ + + + + + %gtkdocentities; +]> + + + &package_name; Reference Manual + + for &package_string;. + + + + + + SQL + + + + + + Object Hierarchy + + + + API Index + + + + Index of deprecated API + + + + Index of new symbols in 14.0.0 + + + + Index of new symbols in 13.0.0 + + + + Index of new symbols in 9.0.0 + + + + diff --git a/docs/source/c_glib/arrow-flight-glib/index.md b/c_glib/doc/arrow-flight-sql-glib/entities.xml.in similarity index 76% rename from docs/source/c_glib/arrow-flight-glib/index.md rename to c_glib/doc/arrow-flight-sql-glib/entities.xml.in index 0a4e59778c8..aa5addb4e84 100644 --- a/docs/source/c_glib/arrow-flight-glib/index.md +++ b/c_glib/doc/arrow-flight-sql-glib/entities.xml.in @@ -16,8 +16,9 @@ specific language governing permissions and limitations under the License. --> - -(arrow-flight-glib)= -# Apache Arrow Flight GLib - -Stub page for the Apache Arrow Flight GLib docs; actual source is located in c_glib/ sub-directory. + + + + + + diff --git a/c_glib/doc/arrow-flight-sql-glib/meson.build b/c_glib/doc/arrow-flight-sql-glib/meson.build new file mode 100644 index 00000000000..46a7cc49059 --- /dev/null +++ b/c_glib/doc/arrow-flight-sql-glib/meson.build @@ -0,0 +1,89 @@ +# -*- indent-tabs-mode: nil -*- +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +package_id = 'arrow-flight-sql-glib' +package_name = 'Apache Arrow Flight SQL GLib' +entities_conf = configuration_data() +entities_conf.set('PACKAGE', package_id) +entities_conf.set('PACKAGE_BUGREPORT', + 'https://issues.apache.org/jira/browse/ARROW') +entities_conf.set('PACKAGE_NAME', package_name) +entities_conf.set('PACKAGE_STRING', + ' '.join([package_id, version])) +entities_conf.set('PACKAGE_URL', 'https://arrow.apache.org/') +entities_conf.set('PACKAGE_VERSION', version) +configure_file(input: 'entities.xml.in', + output: 'entities.xml', + configuration: entities_conf) + +private_headers = [ +] + +content_files = [ +] + +html_images = [ +] + +glib_prefix = dependency('glib-2.0').get_pkgconfig_variable('prefix') +glib_doc_path = join_paths(glib_prefix, 'share', 'gtk-doc', 'html') +arrow_glib_doc_path = join_paths(data_dir, + 'gtk-doc', + 'html', + 'arrow-glib') +arrow_flight_glib_doc_path = join_paths(data_dir, + 'gtk-doc', + 'html', + 'arrow-flight-glib') +doc_path = join_paths(data_dir, 'gtk-doc', 'html', package_id) + +source_directories = [ + join_paths(meson.source_root(), package_id), + join_paths(meson.build_root(), package_id), +] +dependencies = [ + arrow_glib, + arrow_flight_glib, + arrow_flight_sql_glib, +] +ignore_headers = [] +gnome.gtkdoc(package_id, + main_xml: package_id + '-docs.xml', + src_dir: source_directories, + dependencies: dependencies, + ignore_headers: ignore_headers, + gobject_typesfile: package_id + '.types', + scan_args: [ + '--rebuild-types', + '--deprecated-guards=GARROW_DISABLE_DEPRECATED', + ], + mkdb_args: [ + '--output-format=xml', + '--name-space=gaflightsql', + '--source-suffixes=c,cpp,h', + ], + fixxref_args: [ + '--html-dir=' + doc_path, + '--extra-dir=' + join_paths(glib_doc_path, 'glib'), + '--extra-dir=' + join_paths(glib_doc_path, 'gobject'), + '--extra-dir=' + arrow_glib_doc_path, + '--extra-dir=' + arrow_flight_glib_doc_path, + ], + html_assets: html_images, + install: true) diff --git a/c_glib/doc/arrow-glib.toml.in b/c_glib/doc/arrow-glib.toml.in deleted file mode 100644 index 28402310d50..00000000000 --- a/c_glib/doc/arrow-glib.toml.in +++ /dev/null @@ -1,87 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -[library] -name = "Apache Arrow GLib" -version = "@VERSION@" -browse_url = "https://github.com/apache/arrow/tree/@SOURCE_REFERENCE@/c_glib/arrow-glib/" -repository_url = "https://github.com/apache/arrow.git" -website_url = "https://arrow.apache.org/docs/c_glib/arrow-glib/" -authors = "The Apache Software Foundation" -license = "Apache-2.0" -description = "Apache Arrow GLib API" -dependencies = ["Gio-2.0", "GObject-2.0"] -related = [ - "ArrowCUDA-1.0", - "ArrowData-1.0", - "ArrowFlight-1.0", - "ArrowFlightSQL-1.0", - "Gandiva-1.0", - "Parquet-1.0", -] -search_index = true - -[dependencies."Gio-2.0"] -name = "Gio" -description = "GObject Interfaces and Objects, Networking, IPC, and I/O" -docs_url = "https://docs.gtk.org/gio/" - -[dependencies."GObject-2.0"] -name = "GObject" -description = "The base type system library" -docs_url = "https://docs.gtk.org/gobject/" - -[related."ArrowCUDA-1.0"] -name = "Apache Arrow CUDA GLib" -description = "Apache Arrow CUDA GLib API" -docs_url = "https://arrow.apache.org/docs/c_glib/arrow-cuda-glib/" - -[related."ArrowDataset-1.0"] -name = "Apache Arrow Dataset GLib" -description = "Apache Arrow Dataset GLib API" -docs_url = "https://arrow.apache.org/docs/c_glib/arrow-dataset-glib/" - -[related."ArrowFlight-1.0"] -name = "Apache Arrow Flight GLib" -description = "Apache Arrow Flight GLib API" -docs_url = "https://arrow.apache.org/docs/c_glib/arrow-flight-glib/" - -[related."ArrowFlightSQL-1.0"] -name = "Apache Arrow FlightSQL GLib" -description = "Apache Arrow FlightSQL GLib API" -docs_url = "https://arrow.apache.org/docs/c_glib/arrow-flight-sql-glib/" - -[related."Gandiva-1.0"] -name = "Apache Gandiva GLib" -description = "Apache Gandiva GLib API" -docs_url = "https://arrow.apache.org/docs/c_glib/gandiva-glib/" - -[related."Parquet-1.0"] -name = "Apache Parquet GLib" -description = "Apache Parquet GLib API" -docs_url = "https://arrow.apache.org/docs/c_glib/arrow-parquet-glib/" - -[source-location] -base_url = "https://github.com/apache/arrow/blob/@SOURCE_REFERENCE@/c_glib/arrow-glib" - -[extra] -content_base_url = "https://github.com/apache/arrow/blob/@SOURCE_REFERENCE@/c_glib/doc/" -content_files = [ -] -content_images = [ -] -urlmap_file = "urlmap.js" diff --git a/c_glib/doc/arrow-glib/arrow-glib-docs.xml b/c_glib/doc/arrow-glib/arrow-glib-docs.xml new file mode 100644 index 00000000000..e92eb955675 --- /dev/null +++ b/c_glib/doc/arrow-glib/arrow-glib-docs.xml @@ -0,0 +1,313 @@ + + + + + %gtkdocentities; +]> + + + &package_name; Reference Manual + + for &package_string;. + + + + + + Data + + Array + + + + + Array builder + + + + Tensor + + + + Value + + + + + Scalar + + + + Type + + + + + + Schema + + + + + Table + + + + + + Table builder + + + + Computation + + + + + + Buffer + + + + Codec + + + + Error + + + + + + File system API + + File system + + + + Local file system + + + + + + IO + + Mode + + + + Input + + + + + Output + + + + + + Input and output + + + + + + IPC + + Metadata + + + + Options + + + + Reader + + + + + Writer + + + + + + GPU + + CUDA + + + + + + Memory + + Memory pool + + + + + + Misc + + Version + + + + + + Object Hierarchy + + + + API Index + + + + Index of deprecated API + + + + Index of new symbols in 16.0.0 + + + + Index of new symbols in 13.0.0 + + + + Index of new symbols in 12.0.0 + + + + Index of new symbols in 11.0.0 + + + + Index of new symbols in 10.0.0 + + + + Index of new symbols in 9.0.0 + + + + Index of new symbols in 8.0.0 + + + + Index of new symbols in 7.0.0 + + + + Index of new symbols in 6.0.0 + + + + Index of new symbols in 5.0.0 + + + + Index of new symbols in 4.0.0 + + + + Index of new symbols in 3.0.0 + + + + Index of new symbols in 2.0.0 + + + + Index of new symbols in 1.0.0 + + + + Index of new symbols in 0.17.0 + + + + Index of new symbols in 0.16.0 + + + + Index of new symbols in 0.15.0 + + + + Index of new symbols in 0.14.0 + + + + Index of new symbols in 0.13.0 + + + + Index of new symbols in 0.12.0 + + + + Index of new symbols in 0.11.0 + + + + Index of new symbols in 0.10.0 + + + + Index of new symbols in 0.9.0 + + + + Index of new symbols in 0.8.0 + + + + Index of new symbols in 0.7.0 + + + + Index of new symbols in 0.6.0 + + + + Index of new symbols in 0.5.0 + + + + Index of new symbols in 0.4.0 + + + + Index of new symbols in 0.3.0 + + + + diff --git a/docs/source/c_glib/arrow-flight-sql-glib/index.md b/c_glib/doc/arrow-glib/entities.xml.in similarity index 76% rename from docs/source/c_glib/arrow-flight-sql-glib/index.md rename to c_glib/doc/arrow-glib/entities.xml.in index acc44222124..aa5addb4e84 100644 --- a/docs/source/c_glib/arrow-flight-sql-glib/index.md +++ b/c_glib/doc/arrow-glib/entities.xml.in @@ -16,8 +16,9 @@ specific language governing permissions and limitations under the License. --> - -(arrow-flight-sql-glib)= -# Apache Arrow Flight SQL GLib - -Stub page for the Apache Arrow Flight SQL GLib docs; actual source is located in c_glib/ sub-directory. + + + + + + diff --git a/c_glib/doc/arrow-glib/meson.build b/c_glib/doc/arrow-glib/meson.build new file mode 100644 index 00000000000..eeb2fd85dad --- /dev/null +++ b/c_glib/doc/arrow-glib/meson.build @@ -0,0 +1,93 @@ +# -*- indent-tabs-mode: nil -*- +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +package_id = meson.project_name() +package_name = 'Apache Arrow GLib' +entities_conf = configuration_data() +entities_conf.set('PACKAGE', package_id) +entities_conf.set('PACKAGE_BUGREPORT', + 'https://issues.apache.org/jira/browse/ARROW') +entities_conf.set('PACKAGE_NAME', package_name) +entities_conf.set('PACKAGE_STRING', + ' '.join([package_name, version])) +entities_conf.set('PACKAGE_URL', 'https://arrow.apache.org/') +entities_conf.set('PACKAGE_VERSION', version) +configure_file(input: 'entities.xml.in', + output: 'entities.xml', + configuration: entities_conf) + +private_headers = [ +] + +content_files = [ +] + +html_images = [ +] + +glib_prefix = dependency('glib-2.0').get_pkgconfig_variable('prefix') +glib_doc_path = join_paths(glib_prefix, 'share', 'gtk-doc', 'html') +doc_path = join_paths(data_dir, 'gtk-doc', 'html', package_id) + +source_directories = [ + join_paths(meson.source_root(), package_id), + join_paths(meson.build_root(), package_id), +] +dependencies = [ + arrow_glib, +] +if arrow_cuda.found() + source_directories += [ + join_paths(meson.source_root(), 'arrow-cuda-glib'), + join_paths(meson.build_root(), 'arrow-cuda-glib'), + ] + dependencies += [ + arrow_cuda_glib, + ] +endif +ignore_headers = [ + join_paths(meson.source_root(), 'arrow-glib', 'gobject-type.h'), +] +if not have_arrow_orc + ignore_headers += [ + join_paths(meson.source_root(), 'arrow-glib', 'orc-file-reader.h'), + ] +endif +gnome.gtkdoc(package_id, + main_xml: package_id + '-docs.xml', + src_dir: source_directories, + dependencies: dependencies, + ignore_headers: ignore_headers, + gobject_typesfile: package_id + '.types', + scan_args: [ + '--rebuild-types', + '--deprecated-guards=GARROW_DISABLE_DEPRECATED', + ], + mkdb_args: [ + '--output-format=xml', + '--name-space=garrow', + '--source-suffixes=c,cpp,h', + ], + fixxref_args: [ + '--html-dir=' + doc_path, + '--extra-dir=' + join_paths(glib_doc_path, 'glib'), + '--extra-dir=' + join_paths(glib_doc_path, 'gobject'), + ], + html_assets: html_images, + install: true) diff --git a/c_glib/doc/gandiva-glib.toml.in b/c_glib/doc/gandiva-glib.toml.in deleted file mode 100644 index 56bf5b75d7f..00000000000 --- a/c_glib/doc/gandiva-glib.toml.in +++ /dev/null @@ -1,55 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -[library] -name = "Apache Arrow Gandiva GLib" -version = "@VERSION@" -browse_url = "https://github.com/apache/arrow/tree/@SOURCE_REFERENCE@/c_glib/gandiva-glib/" -repository_url = "https://github.com/apache/arrow.git" -website_url = "https://arrow.apache.org/docs/c_glib/gandiva-glib/" -authors = "The Apache Software Foundation" -license = "Apache-2.0" -description = "Apache Arrow Gandiva GLib API" -dependencies = ["Arrow-1.0"] -related = ["Parquet-1.0", "GObject-2.0"] -search_index = true - -[dependencies."Arrow-1.0"] -name = "Arrow" -description = "Apache Arrow GLib API" -docs_url = "https://arrow.apache.org/docs/c_glib/arrow-glib/" - -[related."Parquet-1.0"] -name = "Apache Parquet GLib" -description = "Apache Parquet GLib API" -docs_url = "https://arrow.apache.org/docs/c_glib/arrow-parquet-glib/" - -[related."GObject-2.0"] -name = "GObject" -description = "The base type system library" -docs_url = "https://docs.gtk.org/gobject/" - -[source-location] -base_url = "https://github.com/apache/arrow/blob/@SOURCE_REFERENCE@/c_glib/gandiva-glib" - -[extra] -content_base_url = "https://github.com/apache/arrow/blob/@SOURCE_REFERENCE@/c_glib/doc/" -content_files = [ -] -content_images = [ -] -urlmap_file = "urlmap.js" diff --git a/c_glib/doc/gandiva-glib/entities.xml.in b/c_glib/doc/gandiva-glib/entities.xml.in new file mode 100644 index 00000000000..aa5addb4e84 --- /dev/null +++ b/c_glib/doc/gandiva-glib/entities.xml.in @@ -0,0 +1,24 @@ + + + + + + + diff --git a/c_glib/doc/gandiva-glib/gandiva-glib-docs.xml b/c_glib/doc/gandiva-glib/gandiva-glib-docs.xml new file mode 100644 index 00000000000..a5c32f11337 --- /dev/null +++ b/c_glib/doc/gandiva-glib/gandiva-glib-docs.xml @@ -0,0 +1,132 @@ + + + + + %gtkdocentities; +]> + + + &package_name; Reference Manual + + for &package_string;. + + + + + + Evaluate Expression + + Expression + + + + Filter + + + + Selection vector + + + + Projector + + + + + + Expression Tree + + Node + + + + + + Function + + Registry + + + + Signature + + + + Native function + + + + + + Misc + + Version + + + + + + Object Hierarchy + + + + API Index + + + + Index of deprecated API + + + + Index of new symbols in 15.0.0 + + + + Index of new symbols in 4.0.0 + + + + Index of new symbols in 1.0.0 + + + + Index of new symbols in 0.17.0 + + + + Index of new symbols in 0.15.0 + + + + Index of new symbols in 0.14.0 + + + + Index of new symbols in 0.12.0 + + + + diff --git a/c_glib/doc/gandiva-glib/meson.build b/c_glib/doc/gandiva-glib/meson.build new file mode 100644 index 00000000000..7ff815f42a1 --- /dev/null +++ b/c_glib/doc/gandiva-glib/meson.build @@ -0,0 +1,83 @@ +# -*- indent-tabs-mode: nil -*- +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +package_id = 'gandiva-glib' +package_name = 'Gandiva GLib' +entities_conf = configuration_data() +entities_conf.set('PACKAGE', package_id) +entities_conf.set('PACKAGE_BUGREPORT', + 'https://issues.apache.org/jira/browse/ARROW') +entities_conf.set('PACKAGE_NAME', package_name) +entities_conf.set('PACKAGE_STRING', + ' '.join([package_name, version])) +entities_conf.set('PACKAGE_URL', 'https://arrow.apache.org/') +entities_conf.set('PACKAGE_VERSION', version) +configure_file(input: 'entities.xml.in', + output: 'entities.xml', + configuration: entities_conf) + +private_headers = [ +] + +content_files = [ +] + +html_images = [ +] + +glib_prefix = dependency('glib-2.0').get_pkgconfig_variable('prefix') +glib_doc_path = join_paths(glib_prefix, 'share', 'gtk-doc', 'html') +arrow_glib_doc_path = join_paths(data_dir, + 'gtk-doc', + 'html', + 'arrow-glib') +doc_path = join_paths(data_dir, 'gtk-doc', 'html', package_id) + +source_directories = [ + join_paths(meson.source_root(), package_id), + join_paths(meson.build_root(), package_id), +] +dependencies = [ + arrow_glib, + gandiva_glib, +] +ignore_headers = [] +gnome.gtkdoc(package_id, + main_xml: package_id + '-docs.xml', + src_dir: source_directories, + dependencies: dependencies, + ignore_headers: ignore_headers, + gobject_typesfile: package_id + '.types', + scan_args: [ + '--rebuild-types', + '--deprecated-guards=GGANDIVA_DISABLE_DEPRECATED', + ], + mkdb_args: [ + '--output-format=xml', + '--name-space=ggandiva', + '--source-suffixes=c,cpp,h', + ], + fixxref_args: [ + '--html-dir=' + doc_path, + '--extra-dir=' + join_paths(glib_doc_path, 'glib'), + '--extra-dir=' + join_paths(glib_doc_path, 'gobject'), + '--extra-dir=' + arrow_glib_doc_path, + ], + html_assets: html_images, + install: true) diff --git a/c_glib/doc/meson.build b/c_glib/doc/meson.build deleted file mode 100644 index 8d0ac4229b2..00000000000 --- a/c_glib/doc/meson.build +++ /dev/null @@ -1,93 +0,0 @@ -# -*- indent-tabs-mode: nil -*- -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -source_reference = get_option('source_reference') -gi_docgen = find_program('gi-docgen') - -gi_docgen_toml_conf = configuration_data() -gi_docgen_toml_conf.set('SOURCE_REFERENCE', source_reference) -# We can't use "version.replace('-SNAPSHOT', '.dev')" here because -# Ubuntu 20.04's Meson is < 0.58.0. -if version_tag == '' - gi_docgen_version_tag = '' -else - # GI-DocGen doesn't like MAJOR.MINOR.PATCH-SNAPSHOT format. - gi_docgen_version_tag = '.dev' -endif -gi_docgen_version = '@0@.@1@.@2@@3@'.format(version_major, - version_minor, - version_micro, - gi_docgen_version_tag) -gi_docgen_toml_conf.set('VERSION', gi_docgen_version) - -gir_top_build_dir = meson.current_build_dir() / '..' -arrow_glib_gir_dir = gir_top_build_dir / 'arrow-glib' -arrow_flight_glib_gir_dir = gir_top_build_dir / 'arrow-flight-glib' -entries = [['arrow-glib', arrow_glib_gir[0]]] -if arrow_cuda.found() - entries += [['arrow-cuda-glib', arrow_cuda_glib_gir[0]]] -endif -if arrow_dataset.found() - entries += [['arrow-dataset-glib', arrow_dataset_glib_gir[0]]] -endif -if arrow_flight.found() - entries += [['arrow-flight-glib', arrow_flight_glib_gir[0]]] -endif -if arrow_flight_sql.found() - entries += [['arrow-flight-sql-glib', arrow_flight_sql_glib_gir[0]]] -endif -if gandiva.found() - entries += [['gandiva-glib', gandiva_glib_gir[0]]] -endif -if parquet.found() - entries += [['parquet-glib', parquet_glib_gir[0]]] -endif -foreach entry : entries - module_name = entry[0] - gir = entry[1] - gi_docgen_toml = configure_file(input: '@0@.toml.in'.format(module_name), - output: '@0@.toml'.format(module_name), - configuration: gi_docgen_toml_conf) - gir_dir = gir_top_build_dir / module_name - current_source_dir = meson.current_source_dir() - command = [ - gi_docgen, - 'generate', - '--add-include-path=@0@'.format(arrow_flight_glib_gir_dir), - '--add-include-path=@0@'.format(arrow_glib_gir_dir), - '--add-include-path=@0@'.format(gir_dir), - '--config=@INPUT0@', - '--content-dir=@0@'.format(current_source_dir), - '--no-namespace-dir', - '--output-dir=@OUTPUT@', - '--quiet', - ] - if get_option('werror') - command += ['--fatal-warnings'] - endif - command += ['@INPUT1@'] - custom_target('@0@-doc'.format(module_name), - input: [gi_docgen_toml, gir], - depend_files: ['urlmap.js'], - output: module_name, - command: command, - build_by_default: true, - install: true, - install_dir: doc_dir) -endforeach diff --git a/c_glib/doc/parquet-glib.toml.in b/c_glib/doc/parquet-glib.toml.in deleted file mode 100644 index 119ed0b5634..00000000000 --- a/c_glib/doc/parquet-glib.toml.in +++ /dev/null @@ -1,55 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -[library] -name = "Apache Parquet GLib" -version = "@VERSION@" -browse_url = "https://github.com/apache/arrow/tree/@SOURCE_REFERENCE@/c_glib/parquet-glib/" -repository_url = "https://github.com/apache/arrow.git" -website_url = "https://arrow.apache.org/docs/c_glib/parquet-glib/" -authors = "The Apache Software Foundation" -license = "Apache-2.0" -description = "Apache Parquet GLib API" -dependencies = ["Arrow-1.0"] -related = ["Gio-2.0", "GObject-2.0"] -search_index = true - -[dependencies."Arrow-1.0"] -name = "Arrow" -description = "Apache Arrow GLib API" -docs_url = "https://arrow.apache.org/docs/c_glib/arrow-glib/" - -[related."Gio-2.0"] -name = "GIO" -description = "GObject Interfaces and Objects, Networking, IPC, and I/O" -docs_url = "https://docs.gtk.org/gio/" - -[related."GObject-2.0"] -name = "GObject" -description = "The base type system library" -docs_url = "https://docs.gtk.org/gobject/" - -[source-location] -base_url = "https://github.com/apache/arrow/blob/@SOURCE_REFERENCE@/c_glib/parquet-glib" - -[extra] -content_base_url = "https://github.com/apache/arrow/blob/@SOURCE_REFERENCE@/c_glib/doc/" -content_files = [ -] -content_images = [ -] -urlmap_file = "urlmap.js" diff --git a/c_glib/doc/parquet-glib/entities.xml.in b/c_glib/doc/parquet-glib/entities.xml.in new file mode 100644 index 00000000000..aa5addb4e84 --- /dev/null +++ b/c_glib/doc/parquet-glib/entities.xml.in @@ -0,0 +1,24 @@ + + + + + + + diff --git a/c_glib/doc/parquet-glib/meson.build b/c_glib/doc/parquet-glib/meson.build new file mode 100644 index 00000000000..f4ee794d05a --- /dev/null +++ b/c_glib/doc/parquet-glib/meson.build @@ -0,0 +1,83 @@ +# -*- indent-tabs-mode: nil -*- +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +package_id = 'parquet-glib' +package_name = 'Apache Parquet GLib' +entities_conf = configuration_data() +entities_conf.set('PACKAGE', package_id) +entities_conf.set('PACKAGE_BUGREPORT', + 'https://issues.apache.org/jira/browse/PARQUET') +entities_conf.set('PACKAGE_NAME', package_name) +entities_conf.set('PACKAGE_STRING', + ' '.join([package_name, version])) +entities_conf.set('PACKAGE_URL', 'https://arrow.apache.org/') +entities_conf.set('PACKAGE_VERSION', version) +configure_file(input: 'entities.xml.in', + output: 'entities.xml', + configuration: entities_conf) + +private_headers = [ +] + +content_files = [ +] + +html_images = [ +] + +glib_prefix = dependency('glib-2.0').get_pkgconfig_variable('prefix') +glib_doc_path = join_paths(glib_prefix, 'share', 'gtk-doc', 'html') +arrow_glib_doc_path = join_paths(data_dir, + 'gtk-doc', + 'html', + 'arrow-glib') +doc_path = join_paths(data_dir, 'gtk-doc', 'html', package_id) + +source_directories = [ + join_paths(meson.source_root(), package_id), + join_paths(meson.build_root(), package_id), +] +dependencies = [ + parquet_glib, + arrow_glib, +] +ignore_headers = [] +gnome.gtkdoc(package_id, + main_xml: package_id + '-docs.xml', + src_dir: source_directories, + dependencies: dependencies, + ignore_headers: ignore_headers, + gobject_typesfile: package_id + '.types', + scan_args: [ + '--rebuild-types', + '--deprecated-guards=GARROW_DISABLE_DEPRECATED', + ], + mkdb_args: [ + '--output-format=xml', + '--name-space=gparquet', + '--source-suffixes=c,cpp,h', + ], + fixxref_args: [ + '--html-dir=' + doc_path, + '--extra-dir=' + join_paths(glib_doc_path, 'glib'), + '--extra-dir=' + join_paths(glib_doc_path, 'gobject'), + '--extra-dir=' + arrow_glib_doc_path, + ], + html_assets: html_images, + install: true) diff --git a/c_glib/doc/parquet-glib/parquet-glib-docs.xml b/c_glib/doc/parquet-glib/parquet-glib-docs.xml new file mode 100644 index 00000000000..05cfb74b64b --- /dev/null +++ b/c_glib/doc/parquet-glib/parquet-glib-docs.xml @@ -0,0 +1,98 @@ + + + + + %gtkdocentities; +]> + + + &package_name; Reference Manual + + for &package_string;. + + + + + + Arrow + + IO + + + + + + + Data + + Meta + + + + + + + Object Hierarchy + + + + API Index + + + + Index of deprecated API + + + + Index of new symbols in 8.0.0 + + + + Index of new symbols in 6.0.0 + + + + Index of new symbols in 1.0.0 + + + + Index of new symbols in 0.17.0 + + + + Index of new symbols in 0.15.0 + + + + Index of new symbols in 0.12.0 + + + + Index of new symbols in 0.11.0 + + + + diff --git a/c_glib/doc/urlmap.js b/c_glib/doc/urlmap.js deleted file mode 100644 index 4760a3ab04c..00000000000 --- a/c_glib/doc/urlmap.js +++ /dev/null @@ -1,29 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -baseURLs = [ - ["Arrow", "https://arrow.apache.org/docs/c_glib/arrow-glib/"], - ["ArrowCUDA", "https://arrow.apache.org/docs/c_glib/arrow-cuda-glib/"], - ["ArrowDataset", "https://arrow.apache.org/docs/c_glib/arrow-dataset-glib/"], - ["ArrowFlight", "https://arrow.apache.org/docs/c_glib/arrow-flight-glib/"], - ["ArrowFlightSQL", "https://arrow.apache.org/docs/c_glib/arrow-flight-sql-glib/"], - ["GIO", "https://docs.gtk.org/gio/"], - ["GLib", "https://docs.gtk.org/glib/"], - ["GObject", "https://docs.gtk.org/gobject/"], - ["Gandiva", "https://arrow.apache.org/docs/c_glib/gandiva-glib/"], - ["Parquet", "https://arrow.apache.org/docs/c_glib/parquet-glib/"], -] diff --git a/c_glib/example/build.c b/c_glib/example/build.c index 2ccea841545..9b2d58d2b2b 100644 --- a/c_glib/example/build.c +++ b/c_glib/example/build.c @@ -66,7 +66,8 @@ main(int argc, char **argv) gint32 value; value = garrow_int32_array_get_value(GARROW_INT32_ARRAY(array), i); - g_print("array[%" G_GINT64_FORMAT "] = %d\n", i, value); + g_print("array[%" G_GINT64_FORMAT "] = %d\n", + i, value); } } diff --git a/c_glib/example/extension-type.c b/c_glib/example/extension-type.c index 1861943d7e5..a23fa427dc2 100644 --- a/c_glib/example/extension-type.c +++ b/c_glib/example/extension-type.c @@ -22,14 +22,19 @@ #include #define EXAMPLE_TYPE_UUID_ARRAY (example_uuid_array_get_type()) -G_DECLARE_DERIVABLE_TYPE( - ExampleUUIDArray, example_uuid_array, EXAMPLE, UUID_ARRAY, GArrowExtensionArray) +G_DECLARE_DERIVABLE_TYPE(ExampleUUIDArray, + example_uuid_array, + EXAMPLE, + UUID_ARRAY, + GArrowExtensionArray) struct _ExampleUUIDArrayClass { GArrowExtensionArrayClass parent_class; }; -G_DEFINE_TYPE(ExampleUUIDArray, example_uuid_array, GARROW_TYPE_EXTENSION_ARRAY) +G_DEFINE_TYPE(ExampleUUIDArray, + example_uuid_array, + GARROW_TYPE_EXTENSION_ARRAY) static void example_uuid_array_init(ExampleUUIDArray *object) @@ -41,6 +46,7 @@ example_uuid_array_class_init(ExampleUUIDArrayClass *klass) { } + #define EXAMPLE_TYPE_UUID_DATA_TYPE (example_uuid_data_type_get_type()) G_DECLARE_DERIVABLE_TYPE(ExampleUUIDDataType, example_uuid_data_type, @@ -52,6 +58,7 @@ struct _ExampleUUIDDataTypeClass GArrowExtensionDataTypeClass parent_class; }; + G_DEFINE_TYPE(ExampleUUIDDataType, example_uuid_data_type, GARROW_TYPE_EXTENSION_DATA_TYPE) @@ -71,8 +78,7 @@ example_uuid_data_type_equal(GArrowExtensionDataType *data_type, } static const gchar *example_uuid_data_type_serialize_id = "uuid-serialized"; -static ExampleUUIDDataType * -example_uuid_data_type_new(void); +static ExampleUUIDDataType *example_uuid_data_type_new(void); static GArrowDataType * example_uuid_data_type_deserialize(GArrowExtensionDataType *data_type, @@ -83,7 +89,9 @@ example_uuid_data_type_deserialize(GArrowExtensionDataType *data_type, gsize raw_data_size; gconstpointer raw_data = g_bytes_get_data(serialized_data, &raw_data_size); if (!(raw_data_size == strlen(example_uuid_data_type_serialize_id) && - strncmp(raw_data, example_uuid_data_type_serialize_id, raw_data_size) == 0)) { + strncmp(raw_data, + example_uuid_data_type_serialize_id, + raw_data_size) == 0)) { g_set_error(error, GARROW_ERROR, GARROW_ERROR_INVALID, @@ -96,8 +104,11 @@ example_uuid_data_type_deserialize(GArrowExtensionDataType *data_type, } GArrowDataType *expected_storage_data_type; - g_object_get(data_type, "storage-data-type", &expected_storage_data_type, NULL); - if (!garrow_data_type_equal(storage_data_type, expected_storage_data_type)) { + g_object_get(data_type, + "storage-data-type", &expected_storage_data_type, + NULL); + if (!garrow_data_type_equal(storage_data_type, + expected_storage_data_type)) { gchar *expected = garrow_data_type_to_string(expected_storage_data_type); gchar *actual = garrow_data_type_to_string(storage_data_type); g_set_error(error, @@ -136,11 +147,13 @@ example_uuid_data_type_init(ExampleUUIDDataType *object) static void example_uuid_data_type_class_init(ExampleUUIDDataTypeClass *klass) { - GArrowExtensionDataTypeClass *extension_klass = GARROW_EXTENSION_DATA_TYPE_CLASS(klass); - extension_klass->get_extension_name = example_uuid_data_type_get_extension_name; - extension_klass->equal = example_uuid_data_type_equal; - extension_klass->deserialize = example_uuid_data_type_deserialize; - extension_klass->serialize = example_uuid_data_type_serialize; + GArrowExtensionDataTypeClass *extension_klass = + GARROW_EXTENSION_DATA_TYPE_CLASS(klass); + extension_klass->get_extension_name = + example_uuid_data_type_get_extension_name; + extension_klass->equal = example_uuid_data_type_equal; + extension_klass->deserialize = example_uuid_data_type_deserialize; + extension_klass->serialize = example_uuid_data_type_serialize; extension_klass->get_array_gtype = example_uuid_data_type_get_array_gtype; } @@ -150,11 +163,11 @@ example_uuid_data_type_new(void) GArrowFixedSizeBinaryDataType *storage_data_type = garrow_fixed_size_binary_data_type_new(16); return g_object_new(EXAMPLE_TYPE_UUID_DATA_TYPE, - "storage-data-type", - storage_data_type, + "storage-data-type", storage_data_type, NULL); } + int main(int argc, char **argv) { @@ -179,7 +192,9 @@ main(int argc, char **argv) { /* Build storage data for the created UUID extension data type. */ GArrowFixedSizeBinaryDataType *storage_data_type; - g_object_get(extension_data_type, "storage-data-type", &storage_data_type, NULL); + g_object_get(extension_data_type, + "storage-data-type", &storage_data_type, + NULL); GArrowFixedSizeBinaryArrayBuilder *builder = garrow_fixed_size_binary_array_builder_new(storage_data_type); g_object_unref(storage_data_type); @@ -215,14 +230,16 @@ main(int argc, char **argv) /* Wrap the created storage data as the created UUID extension array. */ GArrowExtensionArray *extension_array = - garrow_extension_data_type_wrap_array(extension_data_type, storage); + garrow_extension_data_type_wrap_array(extension_data_type, + storage); g_object_unref(storage); gint64 n_rows = garrow_array_get_length(GARROW_ARRAY(extension_array)); /* Create a record batch to serialize the created UUID extension array. */ GList *fields = NULL; - fields = - g_list_append(fields, garrow_field_new("uuid", GARROW_DATA_TYPE(uuid_data_type))); + fields = g_list_append(fields, + garrow_field_new("uuid", + GARROW_DATA_TYPE(uuid_data_type))); GArrowSchema *schema = garrow_schema_new(fields); g_list_free_full(fields, g_object_unref); GList *columns = NULL; @@ -247,7 +264,8 @@ main(int argc, char **argv) goto exit; } { - GArrowBufferOutputStream *output = garrow_buffer_output_stream_new(buffer); + GArrowBufferOutputStream *output = + garrow_buffer_output_stream_new(buffer); GArrowRecordBatchStreamWriter *writer = garrow_record_batch_stream_writer_new(GARROW_OUTPUT_STREAM(output), schema, @@ -261,9 +279,10 @@ main(int argc, char **argv) g_object_unref(record_batch); goto exit; } - garrow_record_batch_writer_write_record_batch(GARROW_RECORD_BATCH_WRITER(writer), - record_batch, - &error); + garrow_record_batch_writer_write_record_batch( + GARROW_RECORD_BATCH_WRITER(writer), + record_batch, + &error); if (error) { g_print("failed to write record batch: %s\n", error->message); g_error_free(error); @@ -276,7 +295,8 @@ main(int argc, char **argv) } g_object_unref(schema); g_object_unref(record_batch); - garrow_record_batch_writer_close(GARROW_RECORD_BATCH_WRITER(writer), &error); + garrow_record_batch_writer_close(GARROW_RECORD_BATCH_WRITER(writer), + &error); g_object_unref(writer); g_object_unref(output); if (error) { @@ -292,7 +312,8 @@ main(int argc, char **argv) GArrowBufferInputStream *input = garrow_buffer_input_stream_new(GARROW_BUFFER(buffer)); GArrowRecordBatchStreamReader *reader = - garrow_record_batch_stream_reader_new(GARROW_INPUT_STREAM(input), &error); + garrow_record_batch_stream_reader_new(GARROW_INPUT_STREAM(input), + &error); if (error) { g_print("failed to create reader: %s\n", error->message); g_error_free(error); @@ -301,7 +322,8 @@ main(int argc, char **argv) goto exit; } record_batch = - garrow_record_batch_reader_read_next(GARROW_RECORD_BATCH_READER(reader), &error); + garrow_record_batch_reader_read_next(GARROW_RECORD_BATCH_READER(reader), + &error); if (error) { g_print("failed to read record batch: %s\n", error->message); g_error_free(error); @@ -311,7 +333,9 @@ main(int argc, char **argv) goto exit; } /* Show the deserialize record batch. */ - gchar *record_batch_content = garrow_record_batch_to_string(record_batch, &error); + gchar *record_batch_content = + garrow_record_batch_to_string(record_batch, + &error); if (error) { g_print("failed to dump record batch content: %s\n", error->message); g_error_free(error); @@ -339,7 +363,9 @@ main(int argc, char **argv) gchar *data_type_name = garrow_extension_data_type_get_extension_name(extension_data_type); gboolean success = - garrow_extension_data_type_registry_unregister(registry, data_type_name, &error); + garrow_extension_data_type_registry_unregister(registry, + data_type_name, + &error); g_free(data_type_name); if (!success) { g_print("failed to unregister: %s\n", error->message); diff --git a/c_glib/example/read-file.c b/c_glib/example/read-file.c index f29def1abdd..8dae4290ecb 100644 --- a/c_glib/example/read-file.c +++ b/c_glib/example/read-file.c @@ -32,30 +32,31 @@ print_array(GArrowArray *array) g_print("["); n = garrow_array_get_length(array); -#define ARRAY_CASE(type, Type, TYPE, format) \ - case GARROW_TYPE_##TYPE: \ - { \ - GArrow##Type##Array *real_array; \ - real_array = GARROW_##TYPE##_ARRAY(array); \ - for (i = 0; i < n; i++) { \ - if (i > 0) { \ - g_print(", "); \ - } \ - g_print(format, garrow_##type##_array_get_value(real_array, i)); \ - } \ - } \ +#define ARRAY_CASE(type, Type, TYPE, format) \ + case GARROW_TYPE_ ## TYPE: \ + { \ + GArrow ## Type ## Array *real_array; \ + real_array = GARROW_ ## TYPE ## _ARRAY(array); \ + for (i = 0; i < n; i++) { \ + if (i > 0) { \ + g_print(", "); \ + } \ + g_print(format, \ + garrow_ ## type ## _array_get_value(real_array, i)); \ + } \ + } \ break switch (value_type) { - ARRAY_CASE(uint8, UInt8, UINT8, "%hhu"); + ARRAY_CASE(uint8, UInt8, UINT8, "%hhu"); ARRAY_CASE(uint16, UInt16, UINT16, "%" G_GUINT16_FORMAT); ARRAY_CASE(uint32, UInt32, UINT32, "%" G_GUINT32_FORMAT); ARRAY_CASE(uint64, UInt64, UINT64, "%" G_GUINT64_FORMAT); - ARRAY_CASE(int8, Int8, INT8, "%hhd"); - ARRAY_CASE(int16, Int16, INT16, "%" G_GINT16_FORMAT); - ARRAY_CASE(int32, Int32, INT32, "%" G_GINT32_FORMAT); - ARRAY_CASE(int64, Int64, INT64, "%" G_GINT64_FORMAT); - ARRAY_CASE(float, Float, FLOAT, "%g"); + ARRAY_CASE( int8, Int8, INT8, "%hhd"); + ARRAY_CASE( int16, Int16, INT16, "%" G_GINT16_FORMAT); + ARRAY_CASE( int32, Int32, INT32, "%" G_GINT32_FORMAT); + ARRAY_CASE( int64, Int64, INT64, "%" G_GINT64_FORMAT); + ARRAY_CASE( float, Float, FLOAT, "%g"); ARRAY_CASE(double, Double, DOUBLE, "%g"); default: break; @@ -92,7 +93,8 @@ main(int argc, char **argv) if (argc > 1) input_path = argv[1]; - input = garrow_memory_mapped_input_stream_new(input_path, &error); + input = garrow_memory_mapped_input_stream_new(input_path, + &error); if (!input) { g_print("failed to open file: %s\n", error->message); g_error_free(error); @@ -103,7 +105,8 @@ main(int argc, char **argv) GArrowRecordBatchFileReader *reader; reader = - garrow_record_batch_file_reader_new(GARROW_SEEKABLE_INPUT_STREAM(input), &error); + garrow_record_batch_file_reader_new(GARROW_SEEKABLE_INPUT_STREAM(input), + &error); if (!reader) { g_print("failed to open file reader: %s\n", error->message); g_error_free(error); diff --git a/c_glib/example/read-stream.c b/c_glib/example/read-stream.c index 183994c832a..133418faa90 100644 --- a/c_glib/example/read-stream.c +++ b/c_glib/example/read-stream.c @@ -32,30 +32,31 @@ print_array(GArrowArray *array) g_print("["); n = garrow_array_get_length(array); -#define ARRAY_CASE(type, Type, TYPE, format) \ - case GARROW_TYPE_##TYPE: \ - { \ - GArrow##Type##Array *real_array; \ - real_array = GARROW_##TYPE##_ARRAY(array); \ - for (i = 0; i < n; i++) { \ - if (i > 0) { \ - g_print(", "); \ - } \ - g_print(format, garrow_##type##_array_get_value(real_array, i)); \ - } \ - } \ +#define ARRAY_CASE(type, Type, TYPE, format) \ + case GARROW_TYPE_ ## TYPE: \ + { \ + GArrow ## Type ## Array *real_array; \ + real_array = GARROW_ ## TYPE ## _ARRAY(array); \ + for (i = 0; i < n; i++) { \ + if (i > 0) { \ + g_print(", "); \ + } \ + g_print(format, \ + garrow_ ## type ## _array_get_value(real_array, i)); \ + } \ + } \ break switch (value_type) { - ARRAY_CASE(uint8, UInt8, UINT8, "%hhu"); + ARRAY_CASE(uint8, UInt8, UINT8, "%hhu"); ARRAY_CASE(uint16, UInt16, UINT16, "%" G_GUINT16_FORMAT); ARRAY_CASE(uint32, UInt32, UINT32, "%" G_GUINT32_FORMAT); ARRAY_CASE(uint64, UInt64, UINT64, "%" G_GUINT64_FORMAT); - ARRAY_CASE(int8, Int8, INT8, "%hhd"); - ARRAY_CASE(int16, Int16, INT16, "%" G_GINT16_FORMAT); - ARRAY_CASE(int32, Int32, INT32, "%" G_GINT32_FORMAT); - ARRAY_CASE(int64, Int64, INT64, "%" G_GINT64_FORMAT); - ARRAY_CASE(float, Float, FLOAT, "%g"); + ARRAY_CASE( int8, Int8, INT8, "%hhd"); + ARRAY_CASE( int16, Int16, INT16, "%" G_GINT16_FORMAT); + ARRAY_CASE( int32, Int32, INT32, "%" G_GINT32_FORMAT); + ARRAY_CASE( int64, Int64, INT64, "%" G_GINT64_FORMAT); + ARRAY_CASE( float, Float, FLOAT, "%g"); ARRAY_CASE(double, Double, DOUBLE, "%g"); default: break; @@ -104,7 +105,8 @@ main(int argc, char **argv) GArrowRecordBatchStreamReader *stream_reader; stream_reader = - garrow_record_batch_stream_reader_new(GARROW_INPUT_STREAM(input), &error); + garrow_record_batch_stream_reader_new(GARROW_INPUT_STREAM(input), + &error); if (!stream_reader) { g_print("failed to open stream reader: %s\n", error->message); g_error_free(error); diff --git a/c_glib/example/receive-network.c b/c_glib/example/receive-network.c index a2172455eab..aa7aaa01403 100644 --- a/c_glib/example/receive-network.c +++ b/c_glib/example/receive-network.c @@ -37,7 +37,7 @@ service_event(GSocketListener *listener, } GError *error = NULL; - GSocketAddress *local_address = g_socket_get_local_address(socket, &error); + GSocketAddress* local_address = g_socket_get_local_address(socket, &error); if (!local_address) { g_print("failed to get local address: %s\n", error->message); g_error_free(error); @@ -62,30 +62,31 @@ print_array(GArrowArray *array) g_print("["); n = garrow_array_get_length(array); -#define ARRAY_CASE(type, Type, TYPE, format) \ - case GARROW_TYPE_##TYPE: \ - { \ - GArrow##Type##Array *real_array; \ - real_array = GARROW_##TYPE##_ARRAY(array); \ - for (i = 0; i < n; i++) { \ - if (i > 0) { \ - g_print(", "); \ - } \ - g_print(format, garrow_##type##_array_get_value(real_array, i)); \ - } \ - } \ +#define ARRAY_CASE(type, Type, TYPE, format) \ + case GARROW_TYPE_ ## TYPE: \ + { \ + GArrow ## Type ## Array *real_array; \ + real_array = GARROW_ ## TYPE ## _ARRAY(array); \ + for (i = 0; i < n; i++) { \ + if (i > 0) { \ + g_print(", "); \ + } \ + g_print(format, \ + garrow_ ## type ## _array_get_value(real_array, i)); \ + } \ + } \ break switch (value_type) { - ARRAY_CASE(uint8, UInt8, UINT8, "%hhu"); + ARRAY_CASE(uint8, UInt8, UINT8, "%hhu"); ARRAY_CASE(uint16, UInt16, UINT16, "%" G_GUINT16_FORMAT); ARRAY_CASE(uint32, UInt32, UINT32, "%" G_GUINT32_FORMAT); ARRAY_CASE(uint64, UInt64, UINT64, "%" G_GUINT64_FORMAT); - ARRAY_CASE(int8, Int8, INT8, "%hhd"); - ARRAY_CASE(int16, Int16, INT16, "%" G_GINT16_FORMAT); - ARRAY_CASE(int32, Int32, INT32, "%" G_GINT32_FORMAT); - ARRAY_CASE(int64, Int64, INT64, "%" G_GINT64_FORMAT); - ARRAY_CASE(float, Float, FLOAT, "%g"); + ARRAY_CASE( int8, Int8, INT8, "%hhd"); + ARRAY_CASE( int16, Int16, INT16, "%" G_GINT16_FORMAT); + ARRAY_CASE( int32, Int32, INT32, "%" G_GINT32_FORMAT); + ARRAY_CASE( int64, Int64, INT64, "%" G_GINT64_FORMAT); + ARRAY_CASE( float, Float, FLOAT, "%g"); ARRAY_CASE(double, Double, DOUBLE, "%g"); default: break; @@ -120,7 +121,8 @@ service_incoming(GSocketService *service, gpointer user_data) { GArrowGIOInputStream *input = - garrow_gio_input_stream_new(g_io_stream_get_input_stream(G_IO_STREAM(connection))); + garrow_gio_input_stream_new( + g_io_stream_get_input_stream(G_IO_STREAM(connection))); GError *error = NULL; GArrowRecordBatchStreamReader *reader = garrow_record_batch_stream_reader_new(GARROW_INPUT_STREAM(input), &error); @@ -133,7 +135,8 @@ service_incoming(GSocketService *service, while (TRUE) { GArrowRecordBatch *record_batch = - garrow_record_batch_reader_read_next(GARROW_RECORD_BATCH_READER(reader), &error); + garrow_record_batch_reader_read_next(GARROW_RECORD_BATCH_READER(reader), + &error); if (error) { g_print("failed to read the next record batch: %s\n", error->message); g_error_free(error); @@ -157,8 +160,7 @@ service_incoming(GSocketService *service, } #ifdef G_OS_UNIX -typedef struct -{ +typedef struct { GSocketService *service; GMainLoop *loop; } StopData; @@ -166,7 +168,7 @@ typedef struct static gboolean stop(gpointer user_data) { - StopData *data = user_data; + StopData* data = user_data; g_object_unref(data->service); g_main_loop_quit(data->loop); return G_SOURCE_REMOVE; @@ -182,7 +184,9 @@ main(int argc, char **argv) GError *error = NULL; gboolean success = - g_socket_listener_add_any_inet_port(G_SOCKET_LISTENER(service), NULL, &error); + g_socket_listener_add_any_inet_port(G_SOCKET_LISTENER(service), + NULL, + &error); if (!success) { g_print("failed to add a listen IP address: %s\n", error->message); g_error_free(error); diff --git a/c_glib/example/send-network.c b/c_glib/example/send-network.c index 40d9772e514..d298c5a173d 100644 --- a/c_glib/example/send-network.c +++ b/c_glib/example/send-network.c @@ -26,12 +26,13 @@ build_schema(void) { GList *fields = NULL; GArrowBooleanDataType *boolean_data_type = garrow_boolean_data_type_new(); - fields = - g_list_append(fields, - garrow_field_new("boolean", GARROW_DATA_TYPE(boolean_data_type))); + fields = g_list_append(fields, + garrow_field_new("boolean", + GARROW_DATA_TYPE(boolean_data_type))); GArrowInt32DataType *int32_data_type = garrow_int32_data_type_new(); - fields = - g_list_append(fields, garrow_field_new("int32", GARROW_DATA_TYPE(int32_data_type))); + fields = g_list_append(fields, + garrow_field_new("int32", + GARROW_DATA_TYPE(int32_data_type))); GArrowSchema *schema = garrow_schema_new(fields); g_list_free_full(fields, g_object_unref); @@ -46,7 +47,8 @@ build_record_batch(void) return NULL; } GError *error = NULL; - GArrowRecordBatchBuilder *builder = garrow_record_batch_builder_new(schema, &error); + GArrowRecordBatchBuilder *builder = + garrow_record_batch_builder_new(schema, &error); g_object_unref(schema); if (!builder) { g_print("failed to build record batch builder: %s\n", error->message); @@ -55,8 +57,9 @@ build_record_batch(void) } const gint64 n_records = 3; - GArrowBooleanArrayBuilder *boolean_builder = GARROW_BOOLEAN_ARRAY_BUILDER( - garrow_record_batch_builder_get_column_builder(builder, 0)); + GArrowBooleanArrayBuilder *boolean_builder = + GARROW_BOOLEAN_ARRAY_BUILDER( + garrow_record_batch_builder_get_column_builder(builder, 0)); gboolean boolean_values[] = {TRUE, TRUE, FALSE}; gboolean boolean_is_valids[] = {TRUE, FALSE, TRUE}; if (!garrow_boolean_array_builder_append_values(boolean_builder, @@ -72,8 +75,9 @@ build_record_batch(void) return NULL; } - GArrowInt32ArrayBuilder *int32_builder = GARROW_INT32_ARRAY_BUILDER( - garrow_record_batch_builder_get_column_builder(builder, 1)); + GArrowInt32ArrayBuilder *int32_builder = + GARROW_INT32_ARRAY_BUILDER( + garrow_record_batch_builder_get_column_builder(builder, 1)); gint32 int32_values[] = {1, 11, 111}; gint32 int32_is_valids[] = {FALSE, TRUE, TRUE}; if (!garrow_int32_array_builder_append_values(int32_builder, @@ -89,7 +93,8 @@ build_record_batch(void) return NULL; } - GArrowRecordBatch *record_batch = garrow_record_batch_builder_flush(builder, &error); + GArrowRecordBatch *record_batch = + garrow_record_batch_builder_flush(builder, &error); if (!record_batch) { g_print("failed to build record batch: %s\n", error->message); g_error_free(error); @@ -114,7 +119,8 @@ main(int argc, char **argv) guint port = atoi(argv[1]); GSocketClient *client = g_socket_client_new(); - GSocketAddress *address = g_inet_socket_address_new_from_string("127.0.0.1", port); + GSocketAddress *address = g_inet_socket_address_new_from_string("127.0.0.1", + port); GError *error = NULL; GSocketConnection *connection = g_socket_client_connect(client, G_SOCKET_CONNECTABLE(address), NULL, &error); @@ -129,9 +135,12 @@ main(int argc, char **argv) return EXIT_FAILURE; } GArrowGIOOutputStream *output = - garrow_gio_output_stream_new(g_io_stream_get_output_stream(G_IO_STREAM(connection))); + garrow_gio_output_stream_new( + g_io_stream_get_output_stream(G_IO_STREAM(connection))); GArrowRecordBatchStreamWriter *writer = - garrow_record_batch_stream_writer_new(GARROW_OUTPUT_STREAM(output), schema, &error); + garrow_record_batch_stream_writer_new(GARROW_OUTPUT_STREAM(output), + schema, + &error); g_object_unref(schema); if (!writer) { g_print("failed to create writer: %s\n", error->message); @@ -154,9 +163,10 @@ main(int argc, char **argv) return EXIT_FAILURE; } gboolean success = - garrow_record_batch_writer_write_record_batch(GARROW_RECORD_BATCH_WRITER(writer), - record_batch, - &error); + garrow_record_batch_writer_write_record_batch( + GARROW_RECORD_BATCH_WRITER(writer), + record_batch, + &error); g_object_unref(record_batch); if (!success) { g_print("failed to write record batch: %s\n", error->message); diff --git a/c_glib/example/vala/meson.build b/c_glib/example/vala/meson.build index b7eb86200dd..42e40f692a2 100644 --- a/c_glib/example/vala/meson.build +++ b/c_glib/example/vala/meson.build @@ -18,15 +18,11 @@ # under the License. if generate_vapi - c_flags = [ - '-Wno-unused-but-set-variable', - ] - c_flags = meson.get_compiler('c').get_supported_arguments(c_flags) vala_example_executable_kwargs = { 'c_args': [ - '-I' + project_build_root, - '-I' + project_source_root, - ] + c_flags, + '-I' + meson.build_root(), + '-I' + meson.source_root(), + ], 'dependencies': [ arrow_glib_vapi, dependency('gio-2.0'), diff --git a/c_glib/example/vala/read-file.vala b/c_glib/example/vala/read-file.vala index 287eddac763..a0a06275c4b 100644 --- a/c_glib/example/vala/read-file.vala +++ b/c_glib/example/vala/read-file.vala @@ -119,8 +119,8 @@ void print_array(GArrow.Array array) { void print_record_batch(GArrow.RecordBatch record_batch) { var n_columns = record_batch.get_n_columns(); - for (int nth_column = 0; nth_column < n_columns; nth_column++) { - stdout.printf("columns[%d](%s): ", + for (var nth_column = 0; nth_column < n_columns; nth_column++) { + stdout.printf("columns[%" + int64.FORMAT + "](%s): ", nth_column, record_batch.get_column_name(nth_column)); var array = record_batch.get_column_data(nth_column); diff --git a/c_glib/example/vala/read-stream.vala b/c_glib/example/vala/read-stream.vala index 4520c8609bd..c58dc848930 100644 --- a/c_glib/example/vala/read-stream.vala +++ b/c_glib/example/vala/read-stream.vala @@ -119,8 +119,8 @@ void print_array(GArrow.Array array) { void print_record_batch(GArrow.RecordBatch record_batch) { var n_columns = record_batch.get_n_columns(); - for (int nth_column = 0; nth_column < n_columns; nth_column++) { - stdout.printf("columns[%d](%s): ", + for (var nth_column = 0; nth_column < n_columns; nth_column++) { + stdout.printf("columns[%" + int64.FORMAT + "](%s): ", nth_column, record_batch.get_column_name(nth_column)); var array = record_batch.get_column_data(nth_column); diff --git a/c_glib/gandiva-glib/enums.h.template b/c_glib/gandiva-glib/enums.h.template index d362e14c1b2..b7d3c99c0be 100644 --- a/c_glib/gandiva-glib/enums.h.template +++ b/c_glib/gandiva-glib/enums.h.template @@ -22,8 +22,6 @@ #include -#include - G_BEGIN_DECLS /*** END file-header ***/ @@ -33,7 +31,6 @@ G_BEGIN_DECLS /*** END file-production ***/ /*** BEGIN value-header ***/ -GGANDIVA_AVAILABLE_IN_ALL GType @enum_name@_get_type(void) G_GNUC_CONST; #define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) /*** END value-header ***/ diff --git a/c_glib/gandiva-glib/expression.cpp b/c_glib/gandiva-glib/expression.cpp index f45cf6c79d0..e4368f84da0 100644 --- a/c_glib/gandiva-glib/expression.cpp +++ b/c_glib/gandiva-glib/expression.cpp @@ -37,8 +37,7 @@ G_BEGIN_DECLS * Since: 0.12.0 */ -typedef struct GGandivaExpressionPrivate_ -{ +typedef struct GGandivaExpressionPrivate_ { std::shared_ptr expression; GGandivaNode *root_node; GArrowField *result_field; @@ -50,11 +49,14 @@ enum { PROP_RESULT_FIELD }; -G_DEFINE_TYPE_WITH_PRIVATE(GGandivaExpression, ggandiva_expression, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GGandivaExpression, + ggandiva_expression, + G_TYPE_OBJECT) -#define GGANDIVA_EXPRESSION_GET_PRIVATE(object) \ - static_cast( \ - ggandiva_expression_get_instance_private(GGANDIVA_EXPRESSION(object))) +#define GGANDIVA_EXPRESSION_GET_PRIVATE(object) \ + static_cast( \ + ggandiva_expression_get_instance_private( \ + GGANDIVA_EXPRESSION(object))) static void ggandiva_expression_dispose(GObject *object) @@ -134,7 +136,7 @@ static void ggandiva_expression_init(GGandivaExpression *object) { auto priv = GGANDIVA_EXPRESSION_GET_PRIVATE(object); - new (&priv->expression) std::shared_ptr; + new(&priv->expression) std::shared_ptr; } static void @@ -142,33 +144,33 @@ ggandiva_expression_class_init(GGandivaExpressionClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = ggandiva_expression_dispose; - gobject_class->finalize = ggandiva_expression_finalize; + gobject_class->dispose = ggandiva_expression_dispose; + gobject_class->finalize = ggandiva_expression_finalize; gobject_class->set_property = ggandiva_expression_set_property; gobject_class->get_property = ggandiva_expression_get_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "expression", - "Expression", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("expression", + "Expression", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_EXPRESSION, spec); - spec = g_param_spec_object( - "root-node", - "Root Node", - "The root node for the expression", - GGANDIVA_TYPE_NODE, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("root-node", + "Root Node", + "The root node for the expression", + GGANDIVA_TYPE_NODE, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_ROOT_NODE, spec); - spec = g_param_spec_object( - "result-field", - "Result Field", - "The name and type of returned value as #GArrowField", - GARROW_TYPE_FIELD, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("result-field", + "Result Field", + "The name and type of returned value as #GArrowField", + GARROW_TYPE_FIELD, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_RESULT_FIELD, spec); } @@ -182,13 +184,17 @@ ggandiva_expression_class_init(GGandivaExpressionClass *klass) * Since: 0.12.0 */ GGandivaExpression * -ggandiva_expression_new(GGandivaNode *root_node, GArrowField *result_field) +ggandiva_expression_new(GGandivaNode *root_node, + GArrowField *result_field) { auto gandiva_root_node = ggandiva_node_get_raw(root_node); auto arrow_result_field = garrow_field_get_raw(result_field); auto gandiva_expression = - gandiva::TreeExprBuilder::MakeExpression(gandiva_root_node, arrow_result_field); - return ggandiva_expression_new_raw(&gandiva_expression, root_node, result_field); + gandiva::TreeExprBuilder::MakeExpression(gandiva_root_node, + arrow_result_field); + return ggandiva_expression_new_raw(&gandiva_expression, + root_node, + result_field); } /** @@ -209,7 +215,10 @@ ggandiva_expression_to_string(GGandivaExpression *expression) return g_strndup(string.data(), string.size()); } -G_DEFINE_TYPE(GGandivaCondition, ggandiva_condition, GGANDIVA_TYPE_EXPRESSION) + +G_DEFINE_TYPE(GGandivaCondition, + ggandiva_condition, + GGANDIVA_TYPE_EXPRESSION) static void ggandiva_condition_init(GGandivaCondition *object) @@ -233,10 +242,13 @@ GGandivaCondition * ggandiva_condition_new(GGandivaNode *root_node) { auto gandiva_root_node = ggandiva_node_get_raw(root_node); - auto gandiva_condition = gandiva::TreeExprBuilder::MakeCondition(gandiva_root_node); - return ggandiva_condition_new_raw(&gandiva_condition, root_node); + auto gandiva_condition = + gandiva::TreeExprBuilder::MakeCondition(gandiva_root_node); + return ggandiva_condition_new_raw(&gandiva_condition, + root_node); } + G_END_DECLS GGandivaExpression * @@ -245,12 +257,9 @@ ggandiva_expression_new_raw(std::shared_ptr *gandiva_expres GArrowField *result_field) { auto expression = g_object_new(GGANDIVA_TYPE_EXPRESSION, - "expression", - gandiva_expression, - "root-node", - root_node, - "result-field", - result_field, + "expression", gandiva_expression, + "root-node", root_node, + "result-field", result_field, NULL); return GGANDIVA_EXPRESSION(expression); } @@ -262,6 +271,7 @@ ggandiva_expression_get_raw(GGandivaExpression *expression) return priv->expression; } + GGandivaCondition * ggandiva_condition_new_raw(std::shared_ptr *gandiva_condition, GGandivaNode *root_node) @@ -269,12 +279,9 @@ ggandiva_condition_new_raw(std::shared_ptr *gandiva_conditio auto arrow_result_field = (*gandiva_condition)->result(); auto result_field = garrow_field_new_raw(&arrow_result_field, nullptr); auto condition = g_object_new(GGANDIVA_TYPE_CONDITION, - "expression", - gandiva_condition, - "root-node", - root_node, - "result-field", - result_field, + "expression", gandiva_condition, + "root-node", root_node, + "result-field", result_field, NULL); return GGANDIVA_CONDITION(condition); } diff --git a/c_glib/gandiva-glib/expression.h b/c_glib/gandiva-glib/expression.h index bb7eb22ac01..0a720d9afbd 100644 --- a/c_glib/gandiva-glib/expression.h +++ b/c_glib/gandiva-glib/expression.h @@ -26,27 +26,29 @@ G_BEGIN_DECLS #define GGANDIVA_TYPE_EXPRESSION (ggandiva_expression_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 -G_DECLARE_DERIVABLE_TYPE( - GGandivaExpression, ggandiva_expression, GGANDIVA, EXPRESSION, GObject) +G_DECLARE_DERIVABLE_TYPE(GGandivaExpression, + ggandiva_expression, + GGANDIVA, + EXPRESSION, + GObject) struct _GGandivaExpressionClass { GObjectClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaExpression * -ggandiva_expression_new(GGandivaNode *root_node, GArrowField *result_field); +ggandiva_expression_new(GGandivaNode *root_node, + GArrowField *result_field); +gchar *ggandiva_expression_to_string(GGandivaExpression *expression); -GGANDIVA_AVAILABLE_IN_0_12 -gchar * -ggandiva_expression_to_string(GGandivaExpression *expression); #define GGANDIVA_TYPE_CONDITION (ggandiva_condition_get_type()) -GGANDIVA_AVAILABLE_IN_4_0 -G_DECLARE_DERIVABLE_TYPE( - GGandivaCondition, ggandiva_condition, GGANDIVA, CONDITION, GGandivaExpression) +G_DECLARE_DERIVABLE_TYPE(GGandivaCondition, + ggandiva_condition, + GGANDIVA, + CONDITION, + GGandivaExpression) struct _GGandivaConditionClass { @@ -57,4 +59,5 @@ GGANDIVA_AVAILABLE_IN_4_0 GGandivaCondition * ggandiva_condition_new(GGandivaNode *root_node); + G_END_DECLS diff --git a/c_glib/gandiva-glib/expression.hpp b/c_glib/gandiva-glib/expression.hpp index cba71c178b2..45b6593937f 100644 --- a/c_glib/gandiva-glib/expression.hpp +++ b/c_glib/gandiva-glib/expression.hpp @@ -30,11 +30,10 @@ GGandivaExpression * ggandiva_expression_new_raw(std::shared_ptr *gandiva_expression, GGandivaNode *root_node, GArrowField *result_field); -std::shared_ptr -ggandiva_expression_get_raw(GGandivaExpression *expression); +std::shared_ptr ggandiva_expression_get_raw(GGandivaExpression *expression); -GGandivaCondition * -ggandiva_condition_new_raw(std::shared_ptr *gandiva_expression, - GGandivaNode *root_node); +GGandivaCondition +*ggandiva_condition_new_raw(std::shared_ptr *gandiva_expression, + GGandivaNode *root_node); std::shared_ptr ggandiva_condition_get_raw(GGandivaCondition *condition); diff --git a/c_glib/gandiva-glib/filter.cpp b/c_glib/gandiva-glib/filter.cpp index 2b1109c108e..baed6994697 100644 --- a/c_glib/gandiva-glib/filter.cpp +++ b/c_glib/gandiva-glib/filter.cpp @@ -41,8 +41,7 @@ G_BEGIN_DECLS * Since: 4.0.0 */ -typedef struct GGandivaFilterPrivate_ -{ +typedef struct GGandivaFilterPrivate_ { std::shared_ptr filter; GArrowSchema *schema; GGandivaCondition *condition; @@ -54,11 +53,14 @@ enum { PROP_CONDITION, }; -G_DEFINE_TYPE_WITH_PRIVATE(GGandivaFilter, ggandiva_filter, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GGandivaFilter, + ggandiva_filter, + G_TYPE_OBJECT) -#define GGANDIVA_FILTER_GET_PRIVATE(obj) \ - static_cast( \ - ggandiva_filter_get_instance_private(GGANDIVA_FILTER(obj))) +#define GGANDIVA_FILTER_GET_PRIVATE(obj) \ + static_cast( \ + ggandiva_filter_get_instance_private( \ + GGANDIVA_FILTER(obj))) static void ggandiva_filter_dispose(GObject *object) @@ -138,7 +140,7 @@ static void ggandiva_filter_init(GGandivaFilter *object) { auto priv = GGANDIVA_FILTER_GET_PRIVATE(object); - new (&priv->filter) std::shared_ptr; + new(&priv->filter) std::shared_ptr; } static void @@ -146,33 +148,33 @@ ggandiva_filter_class_init(GGandivaFilterClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = ggandiva_filter_dispose; - gobject_class->finalize = ggandiva_filter_finalize; + gobject_class->dispose = ggandiva_filter_dispose; + gobject_class->finalize = ggandiva_filter_finalize; gobject_class->set_property = ggandiva_filter_set_property; gobject_class->get_property = ggandiva_filter_get_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "filter", - "Filter", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("filter", + "Filter", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FILTER, spec); - spec = g_param_spec_object( - "schema", - "Schema", - "The schema for input record batch", - GARROW_TYPE_SCHEMA, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("schema", + "Schema", + "The schema for input record batch", + GARROW_TYPE_SCHEMA, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_SCHEMA, spec); - spec = g_param_spec_object( - "condition", - "Condition", - "The condition for the filter", - GGANDIVA_TYPE_CONDITION, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("condition", + "Condition", + "The condition for the filter", + GGANDIVA_TYPE_CONDITION, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_CONDITION, spec); } @@ -188,12 +190,16 @@ ggandiva_filter_class_init(GGandivaFilterClass *klass) * Since: 4.0.0 */ GGandivaFilter * -ggandiva_filter_new(GArrowSchema *schema, GGandivaCondition *condition, GError **error) +ggandiva_filter_new(GArrowSchema *schema, + GGandivaCondition *condition, + GError **error) { auto arrow_schema = garrow_schema_get_raw(schema); auto gandiva_condition = ggandiva_condition_get_raw(condition); std::shared_ptr gandiva_filter; - auto status = gandiva::Filter::Make(arrow_schema, gandiva_condition, &gandiva_filter); + auto status = gandiva::Filter::Make(arrow_schema, + gandiva_condition, + &gandiva_filter); if (garrow_error_check(error, status, "[gandiva][filter][new]")) { return ggandiva_filter_new_raw(&gandiva_filter, schema, condition); } else { @@ -221,8 +227,10 @@ ggandiva_filter_evaluate(GGandivaFilter *filter, { auto gandiva_filter = ggandiva_filter_get_raw(filter); auto arrow_record_batch = garrow_record_batch_get_raw(record_batch); - auto gandiva_selection_vector = ggandiva_selection_vector_get_raw(selection_vector); - auto status = gandiva_filter->Evaluate(*arrow_record_batch, gandiva_selection_vector); + auto gandiva_selection_vector = + ggandiva_selection_vector_get_raw(selection_vector); + auto status = gandiva_filter->Evaluate(*arrow_record_batch, + gandiva_selection_vector); return garrow_error_check(error, status, "[gandiva][filter][evaluate]"); } @@ -234,12 +242,9 @@ ggandiva_filter_new_raw(std::shared_ptr *gandiva_filter, GGandivaCondition *condition) { auto filter = g_object_new(GGANDIVA_TYPE_FILTER, - "filter", - gandiva_filter, - "schema", - schema, - "condition", - condition, + "filter", gandiva_filter, + "schema", schema, + "condition", condition, NULL); return GGANDIVA_FILTER(filter); } diff --git a/c_glib/gandiva-glib/filter.h b/c_glib/gandiva-glib/filter.h index 0a2199ccfa1..9a0a5dc5d85 100644 --- a/c_glib/gandiva-glib/filter.h +++ b/c_glib/gandiva-glib/filter.h @@ -25,19 +25,21 @@ G_BEGIN_DECLS #define GGANDIVA_TYPE_FILTER (ggandiva_filter_get_type()) -GGANDIVA_AVAILABLE_IN_4_0 -G_DECLARE_DERIVABLE_TYPE(GGandivaFilter, ggandiva_filter, GGANDIVA, FILTER, GObject) +G_DECLARE_DERIVABLE_TYPE(GGandivaFilter, + ggandiva_filter, + GGANDIVA, + FILTER, + GObject) struct _GGandivaFilterClass { GObjectClass parent_class; }; -GGANDIVA_AVAILABLE_IN_4_0 GGandivaFilter * -ggandiva_filter_new(GArrowSchema *schema, GGandivaCondition *condition, GError **error); - -GGANDIVA_AVAILABLE_IN_4_0 +ggandiva_filter_new(GArrowSchema *schema, + GGandivaCondition *condition, + GError **error); gboolean ggandiva_filter_evaluate(GGandivaFilter *filter, GArrowRecordBatch *record_batch, diff --git a/c_glib/gandiva-glib/function-registry.cpp b/c_glib/gandiva-glib/function-registry.cpp index b0f19906df8..f47262986db 100644 --- a/c_glib/gandiva-glib/function-registry.cpp +++ b/c_glib/gandiva-glib/function-registry.cpp @@ -34,8 +34,7 @@ G_BEGIN_DECLS * Since: 0.14.0 */ -struct GGandivaFunctionRegistryPrivate -{ +struct GGandivaFunctionRegistryPrivate { std::shared_ptr function_registry; }; @@ -47,9 +46,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GGandivaFunctionRegistry, ggandiva_function_registry, G_TYPE_OBJECT) -#define GGANDIVA_FUNCTION_REGISTRY_GET_PRIVATE(object) \ - static_cast( \ - ggandiva_function_registry_get_instance_private(GGANDIVA_FUNCTION_REGISTRY(object))) +#define GGANDIVA_FUNCTION_REGISTRY_GET_PRIVATE(object) \ + static_cast( \ + ggandiva_function_registry_get_instance_private( \ + GGANDIVA_FUNCTION_REGISTRY(object))) static void ggandiva_function_registry_finalize(GObject *object) @@ -69,8 +69,9 @@ ggandiva_function_registry_set_property(GObject *object, switch (prop_id) { case PROP_FUNCTION_REGISTRY: - priv->function_registry = *static_cast *>( - g_value_get_pointer(value)); + priv->function_registry = + *static_cast *>( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -82,7 +83,7 @@ static void ggandiva_function_registry_init(GGandivaFunctionRegistry *object) { auto priv = GGANDIVA_FUNCTION_REGISTRY_GET_PRIVATE(object); - new (&priv->function_registry) std::shared_ptr; + new(&priv->function_registry) std::shared_ptr; } static void @@ -93,11 +94,11 @@ ggandiva_function_registry_class_init(GGandivaFunctionRegistryClass *klass) gobject_class->set_property = ggandiva_function_registry_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "function-registry", - "Function registry", - "The raw std::shared_ptr *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("function-registry", + "Function registry", + "The raw std::shared_ptr *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FUNCTION_REGISTRY, spec); } @@ -143,7 +144,8 @@ GGandivaNativeFunction * ggandiva_function_registry_lookup(GGandivaFunctionRegistry *function_registry, GGandivaFunctionSignature *function_signature) { - auto gandiva_function_registry = ggandiva_function_registry_get_raw(function_registry); + auto gandiva_function_registry = + ggandiva_function_registry_get_raw(function_registry); auto gandiva_function_signature = ggandiva_function_signature_get_raw(function_signature); auto gandiva_native_function = @@ -165,10 +167,10 @@ ggandiva_function_registry_lookup(GGandivaFunctionRegistry *function_registry, * Since: 0.14.0 */ GList * -ggandiva_function_registry_get_native_functions( - GGandivaFunctionRegistry *function_registry) +ggandiva_function_registry_get_native_functions(GGandivaFunctionRegistry *function_registry) { - auto gandiva_function_registry = ggandiva_function_registry_get_raw(function_registry); + auto gandiva_function_registry = + ggandiva_function_registry_get_raw(function_registry); GList *native_functions = nullptr; for (const auto &gandiva_native_function : *gandiva_function_registry) { auto native_function = ggandiva_native_function_new_raw(&gandiva_native_function); @@ -181,12 +183,12 @@ G_END_DECLS GGandivaFunctionRegistry * ggandiva_function_registry_new_raw( - std::shared_ptr *gandiva_function_registry) + std::shared_ptr *gandiva_function_registry) { - return GGANDIVA_FUNCTION_REGISTRY(g_object_new(GGANDIVA_TYPE_FUNCTION_REGISTRY, - "function-registry", - gandiva_function_registry, - nullptr)); + return GGANDIVA_FUNCTION_REGISTRY( + g_object_new(GGANDIVA_TYPE_FUNCTION_REGISTRY, + "function-registry", gandiva_function_registry, + nullptr)); } std::shared_ptr @@ -195,3 +197,4 @@ ggandiva_function_registry_get_raw(GGandivaFunctionRegistry *function_registry) auto priv = GGANDIVA_FUNCTION_REGISTRY_GET_PRIVATE(function_registry); return priv->function_registry; } + diff --git a/c_glib/gandiva-glib/function-registry.h b/c_glib/gandiva-glib/function-registry.h index e13f4b36d28..8ff6027cf17 100644 --- a/c_glib/gandiva-glib/function-registry.h +++ b/c_glib/gandiva-glib/function-registry.h @@ -24,7 +24,6 @@ G_BEGIN_DECLS #define GGANDIVA_TYPE_FUNCTION_REGISTRY (ggandiva_function_registry_get_type()) -GGANDIVA_AVAILABLE_IN_14_0 G_DECLARE_DERIVABLE_TYPE(GGandivaFunctionRegistry, ggandiva_function_registry, GGANDIVA, @@ -36,22 +35,12 @@ struct _GGandivaFunctionRegistryClass GObjectClass parent_class; }; -GGANDIVA_AVAILABLE_IN_15_0 -GGandivaFunctionRegistry * -ggandiva_function_registry_default(void); - -GGANDIVA_AVAILABLE_IN_14_0 -GGandivaFunctionRegistry * -ggandiva_function_registry_new(void); - -GGANDIVA_AVAILABLE_IN_14_0 +GARROW_AVAILABLE_IN_15_0 +GGandivaFunctionRegistry *ggandiva_function_registry_default(void); +GGandivaFunctionRegistry *ggandiva_function_registry_new(void); GGandivaNativeFunction * ggandiva_function_registry_lookup(GGandivaFunctionRegistry *function_registry, GGandivaFunctionSignature *function_signature); - -GGANDIVA_AVAILABLE_IN_14_0 -GList * -ggandiva_function_registry_get_native_functions( - GGandivaFunctionRegistry *function_registry); +GList *ggandiva_function_registry_get_native_functions(GGandivaFunctionRegistry *function_registry); G_END_DECLS diff --git a/c_glib/gandiva-glib/function-signature.cpp b/c_glib/gandiva-glib/function-signature.cpp index 5306ac6d264..be37e8bfd76 100644 --- a/c_glib/gandiva-glib/function-signature.cpp +++ b/c_glib/gandiva-glib/function-signature.cpp @@ -32,8 +32,7 @@ G_BEGIN_DECLS * Since: 0.14.0 */ -typedef struct GGandivaFunctionSignaturePrivate_ -{ +typedef struct GGandivaFunctionSignaturePrivate_ { gandiva::FunctionSignature function_signature; } GGandivaFunctionSignaturePrivate; @@ -45,9 +44,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GGandivaFunctionSignature, ggandiva_function_signature, G_TYPE_OBJECT) -#define GGANDIVA_FUNCTION_SIGNATURE_GET_PRIVATE(obj) \ - static_cast( \ - ggandiva_function_signature_get_instance_private(GGANDIVA_FUNCTION_SIGNATURE(obj))) +#define GGANDIVA_FUNCTION_SIGNATURE_GET_PRIVATE(obj) \ + static_cast( \ + ggandiva_function_signature_get_instance_private( \ + GGANDIVA_FUNCTION_SIGNATURE(obj))) static void ggandiva_function_signature_set_property(GObject *object, @@ -80,11 +80,11 @@ ggandiva_function_signature_class_init(GGandivaFunctionSignatureClass *klass) gobject_class->set_property = ggandiva_function_signature_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "function-signature", - "FunctionSignature", - "The raw gandiva::FunctionSignature *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("function-signature", + "FunctionSignature", + "The raw gandiva::FunctionSignature *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FUNCTION_SIGNATURE, spec); } @@ -227,8 +227,7 @@ ggandiva_function_signature_get_param_types(GGandivaFunctionSignature *function_ G_END_DECLS GGandivaFunctionSignature * -ggandiva_function_signature_new_raw( - const gandiva::FunctionSignature *gandiva_function_signature) +ggandiva_function_signature_new_raw(const gandiva::FunctionSignature *gandiva_function_signature) { auto function_signature = GGANDIVA_FUNCTION_SIGNATURE(g_object_new(GGANDIVA_TYPE_FUNCTION_SIGNATURE, diff --git a/c_glib/gandiva-glib/function-signature.h b/c_glib/gandiva-glib/function-signature.h index 4fd8cc8a7e7..b1099ff99da 100644 --- a/c_glib/gandiva-glib/function-signature.h +++ b/c_glib/gandiva-glib/function-signature.h @@ -21,12 +21,9 @@ #include -#include - G_BEGIN_DECLS #define GGANDIVA_TYPE_FUNCTION_SIGNATURE (ggandiva_function_signature_get_type()) -GGANDIVA_AVAILABLE_IN_14_0 G_DECLARE_DERIVABLE_TYPE(GGandivaFunctionSignature, ggandiva_function_signature, GGANDIVA, @@ -38,33 +35,14 @@ struct _GGandivaFunctionSignatureClass GObjectClass parent_class; }; -GGANDIVA_AVAILABLE_IN_14_0 -GGandivaFunctionSignature * -ggandiva_function_signature_new(const gchar *base_name, - GList *parameter_types, - GArrowDataType *return_type); - -GGANDIVA_AVAILABLE_IN_14_0 -gboolean -ggandiva_function_signature_equal(GGandivaFunctionSignature *function_signature, - GGandivaFunctionSignature *other_function_signature); - -GGANDIVA_AVAILABLE_IN_14_0 -gchar * -ggandiva_function_signature_to_string(GGandivaFunctionSignature *function_signature); - -GGANDIVA_AVAILABLE_IN_14_0 -GArrowDataType * -ggandiva_function_signature_get_return_type( - GGandivaFunctionSignature *function_signature); - -GGANDIVA_AVAILABLE_IN_14_0 -gchar * -ggandiva_function_signature_get_base_name(GGandivaFunctionSignature *function_signature); - -GGANDIVA_AVAILABLE_IN_14_0 -GList * -ggandiva_function_signature_get_param_types( - GGandivaFunctionSignature *function_signature); +GGandivaFunctionSignature *ggandiva_function_signature_new(const gchar *base_name, + GList *parameter_types, + GArrowDataType *return_type); +gboolean ggandiva_function_signature_equal(GGandivaFunctionSignature *function_signature, + GGandivaFunctionSignature *other_function_signature); +gchar *ggandiva_function_signature_to_string(GGandivaFunctionSignature *function_signature); +GArrowDataType *ggandiva_function_signature_get_return_type(GGandivaFunctionSignature *function_signature); +gchar *ggandiva_function_signature_get_base_name(GGandivaFunctionSignature *function_signature); +GList *ggandiva_function_signature_get_param_types(GGandivaFunctionSignature *function_signature); G_END_DECLS diff --git a/c_glib/gandiva-glib/function-signature.hpp b/c_glib/gandiva-glib/function-signature.hpp index 415302b70e5..24f71e6bc9d 100644 --- a/c_glib/gandiva-glib/function-signature.hpp +++ b/c_glib/gandiva-glib/function-signature.hpp @@ -23,8 +23,5 @@ #include -GGandivaFunctionSignature * -ggandiva_function_signature_new_raw( - const gandiva::FunctionSignature *gandiva_function_signature); -const gandiva::FunctionSignature * -ggandiva_function_signature_get_raw(GGandivaFunctionSignature *signature); +GGandivaFunctionSignature *ggandiva_function_signature_new_raw(const gandiva::FunctionSignature *gandiva_function_signature); +const gandiva::FunctionSignature *ggandiva_function_signature_get_raw(GGandivaFunctionSignature *signature); diff --git a/c_glib/gandiva-glib/meson.build b/c_glib/gandiva-glib/meson.build index 94b923388b7..52729f64da0 100644 --- a/c_glib/gandiva-glib/meson.build +++ b/c_glib/gandiva-glib/meson.build @@ -53,12 +53,14 @@ cpp_headers = files( 'selection-vector.hpp', ) -version_h = configure_file( - input: 'version.h.in', - output: 'version.h', - command: [python3, generate_version_header_py, '--library', 'GGANDIVA', '--version', version, '--input', '@INPUT@', '--output', '@OUTPUT@'], -) - +version_h_conf = configuration_data() +version_h_conf.set('GGANDIVA_VERSION_MAJOR', version_major) +version_h_conf.set('GGANDIVA_VERSION_MINOR', version_minor) +version_h_conf.set('GGANDIVA_VERSION_MICRO', version_micro) +version_h_conf.set('GGANDIVA_VERSION_TAG', version_tag) +version_h = configure_file(input: 'version.h.in', + output: 'version.h', + configuration: version_h_conf) c_headers += version_h enums = gnome.mkenums('enums', @@ -85,8 +87,6 @@ libgandiva_glib = library('gandiva-glib', dependencies: dependencies, implicit_include_directories: false, include_directories: base_include_directories, - cpp_args: ['-DGGANDIVA_COMPILATION'], - c_args: ['-DGGANDIVA_COMPILATION'], soversion: so_version, version: library_version) gandiva_glib = declare_dependency(link_with: libgandiva_glib, @@ -111,13 +111,15 @@ if have_gi '--warn-all', '--include-uninstalled=./arrow-glib/Arrow-1.0.gir', ], + fatal_warnings: gi_fatal_warnings, header: 'gandiva-glib/gandiva-glib.h', identifier_prefix: 'GGandiva', includes: [ 'Arrow-1.0' ], - kwargs: generate_gi_common_args, + install: true, namespace: 'Gandiva', + nsversion: api_version, sources: sources + c_headers + enums, symbol_prefix: 'ggandiva') diff --git a/c_glib/gandiva-glib/native-function.cpp b/c_glib/gandiva-glib/native-function.cpp index e5961f77088..0755ad1d62c 100644 --- a/c_glib/gandiva-glib/native-function.cpp +++ b/c_glib/gandiva-glib/native-function.cpp @@ -32,8 +32,7 @@ G_BEGIN_DECLS * Since: 0.14.0 */ -typedef struct GGandivaNativeFunctionPrivate_ -{ +typedef struct GGandivaNativeFunctionPrivate_ { const gandiva::NativeFunction *native_function; } GGandivaNativeFunctionPrivate; @@ -45,9 +44,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GGandivaNativeFunction, ggandiva_native_function, G_TYPE_OBJECT) -#define GGANDIVA_NATIVE_FUNCTION_GET_PRIVATE(obj) \ - static_cast( \ - ggandiva_native_function_get_instance_private(GGANDIVA_NATIVE_FUNCTION(obj))) +#define GGANDIVA_NATIVE_FUNCTION_GET_PRIVATE(obj) \ + static_cast( \ + ggandiva_native_function_get_instance_private( \ + GGANDIVA_NATIVE_FUNCTION(obj))) static void ggandiva_native_function_set_property(GObject *object, @@ -80,11 +80,11 @@ ggandiva_native_function_class_init(GGandivaNativeFunctionClass *klass) gobject_class->set_property = ggandiva_native_function_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "native-function", - "NativeFunction", - "The raw gandiva::NativeFunction *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("native-function", + "NativeFunction", + "The raw gandiva::NativeFunction *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_NATIVE_FUNCTION, spec); } @@ -100,7 +100,8 @@ ggandiva_native_function_class_init(GGandivaNativeFunctionClass *klass) GList * ggandiva_native_function_get_signatures(GGandivaNativeFunction *native_function) { - auto gandiva_native_function = ggandiva_native_function_get_raw(native_function); + auto gandiva_native_function = + ggandiva_native_function_get_raw(native_function); GList *signatures = nullptr; for (auto &gandiva_signature : gandiva_native_function->signatures()) { auto signature = ggandiva_function_signature_new_raw(&gandiva_signature); @@ -122,7 +123,8 @@ gboolean ggandiva_native_function_equal(GGandivaNativeFunction *native_function, GGandivaNativeFunction *other_native_function) { - auto gandiva_native_function = ggandiva_native_function_get_raw(native_function); + auto gandiva_native_function = + ggandiva_native_function_get_raw(native_function); auto gandiva_other_native_function = ggandiva_native_function_get_raw(other_native_function); return gandiva_native_function == gandiva_other_native_function; @@ -141,14 +143,17 @@ ggandiva_native_function_equal(GGandivaNativeFunction *native_function, gchar * ggandiva_native_function_to_string(GGandivaNativeFunction *native_function) { - auto gandiva_native_function = ggandiva_native_function_get_raw(native_function); + auto gandiva_native_function = + ggandiva_native_function_get_raw(native_function); auto string = g_string_new(NULL); for (auto &gandiva_signature : gandiva_native_function->signatures()) { if (string->len > 0) { g_string_append(string, ", "); } const auto &signature_string = gandiva_signature.ToString(); - g_string_append_len(string, signature_string.data(), signature_string.length()); + g_string_append_len(string, + signature_string.data(), + signature_string.length()); } return g_string_free(string, FALSE); } @@ -165,7 +170,8 @@ ggandiva_native_function_to_string(GGandivaNativeFunction *native_function) GGandivaResultNullableType ggandiva_native_function_get_result_nullable_type(GGandivaNativeFunction *native_function) { - auto gandiva_native_function = ggandiva_native_function_get_raw(native_function); + auto gandiva_native_function = + ggandiva_native_function_get_raw(native_function); const auto gandiva_result_nullable_type = gandiva_native_function->result_nullable_type(); return ggandiva_result_nullable_type_from_raw(gandiva_result_nullable_type); @@ -184,7 +190,8 @@ ggandiva_native_function_get_result_nullable_type(GGandivaNativeFunction *native gboolean ggandiva_native_function_need_context(GGandivaNativeFunction *native_function) { - auto gandiva_native_function = ggandiva_native_function_get_raw(native_function); + auto gandiva_native_function = + ggandiva_native_function_get_raw(native_function); return gandiva_native_function->NeedsContext(); } @@ -201,7 +208,8 @@ ggandiva_native_function_need_context(GGandivaNativeFunction *native_function) gboolean ggandiva_native_function_need_function_holder(GGandivaNativeFunction *native_function) { - auto gandiva_native_function = ggandiva_native_function_get_raw(native_function); + auto gandiva_native_function = + ggandiva_native_function_get_raw(native_function); return gandiva_native_function->NeedsFunctionHolder(); } @@ -218,7 +226,8 @@ ggandiva_native_function_need_function_holder(GGandivaNativeFunction *native_fun gboolean ggandiva_native_function_can_return_errors(GGandivaNativeFunction *native_function) { - auto gandiva_native_function = ggandiva_native_function_get_raw(native_function); + auto gandiva_native_function = + ggandiva_native_function_get_raw(native_function); return gandiva_native_function->CanReturnErrors(); } diff --git a/c_glib/gandiva-glib/native-function.h b/c_glib/gandiva-glib/native-function.h index 934d29ab7e3..8b4d6a44c80 100644 --- a/c_glib/gandiva-glib/native-function.h +++ b/c_glib/gandiva-glib/native-function.h @@ -40,43 +40,26 @@ typedef enum { } GGandivaResultNullableType; #define GGANDIVA_TYPE_NATIVE_FUNCTION (ggandiva_native_function_get_type()) -GGANDIVA_AVAILABLE_IN_14_0 -G_DECLARE_DERIVABLE_TYPE( - GGandivaNativeFunction, ggandiva_native_function, GGANDIVA, NATIVE_FUNCTION, GObject) +G_DECLARE_DERIVABLE_TYPE(GGandivaNativeFunction, + ggandiva_native_function, + GGANDIVA, + NATIVE_FUNCTION, + GObject) struct _GGandivaNativeFunctionClass { GObjectClass parent_class; }; -GGANDIVA_AVAILABLE_IN_14_0 GList * ggandiva_native_function_get_signatures(GGandivaNativeFunction *native_function); - -GGANDIVA_AVAILABLE_IN_14_0 gboolean ggandiva_native_function_equal(GGandivaNativeFunction *native_function, GGandivaNativeFunction *other_native_function); - -GGANDIVA_AVAILABLE_IN_14_0 -gchar * -ggandiva_native_function_to_string(GGandivaNativeFunction *native_function); - -GGANDIVA_AVAILABLE_IN_14_0 -GGandivaResultNullableType -ggandiva_native_function_get_result_nullable_type( - GGandivaNativeFunction *native_function); - -GGANDIVA_AVAILABLE_IN_14_0 -gboolean -ggandiva_native_function_need_context(GGandivaNativeFunction *native_function); - -GGANDIVA_AVAILABLE_IN_14_0 -gboolean -ggandiva_native_function_need_function_holder(GGandivaNativeFunction *native_function); - -GGANDIVA_AVAILABLE_IN_14_0 -gboolean -ggandiva_native_function_can_return_errors(GGandivaNativeFunction *native_function); +gchar *ggandiva_native_function_to_string(GGandivaNativeFunction *native_function); +GGandivaResultNullableType ggandiva_native_function_get_result_nullable_type(GGandivaNativeFunction *native_function); +gboolean ggandiva_native_function_need_context(GGandivaNativeFunction *native_function); +gboolean ggandiva_native_function_need_function_holder(GGandivaNativeFunction *native_function); +gboolean ggandiva_native_function_can_return_errors(GGandivaNativeFunction *native_function); G_END_DECLS diff --git a/c_glib/gandiva-glib/native-function.hpp b/c_glib/gandiva-glib/native-function.hpp index 2a1ff7a1e35..76119ca400f 100644 --- a/c_glib/gandiva-glib/native-function.hpp +++ b/c_glib/gandiva-glib/native-function.hpp @@ -30,9 +30,7 @@ ggandiva_result_nullable_type_from_raw(gandiva::ResultNullableType gandiva_type) gandiva::ResultNullableType ggandiva_result_nullable_type_to_raw(GGandivaResultNullableType type); -GGandivaNativeFunction * -ggandiva_native_function_new_raw(const gandiva::NativeFunction *gandiva_native_function); -const gandiva::NativeFunction * -ggandiva_native_function_get_raw(GGandivaNativeFunction *native_function); +GGandivaNativeFunction *ggandiva_native_function_new_raw(const gandiva::NativeFunction *gandiva_native_function); +const gandiva::NativeFunction *ggandiva_native_function_get_raw(GGandivaNativeFunction *native_function); G_END_DECLS diff --git a/c_glib/gandiva-glib/node.cpp b/c_glib/gandiva-glib/node.cpp index fe75b0db03f..1ced7754a70 100644 --- a/c_glib/gandiva-glib/node.cpp +++ b/c_glib/gandiva-glib/node.cpp @@ -27,8 +27,8 @@ template const Type & ggandiva_literal_node_get(GGandivaLiteralNode *node) { - auto gandiva_literal_node = std::static_pointer_cast( - ggandiva_node_get_raw(GGANDIVA_NODE(node))); + auto gandiva_literal_node = + std::static_pointer_cast(ggandiva_node_get_raw(GGANDIVA_NODE(node))); return std::get(gandiva_literal_node->holder()); } @@ -42,11 +42,9 @@ G_BEGIN_DECLS * * #GGandivaNode is a base class for a node in the expression tree. * - * #GGandivaFieldNode is a class for a node in the expression tree, representing an Arrow - * field. + * #GGandivaFieldNode is a class for a node in the expression tree, representing an Arrow field. * - * #GGandivaFunctionNode is a class for a node in the expression tree, representing a - * function. + * #GGandivaFunctionNode is a class for a node in the expression tree, representing a function. * * #GGandivaLiteralNode is a base class for a node in the expression tree, * representing a literal. @@ -95,8 +93,7 @@ G_BEGIN_DECLS * * #GGandivaIfNode is a class for a node in the expression tree, representing an if-else. * - * #GGandivaBooleanNode is a class for a node in the expression tree, representing a - * boolean. + * #GGandivaBooleanNode is a class for a node in the expression tree, representing a boolean. * * #GGandivaAndNode is a class for a node in the expression tree, representing an AND. * @@ -105,8 +102,7 @@ G_BEGIN_DECLS * Since: 0.12.0 */ -typedef struct GGandivaNodePrivate_ -{ +typedef struct GGandivaNodePrivate_ { std::shared_ptr node; GArrowDataType *return_type; } GGandivaNodePrivate; @@ -116,11 +112,14 @@ enum { PROP_RETURN_TYPE }; -G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GGandivaNode, ggandiva_node, G_TYPE_OBJECT) +G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GGandivaNode, + ggandiva_node, + G_TYPE_OBJECT) -#define GGANDIVA_NODE_GET_PRIVATE(object) \ - static_cast( \ - ggandiva_node_get_instance_private(GGANDIVA_NODE(object))) +#define GGANDIVA_NODE_GET_PRIVATE(object) \ + static_cast( \ + ggandiva_node_get_instance_private( \ + GGANDIVA_NODE(object))) static void ggandiva_node_dispose(GObject *object) @@ -189,7 +188,7 @@ static void ggandiva_node_init(GGandivaNode *object) { auto priv = GGANDIVA_NODE_GET_PRIVATE(object); - new (&priv->node) std::shared_ptr; + new(&priv->node) std::shared_ptr; } static void @@ -197,25 +196,25 @@ ggandiva_node_class_init(GGandivaNodeClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = ggandiva_node_dispose; - gobject_class->finalize = ggandiva_node_finalize; + gobject_class->dispose = ggandiva_node_dispose; + gobject_class->finalize = ggandiva_node_finalize; gobject_class->set_property = ggandiva_node_set_property; gobject_class->get_property = ggandiva_node_get_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "node", - "Node", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("node", + "Node", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_NODE, spec); - spec = g_param_spec_object( - "return-type", - "Return type", - "The return type", - GARROW_TYPE_DATA_TYPE, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("return-type", + "Return type", + "The return type", + GARROW_TYPE_DATA_TYPE, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_RETURN_TYPE, spec); } @@ -237,8 +236,7 @@ ggandiva_node_to_string(GGandivaNode *node) return g_strndup(string.data(), string.size()); } -typedef struct GGandivaFieldNodePrivate_ -{ +typedef struct GGandivaFieldNodePrivate_ { GArrowField *field; } GGandivaFieldNodePrivate; @@ -246,11 +244,14 @@ enum { PROP_FIELD = 1 }; -G_DEFINE_TYPE_WITH_PRIVATE(GGandivaFieldNode, ggandiva_field_node, GGANDIVA_TYPE_NODE) +G_DEFINE_TYPE_WITH_PRIVATE(GGandivaFieldNode, + ggandiva_field_node, + GGANDIVA_TYPE_NODE) -#define GGANDIVA_FIELD_NODE_GET_PRIVATE(object) \ - static_cast( \ - ggandiva_field_node_get_instance_private(GGANDIVA_FIELD_NODE(object))) +#define GGANDIVA_FIELD_NODE_GET_PRIVATE(object) \ + static_cast( \ + ggandiva_field_node_get_instance_private( \ + GGANDIVA_FIELD_NODE(object))) static void ggandiva_field_node_dispose(GObject *object) @@ -311,17 +312,17 @@ ggandiva_field_node_class_init(GGandivaFieldNodeClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = ggandiva_field_node_dispose; + gobject_class->dispose = ggandiva_field_node_dispose; gobject_class->set_property = ggandiva_field_node_set_property; gobject_class->get_property = ggandiva_field_node_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "field", - "Field", - "The field", - GARROW_TYPE_FIELD, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("field", + "Field", + "The field", + GARROW_TYPE_FIELD, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_FIELD, spec); } @@ -341,8 +342,8 @@ ggandiva_field_node_new(GArrowField *field) return ggandiva_field_node_new_raw(&gandiva_node, field); } -typedef struct GGandivaFunctionNodePrivate_ -{ + +typedef struct GGandivaFunctionNodePrivate_ { gchar *name; GList *parameters; } GGandivaFunctionNodePrivate; @@ -355,9 +356,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GGandivaFunctionNode, ggandiva_function_node, GGANDIVA_TYPE_NODE) -#define GGANDIVA_FUNCTION_NODE_GET_PRIVATE(object) \ - static_cast( \ - ggandiva_function_node_get_instance_private(GGANDIVA_FUNCTION_NODE(object))) +#define GGANDIVA_FUNCTION_NODE_GET_PRIVATE(object) \ + static_cast( \ + ggandiva_function_node_get_instance_private( \ + GGANDIVA_FUNCTION_NODE(object))) \ static void ggandiva_function_node_dispose(GObject *object) @@ -434,18 +436,18 @@ ggandiva_function_node_class_init(GGandivaFunctionNodeClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = ggandiva_function_node_dispose; - gobject_class->finalize = ggandiva_function_node_finalize; + gobject_class->dispose = ggandiva_function_node_dispose; + gobject_class->finalize = ggandiva_function_node_finalize; gobject_class->set_property = ggandiva_function_node_set_property; gobject_class->get_property = ggandiva_function_node_get_property; GParamSpec *spec; - spec = g_param_spec_string( - "name", - "Name", - "The name of the function", - nullptr, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_string("name", + "Name", + "The name of the function", + nullptr, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_NAME, spec); } @@ -470,9 +472,13 @@ ggandiva_function_node_new(const gchar *name, gandiva_nodes.push_back(gandiva_node); } auto arrow_return_type = garrow_data_type_get_raw(return_type); - auto gandiva_node = - gandiva::TreeExprBuilder::MakeFunction(name, gandiva_nodes, arrow_return_type); - return ggandiva_function_node_new_raw(&gandiva_node, name, parameters, return_type); + auto gandiva_node = gandiva::TreeExprBuilder::MakeFunction(name, + gandiva_nodes, + arrow_return_type); + return ggandiva_function_node_new_raw(&gandiva_node, + name, + parameters, + return_type); } /** @@ -491,7 +497,10 @@ ggandiva_function_node_get_parameters(GGandivaFunctionNode *node) return priv->parameters; } -G_DEFINE_TYPE(GGandivaLiteralNode, ggandiva_literal_node, GGANDIVA_TYPE_NODE) + +G_DEFINE_TYPE(GGandivaLiteralNode, + ggandiva_literal_node, + GGANDIVA_TYPE_NODE) static void ggandiva_literal_node_init(GGandivaLiteralNode *literal_node) @@ -503,6 +512,7 @@ ggandiva_literal_node_class_init(GGandivaLiteralNodeClass *klass) { } + G_DEFINE_TYPE(GGandivaNullLiteralNode, ggandiva_null_literal_node, GGANDIVA_TYPE_LITERAL_NODE) @@ -528,7 +538,8 @@ ggandiva_null_literal_node_class_init(GGandivaNullLiteralNodeClass *klass) * Since: 0.12.0 */ GGandivaNullLiteralNode * -ggandiva_null_literal_node_new(GArrowDataType *return_type, GError **error) +ggandiva_null_literal_node_new(GArrowDataType *return_type, + GError **error) { auto arrow_return_type = garrow_data_type_get_raw(return_type); auto gandiva_node = gandiva::TreeExprBuilder::MakeNull(arrow_return_type); @@ -541,10 +552,11 @@ ggandiva_null_literal_node_new(GArrowDataType *return_type, GError **error) arrow_return_type->ToString().c_str()); return NULL; } - return GGANDIVA_NULL_LITERAL_NODE( - ggandiva_literal_node_new_raw(&gandiva_node, return_type)); + return GGANDIVA_NULL_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, + return_type)); } + G_DEFINE_TYPE(GGandivaBooleanLiteralNode, ggandiva_boolean_literal_node, GGANDIVA_TYPE_LITERAL_NODE) @@ -571,8 +583,8 @@ GGandivaBooleanLiteralNode * ggandiva_boolean_literal_node_new(gboolean value) { auto gandiva_node = gandiva::TreeExprBuilder::MakeLiteral(static_cast(value)); - return GGANDIVA_BOOLEAN_LITERAL_NODE( - ggandiva_literal_node_new_raw(&gandiva_node, NULL)); + return GGANDIVA_BOOLEAN_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, + NULL)); } /** @@ -590,6 +602,7 @@ ggandiva_boolean_literal_node_get_value(GGandivaBooleanLiteralNode *node) return static_cast(value); } + G_DEFINE_TYPE(GGandivaInt8LiteralNode, ggandiva_int8_literal_node, GGANDIVA_TYPE_LITERAL_NODE) @@ -616,7 +629,8 @@ GGandivaInt8LiteralNode * ggandiva_int8_literal_node_new(gint8 value) { auto gandiva_node = gandiva::TreeExprBuilder::MakeLiteral(value); - return GGANDIVA_INT8_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, NULL)); + return GGANDIVA_INT8_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, + NULL)); } /** @@ -633,6 +647,7 @@ ggandiva_int8_literal_node_get_value(GGandivaInt8LiteralNode *node) return ggandiva_literal_node_get(GGANDIVA_LITERAL_NODE(node)); } + G_DEFINE_TYPE(GGandivaUInt8LiteralNode, ggandiva_uint8_literal_node, GGANDIVA_TYPE_LITERAL_NODE) @@ -659,7 +674,8 @@ GGandivaUInt8LiteralNode * ggandiva_uint8_literal_node_new(guint8 value) { auto gandiva_node = gandiva::TreeExprBuilder::MakeLiteral(value); - return GGANDIVA_UINT8_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, NULL)); + return GGANDIVA_UINT8_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, + NULL)); } /** @@ -676,6 +692,7 @@ ggandiva_uint8_literal_node_get_value(GGandivaUInt8LiteralNode *node) return ggandiva_literal_node_get(GGANDIVA_LITERAL_NODE(node)); } + G_DEFINE_TYPE(GGandivaInt16LiteralNode, ggandiva_int16_literal_node, GGANDIVA_TYPE_LITERAL_NODE) @@ -702,7 +719,8 @@ GGandivaInt16LiteralNode * ggandiva_int16_literal_node_new(gint16 value) { auto gandiva_node = gandiva::TreeExprBuilder::MakeLiteral(value); - return GGANDIVA_INT16_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, NULL)); + return GGANDIVA_INT16_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, + NULL)); } /** @@ -719,6 +737,7 @@ ggandiva_int16_literal_node_get_value(GGandivaInt16LiteralNode *node) return ggandiva_literal_node_get(GGANDIVA_LITERAL_NODE(node)); } + G_DEFINE_TYPE(GGandivaUInt16LiteralNode, ggandiva_uint16_literal_node, GGANDIVA_TYPE_LITERAL_NODE) @@ -745,7 +764,8 @@ GGandivaUInt16LiteralNode * ggandiva_uint16_literal_node_new(guint16 value) { auto gandiva_node = gandiva::TreeExprBuilder::MakeLiteral(value); - return GGANDIVA_UINT16_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, NULL)); + return GGANDIVA_UINT16_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, + NULL)); } /** @@ -762,6 +782,7 @@ ggandiva_uint16_literal_node_get_value(GGandivaUInt16LiteralNode *node) return ggandiva_literal_node_get(GGANDIVA_LITERAL_NODE(node)); } + G_DEFINE_TYPE(GGandivaInt32LiteralNode, ggandiva_int32_literal_node, GGANDIVA_TYPE_LITERAL_NODE) @@ -788,7 +809,8 @@ GGandivaInt32LiteralNode * ggandiva_int32_literal_node_new(gint32 value) { auto gandiva_node = gandiva::TreeExprBuilder::MakeLiteral(value); - return GGANDIVA_INT32_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, NULL)); + return GGANDIVA_INT32_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, + NULL)); } /** @@ -805,6 +827,7 @@ ggandiva_int32_literal_node_get_value(GGandivaInt32LiteralNode *node) return ggandiva_literal_node_get(GGANDIVA_LITERAL_NODE(node)); } + G_DEFINE_TYPE(GGandivaUInt32LiteralNode, ggandiva_uint32_literal_node, GGANDIVA_TYPE_LITERAL_NODE) @@ -831,7 +854,8 @@ GGandivaUInt32LiteralNode * ggandiva_uint32_literal_node_new(guint32 value) { auto gandiva_node = gandiva::TreeExprBuilder::MakeLiteral(value); - return GGANDIVA_UINT32_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, NULL)); + return GGANDIVA_UINT32_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, + NULL)); } /** @@ -848,6 +872,7 @@ ggandiva_uint32_literal_node_get_value(GGandivaUInt32LiteralNode *node) return ggandiva_literal_node_get(GGANDIVA_LITERAL_NODE(node)); } + G_DEFINE_TYPE(GGandivaInt64LiteralNode, ggandiva_int64_literal_node, GGANDIVA_TYPE_LITERAL_NODE) @@ -873,9 +898,9 @@ ggandiva_int64_literal_node_class_init(GGandivaInt64LiteralNodeClass *klass) GGandivaInt64LiteralNode * ggandiva_int64_literal_node_new(gint64 value) { - auto int64_t_value = static_cast(value); - auto gandiva_node = gandiva::TreeExprBuilder::MakeLiteral(int64_t_value); - return GGANDIVA_INT64_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, NULL)); + auto gandiva_node = gandiva::TreeExprBuilder::MakeLiteral(value); + return GGANDIVA_INT64_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, + NULL)); } /** @@ -892,6 +917,7 @@ ggandiva_int64_literal_node_get_value(GGandivaInt64LiteralNode *node) return ggandiva_literal_node_get(GGANDIVA_LITERAL_NODE(node)); } + G_DEFINE_TYPE(GGandivaUInt64LiteralNode, ggandiva_uint64_literal_node, GGANDIVA_TYPE_LITERAL_NODE) @@ -917,9 +943,9 @@ ggandiva_uint64_literal_node_class_init(GGandivaUInt64LiteralNodeClass *klass) GGandivaUInt64LiteralNode * ggandiva_uint64_literal_node_new(guint64 value) { - auto uint64_t_value = static_cast(value); - auto gandiva_node = gandiva::TreeExprBuilder::MakeLiteral(uint64_t_value); - return GGANDIVA_UINT64_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, NULL)); + auto gandiva_node = gandiva::TreeExprBuilder::MakeLiteral(value); + return GGANDIVA_UINT64_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, + NULL)); } /** @@ -936,6 +962,7 @@ ggandiva_uint64_literal_node_get_value(GGandivaUInt64LiteralNode *node) return ggandiva_literal_node_get(GGANDIVA_LITERAL_NODE(node)); } + G_DEFINE_TYPE(GGandivaFloatLiteralNode, ggandiva_float_literal_node, GGANDIVA_TYPE_LITERAL_NODE) @@ -962,7 +989,8 @@ GGandivaFloatLiteralNode * ggandiva_float_literal_node_new(gfloat value) { auto gandiva_node = gandiva::TreeExprBuilder::MakeLiteral(value); - return GGANDIVA_FLOAT_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, NULL)); + return GGANDIVA_FLOAT_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, + NULL)); } /** @@ -979,6 +1007,7 @@ ggandiva_float_literal_node_get_value(GGandivaFloatLiteralNode *node) return ggandiva_literal_node_get(GGANDIVA_LITERAL_NODE(node)); } + G_DEFINE_TYPE(GGandivaDoubleLiteralNode, ggandiva_double_literal_node, GGANDIVA_TYPE_LITERAL_NODE) @@ -1005,7 +1034,8 @@ GGandivaDoubleLiteralNode * ggandiva_double_literal_node_new(gdouble value) { auto gandiva_node = gandiva::TreeExprBuilder::MakeLiteral(value); - return GGANDIVA_DOUBLE_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, NULL)); + return GGANDIVA_DOUBLE_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, + NULL)); } /** @@ -1022,8 +1052,8 @@ ggandiva_double_literal_node_get_value(GGandivaDoubleLiteralNode *node) return ggandiva_literal_node_get(GGANDIVA_LITERAL_NODE(node)); } -typedef struct GGandivaBinaryLiteralNodePrivate_ -{ + +typedef struct GGandivaBinaryLiteralNodePrivate_ { GBytes *value; } GGandivaBinaryLiteralNodePrivate; @@ -1031,9 +1061,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GGandivaBinaryLiteralNode, ggandiva_binary_literal_node, GGANDIVA_TYPE_LITERAL_NODE) -#define GGANDIVA_BINARY_LITERAL_NODE_GET_PRIVATE(object) \ - static_cast( \ - ggandiva_binary_literal_node_get_instance_private( \ +#define GGANDIVA_BINARY_LITERAL_NODE_GET_PRIVATE(object) \ + static_cast( \ + ggandiva_binary_literal_node_get_instance_private( \ GGANDIVA_BINARY_LITERAL_NODE(object))) static void @@ -1072,11 +1102,14 @@ ggandiva_binary_literal_node_class_init(GGandivaBinaryLiteralNodeClass *klass) * Since: 0.12.0 */ GGandivaBinaryLiteralNode * -ggandiva_binary_literal_node_new(const guint8 *value, gsize size) +ggandiva_binary_literal_node_new(const guint8 *value, + gsize size) { - auto gandiva_node = gandiva::TreeExprBuilder::MakeBinaryLiteral( - std::string(reinterpret_cast(value), size)); - return GGANDIVA_BINARY_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, NULL)); + auto gandiva_node = + gandiva::TreeExprBuilder::MakeBinaryLiteral(std::string(reinterpret_cast(value), + size)); + return GGANDIVA_BINARY_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, + NULL)); } /** @@ -1092,9 +1125,12 @@ ggandiva_binary_literal_node_new_bytes(GBytes *value) { size_t value_size; auto raw_value = g_bytes_get_data(value, &value_size); - auto gandiva_node = gandiva::TreeExprBuilder::MakeBinaryLiteral( - std::string(reinterpret_cast(raw_value), value_size)); - auto literal_node = ggandiva_literal_node_new_raw(&gandiva_node, NULL); + auto gandiva_node = + gandiva::TreeExprBuilder::MakeBinaryLiteral( + std::string(reinterpret_cast(raw_value), + value_size)); + auto literal_node = ggandiva_literal_node_new_raw(&gandiva_node, + NULL); auto priv = GGANDIVA_BINARY_LITERAL_NODE_GET_PRIVATE(literal_node); priv->value = value; g_bytes_ref(priv->value); @@ -1121,6 +1157,7 @@ ggandiva_binary_literal_node_get_value(GGandivaBinaryLiteralNode *node) return priv->value; } + G_DEFINE_TYPE(GGandivaStringLiteralNode, ggandiva_string_literal_node, GGANDIVA_TYPE_LITERAL_NODE) @@ -1147,7 +1184,8 @@ GGandivaStringLiteralNode * ggandiva_string_literal_node_new(const gchar *value) { auto gandiva_node = gandiva::TreeExprBuilder::MakeStringLiteral(value); - return GGANDIVA_STRING_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, NULL)); + return GGANDIVA_STRING_LITERAL_NODE(ggandiva_literal_node_new_raw(&gandiva_node, + NULL)); } /** @@ -1165,8 +1203,8 @@ ggandiva_string_literal_node_get_value(GGandivaStringLiteralNode *node) return value.c_str(); } -typedef struct GGandivaIfNodePrivate_ -{ + +typedef struct GGandivaIfNodePrivate_ { GGandivaNode *condition_node; GGandivaNode *then_node; GGandivaNode *else_node; @@ -1178,11 +1216,14 @@ enum { PROP_ELSE_NODE, }; -G_DEFINE_TYPE_WITH_PRIVATE(GGandivaIfNode, ggandiva_if_node, GGANDIVA_TYPE_NODE) +G_DEFINE_TYPE_WITH_PRIVATE(GGandivaIfNode, + ggandiva_if_node, + GGANDIVA_TYPE_NODE) -#define GGANDIVA_IF_NODE_GET_PRIVATE(object) \ - static_cast( \ - ggandiva_if_node_get_instance_private(GGANDIVA_IF_NODE(object))) +#define GGANDIVA_IF_NODE_GET_PRIVATE(object) \ + static_cast( \ + ggandiva_if_node_get_instance_private( \ + GGANDIVA_IF_NODE(object))) static void ggandiva_if_node_dispose(GObject *object) @@ -1265,33 +1306,33 @@ ggandiva_if_node_class_init(GGandivaIfNodeClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = ggandiva_if_node_dispose; + gobject_class->dispose = ggandiva_if_node_dispose; gobject_class->set_property = ggandiva_if_node_set_property; gobject_class->get_property = ggandiva_if_node_get_property; GParamSpec *spec; - spec = g_param_spec_object( - "condition-node", - "Condition node", - "The condition node", - GGANDIVA_TYPE_NODE, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("condition-node", + "Condition node", + "The condition node", + GGANDIVA_TYPE_NODE, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_CONDITION_NODE, spec); - spec = g_param_spec_object( - "then-node", - "Then node", - "The then node", - GGANDIVA_TYPE_NODE, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("then-node", + "Then node", + "The then node", + GGANDIVA_TYPE_NODE, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_THEN_NODE, spec); - spec = g_param_spec_object( - "else-node", - "Else node", - "The else node", - GGANDIVA_TYPE_NODE, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("else-node", + "Else node", + "The else node", + GGANDIVA_TYPE_NODE, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_ELSE_NODE, spec); } @@ -1350,16 +1391,19 @@ ggandiva_if_node_new(GGandivaNode *condition_node, return_type); } -typedef struct GGandivaBooleanNodePrivate_ -{ + +typedef struct GGandivaBooleanNodePrivate_ { GList *children; } GGandivaBooleanNodePrivate; -G_DEFINE_TYPE_WITH_PRIVATE(GGandivaBooleanNode, ggandiva_boolean_node, GGANDIVA_TYPE_NODE) +G_DEFINE_TYPE_WITH_PRIVATE(GGandivaBooleanNode, + ggandiva_boolean_node, + GGANDIVA_TYPE_NODE) -#define GGANDIVA_BOOLEAN_NODE_GET_PRIVATE(object) \ - static_cast( \ - ggandiva_boolean_node_get_instance_private(GGANDIVA_BOOLEAN_NODE(object))) +#define GGANDIVA_BOOLEAN_NODE_GET_PRIVATE(object) \ + static_cast( \ + ggandiva_boolean_node_get_instance_private( \ + GGANDIVA_BOOLEAN_NODE(object))) \ static void ggandiva_boolean_node_dispose(GObject *object) @@ -1405,7 +1449,10 @@ ggandiva_boolean_node_get_children(GGandivaBooleanNode *node) return priv->children; } -G_DEFINE_TYPE(GGandivaAndNode, ggandiva_and_node, GGANDIVA_TYPE_BOOLEAN_NODE) + +G_DEFINE_TYPE(GGandivaAndNode, + ggandiva_and_node, + GGANDIVA_TYPE_BOOLEAN_NODE) static void ggandiva_and_node_init(GGandivaAndNode *and_node) @@ -1434,10 +1481,14 @@ ggandiva_and_node_new(GList *children) gandiva_nodes.push_back(gandiva_node); } auto gandiva_node = gandiva::TreeExprBuilder::MakeAnd(gandiva_nodes); - return GGANDIVA_AND_NODE(ggandiva_boolean_node_new_raw(&gandiva_node, children)); + return GGANDIVA_AND_NODE(ggandiva_boolean_node_new_raw(&gandiva_node, + children)); } -G_DEFINE_TYPE(GGandivaOrNode, ggandiva_or_node, GGANDIVA_TYPE_BOOLEAN_NODE) + +G_DEFINE_TYPE(GGandivaOrNode, + ggandiva_or_node, + GGANDIVA_TYPE_BOOLEAN_NODE) static void ggandiva_or_node_init(GGandivaOrNode *or_node) @@ -1466,7 +1517,8 @@ ggandiva_or_node_new(GList *children) gandiva_nodes.push_back(gandiva_node); } auto gandiva_node = gandiva::TreeExprBuilder::MakeOr(gandiva_nodes); - return GGANDIVA_OR_NODE(ggandiva_boolean_node_new_raw(&gandiva_node, children)); + return GGANDIVA_OR_NODE(ggandiva_boolean_node_new_raw(&gandiva_node, + children)); } G_END_DECLS @@ -1485,12 +1537,9 @@ ggandiva_field_node_new_raw(std::shared_ptr *gandiva_node, auto arrow_return_type = (*gandiva_node)->return_type(); auto return_type = garrow_field_get_data_type(field); auto field_node = g_object_new(GGANDIVA_TYPE_FIELD_NODE, - "node", - gandiva_node, - "field", - field, - "return-type", - return_type, + "node", gandiva_node, + "field", field, + "return-type", return_type, NULL); return GGANDIVA_FIELD_NODE(field_node); } @@ -1502,12 +1551,9 @@ ggandiva_function_node_new_raw(std::shared_ptr *gandiva_node, GArrowDataType *return_type) { auto function_node = g_object_new(GGANDIVA_TYPE_FUNCTION_NODE, - "node", - gandiva_node, - "name", - name, - "return-type", - return_type, + "node", gandiva_node, + "name", name, + "return-type", return_type, NULL); auto priv = GGANDIVA_FUNCTION_NODE_GET_PRIVATE(function_node); for (auto node = parameters; node; node = g_list_next(node)) { @@ -1527,12 +1573,11 @@ ggandiva_literal_node_new_raw(std::shared_ptr *gandiva_node, GGandivaLiteralNode *literal_node; if (gandiva_literal_node->is_null()) { - literal_node = GGANDIVA_LITERAL_NODE(g_object_new(GGANDIVA_TYPE_NULL_LITERAL_NODE, - "node", - gandiva_node, - "return-type", - return_type, - NULL)); + literal_node = + GGANDIVA_LITERAL_NODE(g_object_new(GGANDIVA_TYPE_NULL_LITERAL_NODE, + "node", gandiva_node, + "return-type", return_type, + NULL)); } else { GType type; @@ -1583,12 +1628,18 @@ ggandiva_literal_node_new_raw(std::shared_ptr *gandiva_node, } if (return_type) { - literal_node = GGANDIVA_LITERAL_NODE( - g_object_new(type, "node", gandiva_node, "return-type", return_type, NULL)); + literal_node = + GGANDIVA_LITERAL_NODE(g_object_new(type, + "node", gandiva_node, + "return-type", return_type, + NULL)); } else { return_type = garrow_data_type_new_raw(&arrow_return_type); - literal_node = GGANDIVA_LITERAL_NODE( - g_object_new(type, "node", gandiva_node, "return-type", return_type, NULL)); + literal_node = + GGANDIVA_LITERAL_NODE(g_object_new(type, + "node", gandiva_node, + "return-type", return_type, + NULL)); g_object_unref(return_type); } } @@ -1604,16 +1655,11 @@ ggandiva_if_node_new_raw(std::shared_ptr *gandiva_node, GArrowDataType *return_type) { auto if_node = g_object_new(GGANDIVA_TYPE_IF_NODE, - "node", - gandiva_node, - "condition-node", - condition_node, - "then-node", - then_node, - "else-node", - else_node, - "return-type", - return_type, + "node", gandiva_node, + "condition-node", condition_node, + "then-node", then_node, + "else-node", else_node, + "return-type", return_type, NULL); return GGANDIVA_IF_NODE(if_node); } @@ -1631,9 +1677,12 @@ ggandiva_boolean_node_new_raw(std::shared_ptr *gandiva_node, } else { type = GGANDIVA_TYPE_OR_NODE; } - auto boolean_node = g_object_new(type, "node", gandiva_node, NULL); + auto boolean_node = g_object_new(type, + "node", gandiva_node, + NULL); auto priv = GGANDIVA_BOOLEAN_NODE_GET_PRIVATE(boolean_node); - priv->children = - g_list_copy_deep(children, reinterpret_cast(g_object_ref), NULL); + priv->children = g_list_copy_deep(children, + reinterpret_cast(g_object_ref), + NULL); return GGANDIVA_BOOLEAN_NODE(boolean_node); } diff --git a/c_glib/gandiva-glib/node.h b/c_glib/gandiva-glib/node.h index 1733cac918c..a16f26c656c 100644 --- a/c_glib/gandiva-glib/node.h +++ b/c_glib/gandiva-glib/node.h @@ -26,61 +26,66 @@ G_BEGIN_DECLS #define GGANDIVA_TYPE_NODE (ggandiva_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 -G_DECLARE_DERIVABLE_TYPE(GGandivaNode, ggandiva_node, GGANDIVA, NODE, GObject) +G_DECLARE_DERIVABLE_TYPE(GGandivaNode, + ggandiva_node, + GGANDIVA, + NODE, + GObject) struct _GGandivaNodeClass { GObjectClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_16 -gchar * -ggandiva_node_to_string(GGandivaNode *node); +gchar *ggandiva_node_to_string(GGandivaNode *node); + #define GGANDIVA_TYPE_FIELD_NODE (ggandiva_field_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 -G_DECLARE_DERIVABLE_TYPE( - GGandivaFieldNode, ggandiva_field_node, GGANDIVA, FIELD_NODE, GGandivaNode) +G_DECLARE_DERIVABLE_TYPE(GGandivaFieldNode, + ggandiva_field_node, + GGANDIVA, + FIELD_NODE, + GGandivaNode) struct _GGandivaFieldNodeClass { GGandivaNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 -GGandivaFieldNode * -ggandiva_field_node_new(GArrowField *field); +GGandivaFieldNode *ggandiva_field_node_new(GArrowField *field); + #define GGANDIVA_TYPE_FUNCTION_NODE (ggandiva_function_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 -G_DECLARE_DERIVABLE_TYPE( - GGandivaFunctionNode, ggandiva_function_node, GGANDIVA, FUNCTION_NODE, GGandivaNode) +G_DECLARE_DERIVABLE_TYPE(GGandivaFunctionNode, + ggandiva_function_node, + GGANDIVA, + FUNCTION_NODE, + GGandivaNode) struct _GGandivaFunctionNodeClass { GGandivaNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaFunctionNode * ggandiva_function_node_new(const gchar *name, GList *parameters, GArrowDataType *return_type); - -GGANDIVA_AVAILABLE_IN_0_12 GList * ggandiva_function_node_get_parameters(GGandivaFunctionNode *node); + #define GGANDIVA_TYPE_LITERAL_NODE (ggandiva_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 -G_DECLARE_DERIVABLE_TYPE( - GGandivaLiteralNode, ggandiva_literal_node, GGANDIVA, LITERAL_NODE, GGandivaNode) +G_DECLARE_DERIVABLE_TYPE(GGandivaLiteralNode, + ggandiva_literal_node, + GGANDIVA, + LITERAL_NODE, + GGandivaNode) struct _GGandivaLiteralNodeClass { GGandivaNodeClass parent_class; }; + #define GGANDIVA_TYPE_NULL_LITERAL_NODE (ggandiva_null_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GGandivaNullLiteralNode, ggandiva_null_literal_node, GGANDIVA, @@ -91,12 +96,12 @@ struct _GGandivaNullLiteralNodeClass GGandivaLiteralNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaNullLiteralNode * -ggandiva_null_literal_node_new(GArrowDataType *return_type, GError **error); +ggandiva_null_literal_node_new(GArrowDataType *return_type, + GError **error); + #define GGANDIVA_TYPE_BOOLEAN_LITERAL_NODE (ggandiva_boolean_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GGandivaBooleanLiteralNode, ggandiva_boolean_literal_node, GGANDIVA, @@ -107,16 +112,13 @@ struct _GGandivaBooleanLiteralNodeClass GGandivaLiteralNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaBooleanLiteralNode * ggandiva_boolean_literal_node_new(gboolean value); - -GGANDIVA_AVAILABLE_IN_0_12 gboolean ggandiva_boolean_literal_node_get_value(GGandivaBooleanLiteralNode *node); + #define GGANDIVA_TYPE_INT8_LITERAL_NODE (ggandiva_int8_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GGandivaInt8LiteralNode, ggandiva_int8_literal_node, GGANDIVA, @@ -127,16 +129,13 @@ struct _GGandivaInt8LiteralNodeClass GGandivaLiteralNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaInt8LiteralNode * ggandiva_int8_literal_node_new(gint8 value); - -GGANDIVA_AVAILABLE_IN_0_12 gint8 ggandiva_int8_literal_node_get_value(GGandivaInt8LiteralNode *node); + #define GGANDIVA_TYPE_UINT8_LITERAL_NODE (ggandiva_uint8_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GGandivaUInt8LiteralNode, ggandiva_uint8_literal_node, GGANDIVA, @@ -147,16 +146,13 @@ struct _GGandivaUInt8LiteralNodeClass GGandivaLiteralNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaUInt8LiteralNode * ggandiva_uint8_literal_node_new(guint8 value); - -GGANDIVA_AVAILABLE_IN_0_12 guint8 ggandiva_uint8_literal_node_get_value(GGandivaUInt8LiteralNode *node); + #define GGANDIVA_TYPE_INT16_LITERAL_NODE (ggandiva_int16_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GGandivaInt16LiteralNode, ggandiva_int16_literal_node, GGANDIVA, @@ -167,16 +163,13 @@ struct _GGandivaInt16LiteralNodeClass GGandivaLiteralNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaInt16LiteralNode * ggandiva_int16_literal_node_new(gint16 value); - -GGANDIVA_AVAILABLE_IN_0_12 gint16 ggandiva_int16_literal_node_get_value(GGandivaInt16LiteralNode *node); + #define GGANDIVA_TYPE_UINT16_LITERAL_NODE (ggandiva_uint16_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GGandivaUInt16LiteralNode, ggandiva_uint16_literal_node, GGANDIVA, @@ -187,16 +180,13 @@ struct _GGandivaUInt16LiteralNodeClass GGandivaLiteralNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaUInt16LiteralNode * ggandiva_uint16_literal_node_new(guint16 value); - -GGANDIVA_AVAILABLE_IN_0_12 guint16 ggandiva_uint16_literal_node_get_value(GGandivaUInt16LiteralNode *node); + #define GGANDIVA_TYPE_INT32_LITERAL_NODE (ggandiva_int32_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GGandivaInt32LiteralNode, ggandiva_int32_literal_node, GGANDIVA, @@ -207,16 +197,13 @@ struct _GGandivaInt32LiteralNodeClass GGandivaLiteralNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaInt32LiteralNode * ggandiva_int32_literal_node_new(gint32 value); - -GGANDIVA_AVAILABLE_IN_0_12 gint32 ggandiva_int32_literal_node_get_value(GGandivaInt32LiteralNode *node); + #define GGANDIVA_TYPE_UINT32_LITERAL_NODE (ggandiva_uint32_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GGandivaUInt32LiteralNode, ggandiva_uint32_literal_node, GGANDIVA, @@ -227,16 +214,13 @@ struct _GGandivaUInt32LiteralNodeClass GGandivaLiteralNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaUInt32LiteralNode * ggandiva_uint32_literal_node_new(guint32 value); - -GGANDIVA_AVAILABLE_IN_0_12 guint32 ggandiva_uint32_literal_node_get_value(GGandivaUInt32LiteralNode *node); + #define GGANDIVA_TYPE_INT64_LITERAL_NODE (ggandiva_int64_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GGandivaInt64LiteralNode, ggandiva_int64_literal_node, GGANDIVA, @@ -247,16 +231,13 @@ struct _GGandivaInt64LiteralNodeClass GGandivaLiteralNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaInt64LiteralNode * ggandiva_int64_literal_node_new(gint64 value); - -GGANDIVA_AVAILABLE_IN_0_12 gint64 ggandiva_int64_literal_node_get_value(GGandivaInt64LiteralNode *node); + #define GGANDIVA_TYPE_UINT64_LITERAL_NODE (ggandiva_uint64_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GGandivaUInt64LiteralNode, ggandiva_uint64_literal_node, GGANDIVA, @@ -267,16 +248,13 @@ struct _GGandivaUInt64LiteralNodeClass GGandivaLiteralNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaUInt64LiteralNode * ggandiva_uint64_literal_node_new(guint64 value); - -GGANDIVA_AVAILABLE_IN_0_12 guint64 ggandiva_uint64_literal_node_get_value(GGandivaUInt64LiteralNode *node); + #define GGANDIVA_TYPE_FLOAT_LITERAL_NODE (ggandiva_float_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GGandivaFloatLiteralNode, ggandiva_float_literal_node, GGANDIVA, @@ -287,16 +265,13 @@ struct _GGandivaFloatLiteralNodeClass GGandivaLiteralNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaFloatLiteralNode * ggandiva_float_literal_node_new(gfloat value); - -GGANDIVA_AVAILABLE_IN_0_12 gfloat ggandiva_float_literal_node_get_value(GGandivaFloatLiteralNode *node); + #define GGANDIVA_TYPE_DOUBLE_LITERAL_NODE (ggandiva_double_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GGandivaDoubleLiteralNode, ggandiva_double_literal_node, GGANDIVA, @@ -307,16 +282,13 @@ struct _GGandivaDoubleLiteralNodeClass GGandivaLiteralNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaDoubleLiteralNode * ggandiva_double_literal_node_new(gdouble value); - -GGANDIVA_AVAILABLE_IN_0_12 gdouble ggandiva_double_literal_node_get_value(GGandivaDoubleLiteralNode *node); + #define GGANDIVA_TYPE_BINARY_LITERAL_NODE (ggandiva_binary_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GGandivaBinaryLiteralNode, ggandiva_binary_literal_node, GGANDIVA, @@ -327,20 +299,16 @@ struct _GGandivaBinaryLiteralNodeClass GGandivaLiteralNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaBinaryLiteralNode * -ggandiva_binary_literal_node_new(const guint8 *value, gsize size); - -GGANDIVA_AVAILABLE_IN_0_12 +ggandiva_binary_literal_node_new(const guint8 *value, + gsize size); GGandivaBinaryLiteralNode * ggandiva_binary_literal_node_new_bytes(GBytes *value); - -GGANDIVA_AVAILABLE_IN_0_12 GBytes * ggandiva_binary_literal_node_get_value(GGandivaBinaryLiteralNode *node); + #define GGANDIVA_TYPE_STRING_LITERAL_NODE (ggandiva_string_literal_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 G_DECLARE_DERIVABLE_TYPE(GGandivaStringLiteralNode, ggandiva_string_literal_node, GGANDIVA, @@ -351,24 +319,23 @@ struct _GGandivaStringLiteralNodeClass GGandivaLiteralNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaStringLiteralNode * ggandiva_string_literal_node_new(const gchar *value); - -GGANDIVA_AVAILABLE_IN_0_12 const gchar * ggandiva_string_literal_node_get_value(GGandivaStringLiteralNode *node); + #define GGANDIVA_TYPE_IF_NODE (ggandiva_if_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 -G_DECLARE_DERIVABLE_TYPE( - GGandivaIfNode, ggandiva_if_node, GGANDIVA, IF_NODE, GGandivaNode) +G_DECLARE_DERIVABLE_TYPE(GGandivaIfNode, + ggandiva_if_node, + GGANDIVA, + IF_NODE, + GGandivaNode) struct _GGandivaIfNodeClass { GGandivaNodeClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaIfNode * ggandiva_if_node_new(GGandivaNode *condition_node, GGandivaNode *then_node, @@ -376,10 +343,13 @@ ggandiva_if_node_new(GGandivaNode *condition_node, GArrowDataType *return_type, GError **error); + #define GGANDIVA_TYPE_BOOLEAN_NODE (ggandiva_boolean_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_17 -G_DECLARE_DERIVABLE_TYPE( - GGandivaBooleanNode, ggandiva_boolean_node, GGANDIVA, BOOLEAN_NODE, GGandivaNode) +G_DECLARE_DERIVABLE_TYPE(GGandivaBooleanNode, + ggandiva_boolean_node, + GGANDIVA, + BOOLEAN_NODE, + GGandivaNode) struct _GGandivaBooleanNodeClass { @@ -390,10 +360,13 @@ GGANDIVA_AVAILABLE_IN_0_17 GList * ggandiva_boolean_node_get_children(GGandivaBooleanNode *node); + #define GGANDIVA_TYPE_AND_NODE (ggandiva_and_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_17 -G_DECLARE_DERIVABLE_TYPE( - GGandivaAndNode, ggandiva_and_node, GGANDIVA, AND_NODE, GGandivaBooleanNode) +G_DECLARE_DERIVABLE_TYPE(GGandivaAndNode, + ggandiva_and_node, + GGANDIVA, + AND_NODE, + GGandivaBooleanNode) struct _GGandivaAndNodeClass { GGandivaBooleanNodeClass parent_class; @@ -403,10 +376,13 @@ GGANDIVA_AVAILABLE_IN_0_17 GGandivaAndNode * ggandiva_and_node_new(GList *children); + #define GGANDIVA_TYPE_OR_NODE (ggandiva_or_node_get_type()) -GGANDIVA_AVAILABLE_IN_0_17 -G_DECLARE_DERIVABLE_TYPE( - GGandivaOrNode, ggandiva_or_node, GGANDIVA, OR_NODE, GGandivaBooleanNode) +G_DECLARE_DERIVABLE_TYPE(GGandivaOrNode, + ggandiva_or_node, + GGANDIVA, + OR_NODE, + GGandivaBooleanNode) struct _GGandivaOrNodeClass { GGandivaBooleanNodeClass parent_class; diff --git a/c_glib/gandiva-glib/node.hpp b/c_glib/gandiva-glib/node.hpp index 5a410db0645..51dc2cbbf74 100644 --- a/c_glib/gandiva-glib/node.hpp +++ b/c_glib/gandiva-glib/node.hpp @@ -26,8 +26,7 @@ #include -std::shared_ptr -ggandiva_node_get_raw(GGandivaNode *node); +std::shared_ptr ggandiva_node_get_raw(GGandivaNode *node); GGandivaFieldNode * ggandiva_field_node_new_raw(std::shared_ptr *gandiva_node, GArrowField *field); diff --git a/c_glib/gandiva-glib/projector.cpp b/c_glib/gandiva-glib/projector.cpp index 8d807510fa9..c91cde84c5f 100644 --- a/c_glib/gandiva-glib/projector.cpp +++ b/c_glib/gandiva-glib/projector.cpp @@ -42,8 +42,7 @@ G_BEGIN_DECLS * Since: 0.12.0 */ -typedef struct GGandivaProjectorPrivate_ -{ +typedef struct GGandivaProjectorPrivate_ { std::shared_ptr projector; GArrowSchema *schema; GList *expressions; @@ -55,11 +54,14 @@ enum { PROP_EXPRESSIONS, }; -G_DEFINE_TYPE_WITH_PRIVATE(GGandivaProjector, ggandiva_projector, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GGandivaProjector, + ggandiva_projector, + G_TYPE_OBJECT) -#define GGANDIVA_PROJECTOR_GET_PRIVATE(obj) \ - static_cast( \ - ggandiva_projector_get_instance_private(GGANDIVA_PROJECTOR(obj))) +#define GGANDIVA_PROJECTOR_GET_PRIVATE(obj) \ + static_cast( \ + ggandiva_projector_get_instance_private( \ + GGANDIVA_PROJECTOR(obj))) static void ggandiva_projector_dispose(GObject *object) @@ -104,9 +106,10 @@ ggandiva_projector_set_property(GObject *object, priv->schema = GARROW_SCHEMA(g_value_dup_object(value)); break; case PROP_EXPRESSIONS: - priv->expressions = g_list_copy_deep(static_cast(g_value_get_pointer(value)), - reinterpret_cast(g_object_ref), - nullptr); + priv->expressions = + g_list_copy_deep(static_cast(g_value_get_pointer(value)), + reinterpret_cast(g_object_ref), + nullptr); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -136,7 +139,7 @@ static void ggandiva_projector_init(GGandivaProjector *object) { auto priv = GGANDIVA_PROJECTOR_GET_PRIVATE(object); - new (&priv->projector) std::shared_ptr; + new(&priv->projector) std::shared_ptr; } static void @@ -144,32 +147,32 @@ ggandiva_projector_class_init(GGandivaProjectorClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->dispose = ggandiva_projector_dispose; - gobject_class->finalize = ggandiva_projector_finalize; + gobject_class->dispose = ggandiva_projector_dispose; + gobject_class->finalize = ggandiva_projector_finalize; gobject_class->set_property = ggandiva_projector_set_property; gobject_class->get_property = ggandiva_projector_get_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "projector", - "Projector", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("projector", + "Projector", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_PROJECTOR, spec); - spec = g_param_spec_object( - "schema", - "Schema", - "The schema of the projector", - GARROW_TYPE_SCHEMA, - static_cast(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("schema", + "Schema", + "The schema of the projector", + GARROW_TYPE_SCHEMA, + static_cast(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_SCHEMA, spec); - spec = g_param_spec_pointer( - "expressions", - "Expressions", - "The expressions for the projector", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("expressions", + "Expressions", + "The expressions for the projector", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_EXPRESSIONS, spec); } @@ -185,7 +188,9 @@ ggandiva_projector_class_init(GGandivaProjectorClass *klass) * Since: 0.12.0 */ GGandivaProjector * -ggandiva_projector_new(GArrowSchema *schema, GList *expressions, GError **error) +ggandiva_projector_new(GArrowSchema *schema, + GList *expressions, + GError **error) { auto arrow_schema = garrow_schema_get_raw(schema); std::vector> gandiva_expressions; @@ -196,9 +201,13 @@ ggandiva_projector_new(GArrowSchema *schema, GList *expressions, GError **error) } std::shared_ptr gandiva_projector; auto status = - gandiva_projector->Make(arrow_schema, gandiva_expressions, &gandiva_projector); + gandiva_projector->Make(arrow_schema, + gandiva_expressions, + &gandiva_projector); if (garrow_error_check(error, status, "[gandiva][projector][new]")) { - return ggandiva_projector_new_raw(&gandiva_projector, schema, expressions); + return ggandiva_projector_new_raw(&gandiva_projector, + schema, + expressions); } else { return NULL; } @@ -225,7 +234,9 @@ ggandiva_projector_evaluate(GGandivaProjector *projector, auto memory_pool = arrow::default_memory_pool(); arrow::ArrayVector arrow_arrays; auto status = - gandiva_projector->Evaluate(*arrow_record_batch, memory_pool, &arrow_arrays); + gandiva_projector->Evaluate(*arrow_record_batch, + memory_pool, + &arrow_arrays); if (garrow_error_check(error, status, "[gandiva][projector][evaluate]")) { GList *arrays = NULL; for (auto arrow_array : arrow_arrays) { @@ -238,6 +249,7 @@ ggandiva_projector_evaluate(GGandivaProjector *projector, } } + G_DEFINE_TYPE(GGandivaSelectableProjector, ggandiva_selectable_projector, GGANDIVA_TYPE_PROJECTOR) @@ -278,15 +290,20 @@ ggandiva_selectable_projector_new(GArrowSchema *schema, gandiva_expressions.push_back(gandiva_expression); } auto gandiva_mode = static_cast(mode); - auto gandiva_configuration = gandiva::ConfigurationBuilder::DefaultConfiguration(); + auto gandiva_configuration = + gandiva::ConfigurationBuilder::DefaultConfiguration(); std::shared_ptr gandiva_projector; auto status = gandiva_projector->Make(arrow_schema, gandiva_expressions, gandiva_mode, gandiva_configuration, &gandiva_projector); - if (garrow_error_check(error, status, "[gandiva][selectable-projector][new]")) { - return ggandiva_selectable_projector_new_raw(&gandiva_projector, schema, expressions); + if (garrow_error_check(error, + status, + "[gandiva][selectable-projector][new]")) { + return ggandiva_selectable_projector_new_raw(&gandiva_projector, + schema, + expressions); } else { return NULL; } @@ -306,22 +323,27 @@ ggandiva_selectable_projector_new(GArrowSchema *schema, * Since: 4.0.0 */ GList * -ggandiva_selectable_projector_evaluate(GGandivaSelectableProjector *projector, - GArrowRecordBatch *record_batch, - GGandivaSelectionVector *selection_vector, - GError **error) +ggandiva_selectable_projector_evaluate( + GGandivaSelectableProjector *projector, + GArrowRecordBatch *record_batch, + GGandivaSelectionVector *selection_vector, + GError **error) { - auto gandiva_projector = ggandiva_projector_get_raw(GGANDIVA_PROJECTOR(projector)); + auto gandiva_projector = + ggandiva_projector_get_raw(GGANDIVA_PROJECTOR(projector)); auto arrow_record_batch = garrow_record_batch_get_raw(record_batch); auto gandiva_selection_vector = ggandiva_selection_vector_get_raw(selection_vector).get(); auto memory_pool = arrow::default_memory_pool(); arrow::ArrayVector arrow_arrays; - auto status = gandiva_projector->Evaluate(*arrow_record_batch, - gandiva_selection_vector, - memory_pool, - &arrow_arrays); - if (garrow_error_check(error, status, "[gandiva][selectable-projector][evaluate]")) { + auto status = + gandiva_projector->Evaluate(*arrow_record_batch, + gandiva_selection_vector, + memory_pool, + &arrow_arrays); + if (garrow_error_check(error, + status, + "[gandiva][selectable-projector][evaluate]")) { GList *arrays = NULL; for (auto arrow_array : arrow_arrays) { auto array = garrow_array_new_raw(&arrow_array); @@ -336,17 +358,15 @@ ggandiva_selectable_projector_evaluate(GGandivaSelectableProjector *projector, G_END_DECLS GGandivaProjector * -ggandiva_projector_new_raw(std::shared_ptr *gandiva_projector, - GArrowSchema *schema, - GList *expressions) +ggandiva_projector_new_raw( + std::shared_ptr *gandiva_projector, + GArrowSchema *schema, + GList *expressions) { auto projector = g_object_new(GGANDIVA_TYPE_PROJECTOR, - "projector", - gandiva_projector, - "schema", - schema, - "expressions", - expressions, + "projector", gandiva_projector, + "schema", schema, + "expressions", expressions, NULL); return GGANDIVA_PROJECTOR(projector); } @@ -358,8 +378,7 @@ ggandiva_selectable_projector_new_raw( GList *expressions) { auto projector = g_object_new(GGANDIVA_TYPE_SELECTABLE_PROJECTOR, - "projector", - gandiva_projector, + "projector", gandiva_projector, NULL); return GGANDIVA_SELECTABLE_PROJECTOR(projector); } diff --git a/c_glib/gandiva-glib/projector.h b/c_glib/gandiva-glib/projector.h index 5fbf9c290be..5dd218b808c 100644 --- a/c_glib/gandiva-glib/projector.h +++ b/c_glib/gandiva-glib/projector.h @@ -24,27 +24,29 @@ G_BEGIN_DECLS #define GGANDIVA_TYPE_PROJECTOR (ggandiva_projector_get_type()) -GGANDIVA_AVAILABLE_IN_0_12 -G_DECLARE_DERIVABLE_TYPE( - GGandivaProjector, ggandiva_projector, GGANDIVA, PROJECTOR, GObject) +G_DECLARE_DERIVABLE_TYPE(GGandivaProjector, + ggandiva_projector, + GGANDIVA, + PROJECTOR, + GObject) struct _GGandivaProjectorClass { GObjectClass parent_class; }; -GGANDIVA_AVAILABLE_IN_0_12 GGandivaProjector * -ggandiva_projector_new(GArrowSchema *schema, GList *expressions, GError **error); - -GGANDIVA_AVAILABLE_IN_0_12 +ggandiva_projector_new(GArrowSchema *schema, + GList *expressions, + GError **error); GList * ggandiva_projector_evaluate(GGandivaProjector *projector, GArrowRecordBatch *record_batch, GError **error); -#define GGANDIVA_TYPE_SELECTABLE_PROJECTOR (ggandiva_selectable_projector_get_type()) -GGANDIVA_AVAILABLE_IN_4_0 + +#define GGANDIVA_TYPE_SELECTABLE_PROJECTOR \ + (ggandiva_selectable_projector_get_type()) G_DECLARE_DERIVABLE_TYPE(GGandivaSelectableProjector, ggandiva_selectable_projector, GGANDIVA, @@ -69,4 +71,5 @@ ggandiva_selectable_projector_evaluate(GGandivaSelectableProjector *projector, GGandivaSelectionVector *selection_vector, GError **error); + G_END_DECLS diff --git a/c_glib/gandiva-glib/projector.hpp b/c_glib/gandiva-glib/projector.hpp index ca3581b3c92..b372f32f598 100644 --- a/c_glib/gandiva-glib/projector.hpp +++ b/c_glib/gandiva-glib/projector.hpp @@ -26,9 +26,10 @@ #include GGandivaProjector * -ggandiva_projector_new_raw(std::shared_ptr *gandiva_projector, - GArrowSchema *schema, - GList *expressions); +ggandiva_projector_new_raw( + std::shared_ptr *gandiva_projector, + GArrowSchema *schema, + GList *expressions); GGandivaSelectableProjector * ggandiva_selectable_projector_new_raw( std::shared_ptr *gandiva_projector, diff --git a/c_glib/gandiva-glib/selection-vector.cpp b/c_glib/gandiva-glib/selection-vector.cpp index d6a8333e627..77c3cf2aa14 100644 --- a/c_glib/gandiva-glib/selection-vector.cpp +++ b/c_glib/gandiva-glib/selection-vector.cpp @@ -22,6 +22,7 @@ #include + G_BEGIN_DECLS /** @@ -44,8 +45,7 @@ G_BEGIN_DECLS * Since: 4.0.0 */ -typedef struct GGandivaSelectionVectorPrivate_ -{ +typedef struct GGandivaSelectionVectorPrivate_ { std::shared_ptr selection_vector; } GGandivaSelectionVectorPrivate; @@ -57,9 +57,10 @@ G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GGandivaSelectionVector, ggandiva_selection_vector, G_TYPE_OBJECT) -#define GGANDIVA_SELECTION_VECTOR_GET_PRIVATE(object) \ - static_cast( \ - ggandiva_selection_vector_get_instance_private(GGANDIVA_SELECTION_VECTOR(object))) +#define GGANDIVA_SELECTION_VECTOR_GET_PRIVATE(object) \ + static_cast( \ + ggandiva_selection_vector_get_instance_private( \ + GGANDIVA_SELECTION_VECTOR(object))) static void ggandiva_selection_vector_finalize(GObject *object) @@ -81,8 +82,9 @@ ggandiva_selection_vector_set_property(GObject *object, switch (prop_id) { case PROP_SELECTION_VECTOR: - priv->selection_vector = *static_cast *>( - g_value_get_pointer(value)); + priv->selection_vector = + *static_cast *>( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -94,7 +96,7 @@ static void ggandiva_selection_vector_init(GGandivaSelectionVector *object) { auto priv = GGANDIVA_SELECTION_VECTOR_GET_PRIVATE(object); - new (&priv->selection_vector) std::shared_ptr; + new(&priv->selection_vector) std::shared_ptr; } static void @@ -102,15 +104,15 @@ ggandiva_selection_vector_class_init(GGandivaSelectionVectorClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = ggandiva_selection_vector_finalize; + gobject_class->finalize = ggandiva_selection_vector_finalize; gobject_class->set_property = ggandiva_selection_vector_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "selection-vector", - "Selection vector", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("selection-vector", + "Selection vector", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_SELECTION_VECTOR, spec); } @@ -125,7 +127,8 @@ ggandiva_selection_vector_class_init(GGandivaSelectionVectorClass *klass) GGandivaSelectionVectorMode ggandiva_selection_vector_get_mode(GGandivaSelectionVector *selection_vector) { - auto gandiva_selection_vector = ggandiva_selection_vector_get_raw(selection_vector); + auto gandiva_selection_vector = + ggandiva_selection_vector_get_raw(selection_vector); auto gandiva_mode = gandiva_selection_vector->GetMode(); return static_cast(gandiva_mode); } @@ -142,22 +145,26 @@ ggandiva_selection_vector_get_mode(GGandivaSelectionVector *selection_vector) GArrowArray * ggandiva_selection_vector_to_array(GGandivaSelectionVector *selection_vector) { - auto gandiva_selection_vector = ggandiva_selection_vector_get_raw(selection_vector); + auto gandiva_selection_vector = + ggandiva_selection_vector_get_raw(selection_vector); auto arrow_array = gandiva_selection_vector->ToArray(); return garrow_array_new_raw(&arrow_array); } + G_DEFINE_TYPE(GGandivaUInt16SelectionVector, ggandiva_uint16_selection_vector, GGANDIVA_TYPE_SELECTION_VECTOR) static void -ggandiva_uint16_selection_vector_init(GGandivaUInt16SelectionVector *selection_vector) +ggandiva_uint16_selection_vector_init( + GGandivaUInt16SelectionVector *selection_vector) { } static void -ggandiva_uint16_selection_vector_class_init(GGandivaUInt16SelectionVectorClass *klass) +ggandiva_uint16_selection_vector_class_init( + GGandivaUInt16SelectionVectorClass *klass) { } @@ -171,14 +178,17 @@ ggandiva_uint16_selection_vector_class_init(GGandivaUInt16SelectionVectorClass * * Since: 4.0.0 */ GGandivaUInt16SelectionVector * -ggandiva_uint16_selection_vector_new(gint64 max_slots, GError **error) +ggandiva_uint16_selection_vector_new(gint64 max_slots, + GError **error) { auto memory_pool = arrow::default_memory_pool(); std::shared_ptr gandiva_selection_vector; auto status = gandiva::SelectionVector::MakeInt16(max_slots, memory_pool, &gandiva_selection_vector); - if (garrow_error_check(error, status, "[gandiva][uint16-selection-vector][new]")) { + if (garrow_error_check(error, + status, + "[gandiva][uint16-selection-vector][new]")) { return GGANDIVA_UINT16_SELECTION_VECTOR( ggandiva_selection_vector_new_raw(&gandiva_selection_vector)); } else { @@ -186,17 +196,20 @@ ggandiva_uint16_selection_vector_new(gint64 max_slots, GError **error) } } + G_DEFINE_TYPE(GGandivaUInt32SelectionVector, ggandiva_uint32_selection_vector, GGANDIVA_TYPE_SELECTION_VECTOR) static void -ggandiva_uint32_selection_vector_init(GGandivaUInt32SelectionVector *selection_vector) +ggandiva_uint32_selection_vector_init( + GGandivaUInt32SelectionVector *selection_vector) { } static void -ggandiva_uint32_selection_vector_class_init(GGandivaUInt32SelectionVectorClass *klass) +ggandiva_uint32_selection_vector_class_init( + GGandivaUInt32SelectionVectorClass *klass) { } @@ -210,14 +223,17 @@ ggandiva_uint32_selection_vector_class_init(GGandivaUInt32SelectionVectorClass * * Since: 4.0.0 */ GGandivaUInt32SelectionVector * -ggandiva_uint32_selection_vector_new(gint64 max_slots, GError **error) +ggandiva_uint32_selection_vector_new(gint64 max_slots, + GError **error) { auto memory_pool = arrow::default_memory_pool(); std::shared_ptr gandiva_selection_vector; auto status = gandiva::SelectionVector::MakeInt32(max_slots, memory_pool, &gandiva_selection_vector); - if (garrow_error_check(error, status, "[gandiva][uint32-selection-vector][new]")) { + if (garrow_error_check(error, + status, + "[gandiva][uint32-selection-vector][new]")) { return GGANDIVA_UINT32_SELECTION_VECTOR( ggandiva_selection_vector_new_raw(&gandiva_selection_vector)); } else { @@ -225,17 +241,20 @@ ggandiva_uint32_selection_vector_new(gint64 max_slots, GError **error) } } + G_DEFINE_TYPE(GGandivaUInt64SelectionVector, ggandiva_uint64_selection_vector, GGANDIVA_TYPE_SELECTION_VECTOR) static void -ggandiva_uint64_selection_vector_init(GGandivaUInt64SelectionVector *selection_vector) +ggandiva_uint64_selection_vector_init( + GGandivaUInt64SelectionVector *selection_vector) { } static void -ggandiva_uint64_selection_vector_class_init(GGandivaUInt64SelectionVectorClass *klass) +ggandiva_uint64_selection_vector_class_init( + GGandivaUInt64SelectionVectorClass *klass) { } @@ -249,14 +268,17 @@ ggandiva_uint64_selection_vector_class_init(GGandivaUInt64SelectionVectorClass * * Since: 4.0.0 */ GGandivaUInt64SelectionVector * -ggandiva_uint64_selection_vector_new(gint64 max_slots, GError **error) +ggandiva_uint64_selection_vector_new(gint64 max_slots, + GError **error) { auto memory_pool = arrow::default_memory_pool(); std::shared_ptr gandiva_selection_vector; auto status = gandiva::SelectionVector::MakeInt64(max_slots, memory_pool, &gandiva_selection_vector); - if (garrow_error_check(error, status, "[gandiva][uint64-selection-vector][new]")) { + if (garrow_error_check(error, + status, + "[gandiva][uint64-selection-vector][new]")) { return GGANDIVA_UINT64_SELECTION_VECTOR( ggandiva_selection_vector_new_raw(&gandiva_selection_vector)); } else { @@ -264,8 +286,10 @@ ggandiva_uint64_selection_vector_new(gint64 max_slots, GError **error) } } + G_END_DECLS + GGandivaSelectionVector * ggandiva_selection_vector_new_raw( std::shared_ptr *gandiva_selection_vector) @@ -285,7 +309,9 @@ ggandiva_selection_vector_new_raw( break; } auto selection_vector = - g_object_new(type, "selection-vector", gandiva_selection_vector, NULL); + g_object_new(type, + "selection-vector", gandiva_selection_vector, + NULL); return GGANDIVA_SELECTION_VECTOR(selection_vector); } diff --git a/c_glib/gandiva-glib/selection-vector.h b/c_glib/gandiva-glib/selection-vector.h index 558b9b950cf..029c4cde5ca 100644 --- a/c_glib/gandiva-glib/selection-vector.h +++ b/c_glib/gandiva-glib/selection-vector.h @@ -46,10 +46,13 @@ typedef enum { GGANDIVA_SELECTION_VECTOR_MODE_UINT64, } GGandivaSelectionVectorMode; + #define GGANDIVA_TYPE_SELECTION_VECTOR (ggandiva_selection_vector_get_type()) -GGANDIVA_AVAILABLE_IN_4_0 -G_DECLARE_DERIVABLE_TYPE( - GGandivaSelectionVector, ggandiva_selection_vector, GGANDIVA, SELECTION_VECTOR, GObject) +G_DECLARE_DERIVABLE_TYPE(GGandivaSelectionVector, + ggandiva_selection_vector, + GGANDIVA, + SELECTION_VECTOR, + GObject) struct _GGandivaSelectionVectorClass { @@ -64,9 +67,9 @@ GGANDIVA_AVAILABLE_IN_4_0 GArrowArray * ggandiva_selection_vector_to_array(GGandivaSelectionVector *selection_vector); -#define GGANDIVA_TYPE_UINT16_SELECTION_VECTOR \ + +#define GGANDIVA_TYPE_UINT16_SELECTION_VECTOR \ (ggandiva_uint16_selection_vector_get_type()) -GGANDIVA_AVAILABLE_IN_4_0 G_DECLARE_DERIVABLE_TYPE(GGandivaUInt16SelectionVector, ggandiva_uint16_selection_vector, GGANDIVA, @@ -80,11 +83,12 @@ struct _GGandivaUInt16SelectionVectorClass GGANDIVA_AVAILABLE_IN_4_0 GGandivaUInt16SelectionVector * -ggandiva_uint16_selection_vector_new(gint64 max_slots, GError **error); +ggandiva_uint16_selection_vector_new(gint64 max_slots, + GError **error); -#define GGANDIVA_TYPE_UINT32_SELECTION_VECTOR \ + +#define GGANDIVA_TYPE_UINT32_SELECTION_VECTOR \ (ggandiva_uint32_selection_vector_get_type()) -GGANDIVA_AVAILABLE_IN_4_0 G_DECLARE_DERIVABLE_TYPE(GGandivaUInt32SelectionVector, ggandiva_uint32_selection_vector, GGANDIVA, @@ -98,11 +102,12 @@ struct _GGandivaUInt32SelectionVectorClass GGANDIVA_AVAILABLE_IN_4_0 GGandivaUInt32SelectionVector * -ggandiva_uint32_selection_vector_new(gint64 max_slots, GError **error); +ggandiva_uint32_selection_vector_new(gint64 max_slots, + GError **error); + -#define GGANDIVA_TYPE_UINT64_SELECTION_VECTOR \ +#define GGANDIVA_TYPE_UINT64_SELECTION_VECTOR \ (ggandiva_uint64_selection_vector_get_type()) -GGANDIVA_AVAILABLE_IN_4_0 G_DECLARE_DERIVABLE_TYPE(GGandivaUInt64SelectionVector, ggandiva_uint64_selection_vector, GGANDIVA, @@ -116,6 +121,8 @@ struct _GGandivaUInt64SelectionVectorClass GGANDIVA_AVAILABLE_IN_4_0 GGandivaUInt64SelectionVector * -ggandiva_uint64_selection_vector_new(gint64 max_slots, GError **error); +ggandiva_uint64_selection_vector_new(gint64 max_slots, + GError **error); + G_END_DECLS diff --git a/c_glib/gandiva-glib/version.h.in b/c_glib/gandiva-glib/version.h.in index 857c7367bd7..3c9e87c9d52 100644 --- a/c_glib/gandiva-glib/version.h.in +++ b/c_glib/gandiva-glib/version.h.in @@ -38,7 +38,7 @@ * * Since: 1.0.0 */ -#define GGANDIVA_VERSION_MAJOR (@VERSION_MAJOR@) +#define GGANDIVA_VERSION_MAJOR (@GGANDIVA_VERSION_MAJOR@) /** * GGANDIVA_VERSION_MINOR: @@ -47,7 +47,7 @@ * * Since: 1.0.0 */ -#define GGANDIVA_VERSION_MINOR (@VERSION_MINOR@) +#define GGANDIVA_VERSION_MINOR (@GGANDIVA_VERSION_MINOR@) /** * GGANDIVA_VERSION_MICRO: @@ -56,7 +56,7 @@ * * Since: 1.0.0 */ -#define GGANDIVA_VERSION_MICRO (@VERSION_MICRO@) +#define GGANDIVA_VERSION_MICRO (@GGANDIVA_VERSION_MICRO@) /** * GGANDIVA_VERSION_TAG: @@ -66,7 +66,7 @@ * * Since: 1.0.0 */ -#define GGANDIVA_VERSION_TAG "@VERSION_TAG@" +#define GGANDIVA_VERSION_TAG "@GGANDIVA_VERSION_TAG@" /** * GGANDIVA_VERSION_CHECK: @@ -110,7 +110,23 @@ # define GGANDIVA_UNAVAILABLE(major, minor) G_UNAVAILABLE(major, minor) #endif -@ENCODED_VERSIONS@ +/** + * GGANDIVA_VERSION_1_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 1.0.0 + */ +#define GGANDIVA_VERSION_1_0 G_ENCODE_VERSION(1, 0) + +/** + * GGANDIVA_VERSION_4_0: + * + * You can use this macro value for compile time API version check. + * + * Since: 4.0.0 + */ +#define GGANDIVA_VERSION_4_0 G_ENCODE_VERSION(4, 0) /** * GGANDIVA_VERSION_MIN_REQUIRED: @@ -156,6 +172,47 @@ G_ENCODE_VERSION(GGANDIVA_VERSION_MAJOR, GGANDIVA_VERSION_MINOR) #endif -@VISIBILITY_MACROS@ -@AVAILABILITY_MACROS@ +#define GGANDIVA_AVAILABLE_IN_ALL + +#if GGANDIVA_VERSION_MIN_REQUIRED >= GGANDIVA_VERSION_4_0 +# define GGANDIVA_DEPRECATED_IN_4_0 GGANDIVA_DEPRECATED +# define GGANDIVA_DEPRECATED_IN_4_0_FOR(function) GGANDIVA_DEPRECATED_FOR(function) +#else +# define GGANDIVA_DEPRECATED_IN_4_0 +# define GGANDIVA_DEPRECATED_IN_4_0_FOR(function) +#endif + +#if GGANDIVA_VERSION_MAX_ALLOWED < GGANDIVA_VERSION_4_0 +# define GGANDIVA_AVAILABLE_IN_4_0 GGANDIVA_UNAVAILABLE(4, 0) +#else +# define GGANDIVA_AVAILABLE_IN_4_0 +#endif + +#if GGANDIVA_VERSION_MIN_REQUIRED >= GGANDIVA_VERSION_1_0 +# define GGANDIVA_DEPRECATED_IN_1_0 GGANDIVA_DEPRECATED +# define GGANDIVA_DEPRECATED_IN_1_0_FOR(function) GGANDIVA_DEPRECATED_FOR(function) +#else +# define GGANDIVA_DEPRECATED_IN_1_0 +# define GGANDIVA_DEPRECATED_IN_1_0_FOR(function) +#endif + +#if GGANDIVA_VERSION_MAX_ALLOWED < GGANDIVA_VERSION_1_0 +# define GGANDIVA_AVAILABLE_IN_1_0 GGANDIVA_UNAVAILABLE(1, 0) +#else +# define GGANDIVA_AVAILABLE_IN_1_0 +#endif + +#if GGANDIVA_VERSION_MIN_REQUIRED >= GGANDIVA_VERSION_0_17 +# define GGANDIVA_DEPRECATED_IN_0_17 GGANDIVA_DEPRECATED +# define GGANDIVA_DEPRECATED_IN_0_17_FOR(function) GGANDIVA_DEPRECATED_FOR(function) +#else +# define GGANDIVA_DEPRECATED_IN_0_17 +# define GGANDIVA_DEPRECATED_IN_0_17_FOR(function) +#endif + +#if GGANDIVA_VERSION_MAX_ALLOWED < GGANDIVA_VERSION_0_17 +# define GGANDIVA_AVAILABLE_IN_0_17 GGANDIVA_UNAVAILABLE(0, 17) +#else +# define GGANDIVA_AVAILABLE_IN_0_17 +#endif diff --git a/c_glib/meson.build b/c_glib/meson.build index 214c5774703..ffd41d4d574 100644 --- a/c_glib/meson.build +++ b/c_glib/meson.build @@ -18,24 +18,13 @@ # under the License. project('arrow-glib', 'c', 'cpp', + license: 'Apache-2.0', default_options: [ 'c_std=c99', 'cpp_std=c++17', - ], - license: 'Apache-2.0', - # Debian: - # https://packages.debian.org/search?keywords=meson - # - # * bookworm: 1.0.0 - # - # Ubuntu: - # https://packages.ubuntu.com/search?keywords=meson - # - # * 20.04: 0.53.2 - # * 22.04: 0.61.2 - meson_version: '>=0.53.2') - -version = '18.0.0-SNAPSHOT' + ]) + +version = '16.0.0-SNAPSHOT' if version.endswith('-SNAPSHOT') version_numbers = version.split('-')[0].split('.') version_tag = version.split('-')[1] @@ -52,18 +41,9 @@ so_version = version_major * 100 + version_minor so_version_patch = version_micro library_version = '@0@.@1@.@2@'.format(so_version, so_version_patch, 0) -if meson.version().version_compare('>=0.56.0') - project_build_root = meson.project_build_root() - project_source_root = meson.project_source_root() -else - project_build_root = meson.build_root() - project_source_root = meson.source_root() -endif - prefix = get_option('prefix') include_dir = join_paths(prefix, get_option('includedir')) data_dir = join_paths(prefix, get_option('datadir')) -doc_dir = join_paths(data_dir, 'doc') gir_dir = join_paths(data_dir, 'gir-1.0') vapi_dir = join_paths(data_dir, 'vala', 'vapi') @@ -75,13 +55,7 @@ base_include_directories = [ include_directories('.') ] -generate_gi_common_args = { - 'install': true, - 'nsversion': api_version, -} -if get_option('werror') and meson.version().version_compare('>=0.55.0') - generate_gi_common_args += {'fatal_warnings': true} -endif +gi_fatal_warnings = (build_machine.system() != 'windows') have_gi = dependency('gobject-introspection-1.0', required: false).found() if have_gi pkgconfig_variables += ['girdir=@0@'.format(gir_dir)] @@ -97,7 +71,7 @@ arrow_cpp_build_type = get_option('arrow_cpp_build_type') if arrow_cpp_build_dir == '' arrow_cpp_build_lib_dir = '' else - arrow_cpp_build_lib_dir = join_paths(project_source_root, + arrow_cpp_build_lib_dir = join_paths(meson.source_root(), arrow_cpp_build_dir, arrow_cpp_build_type.to_lower()) endif @@ -171,10 +145,6 @@ if cxx.get_id() != 'msvc' endif add_project_arguments(cxx.get_supported_arguments(cxx_flags), language: 'cpp') -python = import('python') -python3 = python.find_installation('python3') -generate_version_header_py = project_source_root / 'tool' / 'generate-version-header.py' - subdir('arrow-glib') if arrow_cuda.found() subdir('arrow-cuda-glib') @@ -196,23 +166,36 @@ if parquet.found() endif subdir('example') -if get_option('doc') - subdir('doc') +if get_option('gtk_doc') + subdir('doc/arrow-glib') + if arrow_dataset.found() + subdir('doc/arrow-dataset-glib') + endif + if arrow_flight.found() + subdir('doc/arrow-flight-glib') + endif + if arrow_flight_sql.found() + subdir('doc/arrow-flight-sql-glib') + endif + if gandiva.found() + subdir('doc/gandiva-glib') + endif + if parquet.found() + subdir('doc/parquet-glib') + endif endif install_data('../LICENSE.txt', 'README.md', - install_dir: data_dir / meson.project_name()) + install_dir: join_paths(data_dir, 'doc', meson.project_name())) run_test = find_program('test/run-test.sh') test('unit test', run_test, env: [ - 'ARROW_CUDA_GLIB_TYPELIB_DIR=@0@/arrow-cuda-glib'.format(project_build_root), - 'ARROW_DATASET_GLIB_TYPELIB_DIR=@0@/arrow-dataset-glib'.format(project_build_root), - 'ARROW_FLIGHT_GLIB_TYPELIB_DIR=@0@/arrow-flight-glib'.format(project_build_root), - 'ARROW_FLIGHT_SQL_GLIB_TYPELIB_DIR=@0@/arrow-flight-sql-glib'.format(project_build_root), - 'ARROW_GLIB_TYPELIB_DIR=@0@/arrow-glib'.format(project_build_root), - 'GANDIVA_GLIB_TYPELIB_DIR=@0@/gandiva-glib'.format(project_build_root), - 'PARQUET_GLIB_TYPELIB_DIR=@0@/parquet-glib'.format(project_build_root), + 'ARROW_GLIB_TYPELIB_DIR=@0@/arrow-glib'.format(meson.build_root()), + 'ARROW_CUDA_GLIB_TYPELIB_DIR=@0@/arrow-cuda-glib'.format(meson.build_root()), + 'ARROW_DATASET_GLIB_TYPELIB_DIR=@0@/arrow-dataset-glib'.format(meson.build_root()), + 'GANDIVA_GLIB_TYPELIB_DIR=@0@/gandiva-glib'.format(meson.build_root()), + 'PARQUET_GLIB_TYPELIB_DIR=@0@/parquet-glib'.format(meson.build_root()), ]) diff --git a/c_glib/meson_options.txt b/c_glib/meson_options.txt index e2aa74872d9..6631fccf2d7 100644 --- a/c_glib/meson_options.txt +++ b/c_glib/meson_options.txt @@ -27,22 +27,10 @@ option('arrow_cpp_build_type', value: 'release', description: '-DCMAKE_BUILD_TYPE option value for Arrow C++') -option('doc', - type: 'boolean', - value: false, - description: 'Build document') - option('gtk_doc', type: 'boolean', value: false, - # This requires Meson 0.63.0 or later - # deprecated: 'doc', - description: 'Build document') - -option('source_reference', - type: 'string', - value: 'main', - description: 'Source reference (revision/branch/tag/...) to refer source URL in documents generated by GI-DocGen') + description: 'Build document by GTK-Doc') option('vapi', type: 'boolean', diff --git a/c_glib/parquet-glib/arrow-file-reader.cpp b/c_glib/parquet-glib/arrow-file-reader.cpp index 4996d786271..fd21a9e9c3a 100644 --- a/c_glib/parquet-glib/arrow-file-reader.cpp +++ b/c_glib/parquet-glib/arrow-file-reader.cpp @@ -36,8 +36,7 @@ G_BEGIN_DECLS * from file and returns them as Apache Arrow data. */ -typedef struct GParquetArrowFileReaderPrivate_ -{ +typedef struct GParquetArrowFileReaderPrivate_ { parquet::arrow::FileReader *arrow_file_reader; } GParquetArrowFileReaderPrivate; @@ -50,9 +49,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GParquetArrowFileReader, gparquet_arrow_file_reader, G_TYPE_OBJECT) -#define GPARQUET_ARROW_FILE_READER_GET_PRIVATE(obj) \ - static_cast( \ - gparquet_arrow_file_reader_get_instance_private(GPARQUET_ARROW_FILE_READER(obj))) +#define GPARQUET_ARROW_FILE_READER_GET_PRIVATE(obj) \ + static_cast( \ + gparquet_arrow_file_reader_get_instance_private( \ + GPARQUET_ARROW_FILE_READER(obj))) static void gparquet_arrow_file_reader_finalize(GObject *object) @@ -108,37 +108,41 @@ gparquet_arrow_file_reader_class_init(GParquetArrowFileReaderClass *klass) auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = gparquet_arrow_file_reader_finalize; + gobject_class->finalize = gparquet_arrow_file_reader_finalize; gobject_class->set_property = gparquet_arrow_file_reader_set_property; gobject_class->get_property = gparquet_arrow_file_reader_get_property; - spec = g_param_spec_pointer( - "arrow-file-reader", - "ArrowFileReader", - "The raw parquet::arrow::FileReader *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("arrow-file-reader", + "ArrowFileReader", + "The raw parquet::arrow::FileReader *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_ARROW_FILE_READER, spec); } /** * gparquet_arrow_file_reader_new_arrow: * @source: Arrow source to be read. - * @error: (nullable): Return location for a #GError or %NULL. + * @error: (nullable): Return locatipcn for a #GError or %NULL. * * Returns: (nullable): A newly created #GParquetArrowFileReader. * * Since: 0.11.0 */ GParquetArrowFileReader * -gparquet_arrow_file_reader_new_arrow(GArrowSeekableInputStream *source, GError **error) +gparquet_arrow_file_reader_new_arrow(GArrowSeekableInputStream *source, + GError **error) { - auto arrow_random_access_file = garrow_seekable_input_stream_get_raw(source); + auto arrow_random_access_file = + garrow_seekable_input_stream_get_raw(source); auto arrow_memory_pool = arrow::default_memory_pool(); std::unique_ptr parquet_arrow_file_reader; auto status = parquet::arrow::OpenFile(arrow_random_access_file, arrow_memory_pool, &parquet_arrow_file_reader); - if (garrow_error_check(error, status, "[parquet][arrow][file-reader][new-arrow]")) { + if (garrow_error_check(error, + status, + "[parquet][arrow][file-reader][new-arrow]")) { return gparquet_arrow_file_reader_new_raw(parquet_arrow_file_reader.release()); } else { return NULL; @@ -148,14 +152,15 @@ gparquet_arrow_file_reader_new_arrow(GArrowSeekableInputStream *source, GError * /** * gparquet_arrow_file_reader_new_path: * @path: Path to be read. - * @error: (nullable): Return location for a #GError or %NULL. + * @error: (nullable): Return locatipcn for a #GError or %NULL. * * Returns: (nullable): A newly created #GParquetArrowFileReader. * * Since: 0.11.0 */ GParquetArrowFileReader * -gparquet_arrow_file_reader_new_path(const gchar *path, GError **error) +gparquet_arrow_file_reader_new_path(const gchar *path, + GError **error) { auto arrow_memory_mapped_file = arrow::io::MemoryMappedFile::Open(path, arrow::io::FileMode::READ); @@ -172,7 +177,9 @@ gparquet_arrow_file_reader_new_path(const gchar *path, GError **error) auto status = parquet::arrow::OpenFile(arrow_random_access_file, arrow_memory_pool, &parquet_arrow_file_reader); - if (garrow::check(error, status, "[parquet][arrow][file-reader][new-path]")) { + if (garrow::check(error, + status, + "[parquet][arrow][file-reader][new-path]")) { return gparquet_arrow_file_reader_new_raw(parquet_arrow_file_reader.release()); } else { return NULL; @@ -182,19 +189,22 @@ gparquet_arrow_file_reader_new_path(const gchar *path, GError **error) /** * gparquet_arrow_file_reader_read_table: * @reader: A #GParquetArrowFileReader. - * @error: (nullable): Return location for a #GError or %NULL. + * @error: (nullable): Return locatipcn for a #GError or %NULL. * * Returns: (transfer full) (nullable): A read #GArrowTable. * * Since: 0.11.0 */ GArrowTable * -gparquet_arrow_file_reader_read_table(GParquetArrowFileReader *reader, GError **error) +gparquet_arrow_file_reader_read_table(GParquetArrowFileReader *reader, + GError **error) { auto parquet_arrow_file_reader = gparquet_arrow_file_reader_get_raw(reader); std::shared_ptr arrow_table; auto status = parquet_arrow_file_reader->ReadTable(&arrow_table); - if (garrow_error_check(error, status, "[parquet][arrow][file-reader][read-table]")) { + if (garrow_error_check(error, + status, + "[parquet][arrow][file-reader][read-table]")) { return garrow_table_new_raw(&arrow_table); } else { return NULL; @@ -210,7 +220,7 @@ gparquet_arrow_file_reader_read_table(GParquetArrowFileReader *reader, GError ** * If an index is negative, the index is counted backward from the * end of the columns. `-1` means the last column. * @n_column_indices: The number of elements of @column_indices. - * @error: (nullable): Return location for a #GError or %NULL. + * @error: (nullable): Return locatipcn for a #GError or %NULL. * * Returns: (transfer full) (nullable): A read #GArrowTable. * @@ -224,7 +234,7 @@ gparquet_arrow_file_reader_read_row_group(GParquetArrowFileReader *reader, GError **error) { const gchar *tag = "[parquet][arrow][file-reader][read-row-group]"; - auto parquet_arrow_file_reader = gparquet_arrow_file_reader_get_raw(reader); + auto parquet_arrow_file_reader = gparquet_arrow_file_reader_get_raw(reader); std::shared_ptr arrow_table; arrow::Status status; if (column_indices) { @@ -236,24 +246,24 @@ gparquet_arrow_file_reader_read_row_group(GParquetArrowFileReader *reader, if (!garrow_internal_index_adjust(column_index, n_columns)) { garrow_error_check(error, arrow::Status::IndexError("Out of index: " - "<0..", - n_columns, - ">: " - "<", - column_index, - ">"), + "<0..", n_columns, ">: " + "<", column_index, ">"), tag); return NULL; } parquet_column_indices.push_back(column_index); } - status = parquet_arrow_file_reader->ReadRowGroup(row_group_index, - parquet_column_indices, - &arrow_table); + status = + parquet_arrow_file_reader->ReadRowGroup(row_group_index, + parquet_column_indices, + &arrow_table); } else { - status = parquet_arrow_file_reader->ReadRowGroup(row_group_index, &arrow_table); + status = + parquet_arrow_file_reader->ReadRowGroup(row_group_index, &arrow_table); } - if (garrow_error_check(error, status, tag)) { + if (garrow_error_check(error, + status, + tag)) { return garrow_table_new_raw(&arrow_table); } else { return NULL; @@ -263,20 +273,23 @@ gparquet_arrow_file_reader_read_row_group(GParquetArrowFileReader *reader, /** * gparquet_arrow_file_reader_get_schema: * @reader: A #GParquetArrowFileReader. - * @error: (nullable): Return location for a #GError or %NULL. + * @error: (nullable): Return locatipcn for a #GError or %NULL. * * Returns: (transfer full) (nullable): A got #GArrowSchema. * * Since: 0.12.0 */ GArrowSchema * -gparquet_arrow_file_reader_get_schema(GParquetArrowFileReader *reader, GError **error) +gparquet_arrow_file_reader_get_schema(GParquetArrowFileReader *reader, + GError **error) { auto parquet_arrow_file_reader = gparquet_arrow_file_reader_get_raw(reader); std::shared_ptr arrow_schema; auto status = parquet_arrow_file_reader->GetSchema(&arrow_schema); - if (garrow_error_check(error, status, "[parquet][arrow][file-reader][get-schema]")) { + if (garrow_error_check(error, + status, + "[parquet][arrow][file-reader][get-schema]")) { return garrow_schema_new_raw(&arrow_schema); } else { return NULL; @@ -289,7 +302,7 @@ gparquet_arrow_file_reader_get_schema(GParquetArrowFileReader *reader, GError ** * @i: The index of the column to be read. * If an index is negative, the index is counted backward from the * end of the columns. `-1` means the last column. - * @error: (nullable): Return location for a #GError or %NULL. + * @error: (nullable): Return locatipcn for a #GError or %NULL. * * Returns: (transfer full) (nullable): A read #GArrowChunkedArray. * @@ -308,18 +321,15 @@ gparquet_arrow_file_reader_read_column_data(GParquetArrowFileReader *reader, if (!garrow_internal_index_adjust(i, n_columns)) { garrow_error_check(error, arrow::Status::IndexError("Out of index: " - "<0..", - n_columns, - ">: " - "<", - i, - ">"), + "<0..", n_columns, ">: " + "<", i, ">"), tag); return NULL; } std::shared_ptr arrow_chunked_array; - auto status = parquet_arrow_file_reader->ReadColumn(i, &arrow_chunked_array); + auto status = + parquet_arrow_file_reader->ReadColumn(i, &arrow_chunked_array); if (!garrow_error_check(error, status, tag)) { return NULL; } @@ -395,8 +405,7 @@ gparquet_arrow_file_reader_new_raw(parquet::arrow::FileReader *parquet_arrow_fil { auto arrow_file_reader = GPARQUET_ARROW_FILE_READER(g_object_new(GPARQUET_TYPE_ARROW_FILE_READER, - "arrow-file-reader", - parquet_arrow_file_reader, + "arrow-file-reader", parquet_arrow_file_reader, NULL)); return arrow_file_reader; } diff --git a/c_glib/parquet-glib/arrow-file-reader.h b/c_glib/parquet-glib/arrow-file-reader.h index 52d7293bad0..da234f47c5d 100644 --- a/c_glib/parquet-glib/arrow-file-reader.h +++ b/c_glib/parquet-glib/arrow-file-reader.h @@ -24,7 +24,6 @@ G_BEGIN_DECLS #define GPARQUET_TYPE_ARROW_FILE_READER (gparquet_arrow_file_reader_get_type()) -GPARQUET_AVAILABLE_IN_0_11 G_DECLARE_DERIVABLE_TYPE(GParquetArrowFileReader, gparquet_arrow_file_reader, GPARQUET, @@ -35,19 +34,18 @@ struct _GParquetArrowFileReaderClass GObjectClass parent_class; }; -GPARQUET_AVAILABLE_IN_0_11 GParquetArrowFileReader * -gparquet_arrow_file_reader_new_arrow(GArrowSeekableInputStream *source, GError **error); - -GPARQUET_AVAILABLE_IN_0_11 +gparquet_arrow_file_reader_new_arrow(GArrowSeekableInputStream *source, + GError **error); GParquetArrowFileReader * -gparquet_arrow_file_reader_new_path(const gchar *path, GError **error); +gparquet_arrow_file_reader_new_path(const gchar *path, + GError **error); -GPARQUET_AVAILABLE_IN_0_11 GArrowTable * -gparquet_arrow_file_reader_read_table(GParquetArrowFileReader *reader, GError **error); +gparquet_arrow_file_reader_read_table(GParquetArrowFileReader *reader, + GError **error); -GPARQUET_AVAILABLE_IN_1_0 +GARROW_AVAILABLE_IN_1_0 GArrowTable * gparquet_arrow_file_reader_read_row_group(GParquetArrowFileReader *reader, gint row_group_index, @@ -55,30 +53,27 @@ gparquet_arrow_file_reader_read_row_group(GParquetArrowFileReader *reader, gsize n_column_indices, GError **error); -GPARQUET_AVAILABLE_IN_0_12 GArrowSchema * -gparquet_arrow_file_reader_get_schema(GParquetArrowFileReader *reader, GError **error); +gparquet_arrow_file_reader_get_schema(GParquetArrowFileReader *reader, + GError **error); -GPARQUET_AVAILABLE_IN_0_15 GArrowChunkedArray * gparquet_arrow_file_reader_read_column_data(GParquetArrowFileReader *reader, gint i, GError **error); -GPARQUET_AVAILABLE_IN_0_11 gint gparquet_arrow_file_reader_get_n_row_groups(GParquetArrowFileReader *reader); -GPARQUET_AVAILABLE_IN_6_0 +GARROW_AVAILABLE_IN_6_0 gint64 gparquet_arrow_file_reader_get_n_rows(GParquetArrowFileReader *reader); -GPARQUET_AVAILABLE_IN_0_11 void gparquet_arrow_file_reader_set_use_threads(GParquetArrowFileReader *reader, gboolean use_threads); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 GParquetFileMetadata * gparquet_arrow_file_reader_get_metadata(GParquetArrowFileReader *reader); diff --git a/c_glib/parquet-glib/arrow-file-writer.cpp b/c_glib/parquet-glib/arrow-file-writer.cpp index b6f019ed27d..537e8330532 100644 --- a/c_glib/parquet-glib/arrow-file-writer.cpp +++ b/c_glib/parquet-glib/arrow-file-writer.cpp @@ -34,8 +34,7 @@ G_BEGIN_DECLS * file as Apache Parquet format. */ -typedef struct GParquetWriterPropertiesPrivate_ -{ +typedef struct GParquetWriterPropertiesPrivate_ { std::shared_ptr properties; parquet::WriterProperties::Builder *builder; gboolean changed; @@ -45,9 +44,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GParquetWriterProperties, gparquet_writer_properties, G_TYPE_OBJECT) -#define GPARQUET_WRITER_PROPERTIES_GET_PRIVATE(object) \ - static_cast( \ - gparquet_writer_properties_get_instance_private(GPARQUET_WRITER_PROPERTIES(object))) +#define GPARQUET_WRITER_PROPERTIES_GET_PRIVATE(object) \ + static_cast( \ + gparquet_writer_properties_get_instance_private( \ + GPARQUET_WRITER_PROPERTIES(object))) static void gparquet_writer_properties_finalize(GObject *object) @@ -64,7 +64,7 @@ static void gparquet_writer_properties_init(GParquetWriterProperties *object) { auto priv = GPARQUET_WRITER_PROPERTIES_GET_PRIVATE(object); - new (&priv->properties) std::shared_ptr; + new(&priv->properties) std::shared_ptr; priv->builder = new parquet::WriterProperties::Builder(); priv->changed = TRUE; } @@ -74,7 +74,7 @@ gparquet_writer_properties_class_init(GParquetWriterPropertiesClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = gparquet_writer_properties_finalize; + gobject_class->finalize = gparquet_writer_properties_finalize; } /** @@ -87,7 +87,8 @@ gparquet_writer_properties_class_init(GParquetWriterPropertiesClass *klass) GParquetWriterProperties * gparquet_writer_properties_new(void) { - auto writer_properties = g_object_new(GPARQUET_TYPE_WRITER_PROPERTIES, NULL); + auto writer_properties = g_object_new(GPARQUET_TYPE_WRITER_PROPERTIES, + NULL); return GPARQUET_WRITER_PROPERTIES(writer_properties); } @@ -199,8 +200,8 @@ gparquet_writer_properties_is_dictionary_enabled(GParquetWriterProperties *prope * Since: 0.17.0 */ void -gparquet_writer_properties_set_dictionary_page_size_limit( - GParquetWriterProperties *properties, gint64 limit) +gparquet_writer_properties_set_dictionary_page_size_limit(GParquetWriterProperties *properties, + gint64 limit) { auto priv = GPARQUET_WRITER_PROPERTIES_GET_PRIVATE(properties); priv->builder->dictionary_pagesize_limit(limit); @@ -216,8 +217,7 @@ gparquet_writer_properties_set_dictionary_page_size_limit( * Since: 0.17.0 */ gint64 -gparquet_writer_properties_get_dictionary_page_size_limit( - GParquetWriterProperties *properties) +gparquet_writer_properties_get_dictionary_page_size_limit(GParquetWriterProperties *properties) { auto parquet_properties = gparquet_writer_properties_get_raw(properties); return parquet_properties->dictionary_pagesize_limit(); @@ -316,8 +316,8 @@ gparquet_writer_properties_get_data_page_size(GParquetWriterProperties *properti return parquet_properties->data_pagesize(); } -typedef struct GParquetArrowFileWriterPrivate_ -{ + +typedef struct GParquetArrowFileWriterPrivate_ { parquet::arrow::FileWriter *arrow_file_writer; } GParquetArrowFileWriterPrivate; @@ -330,9 +330,10 @@ G_DEFINE_TYPE_WITH_PRIVATE(GParquetArrowFileWriter, gparquet_arrow_file_writer, G_TYPE_OBJECT) -#define GPARQUET_ARROW_FILE_WRITER_GET_PRIVATE(obj) \ - static_cast( \ - gparquet_arrow_file_writer_get_instance_private(GPARQUET_ARROW_FILE_WRITER(obj))) +#define GPARQUET_ARROW_FILE_WRITER_GET_PRIVATE(obj) \ + static_cast( \ + gparquet_arrow_file_writer_get_instance_private( \ + GPARQUET_ARROW_FILE_WRITER(obj))) static void gparquet_arrow_file_writer_finalize(GObject *object) @@ -388,15 +389,15 @@ gparquet_arrow_file_writer_class_init(GParquetArrowFileWriterClass *klass) auto gobject_class = G_OBJECT_CLASS(klass); - gobject_class->finalize = gparquet_arrow_file_writer_finalize; + gobject_class->finalize = gparquet_arrow_file_writer_finalize; gobject_class->set_property = gparquet_arrow_file_writer_set_property; gobject_class->get_property = gparquet_arrow_file_writer_get_property; - spec = g_param_spec_pointer( - "arrow-file-writer", - "ArrowFileWriter", - "The raw std::shared *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("arrow-file-writer", + "ArrowFileWriter", + "The raw std::shared *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_ARROW_FILE_WRITER, spec); } @@ -405,7 +406,7 @@ gparquet_arrow_file_writer_class_init(GParquetArrowFileWriterClass *klass) * @schema: Arrow schema for written data. * @sink: Arrow output stream to be written. * @writer_properties: (nullable): A #GParquetWriterProperties. - * @error: (nullable): Return location for a #GError or %NULL. + * @error: (nullable): Return locatipcn for a #GError or %NULL. * * Returns: (nullable): A newly created #GParquetArrowFileWriter. * @@ -423,8 +424,7 @@ gparquet_arrow_file_writer_new_arrow(GArrowSchema *schema, std::unique_ptr parquet_arrow_file_writer; arrow::Result> maybe_writer; if (writer_properties) { - auto parquet_writer_properties = - gparquet_writer_properties_get_raw(writer_properties); + auto parquet_writer_properties = gparquet_writer_properties_get_raw(writer_properties); maybe_writer = parquet::arrow::FileWriter::Open(*arrow_schema, arrow_memory_pool, arrow_output_stream, @@ -436,7 +436,9 @@ gparquet_arrow_file_writer_new_arrow(GArrowSchema *schema, arrow_output_stream, parquet_writer_properties); } - if (garrow::check(error, maybe_writer, "[parquet][arrow][file-writer][new-arrow]")) { + if (garrow::check(error, + maybe_writer, + "[parquet][arrow][file-writer][new-arrow]")) { parquet_arrow_file_writer = std::move(*maybe_writer); return gparquet_arrow_file_writer_new_raw(parquet_arrow_file_writer.release()); } else { @@ -449,7 +451,7 @@ gparquet_arrow_file_writer_new_arrow(GArrowSchema *schema, * @schema: Arrow schema for written data. * @path: Path to be read. * @writer_properties: (nullable): A #GParquetWriterProperties. - * @error: (nullable): Return location for a #GError or %NULL. + * @error: (nullable): Return locatipcn for a #GError or %NULL. * * Returns: (nullable): A newly created #GParquetArrowFileWriter. * @@ -461,7 +463,8 @@ gparquet_arrow_file_writer_new_path(GArrowSchema *schema, GParquetWriterProperties *writer_properties, GError **error) { - auto arrow_file_output_stream = arrow::io::FileOutputStream::Open(path, false); + auto arrow_file_output_stream = + arrow::io::FileOutputStream::Open(path, false); if (!garrow::check(error, arrow_file_output_stream, "[parquet][arrow][file-writer][new-path]")) { @@ -475,8 +478,7 @@ gparquet_arrow_file_writer_new_path(GArrowSchema *schema, std::unique_ptr parquet_arrow_file_writer; arrow::Result> maybe_writer; if (writer_properties) { - auto parquet_writer_properties = - gparquet_writer_properties_get_raw(writer_properties); + auto parquet_writer_properties = gparquet_writer_properties_get_raw(writer_properties); maybe_writer = parquet::arrow::FileWriter::Open(*arrow_schema, arrow_memory_pool, arrow_output_stream, @@ -488,7 +490,9 @@ gparquet_arrow_file_writer_new_path(GArrowSchema *schema, arrow_output_stream, parquet_writer_properties); } - if (garrow::check(error, maybe_writer, "[parquet][arrow][file-writer][new-path]")) { + if (garrow::check(error, + maybe_writer, + "[parquet][arrow][file-writer][new-path]")) { parquet_arrow_file_writer = std::move(*maybe_writer); return gparquet_arrow_file_writer_new_raw(parquet_arrow_file_writer.release()); } else { @@ -501,7 +505,7 @@ gparquet_arrow_file_writer_new_path(GArrowSchema *schema, * @writer: A #GParquetArrowFileWriter. * @table: A table to be written. * @chunk_size: The max number of rows in a row group. - * @error: (nullable): Return location for a #GError or %NULL. + * @error: (nullable): Return locatipcn for a #GError or %NULL. * * Returns: %TRUE on success, %FALSE if there was an error. * @@ -516,26 +520,32 @@ gparquet_arrow_file_writer_write_table(GParquetArrowFileWriter *writer, auto parquet_arrow_file_writer = gparquet_arrow_file_writer_get_raw(writer); auto arrow_table = garrow_table_get_raw(table).get(); auto status = parquet_arrow_file_writer->WriteTable(*arrow_table, chunk_size); - return garrow_error_check(error, status, "[parquet][arrow][file-writer][write-table]"); + return garrow_error_check(error, + status, + "[parquet][arrow][file-writer][write-table]"); } /** * gparquet_arrow_file_writer_close: * @writer: A #GParquetArrowFileWriter. - * @error: (nullable): Return location for a #GError or %NULL. + * @error: (nullable): Return locatipcn for a #GError or %NULL. * * Returns: %TRUE on success, %FALSE if there was an error. * * Since: 0.11.0 */ gboolean -gparquet_arrow_file_writer_close(GParquetArrowFileWriter *writer, GError **error) +gparquet_arrow_file_writer_close(GParquetArrowFileWriter *writer, + GError **error) { auto parquet_arrow_file_writer = gparquet_arrow_file_writer_get_raw(writer); auto status = parquet_arrow_file_writer->Close(); - return garrow_error_check(error, status, "[parquet][arrow][file-writer][close]"); + return garrow_error_check(error, + status, + "[parquet][arrow][file-writer][close]"); } + G_END_DECLS GParquetArrowFileWriter * @@ -543,8 +553,7 @@ gparquet_arrow_file_writer_new_raw(parquet::arrow::FileWriter *parquet_arrow_fil { auto arrow_file_writer = GPARQUET_ARROW_FILE_WRITER(g_object_new(GPARQUET_TYPE_ARROW_FILE_WRITER, - "arrow-file-writer", - parquet_arrow_file_writer, + "arrow-file-writer", parquet_arrow_file_writer, NULL)); return arrow_file_writer; } diff --git a/c_glib/parquet-glib/arrow-file-writer.h b/c_glib/parquet-glib/arrow-file-writer.h index 71cbfa195e8..67083a0743e 100644 --- a/c_glib/parquet-glib/arrow-file-writer.h +++ b/c_glib/parquet-glib/arrow-file-writer.h @@ -20,12 +20,11 @@ #pragma once #include -#include G_BEGIN_DECLS -#define GPARQUET_TYPE_WRITER_PROPERTIES (gparquet_writer_properties_get_type()) -GPARQUET_AVAILABLE_IN_0_17 +#define GPARQUET_TYPE_WRITER_PROPERTIES \ + (gparquet_writer_properties_get_type()) G_DECLARE_DERIVABLE_TYPE(GParquetWriterProperties, gparquet_writer_properties, GPARQUET, @@ -36,62 +35,60 @@ struct _GParquetWriterPropertiesClass GObjectClass parent_class; }; -GPARQUET_AVAILABLE_IN_0_17 -GParquetWriterProperties * -gparquet_writer_properties_new(void); -GPARQUET_AVAILABLE_IN_0_17 +GARROW_AVAILABLE_IN_0_17 +GParquetWriterProperties *gparquet_writer_properties_new(void); +GARROW_AVAILABLE_IN_0_17 void gparquet_writer_properties_set_compression(GParquetWriterProperties *properties, GArrowCompressionType compression_type, const gchar *path); -GPARQUET_AVAILABLE_IN_0_17 +GARROW_AVAILABLE_IN_0_17 GArrowCompressionType gparquet_writer_properties_get_compression_path(GParquetWriterProperties *properties, const gchar *path); -GPARQUET_AVAILABLE_IN_0_17 +GARROW_AVAILABLE_IN_0_17 void gparquet_writer_properties_enable_dictionary(GParquetWriterProperties *properties, const gchar *path); -GPARQUET_AVAILABLE_IN_0_17 +GARROW_AVAILABLE_IN_0_17 void gparquet_writer_properties_disable_dictionary(GParquetWriterProperties *properties, const gchar *path); -GPARQUET_AVAILABLE_IN_0_17 +GARROW_AVAILABLE_IN_0_17 gboolean gparquet_writer_properties_is_dictionary_enabled(GParquetWriterProperties *properties, const gchar *path); -GPARQUET_AVAILABLE_IN_0_17 +GARROW_AVAILABLE_IN_0_17 void -gparquet_writer_properties_set_dictionary_page_size_limit( - GParquetWriterProperties *properties, gint64 limit); -GPARQUET_AVAILABLE_IN_0_17 +gparquet_writer_properties_set_dictionary_page_size_limit(GParquetWriterProperties *properties, + gint64 limit); +GARROW_AVAILABLE_IN_0_17 gint64 -gparquet_writer_properties_get_dictionary_page_size_limit( - GParquetWriterProperties *properties); -GPARQUET_AVAILABLE_IN_0_17 +gparquet_writer_properties_get_dictionary_page_size_limit(GParquetWriterProperties *properties); +GARROW_AVAILABLE_IN_0_17 void gparquet_writer_properties_set_batch_size(GParquetWriterProperties *properties, gint64 batch_size); -GPARQUET_AVAILABLE_IN_0_17 +GARROW_AVAILABLE_IN_0_17 gint64 gparquet_writer_properties_get_batch_size(GParquetWriterProperties *properties); -GPARQUET_AVAILABLE_IN_0_17 +GARROW_AVAILABLE_IN_0_17 void gparquet_writer_properties_set_max_row_group_length(GParquetWriterProperties *properties, gint64 length); -GPARQUET_AVAILABLE_IN_0_17 +GARROW_AVAILABLE_IN_0_17 gint64 gparquet_writer_properties_get_max_row_group_length(GParquetWriterProperties *properties); -GPARQUET_AVAILABLE_IN_0_17 +GARROW_AVAILABLE_IN_0_17 void gparquet_writer_properties_set_data_page_size(GParquetWriterProperties *properties, gint64 data_page_size); -GPARQUET_AVAILABLE_IN_0_17 +GARROW_AVAILABLE_IN_0_17 gint64 gparquet_writer_properties_get_data_page_size(GParquetWriterProperties *properties); + #define GPARQUET_TYPE_ARROW_FILE_WRITER (gparquet_arrow_file_writer_get_type()) -GPARQUET_AVAILABLE_IN_0_11 G_DECLARE_DERIVABLE_TYPE(GParquetArrowFileWriter, gparquet_arrow_file_writer, GPARQUET, @@ -102,29 +99,25 @@ struct _GParquetArrowFileWriterClass GObjectClass parent_class; }; -GPARQUET_AVAILABLE_IN_0_11 GParquetArrowFileWriter * gparquet_arrow_file_writer_new_arrow(GArrowSchema *schema, GArrowOutputStream *sink, GParquetWriterProperties *writer_properties, GError **error); - -GPARQUET_AVAILABLE_IN_0_11 GParquetArrowFileWriter * gparquet_arrow_file_writer_new_path(GArrowSchema *schema, const gchar *path, GParquetWriterProperties *writer_properties, GError **error); -GPARQUET_AVAILABLE_IN_0_11 gboolean gparquet_arrow_file_writer_write_table(GParquetArrowFileWriter *writer, GArrowTable *table, guint64 chunk_size, GError **error); -GPARQUET_AVAILABLE_IN_0_11 gboolean -gparquet_arrow_file_writer_close(GParquetArrowFileWriter *writer, GError **error); +gparquet_arrow_file_writer_close(GParquetArrowFileWriter *writer, + GError **error); G_END_DECLS diff --git a/c_glib/parquet-glib/meson.build b/c_glib/parquet-glib/meson.build index a3de1d0933f..08288484bf9 100644 --- a/c_glib/parquet-glib/meson.build +++ b/c_glib/parquet-glib/meson.build @@ -42,17 +42,10 @@ cpp_headers = files( 'parquet-glib.hpp', ) -version_h = configure_file( - input: 'version.h.in', - output: 'version.h', - command: [python3, generate_version_header_py, '--library', 'GPARQUET', '--version', version, '--input', '@INPUT@', '--output', '@OUTPUT@'], -) - -c_headers += version_h - headers = c_headers + cpp_headers install_headers(headers, subdir: project_name) + dependencies = [ arrow, parquet, @@ -64,7 +57,6 @@ libparquet_glib = library('parquet-glib', dependencies: dependencies, implicit_include_directories: false, include_directories: base_include_directories, - cpp_args: ['-DGPARQUET_COMPILATION'], soversion: so_version, version: library_version) parquet_glib = declare_dependency(link_with: libparquet_glib, @@ -88,13 +80,15 @@ if have_gi '--warn-all', '--include-uninstalled=./arrow-glib/Arrow-1.0.gir', ], + fatal_warnings: gi_fatal_warnings, header: 'parquet-glib/parquet-glib.h', identifier_prefix: 'GParquet', includes: [ 'Arrow-1.0', ], - kwargs: generate_gi_common_args, + install: true, namespace: 'Parquet', + nsversion: api_version, sources: sources + c_headers, symbol_prefix: 'gparquet') diff --git a/c_glib/parquet-glib/metadata.cpp b/c_glib/parquet-glib/metadata.cpp index 9e18decb3fd..54583340ad9 100644 --- a/c_glib/parquet-glib/metadata.cpp +++ b/c_glib/parquet-glib/metadata.cpp @@ -36,8 +36,7 @@ G_BEGIN_DECLS * #GParquetFileMetadata is a class for file level metadata. */ -struct GParquetColumnChunkMetadataPrivate -{ +struct GParquetColumnChunkMetadataPrivate { parquet::ColumnChunkMetaData *metadata; GParquetRowGroupMetadata *owner; }; @@ -51,9 +50,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GParquetColumnChunkMetadata, gparquet_column_chunk_metadata, G_TYPE_OBJECT) -#define GPARQUET_COLUMN_CHUNK_METADATA_GET_PRIVATE(object) \ - static_cast( \ - gparquet_column_chunk_metadata_get_instance_private( \ +#define GPARQUET_COLUMN_CHUNK_METADATA_GET_PRIVATE(object) \ + static_cast( \ + gparquet_column_chunk_metadata_get_instance_private( \ GPARQUET_COLUMN_CHUNK_METADATA(object))) static void @@ -95,26 +94,27 @@ gparquet_column_chunk_metadata_init(GParquetColumnChunkMetadata *object) } static void -gparquet_column_chunk_metadata_class_init(GParquetColumnChunkMetadataClass *klass) +gparquet_column_chunk_metadata_class_init( + GParquetColumnChunkMetadataClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = gparquet_column_chunk_metadata_dispose; gobject_class->set_property = gparquet_column_chunk_metadata_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "metadata", - "Metadata", - "The raw parquet::ColumnChunkMetaData *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("metadata", + "Metadata", + "The raw parquet::ColumnChunkMetaData *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_METADATA, spec); - spec = g_param_spec_object( - "owner", - "Owner", - "The row group metadata that owns this metadata", - GPARQUET_TYPE_ROW_GROUP_METADATA, - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("owner", + "Owner", + "The row group metadata that owns this metadata", + GPARQUET_TYPE_ROW_GROUP_METADATA, + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_OWNER, spec); } @@ -133,7 +133,8 @@ gparquet_column_chunk_metadata_equal(GParquetColumnChunkMetadata *metadata, GParquetColumnChunkMetadata *other_metadata) { auto parquet_metadata = gparquet_column_chunk_metadata_get_raw(metadata); - auto parquet_other_metadata = gparquet_column_chunk_metadata_get_raw(other_metadata); + auto parquet_other_metadata = + gparquet_column_chunk_metadata_get_raw(other_metadata); return parquet_metadata->Equals(*parquet_other_metadata); } @@ -180,7 +181,8 @@ gparquet_column_chunk_metadata_get_total_compressed_size( * Since: 8.0.0 */ gint64 -gparquet_column_chunk_metadata_get_file_offset(GParquetColumnChunkMetadata *metadata) +gparquet_column_chunk_metadata_get_file_offset( + GParquetColumnChunkMetadata *metadata) { auto parquet_metadata = gparquet_column_chunk_metadata_get_raw(metadata); return parquet_metadata->file_offset(); @@ -196,7 +198,8 @@ gparquet_column_chunk_metadata_get_file_offset(GParquetColumnChunkMetadata *meta * Since: 8.0.0 */ gboolean -gparquet_column_chunk_metadata_can_decompress(GParquetColumnChunkMetadata *metadata) +gparquet_column_chunk_metadata_can_decompress( + GParquetColumnChunkMetadata *metadata) { auto parquet_metadata = gparquet_column_chunk_metadata_get_raw(metadata); return parquet_metadata->can_decompress(); @@ -212,7 +215,8 @@ gparquet_column_chunk_metadata_can_decompress(GParquetColumnChunkMetadata *metad * Since: 8.0.0 */ GParquetStatistics * -gparquet_column_chunk_metadata_get_statistics(GParquetColumnChunkMetadata *metadata) +gparquet_column_chunk_metadata_get_statistics( + GParquetColumnChunkMetadata *metadata) { auto parquet_metadata = gparquet_column_chunk_metadata_get_raw(metadata); auto parquet_statistics = parquet_metadata->statistics(); @@ -223,8 +227,8 @@ gparquet_column_chunk_metadata_get_statistics(GParquetColumnChunkMetadata *metad } } -struct GParquetRowGroupMetadataPrivate -{ + +struct GParquetRowGroupMetadataPrivate { parquet::RowGroupMetaData *metadata; GParquetFileMetadata *owner; }; @@ -233,9 +237,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GParquetRowGroupMetadata, gparquet_row_group_metadata, G_TYPE_OBJECT) -#define GPARQUET_ROW_GROUP_METADATA_GET_PRIVATE(object) \ - static_cast( \ - gparquet_row_group_metadata_get_instance_private( \ +#define GPARQUET_ROW_GROUP_METADATA_GET_PRIVATE(object) \ + static_cast( \ + gparquet_row_group_metadata_get_instance_private( \ GPARQUET_ROW_GROUP_METADATA(object))) static void @@ -259,7 +263,8 @@ gparquet_row_group_metadata_set_property(GObject *object, switch (prop_id) { case PROP_METADATA: - priv->metadata = static_cast(g_value_get_pointer(value)); + priv->metadata = + static_cast(g_value_get_pointer(value)); break; case PROP_OWNER: priv->owner = GPARQUET_FILE_METADATA(g_value_dup_object(value)); @@ -283,19 +288,18 @@ gparquet_row_group_metadata_class_init(GParquetRowGroupMetadataClass *klass) gobject_class->set_property = gparquet_row_group_metadata_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "metadata", - "Metadata", - "The raw parquet::RowGroupMetaData *", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("metadata", "Metadata", + "The raw parquet::RowGroupMetaData *", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_METADATA, spec); - spec = g_param_spec_object( - "owner", - "Owner", - "The file group metadata that owns this metadata", - GPARQUET_TYPE_FILE_METADATA, - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_object("owner", + "Owner", + "The file group metadata that owns this metadata", + GPARQUET_TYPE_FILE_METADATA, + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_OWNER, spec); } @@ -314,7 +318,8 @@ gparquet_row_group_metadata_equal(GParquetRowGroupMetadata *metadata, GParquetRowGroupMetadata *other_metadata) { auto parquet_metadata = gparquet_row_group_metadata_get_raw(metadata); - auto parquet_other_metadata = gparquet_row_group_metadata_get_raw(other_metadata); + auto parquet_other_metadata = + gparquet_row_group_metadata_get_raw(other_metadata); return parquet_metadata->Equals(*parquet_other_metadata); } @@ -358,9 +363,12 @@ gparquet_row_group_metadata_get_column_chunk(GParquetRowGroupMetadata *metadata, return arrow::Status::OK(); END_PARQUET_CATCH_EXCEPTIONS })(); - if (garrow::check(error, status, "[parquet][row-group-metadata][get-column-chunk]")) { - return gparquet_column_chunk_metadata_new_raw(parquet_column_chunk_metadata.release(), - metadata); + if (garrow::check(error, + status, + "[parquet][row-group-metadata][get-column-chunk]")) { + return gparquet_column_chunk_metadata_new_raw( + parquet_column_chunk_metadata.release(), + metadata); } else { return NULL; } @@ -407,7 +415,8 @@ gparquet_row_group_metadata_get_total_size(GParquetRowGroupMetadata *metadata) * Since: 8.0.0 */ gint64 -gparquet_row_group_metadata_get_total_compressed_size(GParquetRowGroupMetadata *metadata) +gparquet_row_group_metadata_get_total_compressed_size( + GParquetRowGroupMetadata *metadata) { auto parquet_metadata = gparquet_row_group_metadata_get_raw(metadata); return parquet_metadata->total_compressed_size(); @@ -449,16 +458,19 @@ gparquet_row_group_metadata_can_decompress(GParquetRowGroupMetadata *metadata) return parquet_metadata->can_decompress(); } -struct GParquetFileMetadataPrivate -{ + +struct GParquetFileMetadataPrivate { std::shared_ptr metadata; }; -G_DEFINE_TYPE_WITH_PRIVATE(GParquetFileMetadata, gparquet_file_metadata, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_PRIVATE(GParquetFileMetadata, + gparquet_file_metadata, + G_TYPE_OBJECT) -#define GPARQUET_FILE_METADATA_GET_PRIVATE(object) \ - static_cast( \ - gparquet_file_metadata_get_instance_private(GPARQUET_FILE_METADATA(object))) +#define GPARQUET_FILE_METADATA_GET_PRIVATE(object) \ + static_cast( \ + gparquet_file_metadata_get_instance_private( \ + GPARQUET_FILE_METADATA(object))) static void gparquet_file_metadata_finalize(GObject *object) @@ -479,7 +491,8 @@ gparquet_file_metadata_set_property(GObject *object, switch (prop_id) { case PROP_METADATA: priv->metadata = - *static_cast *>(g_value_get_pointer(value)); + *static_cast *>( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -491,7 +504,7 @@ static void gparquet_file_metadata_init(GParquetFileMetadata *object) { auto priv = GPARQUET_FILE_METADATA_GET_PRIVATE(object); - new (&priv->metadata) std::shared_ptr; + new(&priv->metadata) std::shared_ptr; } static void @@ -502,11 +515,11 @@ gparquet_file_metadata_class_init(GParquetFileMetadataClass *klass) gobject_class->set_property = gparquet_file_metadata_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "metadata", - "Metadata", - "The raw std::shared_ptr", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("metadata", + "Metadata", + "The raw std::shared_ptr", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_METADATA, spec); } @@ -679,19 +692,21 @@ gparquet_file_metadata_can_decompress(GParquetFileMetadata *metadata) return parquet_metadata->can_decompress(); } + G_END_DECLS + GParquetColumnChunkMetadata * -gparquet_column_chunk_metadata_new_raw(parquet::ColumnChunkMetaData *parquet_metadata, - GParquetRowGroupMetadata *owner) +gparquet_column_chunk_metadata_new_raw( + parquet::ColumnChunkMetaData *parquet_metadata, + GParquetRowGroupMetadata *owner) { auto metadata = - GPARQUET_COLUMN_CHUNK_METADATA(g_object_new(GPARQUET_TYPE_COLUMN_CHUNK_METADATA, - "metadata", - parquet_metadata, - "owner", - owner, - NULL)); + GPARQUET_COLUMN_CHUNK_METADATA( + g_object_new(GPARQUET_TYPE_COLUMN_CHUNK_METADATA, + "metadata", parquet_metadata, + "owner", owner, + NULL)); return metadata; } @@ -702,16 +717,15 @@ gparquet_column_chunk_metadata_get_raw(GParquetColumnChunkMetadata *metadata) return priv->metadata; } + GParquetRowGroupMetadata * gparquet_row_group_metadata_new_raw(parquet::RowGroupMetaData *parquet_metadata, GParquetFileMetadata *owner) { auto metadata = GPARQUET_ROW_GROUP_METADATA(g_object_new(GPARQUET_TYPE_ROW_GROUP_METADATA, - "metadata", - parquet_metadata, - "owner", - owner, + "metadata", parquet_metadata, + "owner", owner, NULL)); return metadata; } @@ -723,11 +737,15 @@ gparquet_row_group_metadata_get_raw(GParquetRowGroupMetadata *metadata) return priv->metadata; } + GParquetFileMetadata * -gparquet_file_metadata_new_raw(std::shared_ptr *parquet_metadata) +gparquet_file_metadata_new_raw( + std::shared_ptr *parquet_metadata) { - auto metadata = GPARQUET_FILE_METADATA( - g_object_new(GPARQUET_TYPE_FILE_METADATA, "metadata", parquet_metadata, NULL)); + auto metadata = + GPARQUET_FILE_METADATA(g_object_new(GPARQUET_TYPE_FILE_METADATA, + "metadata", parquet_metadata, + NULL)); return metadata; } diff --git a/c_glib/parquet-glib/metadata.h b/c_glib/parquet-glib/metadata.h index d79bf009751..8759bdedf03 100644 --- a/c_glib/parquet-glib/metadata.h +++ b/c_glib/parquet-glib/metadata.h @@ -23,8 +23,8 @@ G_BEGIN_DECLS -#define GPARQUET_TYPE_COLUMN_CHUNK_METADATA (gparquet_column_chunk_metadata_get_type()) -GPARQUET_AVAILABLE_IN_8_0 +#define GPARQUET_TYPE_COLUMN_CHUNK_METADATA \ + (gparquet_column_chunk_metadata_get_type()) G_DECLARE_DERIVABLE_TYPE(GParquetColumnChunkMetadata, gparquet_column_chunk_metadata, GPARQUET, @@ -35,29 +35,34 @@ struct _GParquetColumnChunkMetadataClass GObjectClass parent_class; }; -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gboolean -gparquet_column_chunk_metadata_equal(GParquetColumnChunkMetadata *metadata, - GParquetColumnChunkMetadata *other_metadata); -GPARQUET_AVAILABLE_IN_8_0 +gparquet_column_chunk_metadata_equal( + GParquetColumnChunkMetadata *metadata, + GParquetColumnChunkMetadata *other_metadata); +GARROW_AVAILABLE_IN_8_0 gint64 -gparquet_column_chunk_metadata_get_total_size(GParquetColumnChunkMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +gparquet_column_chunk_metadata_get_total_size( + GParquetColumnChunkMetadata *metadata); +GARROW_AVAILABLE_IN_8_0 gint64 gparquet_column_chunk_metadata_get_total_compressed_size( GParquetColumnChunkMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint64 -gparquet_column_chunk_metadata_get_file_offset(GParquetColumnChunkMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +gparquet_column_chunk_metadata_get_file_offset( + GParquetColumnChunkMetadata *metadata); +GARROW_AVAILABLE_IN_8_0 gboolean -gparquet_column_chunk_metadata_can_decompress(GParquetColumnChunkMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +gparquet_column_chunk_metadata_can_decompress( + GParquetColumnChunkMetadata *metadata); +GARROW_AVAILABLE_IN_8_0 GParquetStatistics * -gparquet_column_chunk_metadata_get_statistics(GParquetColumnChunkMetadata *metadata); +gparquet_column_chunk_metadata_get_statistics( + GParquetColumnChunkMetadata *metadata); + #define GPARQUET_TYPE_ROW_GROUP_METADATA (gparquet_row_group_metadata_get_type()) -GPARQUET_AVAILABLE_IN_8_0 G_DECLARE_DERIVABLE_TYPE(GParquetRowGroupMetadata, gparquet_row_group_metadata, GPARQUET, @@ -68,71 +73,77 @@ struct _GParquetRowGroupMetadataClass GObjectClass parent_class; }; -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gboolean gparquet_row_group_metadata_equal(GParquetRowGroupMetadata *metadata, GParquetRowGroupMetadata *other_metadata); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint gparquet_row_group_metadata_get_n_columns(GParquetRowGroupMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 GParquetColumnChunkMetadata * gparquet_row_group_metadata_get_column_chunk(GParquetRowGroupMetadata *metadata, gint index, GError **error); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint64 gparquet_row_group_metadata_get_n_rows(GParquetRowGroupMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint64 -gparquet_row_group_metadata_get_total_size(GParquetRowGroupMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +gparquet_row_group_metadata_get_total_size( + GParquetRowGroupMetadata *metadata); +GARROW_AVAILABLE_IN_8_0 gint64 -gparquet_row_group_metadata_get_total_compressed_size(GParquetRowGroupMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +gparquet_row_group_metadata_get_total_compressed_size( + GParquetRowGroupMetadata *metadata); +GARROW_AVAILABLE_IN_8_0 gint64 -gparquet_row_group_metadata_get_file_offset(GParquetRowGroupMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +gparquet_row_group_metadata_get_file_offset( + GParquetRowGroupMetadata *metadata); +GARROW_AVAILABLE_IN_8_0 gboolean gparquet_row_group_metadata_can_decompress(GParquetRowGroupMetadata *metadata); + #define GPARQUET_TYPE_FILE_METADATA (gparquet_file_metadata_get_type()) -GPARQUET_AVAILABLE_IN_8_0 -G_DECLARE_DERIVABLE_TYPE( - GParquetFileMetadata, gparquet_file_metadata, GPARQUET, FILE_METADATA, GObject) +G_DECLARE_DERIVABLE_TYPE(GParquetFileMetadata, + gparquet_file_metadata, + GPARQUET, + FILE_METADATA, + GObject) struct _GParquetFileMetadataClass { GObjectClass parent_class; }; -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gboolean gparquet_file_metadata_equal(GParquetFileMetadata *metadata, GParquetFileMetadata *other_metadata); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint gparquet_file_metadata_get_n_columns(GParquetFileMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint gparquet_file_metadata_get_n_schema_elements(GParquetFileMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint64 gparquet_file_metadata_get_n_rows(GParquetFileMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint gparquet_file_metadata_get_n_row_groups(GParquetFileMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 GParquetRowGroupMetadata * gparquet_file_metadata_get_row_group(GParquetFileMetadata *metadata, gint index, GError **error); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 const gchar * gparquet_file_metadata_get_created_by(GParquetFileMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 guint32 gparquet_file_metadata_get_size(GParquetFileMetadata *metadata); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gboolean gparquet_file_metadata_can_decompress(GParquetFileMetadata *metadata); diff --git a/c_glib/parquet-glib/metadata.hpp b/c_glib/parquet-glib/metadata.hpp index 49851290190..279e60ffe8b 100644 --- a/c_glib/parquet-glib/metadata.hpp +++ b/c_glib/parquet-glib/metadata.hpp @@ -24,18 +24,21 @@ #include GParquetColumnChunkMetadata * -gparquet_column_chunk_metadata_new_raw(parquet::ColumnChunkMetaData *parquet_metadata, - GParquetRowGroupMetadata *owner); +gparquet_column_chunk_metadata_new_raw( + parquet::ColumnChunkMetaData *parquet_metadata, + GParquetRowGroupMetadata *owner); parquet::ColumnChunkMetaData * gparquet_column_chunk_metadata_get_raw(GParquetColumnChunkMetadata *metadata); GParquetRowGroupMetadata * -gparquet_row_group_metadata_new_raw(parquet::RowGroupMetaData *parquet_metadata, - GParquetFileMetadata *owner); +gparquet_row_group_metadata_new_raw( + parquet::RowGroupMetaData *parquet_metadata, + GParquetFileMetadata *owner); parquet::RowGroupMetaData * gparquet_row_group_metadata_get_raw(GParquetRowGroupMetadata *metadata); GParquetFileMetadata * -gparquet_file_metadata_new_raw(std::shared_ptr *parquet_metadata); +gparquet_file_metadata_new_raw( + std::shared_ptr *parquet_metadata); std::shared_ptr gparquet_file_metadata_get_raw(GParquetFileMetadata *metadata); diff --git a/c_glib/parquet-glib/parquet-glib.h b/c_glib/parquet-glib/parquet-glib.h index 308adb87a7e..23659421ce3 100644 --- a/c_glib/parquet-glib/parquet-glib.h +++ b/c_glib/parquet-glib/parquet-glib.h @@ -19,8 +19,6 @@ #pragma once -#include - #include #include #include diff --git a/c_glib/parquet-glib/statistics.cpp b/c_glib/parquet-glib/statistics.cpp index 9f0074e70e7..5dae756bf62 100644 --- a/c_glib/parquet-glib/statistics.cpp +++ b/c_glib/parquet-glib/statistics.cpp @@ -51,8 +51,7 @@ G_BEGIN_DECLS * byte array statistics. */ -struct GParquetStatisticsPrivate -{ +struct GParquetStatisticsPrivate { std::shared_ptr statistics; }; @@ -64,9 +63,10 @@ G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GParquetStatistics, gparquet_statistics, G_TYPE_OBJECT) -#define GPARQUET_STATISTICS_GET_PRIVATE(object) \ - static_cast( \ - gparquet_statistics_get_instance_private(GPARQUET_STATISTICS(object))) +#define GPARQUET_STATISTICS_GET_PRIVATE(object) \ + static_cast( \ + gparquet_statistics_get_instance_private( \ + GPARQUET_STATISTICS(object))) static void gparquet_statistics_finalize(GObject *object) @@ -87,7 +87,8 @@ gparquet_statistics_set_property(GObject *object, switch (prop_id) { case PROP_STATISTICS: priv->statistics = - *static_cast *>(g_value_get_pointer(value)); + *static_cast *>( + g_value_get_pointer(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); @@ -99,7 +100,7 @@ static void gparquet_statistics_init(GParquetStatistics *object) { auto priv = GPARQUET_STATISTICS_GET_PRIVATE(object); - new (&priv->statistics) std::shared_ptr; + new(&priv->statistics) std::shared_ptr; } static void @@ -110,11 +111,11 @@ gparquet_statistics_class_init(GParquetStatisticsClass *klass) gobject_class->set_property = gparquet_statistics_set_property; GParamSpec *spec; - spec = g_param_spec_pointer( - "statistics", - "Statistics", - "The raw std::shared_ptr", - static_cast(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); + spec = g_param_spec_pointer("statistics", + "Statistics", + "The raw std::shared_ptr", + static_cast(G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property(gobject_class, PROP_STATISTICS, spec); } @@ -168,7 +169,7 @@ gparquet_statistics_get_n_nulls(GParquetStatistics *statistics) } /** - * gparquet_statistics_has_n_distinct_values: + * gparquet_statistics_has_n_distinct_valuess: * @statistics: A #GParquetStatistics. * * Returns: %TRUE if the number of distinct values is set, %FALSE otherwise. @@ -227,14 +228,16 @@ gparquet_statistics_has_min_max(GParquetStatistics *statistics) return parquet_statistics->HasMinMax(); } + G_END_DECLS namespace { template typename std::shared_ptr gparquet_typed_statistics_get_raw(GParquetStatisticsClass *statistics) { - return std::static_pointer_cast( - gparquet_statistics_get_raw(GPARQUET_STATISTICS(statistics))); + return + std::static_pointer_cast( + gparquet_statistics_get_raw(GPARQUET_STATISTICS(statistics))); } template @@ -254,9 +257,10 @@ namespace { gparquet_typed_statistics_get_raw(statistics); return parquet_statistics->max(); } -} // namespace +} G_BEGIN_DECLS + G_DEFINE_TYPE(GParquetBooleanStatistics, gparquet_boolean_statistics, GPARQUET_TYPE_STATISTICS) @@ -299,6 +303,7 @@ gparquet_boolean_statistics_get_max(GParquetBooleanStatistics *statistics) return gparquet_typed_statistics_get_max(statistics); } + G_DEFINE_TYPE(GParquetInt32Statistics, gparquet_int32_statistics, GPARQUET_TYPE_STATISTICS) @@ -341,6 +346,7 @@ gparquet_int32_statistics_get_max(GParquetInt32Statistics *statistics) return gparquet_typed_statistics_get_max(statistics); } + G_DEFINE_TYPE(GParquetInt64Statistics, gparquet_int64_statistics, GPARQUET_TYPE_STATISTICS) @@ -383,6 +389,7 @@ gparquet_int64_statistics_get_max(GParquetInt64Statistics *statistics) return gparquet_typed_statistics_get_max(statistics); } + G_DEFINE_TYPE(GParquetFloatStatistics, gparquet_float_statistics, GPARQUET_TYPE_STATISTICS) @@ -425,6 +432,7 @@ gparquet_float_statistics_get_max(GParquetFloatStatistics *statistics) return gparquet_typed_statistics_get_max(statistics); } + G_DEFINE_TYPE(GParquetDoubleStatistics, gparquet_double_statistics, GPARQUET_TYPE_STATISTICS) @@ -467,8 +475,8 @@ gparquet_double_statistics_get_max(GParquetDoubleStatistics *statistics) return gparquet_typed_statistics_get_max(statistics); } -struct GParquetByteArrayStatisticsPrivate -{ + +struct GParquetByteArrayStatisticsPrivate { GBytes *min; GBytes *max; }; @@ -477,9 +485,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GParquetByteArrayStatistics, gparquet_byte_array_statistics, GPARQUET_TYPE_STATISTICS) -#define GPARQUET_BYTE_ARRAY_STATISTICS_GET_PRIVATE(object) \ - static_cast( \ - gparquet_byte_array_statistics_get_instance_private( \ +#define GPARQUET_BYTE_ARRAY_STATISTICS_GET_PRIVATE(object) \ + static_cast( \ + gparquet_byte_array_statistics_get_instance_private( \ GPARQUET_BYTE_ARRAY_STATISTICS(object))) static void @@ -506,7 +514,8 @@ gparquet_byte_array_statistics_init(GParquetByteArrayStatistics *object) } static void -gparquet_byte_array_statistics_class_init(GParquetByteArrayStatisticsClass *klass) +gparquet_byte_array_statistics_class_init( + GParquetByteArrayStatisticsClass *klass) { auto gobject_class = G_OBJECT_CLASS(klass); gobject_class->dispose = gparquet_byte_array_statistics_dispose; @@ -525,8 +534,9 @@ gparquet_byte_array_statistics_get_min(GParquetByteArrayStatistics *statistics) { auto priv = GPARQUET_BYTE_ARRAY_STATISTICS_GET_PRIVATE(statistics); if (!priv->min) { - const auto &parquet_min = - gparquet_typed_statistics_get_min(statistics); + const auto& parquet_min = + gparquet_typed_statistics_get_min< + parquet::ByteArrayStatistics>(statistics); priv->min = g_bytes_new_static(parquet_min.ptr, parquet_min.len); } return priv->min; @@ -545,15 +555,16 @@ gparquet_byte_array_statistics_get_max(GParquetByteArrayStatistics *statistics) { auto priv = GPARQUET_BYTE_ARRAY_STATISTICS_GET_PRIVATE(statistics); if (!priv->max) { - const auto &parquet_max = - gparquet_typed_statistics_get_max(statistics); + const auto& parquet_max = + gparquet_typed_statistics_get_max< + parquet::ByteArrayStatistics>(statistics); priv->max = g_bytes_new_static(parquet_max.ptr, parquet_max.len); } return priv->max; } -struct GParquetFixedLengthByteArrayStatisticsPrivate -{ + +struct GParquetFixedLengthByteArrayStatisticsPrivate { GBytes *min; GBytes *max; }; @@ -562,9 +573,9 @@ G_DEFINE_TYPE_WITH_PRIVATE(GParquetFixedLengthByteArrayStatistics, gparquet_fixed_length_byte_array_statistics, GPARQUET_TYPE_STATISTICS) -#define GPARQUET_FIXED_LENGTH_BYTE_ARRAY_STATISTICS_GET_PRIVATE(object) \ - static_cast( \ - gparquet_fixed_length_byte_array_statistics_get_instance_private( \ +#define GPARQUET_FIXED_LENGTH_BYTE_ARRAY_STATISTICS_GET_PRIVATE(object) \ + static_cast( \ + gparquet_fixed_length_byte_array_statistics_get_instance_private( \ GPARQUET_FIXED_LENGTH_BYTE_ARRAY_STATISTICS(object))) static void @@ -582,8 +593,8 @@ gparquet_fixed_length_byte_array_statistics_dispose(GObject *object) priv->max = nullptr; } - G_OBJECT_CLASS(gparquet_fixed_length_byte_array_statistics_parent_class) - ->dispose(object); + G_OBJECT_CLASS(gparquet_fixed_length_byte_array_statistics_parent_class)-> + dispose(object); } static void @@ -612,7 +623,8 @@ GBytes * gparquet_fixed_length_byte_array_statistics_get_min( GParquetFixedLengthByteArrayStatistics *statistics) { - auto priv = GPARQUET_FIXED_LENGTH_BYTE_ARRAY_STATISTICS_GET_PRIVATE(statistics); + auto priv = + GPARQUET_FIXED_LENGTH_BYTE_ARRAY_STATISTICS_GET_PRIVATE(statistics); if (!priv->min) { auto parquet_statistics = gparquet_typed_statistics_get_raw(statistics); @@ -634,7 +646,8 @@ GBytes * gparquet_fixed_length_byte_array_statistics_get_max( GParquetFixedLengthByteArrayStatistics *statistics) { - auto priv = GPARQUET_FIXED_LENGTH_BYTE_ARRAY_STATISTICS_GET_PRIVATE(statistics); + auto priv = + GPARQUET_FIXED_LENGTH_BYTE_ARRAY_STATISTICS_GET_PRIVATE(statistics); if (!priv->max) { auto parquet_statistics = gparquet_typed_statistics_get_raw(statistics); @@ -644,39 +657,44 @@ gparquet_fixed_length_byte_array_statistics_get_max( return priv->max; } + G_END_DECLS + GParquetStatistics * -gparquet_statistics_new_raw(std::shared_ptr *parquet_statistics) +gparquet_statistics_new_raw( + std::shared_ptr *parquet_statistics) { GType type = GPARQUET_TYPE_STATISTICS; switch ((*parquet_statistics)->physical_type()) { - case parquet::Type::BOOLEAN: - type = GPARQUET_TYPE_BOOLEAN_STATISTICS; - break; - case parquet::Type::INT32: - type = GPARQUET_TYPE_INT32_STATISTICS; - break; - case parquet::Type::INT64: - type = GPARQUET_TYPE_INT64_STATISTICS; - break; - case parquet::Type::FLOAT: - type = GPARQUET_TYPE_FLOAT_STATISTICS; - break; - case parquet::Type::DOUBLE: - type = GPARQUET_TYPE_DOUBLE_STATISTICS; - break; - case parquet::Type::BYTE_ARRAY: - type = GPARQUET_TYPE_BYTE_ARRAY_STATISTICS; - break; - case parquet::Type::FIXED_LEN_BYTE_ARRAY: - type = GPARQUET_TYPE_FIXED_LENGTH_BYTE_ARRAY_STATISTICS; - break; - default: - break; + case parquet::Type::BOOLEAN: + type = GPARQUET_TYPE_BOOLEAN_STATISTICS; + break; + case parquet::Type::INT32: + type = GPARQUET_TYPE_INT32_STATISTICS; + break; + case parquet::Type::INT64: + type = GPARQUET_TYPE_INT64_STATISTICS; + break; + case parquet::Type::FLOAT: + type = GPARQUET_TYPE_FLOAT_STATISTICS; + break; + case parquet::Type::DOUBLE: + type = GPARQUET_TYPE_DOUBLE_STATISTICS; + break; + case parquet::Type::BYTE_ARRAY: + type = GPARQUET_TYPE_BYTE_ARRAY_STATISTICS; + break; + case parquet::Type::FIXED_LEN_BYTE_ARRAY: + type = GPARQUET_TYPE_FIXED_LENGTH_BYTE_ARRAY_STATISTICS; + break; + default: + break; } auto statistics = - GPARQUET_STATISTICS(g_object_new(type, "statistics", parquet_statistics, NULL)); + GPARQUET_STATISTICS(g_object_new(type, + "statistics", parquet_statistics, + NULL)); return statistics; } diff --git a/c_glib/parquet-glib/statistics.h b/c_glib/parquet-glib/statistics.h index 25e02df8774..ebc909c59ce 100644 --- a/c_glib/parquet-glib/statistics.h +++ b/c_glib/parquet-glib/statistics.h @@ -21,44 +21,47 @@ #include -#include - G_BEGIN_DECLS -#define GPARQUET_TYPE_STATISTICS (gparquet_statistics_get_type()) -GPARQUET_AVAILABLE_IN_8_0 -G_DECLARE_DERIVABLE_TYPE( - GParquetStatistics, gparquet_statistics, GPARQUET, STATISTICS, GObject) + +#define GPARQUET_TYPE_STATISTICS \ + (gparquet_statistics_get_type()) +G_DECLARE_DERIVABLE_TYPE(GParquetStatistics, + gparquet_statistics, + GPARQUET, + STATISTICS, + GObject) struct _GParquetStatisticsClass { GObjectClass parent_class; }; -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gboolean gparquet_statistics_equal(GParquetStatistics *statistics, GParquetStatistics *other_statistics); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gboolean gparquet_statistics_has_n_nulls(GParquetStatistics *statistics); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint64 gparquet_statistics_get_n_nulls(GParquetStatistics *statistics); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gboolean gparquet_statistics_has_n_distinct_values(GParquetStatistics *statistics); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint64 gparquet_statistics_get_n_distinct_values(GParquetStatistics *statistics); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint64 gparquet_statistics_get_n_values(GParquetStatistics *statistics); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gboolean gparquet_statistics_has_min_max(GParquetStatistics *statistics); -#define GPARQUET_TYPE_BOOLEAN_STATISTICS (gparquet_boolean_statistics_get_type()) -GPARQUET_AVAILABLE_IN_8_0 + +#define GPARQUET_TYPE_BOOLEAN_STATISTICS \ + (gparquet_boolean_statistics_get_type()) G_DECLARE_DERIVABLE_TYPE(GParquetBooleanStatistics, gparquet_boolean_statistics, GPARQUET, @@ -69,15 +72,16 @@ struct _GParquetBooleanStatisticsClass GParquetStatisticsClass parent_class; }; -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gboolean gparquet_boolean_statistics_get_min(GParquetBooleanStatistics *statistics); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gboolean gparquet_boolean_statistics_get_max(GParquetBooleanStatistics *statistics); -#define GPARQUET_TYPE_INT32_STATISTICS (gparquet_int32_statistics_get_type()) -GPARQUET_AVAILABLE_IN_8_0 + +#define GPARQUET_TYPE_INT32_STATISTICS \ + (gparquet_int32_statistics_get_type()) G_DECLARE_DERIVABLE_TYPE(GParquetInt32Statistics, gparquet_int32_statistics, GPARQUET, @@ -88,15 +92,16 @@ struct _GParquetInt32StatisticsClass GParquetStatisticsClass parent_class; }; -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint32 gparquet_int32_statistics_get_min(GParquetInt32Statistics *statistics); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint32 gparquet_int32_statistics_get_max(GParquetInt32Statistics *statistics); -#define GPARQUET_TYPE_INT64_STATISTICS (gparquet_int64_statistics_get_type()) -GPARQUET_AVAILABLE_IN_8_0 + +#define GPARQUET_TYPE_INT64_STATISTICS \ + (gparquet_int64_statistics_get_type()) G_DECLARE_DERIVABLE_TYPE(GParquetInt64Statistics, gparquet_int64_statistics, GPARQUET, @@ -107,15 +112,16 @@ struct _GParquetInt64StatisticsClass GParquetStatisticsClass parent_class; }; -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint64 gparquet_int64_statistics_get_min(GParquetInt64Statistics *statistics); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gint64 gparquet_int64_statistics_get_max(GParquetInt64Statistics *statistics); -#define GPARQUET_TYPE_FLOAT_STATISTICS (gparquet_float_statistics_get_type()) -GPARQUET_AVAILABLE_IN_8_0 + +#define GPARQUET_TYPE_FLOAT_STATISTICS \ + (gparquet_float_statistics_get_type()) G_DECLARE_DERIVABLE_TYPE(GParquetFloatStatistics, gparquet_float_statistics, GPARQUET, @@ -126,15 +132,16 @@ struct _GParquetFloatStatisticsClass GParquetStatisticsClass parent_class; }; -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gfloat gparquet_float_statistics_get_min(GParquetFloatStatistics *statistics); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gfloat gparquet_float_statistics_get_max(GParquetFloatStatistics *statistics); -#define GPARQUET_TYPE_DOUBLE_STATISTICS (gparquet_double_statistics_get_type()) -GPARQUET_AVAILABLE_IN_8_0 + +#define GPARQUET_TYPE_DOUBLE_STATISTICS \ + (gparquet_double_statistics_get_type()) G_DECLARE_DERIVABLE_TYPE(GParquetDoubleStatistics, gparquet_double_statistics, GPARQUET, @@ -145,15 +152,16 @@ struct _GParquetDoubleStatisticsClass GParquetStatisticsClass parent_class; }; -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gdouble gparquet_double_statistics_get_min(GParquetDoubleStatistics *statistics); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 gdouble gparquet_double_statistics_get_max(GParquetDoubleStatistics *statistics); -#define GPARQUET_TYPE_BYTE_ARRAY_STATISTICS (gparquet_byte_array_statistics_get_type()) -GPARQUET_AVAILABLE_IN_8_0 + +#define GPARQUET_TYPE_BYTE_ARRAY_STATISTICS \ + (gparquet_byte_array_statistics_get_type()) G_DECLARE_DERIVABLE_TYPE(GParquetByteArrayStatistics, gparquet_byte_array_statistics, GPARQUET, @@ -164,16 +172,16 @@ struct _GParquetByteArrayStatisticsClass GParquetStatisticsClass parent_class; }; -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 GBytes * gparquet_byte_array_statistics_get_min(GParquetByteArrayStatistics *statistics); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 GBytes * gparquet_byte_array_statistics_get_max(GParquetByteArrayStatistics *statistics); -#define GPARQUET_TYPE_FIXED_LENGTH_BYTE_ARRAY_STATISTICS \ + +#define GPARQUET_TYPE_FIXED_LENGTH_BYTE_ARRAY_STATISTICS \ (gparquet_fixed_length_byte_array_statistics_get_type()) -GPARQUET_AVAILABLE_IN_8_0 G_DECLARE_DERIVABLE_TYPE(GParquetFixedLengthByteArrayStatistics, gparquet_fixed_length_byte_array_statistics, GPARQUET, @@ -184,13 +192,14 @@ struct _GParquetFixedLengthByteArrayStatisticsClass GParquetStatisticsClass parent_class; }; -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 GBytes * gparquet_fixed_length_byte_array_statistics_get_min( GParquetFixedLengthByteArrayStatistics *statistics); -GPARQUET_AVAILABLE_IN_8_0 +GARROW_AVAILABLE_IN_8_0 GBytes * gparquet_fixed_length_byte_array_statistics_get_max( GParquetFixedLengthByteArrayStatistics *statistics); + G_END_DECLS diff --git a/c_glib/parquet-glib/statistics.hpp b/c_glib/parquet-glib/statistics.hpp index 48574217d8a..238b9f173a5 100644 --- a/c_glib/parquet-glib/statistics.hpp +++ b/c_glib/parquet-glib/statistics.hpp @@ -24,6 +24,7 @@ #include GParquetStatistics * -gparquet_statistics_new_raw(std::shared_ptr *parquet_statistics); +gparquet_statistics_new_raw( + std::shared_ptr *parquet_statistics); std::shared_ptr gparquet_statistics_get_raw(GParquetStatistics *statistics); diff --git a/c_glib/parquet-glib/version.h.in b/c_glib/parquet-glib/version.h.in deleted file mode 100644 index 142b3b83e0f..00000000000 --- a/c_glib/parquet-glib/version.h.in +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#pragma once - -#include - -/** - * SECTION: version - * @section_id: version-macros - * @title: Version related macros - * @include: parquet-glib/parquet-glib.h - * - * Parquet GLib provides macros that can be used by C pre-processor. - * They are useful to check version related things at compile time. - */ - -/** - * GPARQUET_VERSION_MAJOR: - * - * The major version. - * - * Since: 17.0.0 - */ -#define GPARQUET_VERSION_MAJOR (@VERSION_MAJOR@) - -/** - * GPARQUET_VERSION_MINOR: - * - * The minor version. - * - * Since: 17.0.0 - */ -#define GPARQUET_VERSION_MINOR (@VERSION_MINOR@) - -/** - * GPARQUET_VERSION_MICRO: - * - * The micro version. - * - * Since: 17.0.0 - */ -#define GPARQUET_VERSION_MICRO (@VERSION_MICRO@) - -/** - * GPARQUET_VERSION_TAG: - * - * The version tag. Normally, it's an empty string. It's "SNAPSHOT" - * for snapshot version. - * - * Since: 17.0.0 - */ -#define GPARQUET_VERSION_TAG "@VERSION_TAG@" - -/** - * GPARQUET_VERSION_CHECK: - * @major: A major version to check for. - * @minor: A minor version to check for. - * @micro: A micro version to check for. - * - * You can use this macro in C pre-processor. - * - * Returns: %TRUE if the compile time Apache Arrow GLib version is the - * same as or newer than the passed version, %FALSE otherwise. - * - * Since: 17.0.0 - */ -#define GPARQUET_VERSION_CHECK(major, minor, micro) \ - (GPARQUET_VERSION_MAJOR > (major) || \ - (GPARQUET_VERSION_MAJOR == (major) && \ - GPARQUET_VERSION_MINOR > (minor)) || \ - (GPARQUET_VERSION_MAJOR == (major) && \ - GPARQUET_VERSION_MINOR == (minor) && \ - GPARQUET_VERSION_MICRO >= (micro))) - -/** - * GPARQUET_DISABLE_DEPRECATION_WARNINGS: - * - * If this macro is defined, no deprecated warnings are produced. - * - * You must define this macro before including the - * arrow-glib/arrow-glib.h header. - * - * Since: 17.0.0 - */ - -#ifdef GPARQUET_DISABLE_DEPRECATION_WARNINGS -# define GPARQUET_DEPRECATED -# define GPARQUET_DEPRECATED_FOR(function) -# define GPARQUET_UNAVAILABLE(major, minor) -#else -# define GPARQUET_DEPRECATED G_DEPRECATED -# define GPARQUET_DEPRECATED_FOR(function) G_DEPRECATED_FOR(function) -# define GPARQUET_UNAVAILABLE(major, minor) G_UNAVAILABLE(major, minor) -#endif - -@ENCODED_VERSIONS@ - -/** - * GPARQUET_VERSION_MIN_REQUIRED: - * - * You can use this macro for compile time API version check. - * - * This macro value must be one of the predefined version macros such - * as %GPARQUET_VERSION_0_10. - * - * If you use any functions that is defined by newer version than - * %GPARQUET_VERSION_MIN_REQUIRED, deprecated warnings are produced at - * compile time. - * - * You must define this macro before including the - * parquet-glib/parquet-glib.h header. - * - * Since: 17.0.0 - */ -#ifndef GPARQUET_VERSION_MIN_REQUIRED -# define GPARQUET_VERSION_MIN_REQUIRED GARROW_VERSION_MIN_REQUIRED -#endif - -/** - * GPARQUET_VERSION_MAX_ALLOWED: - * - * You can use this macro for compile time API version check. - * - * This macro value must be one of the predefined version macros such - * as %GPARQUET_VERSION_0_10. - * - * If you use any functions that is defined by newer version than - * %GPARQUET_VERSION_MAX_ALLOWED, deprecated warnings are produced at - * compile time. - * - * You must define this macro before including the - * parquet-glib/parquet-glib.h header. - * - * Since: 17.0.0 - */ -#ifndef GPARQUET_VERSION_MAX_ALLOWED -# define GPARQUET_VERSION_MAX_ALLOWED GARROW_VERSION_MAX_ALLOWED -#endif - -@VISIBILITY_MACROS@ - -@AVAILABILITY_MACROS@ diff --git a/c_glib/test/dataset/test-file-system-dataset.rb b/c_glib/test/dataset/test-file-system-dataset.rb index 96deedf6b4e..0e856b678f8 100644 --- a/c_glib/test/dataset/test-file-system-dataset.rb +++ b/c_glib/test/dataset/test-file-system-dataset.rb @@ -56,22 +56,6 @@ def test_partitioning end def test_read_write - dataset, expected_table = create_dataset - assert_equal(expected_table, dataset.to_table) - end - - def test_to_record_batch_reader - dataset, expected_table = create_dataset - reader = dataset.to_record_batch_reader - begin - assert_equal(expected_table, reader.read_all) - ensure - # Unref to ensure the reader closes files and we can delete the temp directory - reader.unref - end - end - - def create_dataset table = build_table(label: build_string_array(["a", "a", "b", "c"]), count: build_int32_array([1, 10, 2, 3])) table_reader = Arrow::TableBatchReader.new(table) @@ -89,8 +73,7 @@ def create_dataset end @factory.partition_base_dir = @dir dataset = @factory.finish - - expected_table = build_table(count: [ + assert_equal(build_table(count: [ build_int32_array([1, 10]), build_int32_array([2]), build_int32_array([3]), @@ -99,8 +82,7 @@ def create_dataset build_string_array(["a", "a"]), build_string_array(["b"]), build_string_array(["c"]), - ]) - - return dataset, expected_table + ]), + dataset.to_table) end end diff --git a/c_glib/test/dataset/test-scanner.rb b/c_glib/test/dataset/test-scanner.rb index 5dc31eefc5f..f7702d4905f 100644 --- a/c_glib/test/dataset/test-scanner.rb +++ b/c_glib/test/dataset/test-scanner.rb @@ -45,14 +45,4 @@ def setup def test_to_table assert_equal(@table, @scanner.to_table) end - - def test_to_record_batch_reader - reader = @scanner.to_record_batch_reader - begin - assert_equal(@table, reader.read_all) - ensure - # Unref to ensure the reader closes files and we can delete the temp directory - reader.unref - end - end end diff --git a/c_glib/test/flight/test-client-options.rb b/c_glib/test/flight/test-client-options.rb index e1f3a2f850a..b1a67c60699 100644 --- a/c_glib/test/flight/test-client-options.rb +++ b/c_glib/test/flight/test-client-options.rb @@ -51,7 +51,7 @@ def test_write_size_limit_bytes assert_equal(100, @options.write_size_limit_bytes) end - def test_disable_server_verification + def test_disable_server_verifiation assert do not @options.disable_server_verification? end diff --git a/c_glib/test/gandiva/test-native-function.rb b/c_glib/test/gandiva/test-native-function.rb index 4d4d6fc7d3f..630a1f7c32d 100644 --- a/c_glib/test/gandiva/test-native-function.rb +++ b/c_glib/test/gandiva/test-native-function.rb @@ -59,7 +59,7 @@ def test_to_string modulo.to_s) end - sub_test_case("get_result_nullable_type") do + sub_test_case("get_result_nullbale_type") do def test_if_null assert_equal(Gandiva::ResultNullableType::IF_NULL, @not.result_nullable_type) diff --git a/c_glib/test/helper/readable.rb b/c_glib/test/helper/readable.rb index cea5faf7681..81bf0795c6b 100644 --- a/c_glib/test/helper/readable.rb +++ b/c_glib/test/helper/readable.rb @@ -19,7 +19,7 @@ module Helper module Readable def read_table(input, type: :file) if input.is_a?(Arrow::Buffer) - input_stream = Arrow::BufferInputStream.new(input) + input_stream = Arrow::BufferIntputStream.new(input) else input_stream = Arrow::FileInputStream.new(input) end diff --git a/c_glib/test/parquet/test-arrow-file-reader.rb b/c_glib/test/parquet/test-arrow-file-reader.rb index eff5ad966ae..45eb3359654 100644 --- a/c_glib/test/parquet/test-arrow-file-reader.rb +++ b/c_glib/test/parquet/test-arrow-file-reader.rb @@ -20,23 +20,16 @@ class TestParquetArrowFileReader < Test::Unit::TestCase def setup omit("Parquet is required") unless defined?(::Parquet) - Tempfile.create(["data", ".parquet"]) do |file| - @file = file - @a_array = build_string_array(["foo", "bar"]) - @b_array = build_int32_array([123, 456]) - @table = build_table("a" => @a_array, - "b" => @b_array) - writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) - chunk_size = 1 - writer.write_table(@table, chunk_size) - writer.close - @reader = Parquet::ArrowFileReader.new(@file.path) - begin - yield - ensure - @reader.unref - end - end + @file = Tempfile.open(["data", ".parquet"]) + @a_array = build_string_array(["foo", "bar"]) + @b_array = build_int32_array([123, 456]) + @table = build_table("a" => @a_array, + "b" => @b_array) + writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) + chunk_size = 1 + writer.write_table(@table, chunk_size) + writer.close + @reader = Parquet::ArrowFileReader.new(@file.path) end def test_schema diff --git a/c_glib/test/parquet/test-arrow-file-writer.rb b/c_glib/test/parquet/test-arrow-file-writer.rb index f899e7273b2..855527444d0 100644 --- a/c_glib/test/parquet/test-arrow-file-writer.rb +++ b/c_glib/test/parquet/test-arrow-file-writer.rb @@ -20,10 +20,7 @@ class TestParquetArrowFileWriter < Test::Unit::TestCase def setup omit("Parquet is required") unless defined?(::Parquet) - Tempfile.create(["data", ".parquet"]) do |file| - @file = file - yield - end + @file = Tempfile.open(["data", ".parquet"]) end def test_write @@ -36,18 +33,14 @@ def test_write writer.close reader = Parquet::ArrowFileReader.new(@file.path) - begin - reader.use_threads = true - assert_equal([ - enabled_values.length / chunk_size, - true, - ], - [ - reader.n_row_groups, - table.equal_metadata(reader.read_table, false), - ]) - ensure - reader.unref - end + reader.use_threads = true + assert_equal([ + enabled_values.length / chunk_size, + true, + ], + [ + reader.n_row_groups, + table.equal_metadata(reader.read_table, false), + ]) end end diff --git a/c_glib/test/parquet/test-boolean-statistics.rb b/c_glib/test/parquet/test-boolean-statistics.rb index 24434864132..6131a22195c 100644 --- a/c_glib/test/parquet/test-boolean-statistics.rb +++ b/c_glib/test/parquet/test-boolean-statistics.rb @@ -20,22 +20,14 @@ class TestParquetBooleanStatistics < Test::Unit::TestCase def setup omit("Parquet is required") unless defined?(::Parquet) - Tempfile.create(["data", ".parquet"]) do |file| - @file = file - @table = build_table("boolean" => build_boolean_array([nil, false, true])) - writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) - chunk_size = 1024 - writer.write_table(@table, chunk_size) - writer.close - reader = Parquet::ArrowFileReader.new(@file.path) - begin - @statistics = - reader.metadata.get_row_group(0).get_column_chunk(0).statistics - yield - ensure - reader.unref - end - end + @file = Tempfile.open(["data", ".parquet"]) + @table = build_table("boolean" => build_boolean_array([nil, false, true])) + writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) + chunk_size = 1024 + writer.write_table(@table, chunk_size) + writer.close + reader = Parquet::ArrowFileReader.new(@file.path) + @statistics = reader.metadata.get_row_group(0).get_column_chunk(0).statistics end test("#min") do diff --git a/c_glib/test/parquet/test-byte-array-statistics.rb b/c_glib/test/parquet/test-byte-array-statistics.rb index b9693a77fff..50ec409dbce 100644 --- a/c_glib/test/parquet/test-byte-array-statistics.rb +++ b/c_glib/test/parquet/test-byte-array-statistics.rb @@ -20,22 +20,14 @@ class TestParquetByteArrayStatistics < Test::Unit::TestCase def setup omit("Parquet is required") unless defined?(::Parquet) - Tempfile.create(["data", ".parquet"]) do |file| - @file = file - @table = build_table("string" => build_string_array([nil, "abc", "xyz"])) - writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) - chunk_size = 1024 - writer.write_table(@table, chunk_size) - writer.close - reader = Parquet::ArrowFileReader.new(@file.path) - begin - @statistics = - reader.metadata.get_row_group(0).get_column_chunk(0).statistics - yield - ensure - reader.unref - end - end + @file = Tempfile.open(["data", ".parquet"]) + @table = build_table("string" => build_string_array([nil, "abc", "xyz"])) + writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) + chunk_size = 1024 + writer.write_table(@table, chunk_size) + writer.close + reader = Parquet::ArrowFileReader.new(@file.path) + @statistics = reader.metadata.get_row_group(0).get_column_chunk(0).statistics end test("#min") do diff --git a/c_glib/test/parquet/test-column-chunk-metadata.rb b/c_glib/test/parquet/test-column-chunk-metadata.rb index 4612e5bf0cc..a93fe85bbfb 100644 --- a/c_glib/test/parquet/test-column-chunk-metadata.rb +++ b/c_glib/test/parquet/test-column-chunk-metadata.rb @@ -20,46 +20,35 @@ class TestParquetColumnChunkMetadata < Test::Unit::TestCase def setup omit("Parquet is required") unless defined?(::Parquet) - Tempfile.create(["data", ".parquet"]) do |file| - @file = file - @string_array = build_string_array([nil, "hello"]) - fields = [ - Arrow::Field.new("int8", Arrow::Int8DataType.new), - Arrow::Field.new("boolean", Arrow::BooleanDataType.new), - ] - structs = [ - { - "int8" => -29, - "boolean" => true, - }, - nil, - ] - @struct_array = build_struct_array(fields, structs) - @table = build_table("string" => @string_array, - "struct" => @struct_array) - writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) - chunk_size = 1 - writer.write_table(@table, chunk_size) - writer.close - reader = Parquet::ArrowFileReader.new(@file.path) - begin - @metadata = reader.metadata.get_row_group(0).get_column_chunk(0) - yield - ensure - reader.unref - end - end + @file = Tempfile.open(["data", ".parquet"]) + @string_array = build_string_array([nil, "hello"]) + fields = [ + Arrow::Field.new("int8", Arrow::Int8DataType.new), + Arrow::Field.new("boolean", Arrow::BooleanDataType.new), + ] + structs = [ + { + "int8" => -29, + "boolean" => true, + }, + nil, + ] + @struct_array = build_struct_array(fields, structs) + @table = build_table("string" => @string_array, + "struct" => @struct_array) + writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) + chunk_size = 1 + writer.write_table(@table, chunk_size) + writer.close + reader = Parquet::ArrowFileReader.new(@file.path) + @metadata = reader.metadata.get_row_group(0).get_column_chunk(0) end test("#==") do reader = Parquet::ArrowFileReader.new(@file.path) - begin - other_metadata = reader.metadata.get_row_group(0).get_column_chunk(0) - assert do - @metadata == other_metadata - end - ensure - reader.unref + other_metadata = reader.metadata.get_row_group(0).get_column_chunk(0) + assert do + @metadata == other_metadata end end @@ -77,7 +66,7 @@ def setup test("#file_offset") do assert do - @metadata.file_offset == 0 + @metadata.file_offset > 0 end end diff --git a/c_glib/test/parquet/test-double-statistics.rb b/c_glib/test/parquet/test-double-statistics.rb index 6c7a9582457..a610fb24a9b 100644 --- a/c_glib/test/parquet/test-double-statistics.rb +++ b/c_glib/test/parquet/test-double-statistics.rb @@ -20,22 +20,14 @@ class TestParquetDoubleStatistics < Test::Unit::TestCase def setup omit("Parquet is required") unless defined?(::Parquet) - Tempfile.create(["data", ".parquet"]) do |file| - @file = file - @table = build_table("double" => build_double_array([nil, -2.9, 2.9])) - writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) - chunk_size = 1024 - writer.write_table(@table, chunk_size) - writer.close - reader = Parquet::ArrowFileReader.new(@file.path) - begin - @statistics = - reader.metadata.get_row_group(0).get_column_chunk(0).statistics - yield - ensure - reader.unref - end - end + @file = Tempfile.open(["data", ".parquet"]) + @table = build_table("double" => build_double_array([nil, -2.9, 2.9])) + writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) + chunk_size = 1024 + writer.write_table(@table, chunk_size) + writer.close + reader = Parquet::ArrowFileReader.new(@file.path) + @statistics = reader.metadata.get_row_group(0).get_column_chunk(0).statistics end test("#min") do diff --git a/c_glib/test/parquet/test-file-metadata.rb b/c_glib/test/parquet/test-file-metadata.rb index aec3f4ab829..2bca7e66e0b 100644 --- a/c_glib/test/parquet/test-file-metadata.rb +++ b/c_glib/test/parquet/test-file-metadata.rb @@ -20,46 +20,35 @@ class TestParquetFileMetadata < Test::Unit::TestCase def setup omit("Parquet is required") unless defined?(::Parquet) - Tempfile.create(["data", ".parquet"]) do |file| - @file = file - @string_array = build_string_array([nil, "hello"]) - fields = [ - Arrow::Field.new("int8", Arrow::Int8DataType.new), - Arrow::Field.new("boolean", Arrow::BooleanDataType.new), - ] - structs = [ - { - "int8" => -29, - "boolean" => true, - }, - nil, - ] - @struct_array = build_struct_array(fields, structs) - @table = build_table("string" => @string_array, - "struct" => @struct_array) - writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) - chunk_size = 1 - writer.write_table(@table, chunk_size) - writer.close - reader = Parquet::ArrowFileReader.new(@file.path) - begin - @metadata = reader.metadata - yield - ensure - reader.unref - end - end + @file = Tempfile.open(["data", ".parquet"]) + @string_array = build_string_array([nil, "hello"]) + fields = [ + Arrow::Field.new("int8", Arrow::Int8DataType.new), + Arrow::Field.new("boolean", Arrow::BooleanDataType.new), + ] + structs = [ + { + "int8" => -29, + "boolean" => true, + }, + nil, + ] + @struct_array = build_struct_array(fields, structs) + @table = build_table("string" => @string_array, + "struct" => @struct_array) + writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) + chunk_size = 1 + writer.write_table(@table, chunk_size) + writer.close + reader = Parquet::ArrowFileReader.new(@file.path) + @metadata = reader.metadata end test("#==") do reader = Parquet::ArrowFileReader.new(@file.path) - begin - other_metadata = reader.metadata - assert do - @metadata == other_metadata - end - ensure - reader.unref + other_metadata = reader.metadata + assert do + @metadata == other_metadata end end diff --git a/c_glib/test/parquet/test-fixed-length-byte-array-statistics.rb b/c_glib/test/parquet/test-fixed-length-byte-array-statistics.rb index c2f179627d0..87a96d009c5 100644 --- a/c_glib/test/parquet/test-fixed-length-byte-array-statistics.rb +++ b/c_glib/test/parquet/test-fixed-length-byte-array-statistics.rb @@ -20,24 +20,16 @@ class TestParquetFixedLengthByteArrayStatistics < Test::Unit::TestCase def setup omit("Parquet is required") unless defined?(::Parquet) - Tempfile.create(["data", ".parquet"]) do |file| - @file = file - data_type = Arrow::FixedSizeBinaryDataType.new(3) - array = build_fixed_size_binary_array(data_type, [nil, "abc", "xyz"]) - @table = build_table("binary" => array) - writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) - chunk_size = 1024 - writer.write_table(@table, chunk_size) - writer.close - reader = Parquet::ArrowFileReader.new(@file.path) - begin - @statistics = - reader.metadata.get_row_group(0).get_column_chunk(0).statistics - yield - ensure - reader.unref - end - end + @file = Tempfile.open(["data", ".parquet"]) + data_type = Arrow::FixedSizeBinaryDataType.new(3) + array = build_fixed_size_binary_array(data_type, [nil, "abc", "xyz"]) + @table = build_table("binary" => array) + writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) + chunk_size = 1024 + writer.write_table(@table, chunk_size) + writer.close + reader = Parquet::ArrowFileReader.new(@file.path) + @statistics = reader.metadata.get_row_group(0).get_column_chunk(0).statistics end test("#min") do diff --git a/c_glib/test/parquet/test-float-statistics.rb b/c_glib/test/parquet/test-float-statistics.rb index 7d1a233f53c..2622a2bb36f 100644 --- a/c_glib/test/parquet/test-float-statistics.rb +++ b/c_glib/test/parquet/test-float-statistics.rb @@ -20,22 +20,14 @@ class TestParquetFloatStatistics < Test::Unit::TestCase def setup omit("Parquet is required") unless defined?(::Parquet) - Tempfile.create(["data", ".parquet"]) do |file| - @file = file - @table = build_table("float" => build_float_array([nil, -2.9, 2.9])) - writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) - chunk_size = 1024 - writer.write_table(@table, chunk_size) - writer.close - reader = Parquet::ArrowFileReader.new(@file.path) - begin - @statistics = - reader.metadata.get_row_group(0).get_column_chunk(0).statistics - yield - ensure - reader.unref - end - end + @file = Tempfile.open(["data", ".parquet"]) + @table = build_table("float" => build_float_array([nil, -2.9, 2.9])) + writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) + chunk_size = 1024 + writer.write_table(@table, chunk_size) + writer.close + reader = Parquet::ArrowFileReader.new(@file.path) + @statistics = reader.metadata.get_row_group(0).get_column_chunk(0).statistics end test("#min") do diff --git a/c_glib/test/parquet/test-int32-statistics.rb b/c_glib/test/parquet/test-int32-statistics.rb index 8d41327f880..041f07c7429 100644 --- a/c_glib/test/parquet/test-int32-statistics.rb +++ b/c_glib/test/parquet/test-int32-statistics.rb @@ -20,22 +20,14 @@ class TestParquetInt32Statistics < Test::Unit::TestCase def setup omit("Parquet is required") unless defined?(::Parquet) - Tempfile.create(["data", ".parquet"]) do |file| - @file = file - @table = build_table("int32" => build_int32_array([nil, -2, 9])) - writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) - chunk_size = 1024 - writer.write_table(@table, chunk_size) - writer.close - reader = Parquet::ArrowFileReader.new(@file.path) - begin - @statistics = - reader.metadata.get_row_group(0).get_column_chunk(0).statistics - yield - ensure - reader.unref - end - end + @file = Tempfile.open(["data", ".parquet"]) + @table = build_table("int32" => build_int32_array([nil, -2, 9])) + writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) + chunk_size = 1024 + writer.write_table(@table, chunk_size) + writer.close + reader = Parquet::ArrowFileReader.new(@file.path) + @statistics = reader.metadata.get_row_group(0).get_column_chunk(0).statistics end test("#min") do diff --git a/c_glib/test/parquet/test-int64-statistics.rb b/c_glib/test/parquet/test-int64-statistics.rb index 81fce8a0bbb..0a014573c11 100644 --- a/c_glib/test/parquet/test-int64-statistics.rb +++ b/c_glib/test/parquet/test-int64-statistics.rb @@ -20,23 +20,15 @@ class TestParquetInt64Statistics < Test::Unit::TestCase def setup omit("Parquet is required") unless defined?(::Parquet) - Tempfile.create(["data", ".parquet"]) do |file| - @file = file - array = build_int64_array([nil, -(2 ** 32), 2 ** 32]) - @table = build_table("int64" => array) - writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) - chunk_size = 1024 - writer.write_table(@table, chunk_size) - writer.close - reader = Parquet::ArrowFileReader.new(@file.path) - begin - @statistics = - reader.metadata.get_row_group(0).get_column_chunk(0).statistics - yield - ensure - reader.unref - end - end + @file = Tempfile.open(["data", ".parquet"]) + array = build_int64_array([nil, -(2 ** 32), 2 ** 32]) + @table = build_table("int64" => array) + writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) + chunk_size = 1024 + writer.write_table(@table, chunk_size) + writer.close + reader = Parquet::ArrowFileReader.new(@file.path) + @statistics = reader.metadata.get_row_group(0).get_column_chunk(0).statistics end test("#min") do diff --git a/c_glib/test/parquet/test-row-group-metadata.rb b/c_glib/test/parquet/test-row-group-metadata.rb index f238dd3b577..e68cb9d11ee 100644 --- a/c_glib/test/parquet/test-row-group-metadata.rb +++ b/c_glib/test/parquet/test-row-group-metadata.rb @@ -20,46 +20,35 @@ class TestParquetRowGroupMetadata < Test::Unit::TestCase def setup omit("Parquet is required") unless defined?(::Parquet) - Tempfile.create(["data", ".parquet"]) do |file| - @file = file - @string_array = build_string_array([nil, "hello"]) - fields = [ - Arrow::Field.new("int8", Arrow::Int8DataType.new), - Arrow::Field.new("boolean", Arrow::BooleanDataType.new), - ] - structs = [ - { - "int8" => -29, - "boolean" => true, - }, - nil, - ] - @struct_array = build_struct_array(fields, structs) - @table = build_table("string" => @string_array, - "struct" => @struct_array) - writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) - chunk_size = 1 - writer.write_table(@table, chunk_size) - writer.close - reader = Parquet::ArrowFileReader.new(@file.path) - begin - @metadata = reader.metadata.get_row_group(0) - yield - ensure - reader.unref - end - end + @file = Tempfile.open(["data", ".parquet"]) + @string_array = build_string_array([nil, "hello"]) + fields = [ + Arrow::Field.new("int8", Arrow::Int8DataType.new), + Arrow::Field.new("boolean", Arrow::BooleanDataType.new), + ] + structs = [ + { + "int8" => -29, + "boolean" => true, + }, + nil, + ] + @struct_array = build_struct_array(fields, structs) + @table = build_table("string" => @string_array, + "struct" => @struct_array) + writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) + chunk_size = 1 + writer.write_table(@table, chunk_size) + writer.close + reader = Parquet::ArrowFileReader.new(@file.path) + @metadata = reader.metadata.get_row_group(0) end test("#==") do reader = Parquet::ArrowFileReader.new(@file.path) - begin - other_metadata = reader.metadata.get_row_group(0) - assert do - @metadata == other_metadata - end - ensure - reader.unref + other_metadata = reader.metadata.get_row_group(0) + assert do + @metadata == other_metadata end end diff --git a/c_glib/test/parquet/test-statistics.rb b/c_glib/test/parquet/test-statistics.rb index 09a47ac2559..0367084c88a 100644 --- a/c_glib/test/parquet/test-statistics.rb +++ b/c_glib/test/parquet/test-statistics.rb @@ -20,34 +20,22 @@ class TestParquetStatistics < Test::Unit::TestCase def setup omit("Parquet is required") unless defined?(::Parquet) - Tempfile.create(["data", ".parquet"]) do |file| - @file = file - @table = build_table("int32" => build_int32_array([nil, 2, 2, 9])) - writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) - chunk_size = 1024 - writer.write_table(@table, chunk_size) - writer.close - reader = Parquet::ArrowFileReader.new(@file.path) - begin - @statistics = - reader.metadata.get_row_group(0).get_column_chunk(0).statistics - yield - ensure - reader.unref - end - end + @file = Tempfile.open(["data", ".parquet"]) + @table = build_table("int32" => build_int32_array([nil, 2, 2, 9])) + writer = Parquet::ArrowFileWriter.new(@table.schema, @file.path) + chunk_size = 1024 + writer.write_table(@table, chunk_size) + writer.close + reader = Parquet::ArrowFileReader.new(@file.path) + @statistics = reader.metadata.get_row_group(0).get_column_chunk(0).statistics end test("#==") do reader = Parquet::ArrowFileReader.new(@file.path) - begin - other_statistics = - reader.metadata.get_row_group(0).get_column_chunk(0).statistics - assert do - @statistics == other_statistics - end - ensure - reader.unref + other_statistics = + reader.metadata.get_row_group(0).get_column_chunk(0).statistics + assert do + @statistics == other_statistics end end diff --git a/c_glib/test/test-array.rb b/c_glib/test/test-array.rb index 4da641b203f..c03aecf1732 100644 --- a/c_glib/test/test-array.rb +++ b/c_glib/test/test-array.rb @@ -141,12 +141,12 @@ def test_no_diff def test_diff array = build_string_array(["Start", "Shutdown", "Reboot"]) - other_array = build_string_array(["Start", "Running", "Reboot"]) + other_array = build_string_array(["Start", "Shutdonw", "Reboot"]) assert_equal(<<-STRING.chomp, array.diff_unified(other_array)) @@ -1, +1 @@ -"Shutdown" -+"Running" ++"Shutdonw" STRING end diff --git a/c_glib/test/test-csv-reader.rb b/c_glib/test/test-csv-reader.rb index cc102553b12..018f062ac3b 100644 --- a/c_glib/test/test-csv-reader.rb +++ b/c_glib/test/test-csv-reader.rb @@ -236,21 +236,6 @@ def test_generate_column_names assert_equal(build_table(columns), table.read) end - - def test_timestamp_parsers - options = Arrow::CSVReadOptions.new - assert_equal([], options.timestamp_parsers) - - iso8601_timestamp_parser = Arrow::ISO8601TimestampParser.new - options.timestamp_parsers = [iso8601_timestamp_parser] - assert_equal([iso8601_timestamp_parser], - options.timestamp_parsers) - - date_timestamp_parser = Arrow::StrptimeTimestampParser.new("%Y-%m-%d") - options.add_timestamp_parser(date_timestamp_parser) - assert_equal([iso8601_timestamp_parser, date_timestamp_parser], - options.timestamp_parsers) - end end end end diff --git a/c_glib/test/test-decimal128-data-type.rb b/c_glib/test/test-decimal128-data-type.rb index f0e62c9d131..92f2f47f0bd 100644 --- a/c_glib/test/test-decimal128-data-type.rb +++ b/c_glib/test/test-decimal128-data-type.rb @@ -41,7 +41,7 @@ def test_scale assert_equal(2, data_type.scale) end - def test_decimal_data_type_new + def test_deciaml_data_type_new assert_equal(Arrow::Decimal128DataType.new(8, 2), Arrow::DecimalDataType.new(8, 2)) end diff --git a/c_glib/test/test-decimal256-data-type.rb b/c_glib/test/test-decimal256-data-type.rb index 6d803f7ce90..b26f7396043 100644 --- a/c_glib/test/test-decimal256-data-type.rb +++ b/c_glib/test/test-decimal256-data-type.rb @@ -41,7 +41,7 @@ def test_scale assert_equal(2, data_type.scale) end - def test_decimal_data_type_new + def test_deciaml_data_type_new assert_equal(Arrow::Decimal256DataType.new(39, 1), Arrow::DecimalDataType.new(39, 1)) end diff --git a/c_glib/test/test-dictionary-array-builder.rb b/c_glib/test/test-dictionary-array-builder.rb index 2d14563c840..4531e44f4a4 100644 --- a/c_glib/test/test-dictionary-array-builder.rb +++ b/c_glib/test/test-dictionary-array-builder.rb @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -class TestDictionaryArrayBuilder < Test::Unit::TestCase +class TestDictinaryArrayBuilder < Test::Unit::TestCase include Helper::Buildable def setup diff --git a/c_glib/test/test-extension-data-type.rb b/c_glib/test/test-extension-data-type.rb index 6c114b81e2c..59c6395e98d 100644 --- a/c_glib/test/test-extension-data-type.rb +++ b/c_glib/test/test-extension-data-type.rb @@ -91,7 +91,7 @@ def test_wrap_chunked_array ["a" * 16, nil]) storage2 = build_fixed_size_binary_array(data_type.storage_data_type, ["c" * 16]) - chunked_array = Arrow::ChunkedArray.new([storage1, storage2]) + chunkd_array = Arrow::ChunkedArray.new([storage1, storage2]) extension_chunked_array = data_type.wrap_chunked_array(chunked_array) assert_equal([ data_type, diff --git a/c_glib/test/test-fixed-size-binary-array.rb b/c_glib/test/test-fixed-size-binary-array.rb index 8de32c57a62..29189e78a7d 100644 --- a/c_glib/test/test-fixed-size-binary-array.rb +++ b/c_glib/test/test-fixed-size-binary-array.rb @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -class TestFixedSizeBinaryArray < Test::Unit::TestCase +class TestFixedSizeBinaryrray < Test::Unit::TestCase include Helper::Buildable def setup diff --git a/c_glib/test/test-function.rb b/c_glib/test/test-function.rb index 43d49197853..cffaacba031 100644 --- a/c_glib/test/test-function.rb +++ b/c_glib/test/test-function.rb @@ -158,12 +158,6 @@ def test_round_to_multiple_options assert_equal(Arrow::RoundToMultipleOptions.new, round_to_multiple_function.default_options) end - - def test_strftime_options - strftime_function = Arrow::Function.find("strftime") - assert_equal(Arrow::StrftimeOptions.new, - strftime_function.default_options) - end end sub_test_case("#options_type") do @@ -238,29 +232,5 @@ def test_round_to_multiple_options assert_equal(Arrow::RoundToMultipleOptions.gtype, round_to_multiple_function.options_type) end - - def test_strptime_options - strptime_function = Arrow::Function.find("strptime") - assert_equal(Arrow::StrptimeOptions.gtype, - strptime_function.options_type) - end - - def test_strftime_options - strftime_function = Arrow::Function.find("strftime") - assert_equal(Arrow::StrftimeOptions.gtype, - strftime_function.options_type) - end - - def test_split_pattern_options - split_pattern_function = Arrow::Function.find("split_pattern") - assert_equal(Arrow::SplitPatternOptions.gtype, - split_pattern_function.options_type) - end - - def test_struct_field_options - struct_field_function = Arrow::Function.find("struct_field") - assert_equal(Arrow::StructFieldOptions.gtype, - struct_field_function.options_type) - end end end diff --git a/c_glib/test/test-half-float-scalar.rb b/c_glib/test/test-half-float-scalar.rb index 3073d84d796..ac41f91ece6 100644 --- a/c_glib/test/test-half-float-scalar.rb +++ b/c_glib/test/test-half-float-scalar.rb @@ -41,7 +41,7 @@ def test_equal end def test_to_s - assert_equal("1.0009765625", @scalar.to_s) + assert_equal("[\n #{@half_float}\n]", @scalar.to_s) end def test_value diff --git a/c_glib/test/test-split-pattern-options.rb b/c_glib/test/test-split-pattern-options.rb deleted file mode 100644 index b6bb5fe01f9..00000000000 --- a/c_glib/test/test-split-pattern-options.rb +++ /dev/null @@ -1,56 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -class TestSplitPatternOptions < Test::Unit::TestCase - include Helper::Buildable - - def setup - @options = Arrow::SplitPatternOptions.new - end - - def test_pattern_property - assert_equal("", @options.pattern) - @options.pattern = "foo" - assert_equal("foo", @options.pattern) - end - - def test_max_splits_property - assert_equal(-1, @options.max_splits) - @options.max_splits = 1 - assert_equal(1, @options.max_splits) - end - - def test_reverse_property - assert do - !@options.reverse? - end - @options.reverse = true - assert do - @options.reverse? - end - end - - def test_split_pattern_regex_function - args = [ - Arrow::ArrayDatum.new(build_string_array(["hello world"])), - ] - @options.pattern = "[lo]+" - split_pattern_regex_function = Arrow::Function.find("split_pattern_regex") - assert_equal(build_list_array(Arrow::StringDataType.new, [["he", " w", "r", "d"]]), - split_pattern_regex_function.execute(args, @options).value) - end -end diff --git a/c_glib/test/test-strftime-options.rb b/c_glib/test/test-strftime-options.rb deleted file mode 100644 index 81440d5d086..00000000000 --- a/c_glib/test/test-strftime-options.rb +++ /dev/null @@ -1,47 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -class TestStrftimeOptions < Test::Unit::TestCase - include Helper::Buildable - - def setup - @options = Arrow::StrftimeOptions.new - end - - def test_format_property - assert_equal("%Y-%m-%dT%H:%M:%S", @options.format) - @options.format = "%Y-%m-%d" - assert_equal("%Y-%m-%d", @options.format) - end - - def test_locale_property - assert_equal("C", @options.locale) - @options.locale = "sv_SE.UTF-8" - assert_equal("sv_SE.UTF-8", @options.locale) - end - - def test_strftime_function - omit("Missing tzdata on Windows") if Gem.win_platform? - args = [ - Arrow::ArrayDatum.new(build_timestamp_array(:milli, [1504953190854])), - ] - @options.format = "%Y-%m-%d" - strftime_function = Arrow::Function.find("strftime") - assert_equal(build_string_array(["2017-09-09"]), - strftime_function.execute(args, @options).value) - end -end diff --git a/c_glib/test/test-strptime-options.rb b/c_glib/test/test-strptime-options.rb deleted file mode 100644 index 994176638a1..00000000000 --- a/c_glib/test/test-strptime-options.rb +++ /dev/null @@ -1,57 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -class TestStrptimeOptions < Test::Unit::TestCase - include Helper::Buildable - - def setup - @options = Arrow::StrptimeOptions.new - end - - def test_format_property - assert_equal("", @options.format) - @options.format = "%Y-%m-%d" - assert_equal("%Y-%m-%d", @options.format) - end - - def test_unit_property - assert_equal(Arrow::TimeUnit::MICRO, @options.unit) - @options.unit = :nano - assert_equal(Arrow::TimeUnit::NANO, @options.unit) - end - - def test_error_is_null_property - assert do - !@options.error_is_null? - end - @options.error_is_null = true - assert do - @options.error_is_null? - end - end - - def test_strptime_function - args = [ - Arrow::ArrayDatum.new(build_string_array(["2017-09-09T10:33:10"])), - ] - @options.format = "%Y-%m-%dT%H:%M:%S" - @options.unit = :milli - strptime_function = Arrow::Function.find("strptime") - assert_equal(build_timestamp_array(:milli, [1504953190000]), - strptime_function.execute(args, @options).value) - end -end diff --git a/c_glib/test/test-struct-field-options.rb b/c_glib/test/test-struct-field-options.rb deleted file mode 100644 index 4a614de6df6..00000000000 --- a/c_glib/test/test-struct-field-options.rb +++ /dev/null @@ -1,75 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -class TestStructFieldOptions < Test::Unit::TestCase - include Helper::Buildable - - def setup - @options = Arrow::StructFieldOptions.new - end - - def test_default - assert_equal("", @options.field_ref) - end - - def test_set_string - @options.field_ref = "foo" - assert_equal("foo", @options.field_ref) - end - - def test_set_symbol - @options.field_ref = :foo - assert_equal("foo", @options.field_ref) - end - - def test_set_dot_path - @options.field_ref = ".foo.bar" - assert_equal(".foo.bar", @options.field_ref) - end - - def test_set_invalid - message = "[struct-field-options][set-field-ref]: Invalid: Dot path '[foo]' contained an unterminated index" - assert_raise(Arrow::Error::Invalid.new(message)) do - @options.field_ref = "[foo]" - end - end - - def test_struct_field_function - fields = [ - Arrow::Field.new("score", Arrow::Int8DataType.new), - Arrow::Field.new("enabled", Arrow::BooleanDataType.new), - ] - structs = [ - { - "score" => -29, - "enabled" => true, - }, - { - "score" => 2, - "enabled" => false, - }, - nil, - ] - args = [ - Arrow::ArrayDatum.new(build_struct_array(fields, structs)), - ] - @options.field_ref = "score" - struct_field_function = Arrow::Function.find("struct_field") - assert_equal(build_int8_array([-29, 2, nil]), - struct_field_function.execute(args, @options).value) - end -end diff --git a/c_glib/test/test-timestamp-parser.rb b/c_glib/test/test-timestamp-parser.rb deleted file mode 100644 index 7095b2d26c1..00000000000 --- a/c_glib/test/test-timestamp-parser.rb +++ /dev/null @@ -1,42 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -class TestTimestampParser < Test::Unit::TestCase - sub_test_case("strptime") do - def setup - @parser = Arrow::StrptimeTimestampParser.new("%Y-%m-%d") - end - - def test_kind - assert_equal("strptime", @parser.kind) - end - - def test_format - assert_equal("%Y-%m-%d", @parser.format) - end - end - - sub_test_case("ISO8601") do - def setup - @parser = Arrow::ISO8601TimestampParser.new - end - - def test_kind - assert_equal("iso8601", @parser.kind) - end - end -end diff --git a/c_glib/tool/generate-version-header.py b/c_glib/tool/generate-version-header.py deleted file mode 100755 index ba8cb03d15a..00000000000 --- a/c_glib/tool/generate-version-header.py +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/env python3 - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - - -import argparse -from io import TextIOBase -from pathlib import Path -import re - - -def main(): - parser = argparse.ArgumentParser( - description="Generate C header with version macros") - parser.add_argument( - "--library", - required=True, - help="The library name to use in macro prefixes") - parser.add_argument( - "--version", - required=True, - help="The library version number") - parser.add_argument( - "--input", - type=Path, - required=True, - help="Path to the input template file") - parser.add_argument( - "--output", - type=Path, - required=True, - help="Path to the output file to generate") - - args = parser.parse_args() - - with open(args.input, "r", encoding="utf-8") as input_file, \ - open(args.output, "w", encoding="utf-8") as output_file: - write_header( - input_file, output_file, args.library, args.version) - - -def write_header( - input_file: TextIOBase, - output_file: TextIOBase, - library_name: str, - version: str): - if "-" in version: - version, version_tag = version.split("-") - else: - version_tag = "" - version_major, version_minor, version_micro = [int(v) for v in version.split(".")] - - encoded_versions = generate_encoded_versions(library_name) - visibility_macros = generate_visibility_macros(library_name) - availability_macros = generate_availability_macros(library_name) - - replacements = { - "VERSION_MAJOR": str(version_major), - "VERSION_MINOR": str(version_minor), - "VERSION_MICRO": str(version_micro), - "VERSION_TAG": version_tag, - "ENCODED_VERSIONS": encoded_versions, - "VISIBILITY_MACROS": visibility_macros, - "AVAILABILITY_MACROS": availability_macros, - } - - output_file.write(re.sub( - r"@([A-Z_]+)@", lambda match: replacements[match[1]], input_file.read())) - - -def generate_visibility_macros(library: str) -> str: - return f"""#if (defined(_WIN32) || defined(__CYGWIN__)) && defined(_MSC_VER) && \ - !defined({library}_STATIC_COMPILATION) -# define {library}_EXPORT __declspec(dllexport) -# define {library}_IMPORT __declspec(dllimport) -#else -# define {library}_EXPORT -# define {library}_IMPORT -#endif - -#ifdef {library}_COMPILATION -# define {library}_API {library}_EXPORT -#else -# define {library}_API {library}_IMPORT -#endif - -#define {library}_EXTERN {library}_API extern""" - - -def generate_encoded_versions(library: str) -> str: - macros = [] - - for major_version, minor_version in ALL_VERSIONS: - macros.append(f"""/** - * {library}_VERSION_{major_version}_{minor_version}: - * - * You can use this macro value for compile time API version check. - * - * Since: {major_version}.{minor_version}.0 - */ -#define {library}_VERSION_{major_version}_{minor_version} G_ENCODE_VERSION({major_version}, {minor_version})""") # noqa: E501 - - return "\n\n".join(macros) - - -def generate_availability_macros(library: str) -> str: - macros = [f"""#define {library}_AVAILABLE_IN_ALL {library}_EXTERN"""] - - for major_version, minor_version in ALL_VERSIONS: - macros.append(f"""#if {library}_VERSION_MIN_REQUIRED >= {library}_VERSION_{major_version}_{minor_version} -# define {library}_DEPRECATED_IN_{major_version}_{minor_version} {library}_DEPRECATED -# define {library}_DEPRECATED_IN_{major_version}_{minor_version}_FOR(function) {library}_DEPRECATED_FOR(function) -#else -# define {library}_DEPRECATED_IN_{major_version}_{minor_version} -# define {library}_DEPRECATED_IN_{major_version}_{minor_version}_FOR(function) -#endif - -#if {library}_VERSION_MAX_ALLOWED < {library}_VERSION_{major_version}_{minor_version} -# define {library}_AVAILABLE_IN_{major_version}_{minor_version} {library}_EXTERN {library}_UNAVAILABLE({major_version}, {minor_version}) -#else -# define {library}_AVAILABLE_IN_{major_version}_{minor_version} {library}_EXTERN -#endif""") # noqa: E501 - - return "\n\n".join(macros) - - -ALL_VERSIONS = [ - (18, 0), - (17, 0), - (16, 0), - (15, 0), - (14, 0), - (13, 0), - (12, 0), - (11, 0), - (10, 0), - (9, 0), - (8, 0), - (7, 0), - (6, 0), - (5, 0), - (4, 0), - (3, 0), - (2, 0), - (1, 0), - (0, 17), - (0, 16), - (0, 15), - (0, 14), - (0, 13), - (0, 12), - (0, 11), - (0, 10), -] - - -if __name__ == '__main__': - main() diff --git a/c_glib/vcpkg.json b/c_glib/vcpkg.json deleted file mode 100644 index 3941edbfec5..00000000000 --- a/c_glib/vcpkg.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "arrow-glib", - "version-string": "18.0.0-SNAPSHOT", - "dependencies": [ - "glib", - "gobject-introspection", - "pkgconf" - ] -} diff --git a/ci/appveyor-cpp-build.bat b/ci/appveyor-cpp-build.bat index f688fbb63a9..ab85032fe99 100644 --- a/ci/appveyor-cpp-build.bat +++ b/ci/appveyor-cpp-build.bat @@ -80,7 +80,7 @@ cmake -G "%GENERATOR%" %ARROW_CMAKE_ARGS% ^ -DARROW_HDFS=ON ^ -DARROW_JSON=ON ^ -DARROW_MIMALLOC=ON ^ - -DARROW_ORC=%ARROW_ORC% ^ + -DARROW_ORC=ON ^ -DARROW_PARQUET=ON ^ -DARROW_S3=%ARROW_S3% ^ -DARROW_SUBSTRAIT=ON ^ @@ -125,10 +125,10 @@ set PYARROW_WITH_DATASET=ON set PYARROW_WITH_FLIGHT=%ARROW_BUILD_FLIGHT% set PYARROW_WITH_GANDIVA=%ARROW_BUILD_GANDIVA% set PYARROW_WITH_GCS=%ARROW_GCS% -set PYARROW_WITH_ORC=%ARROW_ORC% set PYARROW_WITH_PARQUET=ON set PYARROW_WITH_PARQUET_ENCRYPTION=ON set PYARROW_WITH_S3=%ARROW_S3% +set PYARROW_WITH_STATIC_BOOST=ON set PYARROW_WITH_SUBSTRAIT=ON set ARROW_HOME=%CONDA_PREFIX%\Library diff --git a/ci/appveyor-cpp-setup.bat b/ci/appveyor-cpp-setup.bat index 5a9dffa166f..5c4a11832d5 100644 --- a/ci/appveyor-cpp-setup.bat +++ b/ci/appveyor-cpp-setup.bat @@ -66,9 +66,6 @@ set CONDA_PACKAGES=%CONDA_PACKAGES% --file=ci\conda_env_cpp.txt @rem Force conda to use conda-forge conda config --add channels conda-forge conda config --remove channels defaults -@rem Ensure using the latest information. If there are invalid caches, -@rem mamba may use invalid download URL. -mamba clean --all -y @rem Arrow conda environment mamba create -n arrow -y -c conda-forge ^ --file=ci\conda_env_python.txt ^ diff --git a/ci/conan/all/conan_cmake_project_include.cmake b/ci/conan/all/conan_cmake_project_include.cmake deleted file mode 100644 index a6dee0c4346..00000000000 --- a/ci/conan/all/conan_cmake_project_include.cmake +++ /dev/null @@ -1,35 +0,0 @@ -# MIT License -# -# Copyright (c) 2019 Conan.io -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -if(ARROW_S3) - find_package(AWSSDK REQUIRED) - # Fix issue where scripts expect a variable called "AWSSDK_LINK_LIBRARIES" - # which is not defined by the generated AWSSDKConfig.cmake - if(NOT DEFINED AWSSDK_LINK_LIBRARIES) - set(AWSSDK_LINK_LIBRARIES "${AWSSDK_LIBRARIES}") - endif() - - # Causes logic used for generated .pc file to not run - # avoiding instropection of target `aws-cpp-sdk::aws-cpp-sdk` - # This is fine because the generated .pc file is not of use - set(AWSSDK_SOURCE "conan") -endif() diff --git a/ci/conan/all/conandata.yml b/ci/conan/all/conandata.yml index fb75f3995c6..7402272a4b3 100644 --- a/ci/conan/all/conandata.yml +++ b/ci/conan/all/conandata.yml @@ -21,30 +21,6 @@ # SOFTWARE. sources: - "15.0.0": - url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-15.0.0/apache-arrow-15.0.0.tar.gz?action=download" - sha256: "01dd3f70e85d9b5b933ec92c0db8a4ef504a5105f78d2d8622e84279fb45c25d" - "14.0.2": - url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-14.0.2/apache-arrow-14.0.2.tar.gz?action=download" - sha256: "1304dedb41896008b89fe0738c71a95d9b81752efc77fa70f264cb1da15d9bc2" - "14.0.1": - url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-14.0.1/apache-arrow-14.0.1.tar.gz?action=download" - sha256: "5c70eafb1011f9d124bafb328afe54f62cc5b9280b7080e1e3d668f78c0e407e" - "14.0.0": - url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-14.0.0/apache-arrow-14.0.0.tar.gz?action=download" - sha256: "4eb0da50ec071baf15fc163cb48058931e006f1c862c8def0e180fd07d531021" - "13.0.0": - url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-13.0.0/apache-arrow-13.0.0.tar.gz?action=download" - sha256: "35dfda191262a756be934eef8afee8d09762cad25021daa626eb249e251ac9e6" - "12.0.1": - url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-12.0.1/apache-arrow-12.0.1.tar.gz?action=download" - sha256: "3481c411393aa15c75e88d93cf8315faf7f43e180fe0790128d3840d417de858" - "12.0.0": - url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-12.0.0/apache-arrow-12.0.0.tar.gz?action=download" - sha256: "ddd8347882775e53af7d0965a1902b7d8fcd0a030fd14f783d4f85e821352d52" - "11.0.0": - url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-11.0.0/apache-arrow-11.0.0.tar.gz?action=download" - sha256: "2dd8f0ea0848a58785628ee3a57675548d509e17213a2f5d72b0d900b43f5430" "10.0.1": url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-10.0.1/apache-arrow-10.0.1.tar.gz?action=download" sha256: "c814e0670112a22c1a6ec03ab420a52ae236a9a42e9e438c3cbd37f37e658fb3" @@ -60,6 +36,12 @@ sources: "7.0.0": url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-7.0.0/apache-arrow-7.0.0.tar.gz?action=download" sha256: "e8f49b149a15ecef4e40fcfab1b87c113c6b1ee186005c169e5cdf95d31a99de" + "2.0.0": + url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-2.0.0/apache-arrow-2.0.0.tar.gz?action=download" + sha256: "be0342cc847bb340d86aeaef43596a0b6c1dbf1ede9c789a503d939e01c71fbe" + "1.0.0": + url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-1.0.0/apache-arrow-1.0.0.tar.gz?action=download" + sha256: "86ddb9feb48203a5aaf9cc4f2827525e20a2ca4d7239e492af17e74532ccf243" patches: "8.0.1": - patch_file: "patches/8.0.0-0005-install-utils.patch" @@ -82,3 +64,23 @@ patches: - patch_file: "patches/7.0.0-0007-fix-cmake.patch" patch_description: "use cci package" patch_type: "conan" + "2.0.0": + - patch_file: "patches/2.0.0-0003-fix-shared-msvc.patch" + patch_description: "make shared enabled in msvc" + patch_type: "official" + - patch_file: "patches/2.0.0-0005-gandiva-engine.patch" + patch_description: "fix grandiva compilation error" + patch_type: "official" + - patch_file: "patches/2.0.0-0008-fix-cmake.patch" + patch_description: "use cci package" + patch_type: "conan" + "1.0.0": + - patch_file: "patches/1.0.0-0003-fix-shared-msvc.patch" + patch_description: "make shared enabled in msvc" + patch_type: "official" + - patch_file: "patches/1.0.0-0005-fix-make12-namespace.patch" + patch_description: "fix ambiguous `make12` function between std and date" + patch_type: "official" + - patch_file: "patches/1.0.0-0006-fix-cmake.patch" + patch_description: "use cci package" + patch_type: "conan" diff --git a/ci/conan/all/conanfile.py b/ci/conan/all/conanfile.py index 178cd03da15..7e87f82e7e0 100644 --- a/ci/conan/all/conanfile.py +++ b/ci/conan/all/conanfile.py @@ -21,12 +21,12 @@ # SOFTWARE. from conan import ConanFile -from conan.errors import ConanInvalidConfiguration, ConanException +from conan.errors import ConanInvalidConfiguration +from conan.tools.microsoft import is_msvc_static_runtime, is_msvc, check_min_vs +from conan.tools.files import export_conandata_patches, apply_conandata_patches, get, copy, rmdir from conan.tools.build import check_min_cppstd, cross_building -from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout -from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, rmdir -from conan.tools.microsoft import is_msvc, is_msvc_static_runtime from conan.tools.scm import Version +from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout import os import glob @@ -39,8 +39,7 @@ class ArrowConan(ConanFile): license = ("Apache-2.0",) url = "https://github.com/conan-io/conan-center-index" homepage = "https://arrow.apache.org/" - topics = ("memory", "gandiva", "parquet", "skyhook", "acero", "hdfs", "csv", "cuda", "gcs", "json", "hive", "s3", "grpc") - package_type = "library" + topics = ("memory", "gandiva", "parquet", "skyhook", "plasma", "hdfs", "csv", "cuda", "gcs", "json", "hive", "s3", "grpc") settings = "os", "arch", "compiler", "build_type" options = { "shared": [True, False], @@ -49,15 +48,15 @@ class ArrowConan(ConanFile): "parquet": ["auto", True, False], "substrait": [True, False], "skyhook": [True, False], - "acero": [True, False], + "plasma": [True, False], "cli": [True, False], "compute": ["auto", True, False], + "acero": ["auto", True, False], "dataset_modules": ["auto", True, False], "deprecated": [True, False], "encryption": [True, False], "filesystem_layer": [True, False], "hdfs_bridgs": [True, False], - "plasma": [True, False, "deprecated"], "simd_level": [None, "default", "sse4_2", "avx2", "avx512", "neon", ], "runtime_simd_level": [None, "sse4_2", "avx2", "avx512", "max"], "with_backtrace": [True, False], @@ -71,9 +70,8 @@ class ArrowConan(ConanFile): "with_glog": ["auto", True, False], "with_grpc": ["auto", True, False], "with_jemalloc": ["auto", True, False], - "with_mimalloc": [True, False], + "with_mimalloc": ["auto", True, False], "with_json": [True, False], - "with_thrift": ["auto", True, False], "with_llvm": ["auto", True, False], "with_openssl": ["auto", True, False], "with_opentelemetry": [True, False], @@ -93,44 +91,43 @@ class ArrowConan(ConanFile): "shared": False, "fPIC": True, "gandiva": False, - "parquet": False, + "parquet": "auto", "skyhook": False, "substrait": False, - "acero": False, + "plasma": False, "cli": False, - "compute": False, - "dataset_modules": False, + "compute": "auto", + "acero": "auto", + "dataset_modules": "auto", "deprecated": True, "encryption": False, "filesystem_layer": False, "hdfs_bridgs": False, - "plasma": "deprecated", "simd_level": "default", "runtime_simd_level": "max", "with_backtrace": False, - "with_boost": False, + "with_boost": "auto", "with_brotli": False, "with_bz2": False, "with_csv": False, "with_cuda": False, - "with_flight_rpc": False, + "with_flight_rpc": "auto", "with_flight_sql": False, "with_gcs": False, - "with_gflags": False, - "with_jemalloc": False, + "with_gflags": "auto", + "with_jemalloc": "auto", "with_mimalloc": False, - "with_glog": False, - "with_grpc": False, + "with_glog": "auto", + "with_grpc": "auto", "with_json": False, - "with_thrift": False, - "with_llvm": False, - "with_openssl": False, + "with_llvm": "auto", + "with_openssl": "auto", "with_opentelemetry": False, "with_orc": False, - "with_protobuf": False, - "with_re2": False, + "with_protobuf": "auto", + "with_re2": "auto", "with_s3": False, - "with_utf8proc": False, + "with_utf8proc": "auto", "with_lz4": False, "with_snappy": False, "with_zlib": False, @@ -139,147 +136,283 @@ class ArrowConan(ConanFile): short_paths = True @property - def _min_cppstd(self): + def _minimum_cpp_standard(self): # arrow >= 10.0.0 requires C++17. # https://github.com/apache/arrow/pull/13991 - return "11" if Version(self.version) < "10.0.0" else "17" + return 11 if Version(self.version) < "10.0.0" else 17 @property def _compilers_minimum_version(self): return { - "11": { - "clang": "3.9", - }, - "17": { - "gcc": "8", - "clang": "7", - "apple-clang": "10", - "Visual Studio": "15", - "msvc": "191", - }, - }.get(self._min_cppstd, {}) + "gcc": "8", + "clang": "7", + "apple-clang": "10", + } def export_sources(self): export_conandata_patches(self) - copy(self, "conan_cmake_project_include.cmake", self.recipe_folder, os.path.join(self.export_sources_folder, "src")) def config_options(self): if self.settings.os == "Windows": del self.options.fPIC + if Version(self.version) < "2.0.0": + del self.options.simd_level + del self.options.runtime_simd_level + elif Version(self.version) < "6.0.0": + self.options.simd_level = "sse4_2" + if Version(self.version) < "6.0.0": + del self.options.with_gcs + if Version(self.version) < "7.0.0": + del self.options.skyhook + del self.options.with_flight_sql + del self.options.with_opentelemetry if Version(self.version) < "8.0.0": del self.options.substrait - if is_msvc(self): - self.options.with_boost = True def configure(self): if self.options.shared: self.options.rm_safe("fPIC") + def validate(self): + if self.info.settings.compiler.cppstd: + check_min_cppstd(self, self._minimum_cpp_standard) + + if self._minimum_cpp_standard == 11: + if self.info.settings.compiler == "clang" and self.info.settings.compiler.version <= Version("3.9"): + raise ConanInvalidConfiguration("This recipe does not support this compiler version") + else: + check_min_vs(self, 191) + if not is_msvc(self): + minimum_version = self._compilers_minimum_version.get(str(self.info.settings.compiler), False) + if minimum_version and Version(self.info.settings.compiler.version) < minimum_version: + raise ConanInvalidConfiguration( + f"{self.ref} requires C++{self._minimum_cpp_standard}, which your compiler does not support." + ) + + if self.options.shared: + del self.options.fPIC + if self.options.compute == False and not self._compute(True): + raise ConanInvalidConfiguration("compute options is required (or choose auto)") + if self.options.acero == False and not self._acero(True): + raise ConanInvalidConfiguration("acero options is required (or choose auto)") + if self.options.parquet == False and self._parquet(True): + raise ConanInvalidConfiguration("parquet options is required (or choose auto)") + if self.options.dataset_modules == False and self._dataset_modules(True): + raise ConanInvalidConfiguration("dataset_modules options is required (or choose auto)") + if self.options.get_safe("skyhook", False): + raise ConanInvalidConfiguration("CCI has no librados recipe (yet)") + if self.options.with_jemalloc == False and self._with_jemalloc(True): + raise ConanInvalidConfiguration("with_jemalloc option is required (or choose auto)") + if self.options.with_re2 == False and self._with_re2(True): + raise ConanInvalidConfiguration("with_re2 option is required (or choose auto)") + if self.options.with_protobuf == False and self._with_protobuf(True): + raise ConanInvalidConfiguration("with_protobuf option is required (or choose auto)") + if self.options.with_gflags == False and self._with_gflags(True): + raise ConanInvalidConfiguration("with_gflags options is required (or choose auto)") + if self.options.with_flight_rpc == False and self._with_flight_rpc(True): + raise ConanInvalidConfiguration("with_flight_rpc options is required (or choose auto)") + if self.options.with_grpc == False and self._with_grpc(True): + raise ConanInvalidConfiguration("with_grpc options is required (or choose auto)") + if self.options.with_boost == False and self._with_boost(True): + raise ConanInvalidConfiguration("with_boost options is required (or choose auto)") + if self.options.with_openssl == False and self._with_openssl(True): + raise ConanInvalidConfiguration("with_openssl options is required (or choose auto)") + if self.options.with_llvm == False and self._with_llvm(True): + raise ConanInvalidConfiguration("with_llvm options is required (or choose auto)") + if self.options.with_cuda: + raise ConanInvalidConfiguration("CCI has no cuda recipe (yet)") + if self.options.with_orc: + raise ConanInvalidConfiguration("CCI has no orc recipe (yet)") + if self.options.with_s3 and not self.options["aws-sdk-cpp"].config: + raise ConanInvalidConfiguration("arrow:with_s3 requires aws-sdk-cpp:config is True.") + + if self.options.shared and self._with_jemalloc(): + if self.options["jemalloc"].enable_cxx: + raise ConanInvalidConfiguration("jemmalloc.enable_cxx of a static jemalloc must be disabled") + + if Version(self.version) < "6.0.0" and self.options.get_safe("simd_level") == "default": + raise ConanInvalidConfiguration(f"In {self.ref}, simd_level options is not supported `default` value.") + def layout(self): cmake_layout(self, src_folder="src") - def _requires_rapidjson(self): - return self.options.with_json or self.options.encryption + def _compute(self, required=False): + if required or self.options.compute == "auto": + return bool(self._parquet()) or bool(self._acero()) + else: + return bool(self.options.compute) + + def _acero(self, required=False): + if required or self.options.acero == "auto": + return bool(self._dataset_modules()) + else: + return bool(self.options.acero) + + def _parquet(self, required=False): + if required or self.options.parquet == "auto": + return bool(self.options.get_safe("substrait", False)) + else: + return bool(self.options.parquet) + + def _plasma(self, required=False): + if Version(self.version) >= "12.0.0": + return False + else: + return required or self.options.plasma + + def _dataset_modules(self, required=False): + if required or self.options.dataset_modules == "auto": + return bool(self.options.get_safe("substrait", False)) + else: + return bool(self.options.dataset_modules) + + def _with_jemalloc(self, required=False): + if required or self.options.with_jemalloc == "auto": + return bool("BSD" in str(self.settings.os)) + else: + return bool(self.options.with_jemalloc) + + def _with_re2(self, required=False): + if required or self.options.with_re2 == "auto": + if self.options.gandiva or self.options.parquet: + return True + if Version(self) >= "7.0.0" and (self._compute() or self._dataset_modules()): + return True + return False + else: + return bool(self.options.with_re2) + + def _with_protobuf(self, required=False): + if required or self.options.with_protobuf == "auto": + return bool(self.options.gandiva or self._with_flight_rpc() or self.options.with_orc or self.options.get_safe("substrait", False)) + else: + return bool(self.options.with_protobuf) + + def _with_flight_rpc(self, required=False): + if required or self.options.with_flight_rpc == "auto": + return bool(self.options.get_safe("with_flight_sql", False)) + else: + return bool(self.options.with_flight_rpc) + + def _with_gflags(self, required=False): + if required or self.options.with_gflags == "auto": + return bool(self._plasma() or self._with_glog() or self._with_grpc()) + else: + return bool(self.options.with_gflags) + + def _with_glog(self, required=False): + if required or self.options.with_glog == "auto": + return False + else: + return bool(self.options.with_glog) + + def _with_grpc(self, required=False): + if required or self.options.with_grpc == "auto": + return self._with_flight_rpc() + else: + return bool(self.options.with_grpc) + + def _with_boost(self, required=False): + if required or self.options.with_boost == "auto": + if self.options.gandiva: + return True + version = Version(self.version) + if version.major == "1": + if self._parquet() and self.settings.compiler == "gcc" and self.settings.compiler.version < Version("4.9"): + return True + elif version.major >= "2": + if is_msvc(self): + return True + return False + else: + return bool(self.options.with_boost) + + def _with_thrift(self, required=False): + # No self.options.with_thrift exists + return bool(required or self._parquet()) + + def _with_utf8proc(self, required=False): + if required or self.options.with_utf8proc == "auto": + return bool(self._compute() or self.options.gandiva) + else: + return bool(self.options.with_utf8proc) + + def _with_llvm(self, required=False): + if required or self.options.with_llvm == "auto": + return bool(self.options.gandiva) + else: + return bool(self.options.with_llvm) + + def _with_openssl(self, required=False): + if required or self.options.with_openssl == "auto": + return bool(self.options.encryption or self._with_flight_rpc() or self.options.with_s3) + else: + return bool(self.options.with_openssl) + + def _with_rapidjson(self): + if self.options.with_json: + return True + if Version(self.version) >= "7.0.0" and self.options.encryption: + return True + return False def requirements(self): - if self.options.with_thrift: + if self._with_thrift(): + self.requires("zlib/1.2.13") self.requires("thrift/0.17.0") - if self.options.with_protobuf: - self.requires("protobuf/3.21.9") - if self.options.with_jemalloc: + if self._with_protobuf(): + self.requires("protobuf/3.21.4") + if self._with_jemalloc(): self.requires("jemalloc/5.3.0") if self.options.with_mimalloc: self.requires("mimalloc/1.7.6") - if self.options.with_boost: - self.requires("boost/1.84.0") - if self.options.with_gflags: + if self._with_boost(): + self.requires("boost/1.80.0") + if self._with_gflags(): self.requires("gflags/2.2.2") - if self.options.with_glog: + if self._with_glog(): self.requires("glog/0.6.0") if self.options.get_safe("with_gcs"): self.requires("google-cloud-cpp/1.40.1") - if self.options.with_grpc: + if self._with_grpc(): self.requires("grpc/1.50.0") - if self._requires_rapidjson(): + if self._with_rapidjson(): self.requires("rapidjson/1.1.0") - if self.options.with_llvm: + if self._with_llvm(): self.requires("llvm-core/13.0.0") - if self.options.with_openssl: + if self._with_openssl(): # aws-sdk-cpp requires openssl/1.1.1. it uses deprecated functions in openssl/3.0.0 if self.options.with_s3: - self.requires("openssl/1.1.1w") + self.requires("openssl/1.1.1s") else: - self.requires("openssl/[>=1.1 <4]") + self.requires("openssl/1.1.1s") if self.options.get_safe("with_opentelemetry"): self.requires("opentelemetry-cpp/1.7.0") if self.options.with_s3: self.requires("aws-sdk-cpp/1.9.234") if self.options.with_brotli: - self.requires("brotli/1.1.0") + self.requires("brotli/1.0.9") if self.options.with_bz2: self.requires("bzip2/1.0.8") if self.options.with_lz4: self.requires("lz4/1.9.4") if self.options.with_snappy: self.requires("snappy/1.1.9") - if self.options.get_safe("simd_level") != None or \ + if Version(self.version) >= "6.0.0" and \ + self.options.get_safe("simd_level") != None or \ self.options.get_safe("runtime_simd_level") != None: self.requires("xsimd/9.0.1") if self.options.with_zlib: - self.requires("zlib/[>=1.2.11 <2]") + self.requires("zlib/1.2.13") if self.options.with_zstd: - self.requires("zstd/1.5.5") - if self.options.with_re2: - self.requires("re2/20230301") - if self.options.with_utf8proc: + self.requires("zstd/1.5.2") + if self._with_re2(): + self.requires("re2/20220601") + if self._with_utf8proc(): self.requires("utf8proc/2.8.0") if self.options.with_backtrace: self.requires("libbacktrace/cci.20210118") - def validate(self): - # Do not allow options with 'auto' value - # TODO: Remove "auto" from the possible values for these options - auto_options = [option for option, value in self.options.items() if value == "auto"] - if auto_options: - raise ConanException("Options with value 'auto' are deprecated. Please set them true/false or use its default value." - f" Please change the following options: {auto_options}") - - # From https://github.com/conan-io/conan-center-index/pull/23163#issuecomment-2039808851 - if self.options.gandiva: - if not self.options.with_re2: - raise ConanException("'with_re2' option should be True when'gandiva=True'") - if not self.options.with_boost: - raise ConanException("'with_boost' option should be True when'gandiva=True'") - if not self.options.with_utf8proc: - raise ConanException("'with_utf8proc' option should be True when'gandiva=True'") - - if self.settings.compiler.get_safe("cppstd"): - check_min_cppstd(self, self._min_cppstd) - - minimum_version = self._compilers_minimum_version.get(str(self.settings.compiler), False) - if minimum_version and Version(self.settings.compiler.version) < minimum_version: - raise ConanInvalidConfiguration( - f"{self.ref} requires C++{self._min_cppstd}, which your compiler does not support." - ) - - if self.options.get_safe("skyhook", False): - raise ConanInvalidConfiguration("CCI has no librados recipe (yet)") - if self.options.with_cuda: - raise ConanInvalidConfiguration("CCI has no cuda recipe (yet)") - if self.options.with_orc: - raise ConanInvalidConfiguration("CCI has no orc recipe (yet)") - if self.options.with_s3 and not self.dependencies["aws-sdk-cpp"].options.config: - raise ConanInvalidConfiguration("arrow:with_s3 requires aws-sdk-cpp:config is True.") - - if self.options.shared and self.options.with_jemalloc: - if self.dependencies["jemalloc"].options.enable_cxx: - raise ConanInvalidConfiguration("jemmalloc.enable_cxx of a static jemalloc must be disabled") - - - def build_requirements(self): - if Version(self.version) >= "13.0.0": - self.tool_requires("cmake/[>=3.16 <4]") - def source(self): # START # This block should be removed when we update upstream: @@ -302,15 +435,17 @@ def source(self): return # END get(self, **self.conan_data["sources"][self.version], - filename=f"apache-arrow-{self.version}.tar.gz", strip_root=True) + filename=f"apache-arrow-{self.version}.tar.gz", destination=self.source_folder, strip_root=True) def generate(self): + # BUILD_SHARED_LIBS and POSITION_INDEPENDENT_CODE are automatically parsed when self.options.shared or self.options.fPIC exist tc = CMakeToolchain(self) if cross_building(self): cmake_system_processor = { "armv8": "aarch64", "armv8.3": "aarch64", }.get(str(self.settings.arch), str(self.settings.arch)) + tc.variables["CMAKE_SYSTEM_PROCESSOR"] = cmake_system_processor if cmake_system_processor == "aarch64": tc.variables["ARROW_CPU_FLAG"] = "armv8" if is_msvc(self): @@ -318,10 +453,12 @@ def generate(self): tc.variables["ARROW_DEPENDENCY_SOURCE"] = "SYSTEM" tc.variables["ARROW_PACKAGE_KIND"] = "conan" # See https://github.com/conan-io/conan-center-index/pull/14903/files#r1057938314 for details tc.variables["ARROW_GANDIVA"] = bool(self.options.gandiva) - tc.variables["ARROW_PARQUET"] = self.options.parquet + tc.variables["ARROW_PARQUET"] = self._parquet() tc.variables["ARROW_SUBSTRAIT"] = bool(self.options.get_safe("substrait", False)) - tc.variables["ARROW_ACERO"] = bool(self.options.acero) - tc.variables["ARROW_DATASET"] = self.options.dataset_modules + if Version(self.version) < "12.0.0": + tc.variables["ARROW_PLASMA"] = bool(self._plasma()) + tc.variables["ARROW_ACERO"] = self._acero() + tc.variables["ARROW_DATASET"] = self._dataset_modules() tc.variables["ARROW_FILESYSTEM"] = bool(self.options.filesystem_layer) tc.variables["PARQUET_REQUIRE_ENCRYPTION"] = bool(self.options.encryption) tc.variables["ARROW_HDFS"] = bool(self.options.hdfs_bridgs) @@ -329,12 +466,12 @@ def generate(self): tc.variables["ARROW_BUILD_SHARED"] = bool(self.options.shared) tc.variables["ARROW_BUILD_STATIC"] = not bool(self.options.shared) tc.variables["ARROW_NO_DEPRECATED_API"] = not bool(self.options.deprecated) - tc.variables["ARROW_FLIGHT"] = self.options.with_flight_rpc + tc.variables["ARROW_FLIGHT"] = self._with_flight_rpc() tc.variables["ARROW_FLIGHT_SQL"] = bool(self.options.get_safe("with_flight_sql", False)) - tc.variables["ARROW_COMPUTE"] = bool(self.options.compute) + tc.variables["ARROW_COMPUTE"] = self._compute() tc.variables["ARROW_CSV"] = bool(self.options.with_csv) tc.variables["ARROW_CUDA"] = bool(self.options.with_cuda) - tc.variables["ARROW_JEMALLOC"] = self.options.with_jemalloc + tc.variables["ARROW_JEMALLOC"] = self._with_jemalloc() tc.variables["jemalloc_SOURCE"] = "SYSTEM" tc.variables["ARROW_MIMALLOC"] = bool(self.options.with_mimalloc) tc.variables["ARROW_JSON"] = bool(self.options.with_json) @@ -342,58 +479,61 @@ def generate(self): tc.variables["ARROW_GCS"] = bool(self.options.get_safe("with_gcs", False)) tc.variables["BOOST_SOURCE"] = "SYSTEM" tc.variables["Protobuf_SOURCE"] = "SYSTEM" - if self.options.with_protobuf: - tc.variables["ARROW_PROTOBUF_USE_SHARED"] = bool(self.dependencies["protobuf"].options.shared) + if self._with_protobuf(): + tc.variables["ARROW_PROTOBUF_USE_SHARED"] = bool(self.options["protobuf"].shared) tc.variables["gRPC_SOURCE"] = "SYSTEM" - if self.options.with_grpc: - tc.variables["ARROW_GRPC_USE_SHARED"] = bool(self.dependencies["grpc"].options.shared) + if self._with_grpc(): + tc.variables["ARROW_GRPC_USE_SHARED"] = bool(self.options["grpc"].shared) - tc.variables["ARROW_USE_GLOG"] = self.options.with_glog + tc.variables["ARROW_USE_GLOG"] = self._with_glog() tc.variables["GLOG_SOURCE"] = "SYSTEM" tc.variables["ARROW_WITH_BACKTRACE"] = bool(self.options.with_backtrace) tc.variables["ARROW_WITH_BROTLI"] = bool(self.options.with_brotli) tc.variables["brotli_SOURCE"] = "SYSTEM" if self.options.with_brotli: - tc.variables["ARROW_BROTLI_USE_SHARED"] = bool(self.dependencies["brotli"].options.shared) + tc.variables["ARROW_BROTLI_USE_SHARED"] = bool(self.options["brotli"].shared) tc.variables["gflags_SOURCE"] = "SYSTEM" - if self.options.with_gflags: - tc.variables["ARROW_GFLAGS_USE_SHARED"] = bool(self.dependencies["gflags"].options.shared) + if self._with_gflags(): + tc.variables["ARROW_GFLAGS_USE_SHARED"] = bool(self.options["gflags"].shared) tc.variables["ARROW_WITH_BZ2"] = bool(self.options.with_bz2) tc.variables["BZip2_SOURCE"] = "SYSTEM" if self.options.with_bz2: - tc.variables["ARROW_BZ2_USE_SHARED"] = bool(self.dependencies["bzip2"].options.shared) + tc.variables["ARROW_BZ2_USE_SHARED"] = bool(self.options["bzip2"].shared) tc.variables["ARROW_WITH_LZ4"] = bool(self.options.with_lz4) tc.variables["lz4_SOURCE"] = "SYSTEM" if self.options.with_lz4: - tc.variables["ARROW_LZ4_USE_SHARED"] = bool(self.dependencies["lz4"].options.shared) + tc.variables["ARROW_LZ4_USE_SHARED"] = bool(self.options["lz4"].shared) tc.variables["ARROW_WITH_SNAPPY"] = bool(self.options.with_snappy) tc.variables["RapidJSON_SOURCE"] = "SYSTEM" tc.variables["Snappy_SOURCE"] = "SYSTEM" if self.options.with_snappy: - tc.variables["ARROW_SNAPPY_USE_SHARED"] = bool(self.dependencies["snappy"].options.shared) + tc.variables["ARROW_SNAPPY_USE_SHARED"] = bool(self.options["snappy"].shared) tc.variables["ARROW_WITH_ZLIB"] = bool(self.options.with_zlib) tc.variables["re2_SOURCE"] = "SYSTEM" tc.variables["ZLIB_SOURCE"] = "SYSTEM" tc.variables["xsimd_SOURCE"] = "SYSTEM" tc.variables["ARROW_WITH_ZSTD"] = bool(self.options.with_zstd) - tc.variables["zstd_SOURCE"] = "SYSTEM" - tc.variables["ARROW_SIMD_LEVEL"] = str(self.options.simd_level).upper() - tc.variables["ARROW_RUNTIME_SIMD_LEVEL"] = str(self.options.runtime_simd_level).upper() + if Version(self.version) >= "2.0": + tc.variables["zstd_SOURCE"] = "SYSTEM" + tc.variables["ARROW_SIMD_LEVEL"] = str(self.options.simd_level).upper() + tc.variables["ARROW_RUNTIME_SIMD_LEVEL"] = str(self.options.runtime_simd_level).upper() + else: + tc.variables["ZSTD_SOURCE"] = "SYSTEM" if self.options.with_zstd: - tc.variables["ARROW_ZSTD_USE_SHARED"] = bool(self.dependencies["zstd"].options.shared) + tc.variables["ARROW_ZSTD_USE_SHARED"] = bool(self.options["zstd"].shared) tc.variables["ORC_SOURCE"] = "SYSTEM" - tc.variables["ARROW_WITH_THRIFT"] = bool(self.options.with_thrift) + tc.variables["ARROW_WITH_THRIFT"] = self._with_thrift() tc.variables["Thrift_SOURCE"] = "SYSTEM" - if self.options.with_thrift: - tc.variables["THRIFT_VERSION"] = bool(self.dependencies["thrift"].ref.version) # a recent thrift does not require boost - tc.variables["ARROW_THRIFT_USE_SHARED"] = bool(self.dependencies["thrift"].options.shared) - tc.variables["ARROW_USE_OPENSSL"] = self.options.with_openssl - if self.options.with_openssl: - tc.variables["OPENSSL_ROOT_DIR"] = self.dependencies["openssl"].package_folder.replace("\\", "/") - tc.variables["ARROW_OPENSSL_USE_SHARED"] = bool(self.dependencies["openssl"].options.shared) - if self.options.with_boost: + if self._with_thrift(): + tc.variables["THRIFT_VERSION"] = bool(self.deps_cpp_info["thrift"].version) # a recent thrift does not require boost + tc.variables["ARROW_THRIFT_USE_SHARED"] = bool(self.options["thrift"].shared) + tc.variables["ARROW_USE_OPENSSL"] = self._with_openssl() + if self._with_openssl(): + tc.variables["OPENSSL_ROOT_DIR"] = self.deps_cpp_info["openssl"].rootpath.replace("\\", "/") + tc.variables["ARROW_OPENSSL_USE_SHARED"] = bool(self.options["openssl"].shared) + if self._with_boost(): tc.variables["ARROW_USE_BOOST"] = True - tc.variables["ARROW_BOOST_USE_SHARED"] = bool(self.dependencies["boost"].options.shared) + tc.variables["ARROW_BOOST_USE_SHARED"] = bool(self.options["boost"].shared) tc.variables["ARROW_S3"] = bool(self.options.with_s3) tc.variables["AWSSDK_SOURCE"] = "SYSTEM" tc.variables["ARROW_BUILD_UTILITIES"] = bool(self.options.cli) @@ -404,18 +544,16 @@ def generate(self): tc.variables["ARROW_ENABLE_TIMING_TESTS"] = False tc.variables["ARROW_BUILD_BENCHMARKS"] = False tc.variables["LLVM_SOURCE"] = "SYSTEM" - tc.variables["ARROW_WITH_UTF8PROC"] = self.options.with_utf8proc - tc.variables["ARROW_BOOST_REQUIRED"] = self.options.with_boost + tc.variables["ARROW_WITH_UTF8PROC"] = self._with_utf8proc() + tc.variables["ARROW_BOOST_REQUIRED"] = self._with_boost() tc.variables["utf8proc_SOURCE"] = "SYSTEM" - if self.options.with_utf8proc: - tc.variables["ARROW_UTF8PROC_USE_SHARED"] = bool(self.dependencies["utf8proc"].options.shared) + if self._with_utf8proc(): + tc.variables["ARROW_UTF8PROC_USE_SHARED"] = bool(self.options["utf8proc"].shared) tc.variables["BUILD_WARNING_LEVEL"] = "PRODUCTION" if is_msvc(self): - tc.variables["ARROW_USE_STATIC_CRT"] = is_msvc_static_runtime(self) - if self.options.with_llvm: - tc.variables["LLVM_DIR"] = self.dependencies["llvm-core"].package_folder.replace("\\", "/") - - tc.cache_variables["CMAKE_PROJECT_arrow_INCLUDE"] = os.path.join(self.source_folder, "conan_cmake_project_include.cmake") + tc.variables["ARROW_USE_STATIC_CRT"] = "MT" in str(self.settings.compiler.runtime) + if self._with_llvm(): + tc.variables["LLVM_DIR"] = self.deps_cpp_info["llvm-core"].rootpath.replace("\\", "/") tc.generate() deps = CMakeDeps(self) @@ -423,11 +561,10 @@ def generate(self): def _patch_sources(self): apply_conandata_patches(self) - if Version(self.version) < "10.0.0": + if "7.0.0" <= Version(self.version) < "10.0.0": for filename in glob.glob(os.path.join(self.source_folder, "cpp", "cmake_modules", "Find*.cmake")): if os.path.basename(filename) not in [ "FindArrow.cmake", - "FindArrowAcero.cmake", "FindArrowCUDA.cmake", "FindArrowDataset.cmake", "FindArrowFlight.cmake", @@ -439,6 +576,7 @@ def _patch_sources(self): "FindArrowTesting.cmake", "FindGandiva.cmake", "FindParquet.cmake", + "FindPlasma.cmake", ]: os.remove(filename) @@ -458,106 +596,129 @@ def package(self): rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) rmdir(self, os.path.join(self.package_folder, "share")) - def package_info(self): - # FIXME: fix CMake targets of components - - self.cpp_info.set_property("cmake_file_name", "Arrow") - - suffix = "_static" if is_msvc(self) and not self.options.shared else "" + def _lib_name(self, name): + if is_msvc(self) and not self.options.shared: + return "{}_static".format(name) + else: + return "{}".format(name) + + def package_id(self): + self.info.options.with_gflags = self._with_gflags() + self.info.options.with_protobuf = self._with_protobuf() + self.info.options.with_re2 = self._with_re2() + self.info.options.with_jemalloc = self._with_jemalloc() + self.info.options.with_openssl = self._with_openssl() + self.info.options.with_boost = self._with_boost() + self.info.options.with_glog = self._with_glog() + self.info.options.with_grpc = self._with_grpc() - self.cpp_info.components["libarrow"].set_property("pkg_config_name", "arrow") - self.cpp_info.components["libarrow"].libs = [f"arrow{suffix}"] + def package_info(self): + self.cpp_info.filenames["cmake_find_package"] = "Arrow" + self.cpp_info.filenames["cmake_find_package_multi"] = "Arrow" + self.cpp_info.components["libarrow"].libs = [self._lib_name("arrow")] + self.cpp_info.components["libarrow"].names["cmake_find_package"] = "arrow" + self.cpp_info.components["libarrow"].names["cmake_find_package_multi"] = "arrow" + self.cpp_info.components["libarrow"].names["pkg_config"] = "arrow" if not self.options.shared: self.cpp_info.components["libarrow"].defines = ["ARROW_STATIC"] if self.settings.os in ["Linux", "FreeBSD"]: self.cpp_info.components["libarrow"].system_libs = ["pthread", "m", "dl", "rt"] - if self.options.parquet: - self.cpp_info.components["libparquet"].set_property("pkg_config_name", "parquet") - self.cpp_info.components["libparquet"].libs = [f"parquet{suffix}"] + if self._parquet(): + self.cpp_info.components["libparquet"].libs = [self._lib_name("parquet")] + self.cpp_info.components["libparquet"].names["cmake_find_package"] = "parquet" + self.cpp_info.components["libparquet"].names["cmake_find_package_multi"] = "parquet" + self.cpp_info.components["libparquet"].names["pkg_config"] = "parquet" self.cpp_info.components["libparquet"].requires = ["libarrow"] if not self.options.shared: self.cpp_info.components["libparquet"].defines = ["PARQUET_STATIC"] - if self.options.get_safe("substrait"): - self.cpp_info.components["libarrow_substrait"].set_property("pkg_config_name", "arrow_substrait") - self.cpp_info.components["libarrow_substrait"].libs = [f"arrow_substrait{suffix}"] - self.cpp_info.components["libarrow_substrait"].requires = ["libparquet", "dataset"] - - # Plasma was deprecated in Arrow 12.0.0 - del self.options.plasma + if self.options.get_safe("substrait", False): + self.cpp_info.components["libarrow_substrait"].libs = [self._lib_name("arrow_substrait")] + self.cpp_info.components["libarrow_substrait"].names["cmake_find_package"] = "arrow_substrait" + self.cpp_info.components["libarrow_substrait"].names["cmake_find_package_multi"] = "arrow_substrait" + self.cpp_info.components["libarrow_substrait"].names["pkg_config"] = "arrow_substrait" + self.cpp_info.components["libarrow_substrait"].requires = ["libparquet", "dataset", "acero"] - if self.options.acero: - self.cpp_info.components["libacero"].libs = [f"arrow_acero{suffix}"] - self.cpp_info.components["libacero"].names["cmake_find_package"] = "acero" - self.cpp_info.components["libacero"].names["cmake_find_package_multi"] = "acero" - self.cpp_info.components["libacero"].names["pkg_config"] = "acero" - self.cpp_info.components["libacero"].requires = ["libarrow"] + if self._plasma(): + self.cpp_info.components["libplasma"].libs = [self._lib_name("plasma")] + self.cpp_info.components["libplasma"].names["cmake_find_package"] = "plasma" + self.cpp_info.components["libplasma"].names["cmake_find_package_multi"] = "plasma" + self.cpp_info.components["libplasma"].names["pkg_config"] = "plasma" + self.cpp_info.components["libplasma"].requires = ["libarrow"] if self.options.gandiva: - self.cpp_info.components["libgandiva"].set_property("pkg_config_name", "gandiva") - self.cpp_info.components["libgandiva"].libs = [f"gandiva{suffix}"] + self.cpp_info.components["libgandiva"].libs = [self._lib_name("gandiva")] + self.cpp_info.components["libgandiva"].names["cmake_find_package"] = "gandiva" + self.cpp_info.components["libgandiva"].names["cmake_find_package_multi"] = "gandiva" + self.cpp_info.components["libgandiva"].names["pkg_config"] = "gandiva" self.cpp_info.components["libgandiva"].requires = ["libarrow"] if not self.options.shared: self.cpp_info.components["libgandiva"].defines = ["GANDIVA_STATIC"] - if self.options.with_flight_rpc: - self.cpp_info.components["libarrow_flight"].set_property("pkg_config_name", "flight_rpc") - self.cpp_info.components["libarrow_flight"].libs = [f"arrow_flight{suffix}"] + if self._with_flight_rpc(): + self.cpp_info.components["libarrow_flight"].libs = [self._lib_name("arrow_flight")] + self.cpp_info.components["libarrow_flight"].names["cmake_find_package"] = "flight_rpc" + self.cpp_info.components["libarrow_flight"].names["cmake_find_package_multi"] = "flight_rpc" + self.cpp_info.components["libarrow_flight"].names["pkg_config"] = "flight_rpc" self.cpp_info.components["libarrow_flight"].requires = ["libarrow"] if self.options.get_safe("with_flight_sql"): - self.cpp_info.components["libarrow_flight_sql"].set_property("pkg_config_name", "flight_sql") - self.cpp_info.components["libarrow_flight_sql"].libs = [f"arrow_flight_sql{suffix}"] + self.cpp_info.components["libarrow_flight_sql"].libs = [self._lib_name("arrow_flight_sql")] + self.cpp_info.components["libarrow_flight_sql"].names["cmake_find_package"] = "flight_sql" + self.cpp_info.components["libarrow_flight_sql"].names["cmake_find_package_multi"] = "flight_sql" + self.cpp_info.components["libarrow_flight_sql"].names["pkg_config"] = "flight_sql" self.cpp_info.components["libarrow_flight_sql"].requires = ["libarrow", "libarrow_flight"] - if self.options.dataset_modules: + if self._acero(): + self.cpp_info.components["acero"].libs = ["arrow_acero"] + + if self._dataset_modules(): self.cpp_info.components["dataset"].libs = ["arrow_dataset"] - if self.options.parquet: - self.cpp_info.components["dataset"].requires = ["libparquet"] - if self.options.cli and (self.options.with_cuda or self.options.with_flight_rpc or self.options.parquet): + if (self.options.cli and (self.options.with_cuda or self._with_flight_rpc() or self._parquet())) or self._plasma(): binpath = os.path.join(self.package_folder, "bin") self.output.info(f"Appending PATH env var: {binpath}") self.env_info.PATH.append(binpath) - if self.options.with_boost: + if self._with_boost(): if self.options.gandiva: # FIXME: only filesystem component is used self.cpp_info.components["libgandiva"].requires.append("boost::boost") - if self.options.parquet and self.settings.compiler == "gcc" and self.settings.compiler.version < Version("4.9"): + if self._parquet() and self.settings.compiler == "gcc" and self.settings.compiler.version < Version("4.9"): self.cpp_info.components["libparquet"].requires.append("boost::boost") - # FIXME: only headers components is used - self.cpp_info.components["libarrow"].requires.append("boost::boost") - if self.options.with_openssl: + if Version(self.version) >= "2.0": + # FIXME: only headers components is used + self.cpp_info.components["libarrow"].requires.append("boost::boost") + if self._with_openssl(): self.cpp_info.components["libarrow"].requires.append("openssl::openssl") - if self.options.with_gflags: + if self._with_gflags(): self.cpp_info.components["libarrow"].requires.append("gflags::gflags") - if self.options.with_glog: + if self._with_glog(): self.cpp_info.components["libarrow"].requires.append("glog::glog") - if self.options.with_jemalloc: + if self._with_jemalloc(): self.cpp_info.components["libarrow"].requires.append("jemalloc::jemalloc") if self.options.with_mimalloc: self.cpp_info.components["libarrow"].requires.append("mimalloc::mimalloc") - if self.options.with_re2: + if self._with_re2(): if self.options.gandiva: self.cpp_info.components["libgandiva"].requires.append("re2::re2") - if self.options.parquet: + if self._parquet(): self.cpp_info.components["libparquet"].requires.append("re2::re2") self.cpp_info.components["libarrow"].requires.append("re2::re2") - if self.options.with_llvm: + if self._with_llvm(): self.cpp_info.components["libgandiva"].requires.append("llvm-core::llvm-core") - if self.options.with_protobuf: + if self._with_protobuf(): self.cpp_info.components["libarrow"].requires.append("protobuf::protobuf") - if self.options.with_utf8proc: + if self._with_utf8proc(): self.cpp_info.components["libarrow"].requires.append("utf8proc::utf8proc") - if self.options.with_thrift: + if self._with_thrift(): self.cpp_info.components["libarrow"].requires.append("thrift::thrift") if self.options.with_backtrace: self.cpp_info.components["libarrow"].requires.append("libbacktrace::libbacktrace") if self.options.with_cuda: self.cpp_info.components["libarrow"].requires.append("cuda::cuda") - if self._requires_rapidjson(): + if self._with_rapidjson(): self.cpp_info.components["libarrow"].requires.append("rapidjson::rapidjson") if self.options.with_s3: self.cpp_info.components["libarrow"].requires.append("aws-sdk-cpp::s3") @@ -581,32 +742,9 @@ def package_info(self): self.cpp_info.components["libarrow"].requires.append("zlib::zlib") if self.options.with_zstd: self.cpp_info.components["libarrow"].requires.append("zstd::zstd") - if self.options.with_boost: + if self._with_boost(): self.cpp_info.components["libarrow"].requires.append("boost::boost") - if self.options.with_grpc: + if self._with_grpc(): self.cpp_info.components["libarrow"].requires.append("grpc::grpc") - if self.options.with_flight_rpc: + if self._with_flight_rpc(): self.cpp_info.components["libarrow_flight"].requires.append("protobuf::protobuf") - - # TODO: to remove in conan v2 - self.cpp_info.filenames["cmake_find_package"] = "Arrow" - self.cpp_info.filenames["cmake_find_package_multi"] = "Arrow" - self.cpp_info.components["libarrow"].names["cmake_find_package"] = "arrow" - self.cpp_info.components["libarrow"].names["cmake_find_package_multi"] = "arrow" - if self.options.parquet: - self.cpp_info.components["libparquet"].names["cmake_find_package"] = "parquet" - self.cpp_info.components["libparquet"].names["cmake_find_package_multi"] = "parquet" - if self.options.get_safe("substrait"): - self.cpp_info.components["libarrow_substrait"].names["cmake_find_package"] = "arrow_substrait" - self.cpp_info.components["libarrow_substrait"].names["cmake_find_package_multi"] = "arrow_substrait" - if self.options.gandiva: - self.cpp_info.components["libgandiva"].names["cmake_find_package"] = "gandiva" - self.cpp_info.components["libgandiva"].names["cmake_find_package_multi"] = "gandiva" - if self.options.with_flight_rpc: - self.cpp_info.components["libarrow_flight"].names["cmake_find_package"] = "flight_rpc" - self.cpp_info.components["libarrow_flight"].names["cmake_find_package_multi"] = "flight_rpc" - if self.options.get_safe("with_flight_sql"): - self.cpp_info.components["libarrow_flight_sql"].names["cmake_find_package"] = "flight_sql" - self.cpp_info.components["libarrow_flight_sql"].names["cmake_find_package_multi"] = "flight_sql" - if self.options.cli and (self.options.with_cuda or self.options.with_flight_rpc or self.options.parquet): - self.env_info.PATH.append(os.path.join(self.package_folder, "bin")) diff --git a/ci/conan/config.yml b/ci/conan/config.yml index 3fa90be6f66..be333447f34 100644 --- a/ci/conan/config.yml +++ b/ci/conan/config.yml @@ -21,22 +21,6 @@ # SOFTWARE. versions: - "15.0.0": - folder: all - "14.0.2": - folder: all - "14.0.1": - folder: all - "14.0.0": - folder: all - "13.0.0": - folder: all - "12.0.1": - folder: all - "12.0.0": - folder: all - "11.0.0": - folder: all "10.0.1": folder: all "10.0.0": @@ -47,3 +31,7 @@ versions: folder: all "7.0.0": folder: all + "2.0.0": + folder: all + "1.0.0": + folder: all diff --git a/ci/conda_env_archery.txt b/ci/conda_env_archery.txt index ace7a42acb0..40875e0a550 100644 --- a/ci/conda_env_archery.txt +++ b/ci/conda_env_archery.txt @@ -25,7 +25,7 @@ jira pygit2 pygithub ruamel.yaml -setuptools_scm +setuptools_scm<8.0.0 toolz # benchmark diff --git a/ci/conda_env_cpp.txt b/ci/conda_env_cpp.txt index f28a24cac8d..ef00f7cf475 100644 --- a/ci/conda_env_cpp.txt +++ b/ci/conda_env_cpp.txt @@ -16,17 +16,13 @@ # under the License. aws-sdk-cpp=1.11.68 -azure-core-cpp>=1.10.3 -azure-identity-cpp>=1.6.0 -azure-storage-blobs-cpp>=12.10.0 -azure-storage-common-cpp>=12.5.0 -azure-storage-files-datalake-cpp>=12.9.0 -benchmark>=1.6.0,!=1.8.4 +benchmark>=1.6.0 boost-cpp>=1.68.0 brotli bzip2 c-ares cmake +flatbuffers gflags glog gmock>=1.10.0 @@ -38,7 +34,6 @@ libutf8proc lz4-c make ninja -nodejs orc pkg-config python diff --git a/ci/conda_env_crossbow.txt b/ci/conda_env_crossbow.txt index 347294650ca..59b799720f1 100644 --- a/ci/conda_env_crossbow.txt +++ b/ci/conda_env_crossbow.txt @@ -21,5 +21,5 @@ jinja2 jira pygit2 ruamel.yaml -setuptools_scm +setuptools_scm<8.0.0 toolz diff --git a/ci/conda_env_python.txt b/ci/conda_env_python.txt index bf915493de3..59e2def1bf3 100644 --- a/ci/conda_env_python.txt +++ b/ci/conda_env_python.txt @@ -23,8 +23,8 @@ cloudpickle fsspec hypothesis numpy>=1.16.6 -pytest +pytest<8 pytest-faulthandler s3fs>=2023.10.0 -setuptools>=64 -setuptools_scm>=8 +setuptools +setuptools_scm<8.0.0 diff --git a/ci/conda_env_sphinx.txt b/ci/conda_env_sphinx.txt index 4665a32e24b..ed23b5bf164 100644 --- a/ci/conda_env_sphinx.txt +++ b/ci/conda_env_sphinx.txt @@ -19,20 +19,13 @@ breathe doxygen ipython -linkify-it-py -myst-parser numpydoc -pydata-sphinx-theme=0.14 +pydata-sphinx-theme=0.15.2 sphinx-autobuild sphinx-design sphinx-copybutton -sphinx-lint sphinxcontrib-jquery -sphinxcontrib-mermaid sphinx==6.2 # Requirement for doctest-cython -# Needs upper pin of 0.3.0, see: -# https://github.com/lgpage/pytest-cython/issues/67 -# With 0.3.* bug fix release, the pin can be removed -pytest-cython==0.2.2 +pytest-cython pandas diff --git a/ci/docker/alpine-linux-3.16-cpp.dockerfile b/ci/docker/alpine-linux-3.16-cpp.dockerfile index 72489c6eae1..8828e717a53 100644 --- a/ci/docker/alpine-linux-3.16-cpp.dockerfile +++ b/ci/docker/alpine-linux-3.16-cpp.dockerfile @@ -74,7 +74,6 @@ COPY ci/scripts/install_gcs_testbench.sh /arrow/ci/scripts/ RUN /arrow/ci/scripts/install_gcs_testbench.sh default ENV ARROW_ACERO=ON \ - ARROW_AZURE=OFF \ ARROW_BUILD_TESTS=ON \ ARROW_DATASET=ON \ ARROW_DEPENDENCY_SOURCE=SYSTEM \ diff --git a/ci/docker/centos-7-cpp.dockerfile b/ci/docker/centos-7-cpp.dockerfile index 1f30eed694e..8c1893cbbb2 100644 --- a/ci/docker/centos-7-cpp.dockerfile +++ b/ci/docker/centos-7-cpp.dockerfile @@ -17,25 +17,11 @@ FROM centos:centos7 -# Update mirrors to use vault.centos.org as CentOS 7 -# is EOL since 2024-06-30 -RUN sed -i \ - -e 's/^mirrorlist/#mirrorlist/' \ - -e 's/^#baseurl/baseurl/' \ - -e 's/mirror\.centos\.org/vault.centos.org/' \ - /etc/yum.repos.d/*.repo - # devtoolset is required for C++17 RUN \ yum install -y \ centos-release-scl \ epel-release && \ - sed -i \ - -e 's/^mirrorlist/#mirrorlist/' \ - -e 's/^#baseurl/baseurl/' \ - -e 's/^# baseurl/baseurl/' \ - -e 's/mirror\.centos\.org/vault.centos.org/' \ - /etc/yum.repos.d/CentOS-SCLo-scl*.repo && \ yum install -y \ cmake3 \ curl \ diff --git a/ci/docker/conda-cpp.dockerfile b/ci/docker/conda-cpp.dockerfile index dff1f222480..7a54dcc86f8 100644 --- a/ci/docker/conda-cpp.dockerfile +++ b/ci/docker/conda-cpp.dockerfile @@ -42,13 +42,6 @@ RUN mamba install -q -y \ valgrind && \ mamba clean --all -# Ensure npm, node and azurite are on path. npm and node are required to install azurite, which will then need to -# be on the path for the tests to run. -ENV PATH=/opt/conda/envs/arrow/bin:$PATH - -COPY ci/scripts/install_azurite.sh /arrow/ci/scripts/ -RUN /arrow/ci/scripts/install_azurite.sh - # We want to install the GCS testbench using the same Python binary that the Conda code will use. COPY ci/scripts/install_gcs_testbench.sh /arrow/ci/scripts RUN /arrow/ci/scripts/install_gcs_testbench.sh default @@ -57,7 +50,6 @@ COPY ci/scripts/install_sccache.sh /arrow/ci/scripts/ RUN /arrow/ci/scripts/install_sccache.sh unknown-linux-musl /usr/local/bin ENV ARROW_ACERO=ON \ - ARROW_AZURE=ON \ ARROW_BUILD_TESTS=ON \ ARROW_DATASET=ON \ ARROW_DEPENDENCY_SOURCE=CONDA \ diff --git a/ci/docker/conda-integration.dockerfile b/ci/docker/conda-integration.dockerfile index c602490d6b7..074021677d6 100644 --- a/ci/docker/conda-integration.dockerfile +++ b/ci/docker/conda-integration.dockerfile @@ -20,11 +20,11 @@ ARG arch=amd64 FROM ${repo}:${arch}-conda-cpp ARG arch=amd64 -ARG maven=3.8.7 +ARG maven=3.5 ARG node=16 ARG yarn=1.22 -ARG jdk=11 -ARG go=1.21.8 +ARG jdk=8 +ARG go=1.19.13 # Install Archery and integration dependencies COPY ci/conda_env_archery.txt /arrow/ci/ @@ -44,10 +44,8 @@ RUN mamba install -q -y \ # Install Rust with only the needed components # (rustfmt is needed for tonic-build to compile the protobuf definitions) -# GH-41637: Version pinned at 1.77 because the glibc for conda-cpp is currently too old RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --profile=minimal -y && \ - $HOME/.cargo/bin/rustup override set 1.77 && \ - $HOME/.cargo/bin/rustup toolchain install 1.77 && \ + $HOME/.cargo/bin/rustup toolchain install stable && \ $HOME/.cargo/bin/rustup component add rustfmt ENV GOROOT=/opt/go \ @@ -58,7 +56,7 @@ RUN wget -nv -O - https://dl.google.com/go/go${go}.linux-${arch}.tar.gz | tar -x ENV DOTNET_ROOT=/opt/dotnet \ PATH=/opt/dotnet:$PATH -RUN curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin -Channel 8.0 -InstallDir /opt/dotnet +RUN curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin -Channel 7.0 -InstallDir /opt/dotnet ENV ARROW_ACERO=OFF \ ARROW_AZURE=OFF \ diff --git a/ci/docker/conda-python-cpython-debug.dockerfile b/ci/docker/conda-python-cpython-debug.dockerfile deleted file mode 100644 index 87bdcafe409..00000000000 --- a/ci/docker/conda-python-cpython-debug.dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -ARG repo -ARG arch -ARG python=3.8 -FROM ${repo}:${arch}-conda-python-${python} - -# (Docker oddity: ARG needs to be repeated after FROM) -ARG python=3.8 -RUN mamba install -y "conda-forge/label/python_debug::python=${python}[build=*_cpython]" && \ - mamba clean --all -# Quick check that we do have a debug mode CPython -RUN python -c "import sys; sys.gettotalrefcount()" diff --git a/.golangci.yaml b/ci/docker/conda-python-docs.dockerfile similarity index 76% rename from .golangci.yaml rename to ci/docker/conda-python-docs.dockerfile index 7d486a9e85a..fb2657791de 100644 --- a/.golangci.yaml +++ b/ci/docker/conda-python-docs.dockerfile @@ -15,15 +15,12 @@ # specific language governing permissions and limitations # under the License. -linters: - # Disable all linters. - # Default: false - disable-all: true - # Enable specific linter - # https://golangci-lint.run/usage/linters/#enabled-by-default - enable: - - gofmt - - goimports +ARG repo +ARG arch=amd64 +ARG python=3.8 +ARG pandas=latest +FROM ${repo}:${arch}-conda-python-${python}-pandas-${pandas} -issues: - fix: true \ No newline at end of file +COPY ci/conda_env_sphinx.txt /arrow/ci/ +RUN mamba install -q -y --file arrow/ci/conda_env_sphinx.txt && \ + mamba clean --all \ No newline at end of file diff --git a/ci/docker/conda-python-emscripten.dockerfile b/ci/docker/conda-python-emscripten.dockerfile deleted file mode 100644 index 8ad705c920b..00000000000 --- a/ci/docker/conda-python-emscripten.dockerfile +++ /dev/null @@ -1,64 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -ARG repo -ARG arch -ARG python="3.12" -FROM ${repo}:${arch}-conda-python-${python} - -ARG selenium_version="4.15.2" -ARG pyodide_version="0.26.0" -ARG chrome_version="latest" -ARG required_python_min="(3,12)" -# fail if python version < 3.12 -RUN echo "check PYTHON>=${required_python_min}" && python -c "import sys;sys.exit(0 if sys.version_info>=${required_python_min} else 1)" - -# install selenium and pyodide-build and recent python - -# needs to be a login shell so ~/.profile is read -SHELL ["/bin/bash", "--login", "-c", "-o", "pipefail"] - -RUN python -m pip install --no-cache-dir selenium==${selenium_version} && \ - python -m pip install --no-cache-dir --upgrade pyodide-build==${pyodide_version} - -# install pyodide dist directory to /pyodide -RUN pyodide_dist_url="https://github.com/pyodide/pyodide/releases/download/${pyodide_version}/pyodide-${pyodide_version}.tar.bz2" && \ - wget -q "${pyodide_dist_url}" -O- | tar -xj -C / - -# install correct version of emscripten for this pyodide -COPY ci/scripts/install_emscripten.sh /arrow/ci/scripts/ -RUN bash /arrow/ci/scripts/install_emscripten.sh ~ /pyodide - -# make sure zlib is cached in the EMSDK folder -RUN source ~/emsdk/emsdk_env.sh && embuilder --pic build zlib - -# install node 20 (needed for async call support) -# and pthread-stubs for build, and unzip needed for chrome build to work -RUN conda install nodejs=20 unzip pthread-stubs make -c conda-forge - -# install chrome for testing browser based runner -COPY ci/scripts/install_chromedriver.sh /arrow/ci/scripts/ -RUN /arrow/ci/scripts/install_chromedriver.sh "${chrome_version}" - -# make the version of make that is installed by conda be available everywhere -# or else pyodide's isolated build fails to find it -RUN ln -s "$(type -P make)" /bin/make - -ENV ARROW_BUILD_TESTS="OFF" \ - ARROW_BUILD_TYPE="release" \ - ARROW_DEPENDENCY_SOURCE="BUNDLED" \ - ARROW_EMSCRIPTEN="ON" diff --git a/ci/docker/conda-python-hdfs.dockerfile b/ci/docker/conda-python-hdfs.dockerfile index 4e5e1a402e2..c7b01edf8c2 100644 --- a/ci/docker/conda-python-hdfs.dockerfile +++ b/ci/docker/conda-python-hdfs.dockerfile @@ -20,8 +20,8 @@ ARG arch=amd64 ARG python=3.8 FROM ${repo}:${arch}-conda-python-${python} -ARG jdk=11 -ARG maven=3.8.7 +ARG jdk=8 +ARG maven=3.5 RUN mamba install -q -y \ maven=${maven} \ openjdk=${jdk} \ diff --git a/ci/docker/conda-python-jpype.dockerfile b/ci/docker/conda-python-jpype.dockerfile index d9b43afdaec..0e7fecf0362 100644 --- a/ci/docker/conda-python-jpype.dockerfile +++ b/ci/docker/conda-python-jpype.dockerfile @@ -21,7 +21,7 @@ ARG python=3.8 FROM ${repo}:${arch}-conda-python-${python} ARG jdk=11 -ARG maven=3.8.7 +ARG maven=3.6 RUN mamba install -q -y \ maven=${maven} \ openjdk=${jdk} \ diff --git a/ci/docker/conda-python-pandas.dockerfile b/ci/docker/conda-python-pandas.dockerfile index 83ad52a13d6..dc29fb50bd5 100644 --- a/ci/docker/conda-python-pandas.dockerfile +++ b/ci/docker/conda-python-pandas.dockerfile @@ -23,10 +23,8 @@ FROM ${repo}:${arch}-conda-python-${python} ARG pandas=latest ARG numpy=latest -# the doc builds are using the conda-python-pandas image, -# so ensure to install doc requirements -COPY ci/conda_env_sphinx.txt /arrow/ci/ -RUN mamba install -q -y --file arrow/ci/conda_env_sphinx.txt && \ +COPY ci/conda_env_python.txt /arrow/ci/ +RUN mamba install -q -y --file arrow/ci/conda_env_python.txt && \ mamba clean --all COPY ci/scripts/install_pandas.sh /arrow/ci/scripts/ diff --git a/ci/docker/conda-python-spark.dockerfile b/ci/docker/conda-python-spark.dockerfile index d95fe58b529..221c8409924 100644 --- a/ci/docker/conda-python-spark.dockerfile +++ b/ci/docker/conda-python-spark.dockerfile @@ -20,8 +20,8 @@ ARG arch=amd64 ARG python=3.8 FROM ${repo}:${arch}-conda-python-${python} -ARG jdk=11 -ARG maven=3.8.7 +ARG jdk=8 +ARG maven=3.5 ARG numpy=latest COPY ci/scripts/install_numpy.sh /arrow/ci/scripts/ diff --git a/ci/docker/conda-python-substrait.dockerfile b/ci/docker/conda-python-substrait.dockerfile index 36dd64e51e7..191795f2530 100644 --- a/ci/docker/conda-python-substrait.dockerfile +++ b/ci/docker/conda-python-substrait.dockerfile @@ -24,19 +24,11 @@ FROM ${repo}:${arch}-conda-python-${python} COPY ci/conda_env_python.txt \ ci/conda_env_sphinx.txt \ /arrow/ci/ - -# Note: openjdk is pinned to 17 because the -# substrait repo currently pins to jdk 17. -# Newer jdk versions are currently failing -# due to the recent upgrade to Gradle 8 via -# install_substrait_consumer.sh. -# https://github.com/substrait-io/substrait-java/issues/274 RUN mamba install -q -y \ --file arrow/ci/conda_env_python.txt \ --file arrow/ci/conda_env_sphinx.txt \ $([ "$python" == "3.9" ] && echo "pickle5") \ - python=${python} \ - openjdk=17 \ + python=${python} openjdk \ nomkl && \ mamba clean --all diff --git a/ci/docker/debian-12-cpp.dockerfile b/ci/docker/debian-11-cpp.dockerfile similarity index 70% rename from ci/docker/debian-12-cpp.dockerfile rename to ci/docker/debian-11-cpp.dockerfile index d7a6f9df2c2..46824054624 100644 --- a/ci/docker/debian-12-cpp.dockerfile +++ b/ci/docker/debian-11-cpp.dockerfile @@ -16,33 +16,38 @@ # under the License. ARG arch=amd64 -FROM ${arch}/debian:12 +FROM ${arch}/debian:11 ARG arch ENV DEBIAN_FRONTEND noninteractive ARG llvm +# We can't use LLVM 14 or later from apt.llvm.org on i386 because LLVM +# 14 or later dropped support for i386. RUN apt-get update -y -q && \ + apt-get install -y -q --no-install-recommends \ + dpkg-dev && \ + latest_available_llvm_i386=13 && \ + if [ $(dpkg-architecture -qDEB_HOST_ARCH) = "i386" -a \ + "${llvm}" -gt "${latest_available_llvm_i386}" ]; then \ + available_llvm="${latest_available_llvm_i386}"; \ + else \ + available_llvm="${llvm}"; \ + fi && \ + apt-get update -y -q && \ apt-get install -y -q --no-install-recommends \ apt-transport-https \ ca-certificates \ gnupg \ - lsb-release \ wget && \ - if [ ${llvm} -ge 17 ]; then \ - wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | \ - gpg \ - --import - \ - --keyring /usr/share/keyrings/llvm-snapshot.gpg \ - --no-default-keyring && \ - echo "deb[keyring=/usr/share/keyrings/llvm-snapshot.gpg] https://apt.llvm.org/$(lsb_release --codename --short)/ llvm-toolchain-$(lsb_release --codename --short)-${available_llvm} main" > \ - /etc/apt/sources.list.d/llvm.list; \ - fi && \ + wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ + echo "deb https://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-${available_llvm} main" > \ + /etc/apt/sources.list.d/llvm.list && \ apt-get update -y -q && \ apt-get install -y -q --no-install-recommends \ autoconf \ ccache \ - clang-${llvm} \ + clang-${available_llvm} \ cmake \ curl \ g++ \ @@ -50,8 +55,7 @@ RUN apt-get update -y -q && \ gdb \ git \ libbenchmark-dev \ - libboost-filesystem-dev \ - libboost-system-dev \ + libboost-all-dev \ libbrotli-dev \ libbz2-dev \ libc-ares-dev \ @@ -60,35 +64,22 @@ RUN apt-get update -y -q && \ libgmock-dev \ libgoogle-glog-dev \ libgrpc++-dev \ - libidn2-dev \ - libkrb5-dev \ - libldap-dev \ liblz4-dev \ - libnghttp2-dev \ libprotobuf-dev \ libprotoc-dev \ - libpsl-dev \ libre2-dev \ - librtmp-dev \ libsnappy-dev \ - libsqlite3-dev \ - libssh-dev \ - libssh2-1-dev \ libssl-dev \ libthrift-dev \ libutf8proc-dev \ - libxml2-dev \ libzstd-dev \ - llvm-${llvm}-dev \ + llvm-${available_llvm}-dev \ make \ ninja-build \ nlohmann-json3-dev \ - npm \ pkg-config \ protobuf-compiler-grpc \ - python3-dev \ python3-pip \ - python3-venv \ rapidjson-dev \ rsync \ tzdata \ @@ -102,20 +93,15 @@ RUN /arrow/ci/scripts/install_minio.sh latest /usr/local COPY ci/scripts/install_gcs_testbench.sh /arrow/ci/scripts/ RUN /arrow/ci/scripts/install_gcs_testbench.sh default -COPY ci/scripts/install_azurite.sh /arrow/ci/scripts/ -RUN /arrow/ci/scripts/install_azurite.sh - COPY ci/scripts/install_sccache.sh /arrow/ci/scripts/ RUN /arrow/ci/scripts/install_sccache.sh unknown-linux-musl /usr/local/bin -ENV ARROW_ACERO=ON \ - ARROW_AZURE=ON \ +ENV absl_SOURCE=BUNDLED \ + ARROW_ACERO=ON \ ARROW_BUILD_TESTS=ON \ ARROW_DATASET=ON \ ARROW_DEPENDENCY_SOURCE=SYSTEM \ - ARROW_DATASET=ON \ ARROW_FLIGHT=ON \ - ARROW_FLIGHT_SQL=ON \ ARROW_GANDIVA=ON \ ARROW_GCS=ON \ ARROW_HOME=/usr/local \ @@ -127,14 +113,15 @@ ENV ARROW_ACERO=ON \ ARROW_WITH_BROTLI=ON \ ARROW_WITH_BZ2=ON \ ARROW_WITH_LZ4=ON \ - ARROW_WITH_OPENTELEMETRY=ON \ + ARROW_WITH_OPENTELEMETRY=OFF \ ARROW_WITH_SNAPPY=ON \ ARROW_WITH_ZLIB=ON \ ARROW_WITH_ZSTD=ON \ AWSSDK_SOURCE=BUNDLED \ - Azure_SOURCE=BUNDLED \ + CC=gcc \ + CXX=g++ \ google_cloud_cpp_storage_SOURCE=BUNDLED \ + GTest_SOURCE=BUNDLED \ ORC_SOURCE=BUNDLED \ PATH=/usr/lib/ccache/:$PATH \ - PYTHON=python3 \ xsimd_SOURCE=BUNDLED diff --git a/ci/docker/debian-12-go-cgo-python.dockerfile b/ci/docker/debian-11-go-cgo-python.dockerfile similarity index 79% rename from ci/docker/debian-12-go-cgo-python.dockerfile rename to ci/docker/debian-11-go-cgo-python.dockerfile index a24955f76e6..46455a42bb3 100644 --- a/ci/docker/debian-12-go-cgo-python.dockerfile +++ b/ci/docker/debian-11-go-cgo-python.dockerfile @@ -24,11 +24,13 @@ ENV DEBIAN_FRONTEND noninteractive RUN apt-get update -y -q && \ apt-get install -y -q --no-install-recommends \ python3 \ - python3-pip \ - python3-venv && \ + python3-pip && \ apt-get clean -ENV ARROW_PYTHON_VENV /arrow-dev -RUN python3 -m venv ${ARROW_PYTHON_VENV} && \ - . ${ARROW_PYTHON_VENV}/bin/activate && \ - pip install pyarrow cffi --only-binary pyarrow +RUN ln -s /usr/bin/python3 /usr/local/bin/python && \ + ln -s /usr/bin/pip3 /usr/local/bin/pip + +# Need a newer pip than Debian's to install manylinux201x wheels +RUN pip install -U pip + +RUN pip install pyarrow cffi --only-binary pyarrow diff --git a/ci/docker/debian-12-go.dockerfile b/ci/docker/debian-11-go.dockerfile similarity index 93% rename from ci/docker/debian-12-go.dockerfile rename to ci/docker/debian-11-go.dockerfile index c958e6bdee2..de8186b9b8e 100644 --- a/ci/docker/debian-12-go.dockerfile +++ b/ci/docker/debian-11-go.dockerfile @@ -16,9 +16,9 @@ # under the License. ARG arch=amd64 -ARG go=1.21 -ARG staticcheck=v0.4.7 -FROM ${arch}/golang:${go}-bookworm +ARG go=1.19 +ARG staticcheck=v0.4.5 +FROM ${arch}/golang:${go}-bullseye # FROM collects all the args, get back the staticcheck version arg ARG staticcheck diff --git a/ci/docker/debian-12-js.dockerfile b/ci/docker/debian-11-js.dockerfile similarity index 99% rename from ci/docker/debian-12-js.dockerfile rename to ci/docker/debian-11-js.dockerfile index e0935676d93..e0938d96cd5 100644 --- a/ci/docker/debian-12-js.dockerfile +++ b/ci/docker/debian-11-js.dockerfile @@ -16,7 +16,7 @@ # under the License. ARG arch=amd64 -ARG node=18 +ARG node=16 FROM ${arch}/node:${node} ENV NODE_NO_WARNINGS=1 diff --git a/ci/docker/fedora-39-cpp.dockerfile b/ci/docker/fedora-39-cpp.dockerfile index 33d11823094..c8e98bdd00b 100644 --- a/ci/docker/fedora-39-cpp.dockerfile +++ b/ci/docker/fedora-39-cpp.dockerfile @@ -32,6 +32,7 @@ RUN dnf update -y && \ cmake \ curl \ curl-devel \ + flatbuffers-devel \ gcc \ gcc-c++ \ gflags-devel \ @@ -77,8 +78,8 @@ RUN /arrow/ci/scripts/install_sccache.sh unknown-linux-musl /usr/local/bin # PYARROW_TEST_GANDIVA=OFF: GH-39695: We need to make LLVM symbols visible in # Python process explicitly if we use LLVM 17 or later. -ENV ARROW_ACERO=ON \ - ARROW_AZURE=OFF \ +ENV absl_SOURCE=BUNDLED \ + ARROW_ACERO=ON \ ARROW_BUILD_TESTS=ON \ ARROW_DEPENDENCY_SOURCE=SYSTEM \ ARROW_DATASET=ON \ diff --git a/ci/docker/java-jni-manylinux-201x.dockerfile b/ci/docker/java-jni-manylinux-201x.dockerfile index 479f4aa598b..8b73c73c1d2 100644 --- a/ci/docker/java-jni-manylinux-201x.dockerfile +++ b/ci/docker/java-jni-manylinux-201x.dockerfile @@ -33,7 +33,7 @@ RUN vcpkg install \ --x-feature=s3 # Install Java -ARG java=11 +ARG java=1.8.0 ARG maven=3.9.3 RUN yum install -y java-$java-openjdk-devel && \ yum clean all && \ diff --git a/ci/docker/linux-apt-c-glib.dockerfile b/ci/docker/linux-apt-c-glib.dockerfile index 80742255b76..dd2e2ac4382 100644 --- a/ci/docker/linux-apt-c-glib.dockerfile +++ b/ci/docker/linux-apt-c-glib.dockerfile @@ -20,12 +20,11 @@ FROM ${base} RUN apt-get update -y -q && \ apt-get install -y -q \ - gi-docgen \ + gtk-doc-tools \ libgirepository1.0-dev \ libglib2.0-doc \ lsb-release \ luarocks \ - meson \ ninja-build \ pkg-config \ python3 \ @@ -37,7 +36,24 @@ RUN apt-get update -y -q && \ RUN luarocks install lgi -RUN gem install --no-document bundler +# pip on Ubuntu 20.04 may be buggy: +# +# Collecting meson +# Downloading meson-0.53.2.tar.gz (1.6 MB) +# Installing build dependencies: started +# Installing build dependencies: finished with status 'done' +# Getting requirements to build wheel: started +# Getting requirements to build wheel: finished with status 'error' +# ERROR: Command errored out with exit status 1: +# command: /usr/bin/python3 /usr/share/python-wheels/pep517-0.7.0-py2.py3-none-any.whl/pep517/_in_process.py get_requires_for_build_wheel /tmp/tmpsk4jveay +# cwd: /tmp/pip-install-jn79a_kh/meson +# Complete output (1 lines): +# /usr/bin/python3: can't find '__main__' module in '/usr/share/python-wheels/pep517-0.7.0-py2.py3-none-any.whl/pep517/_in_process.py' +# ---------------------------------------- +# ERROR: Command errored out with exit status 1: /usr/bin/python3 /usr/share/python-wheels/pep517-0.7.0-py2.py3-none-any.whl/pep517/_in_process.py get_requires_for_build_wheel /tmp/tmpsk4jveay Check the logs for full command output. +RUN (python3 -m pip install meson || \ + python3 -m pip install --no-use-pep517 meson) && \ + gem install --no-document bundler COPY c_glib/Gemfile /arrow/c_glib/ RUN bundle install --gemfile /arrow/c_glib/Gemfile diff --git a/ci/docker/linux-apt-docs.dockerfile b/ci/docker/linux-apt-docs.dockerfile index 0804f3543c2..3d102796b8c 100644 --- a/ci/docker/linux-apt-docs.dockerfile +++ b/ci/docker/linux-apt-docs.dockerfile @@ -18,41 +18,25 @@ ARG base FROM ${base} -ARG r=4.4 -ARG jdk=11 +ARG r=4.2 +ARG jdk=8 -ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium - -# See R install instructions at https://cloud.r-project.org/bin/linux/ +# See R install instructions at https://cloud.r-project.org/bin/linux/ubuntu/ RUN apt-get update -y && \ apt-get install -y \ - apt-transport-https \ dirmngr \ - gpg \ - lsb-release && \ - gpg --keyserver keyserver.ubuntu.com \ - --recv-key 95C0FAF38DB3CCAD0C080A7BDC78B2DDEABC47B7 && \ - gpg --export 95C0FAF38DB3CCAD0C080A7BDC78B2DDEABC47B7 | \ - gpg --no-default-keyring \ - --keyring /usr/share/keyrings/cran.gpg \ - --import - && \ - echo "deb [signed-by=/usr/share/keyrings/cran.gpg] https://cloud.r-project.org/bin/linux/$(lsb_release -is | tr 'A-Z' 'a-z') $(lsb_release -cs)-cran40/" | \ - tee /etc/apt/sources.list.d/cran.list && \ - if [ -f /etc/apt/sources.list.d/debian.sources ]; then \ - sed -i \ - -e 's/main$/main contrib non-free non-free-firmware/g' \ - /etc/apt/sources.list.d/debian.sources; \ - fi && \ - apt-get update -y && \ + apt-transport-https \ + software-properties-common && \ + wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | \ + tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc && \ + add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu '$(lsb_release -cs)'-cran40/' && \ apt-get install -y --no-install-recommends \ autoconf-archive \ automake \ - chromium \ - chromium-sandbox \ curl \ doxygen \ - gi-docgen \ gobject-introspection \ + gtk-doc-tools \ libcurl4-openssl-dev \ libfontconfig1-dev \ libfribidi-dev \ @@ -62,10 +46,7 @@ RUN apt-get update -y && \ libtiff-dev \ libtool \ libxml2-dev \ - meson \ ninja-build \ - nodejs \ - npm \ nvidia-cuda-toolkit \ openjdk-${jdk}-jdk-headless \ pandoc \ @@ -73,22 +54,31 @@ RUN apt-get update -y && \ r-base=${r}* \ rsync \ ruby-dev \ - sudo \ wget && \ apt-get clean && \ - rm -rf /var/lib/apt/lists/* && \ - PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \ - npm install -g yarn @mermaid-js/mermaid-cli + rm -rf /var/lib/apt/lists/* ENV JAVA_HOME=/usr/lib/jvm/java-${jdk}-openjdk-amd64 -ARG maven=3.8.7 +ARG maven=3.6.3 COPY ci/scripts/util_download_apache.sh /arrow/ci/scripts/ RUN /arrow/ci/scripts/util_download_apache.sh \ "maven/maven-3/${maven}/binaries/apache-maven-${maven}-bin.tar.gz" /opt ENV PATH=/opt/apache-maven-${maven}/bin:$PATH RUN mvn -version +ARG node=16 +RUN apt-get purge -y npm && \ + apt-get autoremove -y --purge && \ + wget -q -O - https://deb.nodesource.com/setup_${node}.x | bash - && \ + apt-get install -y nodejs && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* && \ + npm install -g yarn + +COPY docs/requirements.txt /arrow/docs/ +RUN pip install -r arrow/docs/requirements.txt meson + COPY c_glib/Gemfile /arrow/c_glib/ RUN gem install --no-document bundler && \ bundle install --gemfile /arrow/c_glib/Gemfile @@ -105,19 +95,7 @@ COPY r/DESCRIPTION /arrow/r/ RUN /arrow/ci/scripts/r_deps.sh /arrow && \ R -e "install.packages('pkgdown')" -RUN useradd --user-group --create-home --groups audio,video arrow -RUN echo "arrow ALL=(ALL:ALL) NOPASSWD:ALL" | \ - EDITOR=tee visudo -f /etc/sudoers.d/arrow -USER arrow - -COPY docs/requirements.txt /arrow/docs/ -RUN sudo chown -R arrow: ${ARROW_PYTHON_VENV} && \ - python3 -m venv ${ARROW_PYTHON_VENV} && \ - . ${ARROW_PYTHON_VENV}/bin/activate && \ - pip install -r arrow/docs/requirements.txt - ENV ARROW_ACERO=ON \ - ARROW_AZURE=OFF \ ARROW_BUILD_STATIC=OFF \ ARROW_BUILD_TESTS=OFF \ ARROW_BUILD_UTILITIES=OFF \ @@ -132,5 +110,4 @@ ENV ARROW_ACERO=ON \ ARROW_JSON=ON \ ARROW_S3=ON \ ARROW_USE_GLOG=OFF \ - CMAKE_UNITY_BUILD=ON \ - RETICULATE_PYTHON_ENV=${ARROW_PYTHON_VENV} + CMAKE_UNITY_BUILD=ON diff --git a/ci/docker/linux-apt-lint.dockerfile b/ci/docker/linux-apt-lint.dockerfile index 9ec80440a3c..2b94a488718 100644 --- a/ci/docker/linux-apt-lint.dockerfile +++ b/ci/docker/linux-apt-lint.dockerfile @@ -40,7 +40,7 @@ RUN apt-get update && \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* -ARG r=4.4 +ARG r=4.2 RUN wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | \ tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc && \ # NOTE: Only R >= 4.0 is available in this repo diff --git a/ci/docker/linux-apt-python-3.dockerfile b/ci/docker/linux-apt-python-3.dockerfile index 2e07c244017..829c32e96b1 100644 --- a/ci/docker/linux-apt-python-3.dockerfile +++ b/ci/docker/linux-apt-python-3.dockerfile @@ -18,17 +18,26 @@ ARG base FROM ${base} +RUN apt-get update -y -q && \ + apt-get install -y -q \ + python3 \ + python3-pip \ + python3-dev && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +RUN ln -s /usr/bin/python3 /usr/local/bin/python && \ + ln -s /usr/bin/pip3 /usr/local/bin/pip + +RUN pip install -U pip setuptools wheel + COPY python/requirements-build.txt \ python/requirements-test.txt \ /arrow/python/ -ENV ARROW_PYTHON_VENV /arrow-dev -RUN python3 -m venv ${ARROW_PYTHON_VENV} && \ - . ${ARROW_PYTHON_VENV}/bin/activate && \ - pip install -U pip setuptools wheel && \ - pip install \ - -r arrow/python/requirements-build.txt \ - -r arrow/python/requirements-test.txt +RUN pip install \ + -r arrow/python/requirements-build.txt \ + -r arrow/python/requirements-test.txt ARG numba COPY ci/scripts/install_numba.sh /arrow/ci/scripts/ diff --git a/ci/docker/linux-apt-r.dockerfile b/ci/docker/linux-apt-r.dockerfile index 630b96e1007..c59766c4a66 100644 --- a/ci/docker/linux-apt-r.dockerfile +++ b/ci/docker/linux-apt-r.dockerfile @@ -27,15 +27,10 @@ ENV R_PRUNE_DEPS=${r_prune_deps} ARG r_duckdb_dev=FALSE ENV R_DUCKDB_DEV=${r_duckdb_dev} -# This is needed to avoid errors with utf8 characters in some -# R package's DESCRIPTION files -# https://github.com/statnmap/HatchedPolygons/issues/4 -ENV LANG=C.UTF-8 - # Build R # [1] https://www.digitalocean.com/community/tutorials/how-to-install-r-on-ubuntu-18-04 # [2] https://linuxize.com/post/how-to-install-r-on-ubuntu-18-04/#installing-r-packages-from-cran -ARG r=4.4 +ARG r=3.6 RUN apt-get update -y && \ apt-get install -y \ dirmngr \ @@ -113,6 +108,7 @@ ENV \ ARROW_GANDIVA=OFF \ ARROW_HDFS=OFF \ ARROW_JSON=ON \ + ARROW_NO_DEPRECATED_API=ON \ ARROW_ORC=OFF \ ARROW_PARQUET=ON \ ARROW_S3=ON \ diff --git a/ci/docker/linux-r.dockerfile b/ci/docker/linux-r.dockerfile index 7b7e989adc0..d368a6629c5 100644 --- a/ci/docker/linux-r.dockerfile +++ b/ci/docker/linux-r.dockerfile @@ -27,6 +27,9 @@ ENV R_BIN=${r_bin} ARG r_dev=FALSE ENV ARROW_R_DEV=${r_dev} +ARG devtoolset_version= +ENV DEVTOOLSET_VERSION=${devtoolset_version} + ARG r_prune_deps=FALSE ENV R_PRUNE_DEPS=${r_prune_deps} diff --git a/ci/docker/python-wheel-manylinux.dockerfile b/ci/docker/python-wheel-manylinux.dockerfile index cb39667af1e..b1d9ed5ab88 100644 --- a/ci/docker/python-wheel-manylinux.dockerfile +++ b/ci/docker/python-wheel-manylinux.dockerfile @@ -25,18 +25,6 @@ ARG manylinux ENV MANYLINUX_VERSION=${manylinux} # Ensure dnf is installed, especially for the manylinux2014 base -RUN if [ "${MANYLINUX_VERSION}" = "2014" ]; then \ - sed -i \ - -e 's/^mirrorlist/#mirrorlist/' \ - -e 's/^#baseurl/baseurl/' \ - -e 's/mirror\.centos\.org/vault.centos.org/' \ - /etc/yum.repos.d/*.repo; \ - if [ "${arch}" != "amd64" ]; then \ - sed -i \ - -e 's,vault\.centos\.org/centos,vault.centos.org/altarch,' \ - /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo; \ - fi; \ - fi RUN yum install -y dnf # Install basic dependencies @@ -51,7 +39,8 @@ ENV CPYTHON_VERSION=cp38 ENV PATH=/opt/python/${CPYTHON_VERSION}-${CPYTHON_VERSION}/bin:${PATH} # Install CMake -ARG cmake=3.29.2 +# AWS SDK doesn't work with CMake=3.22 due to https://gitlab.kitware.com/cmake/cmake/-/issues/22524 +ARG cmake=3.21.4 COPY ci/scripts/install_cmake.sh arrow/ci/scripts/ RUN /arrow/ci/scripts/install_cmake.sh ${arch} linux ${cmake} /usr/local @@ -110,4 +99,5 @@ SHELL ["/bin/bash", "-i", "-c"] ENTRYPOINT ["/bin/bash", "-i", "-c"] COPY python/requirements-wheel-build.txt /arrow/python/ -RUN pip install -r /arrow/python/requirements-wheel-build.txt +# TODO(GH-39848) Remove the `--pre --extra-index-url` for numpy nightly again before the 16.0 release +RUN pip install -r /arrow/python/requirements-wheel-build.txt --pre --extra-index-url "https://pypi.anaconda.org/scientific-python-nightly-wheels/simple" diff --git a/ci/docker/python-wheel-windows-test-vs2019.dockerfile b/ci/docker/python-wheel-windows-test-vs2019.dockerfile index 32bbb55e826..67d99fa9c57 100644 --- a/ci/docker/python-wheel-windows-test-vs2019.dockerfile +++ b/ci/docker/python-wheel-windows-test-vs2019.dockerfile @@ -22,8 +22,6 @@ # contains choco and vs2019 preinstalled FROM abrarov/msvc-2019:2.11.0 -# hadolint shell=cmd.exe - # Add unix tools to path RUN setx path "%path%;C:\Program Files\Git\usr\bin" @@ -42,8 +40,5 @@ RUN (if "%python%"=="3.8" setx PYTHON_VERSION "3.8.10" && setx PATH "%PATH%;C:\P (if "%python%"=="3.10" setx PYTHON_VERSION "3.10.11" && setx PATH "%PATH%;C:\Python310;C:\Python310\Scripts") & \ (if "%python%"=="3.11" setx PYTHON_VERSION "3.11.5" && setx PATH "%PATH%;C:\Python311;C:\Python311\Scripts") & \ (if "%python%"=="3.12" setx PYTHON_VERSION "3.12.0" && setx PATH "%PATH%;C:\Python312;C:\Python312\Scripts") - -# Install archiver to extract xz archives -RUN choco install -r -y --no-progress python --version=%PYTHON_VERSION% & \ - python -m pip install --no-cache-dir -U pip setuptools & \ - choco install --no-progress -r -y archiver +RUN choco install -r -y --no-progress python --version=%PYTHON_VERSION% +RUN python -m pip install -U pip setuptools diff --git a/ci/docker/python-wheel-windows-vs2019.dockerfile b/ci/docker/python-wheel-windows-vs2019.dockerfile index ff42de939d9..b8e8aad952b 100644 --- a/ci/docker/python-wheel-windows-vs2019.dockerfile +++ b/ci/docker/python-wheel-windows-vs2019.dockerfile @@ -66,7 +66,6 @@ RUN vcpkg install \ --x-feature=flight \ --x-feature=gcs \ --x-feature=json \ - --x-feature=orc \ --x-feature=parquet \ --x-feature=s3 @@ -89,7 +88,8 @@ RUN choco install -r -y --no-progress python --version=%PYTHON_VERSION% RUN python -m pip install -U pip setuptools COPY python/requirements-wheel-build.txt arrow/python/ -RUN python -m pip install -r arrow/python/requirements-wheel-build.txt +# TODO(GH-39848) Remove the `--pre --extra-index-url` for numpy nightly again before the 16.0 release +RUN python -m pip install -r arrow/python/requirements-wheel-build.txt --pre --extra-index-url "https://pypi.anaconda.org/scientific-python-nightly-wheels/simple" # ENV CLCACHE_DIR="C:\clcache" # ENV CLCACHE_COMPRESS=1 diff --git a/ci/docker/ubuntu-20.04-cpp-minimal.dockerfile b/ci/docker/ubuntu-20.04-cpp-minimal.dockerfile index e17c0306f11..3df895b427c 100644 --- a/ci/docker/ubuntu-20.04-cpp-minimal.dockerfile +++ b/ci/docker/ubuntu-20.04-cpp-minimal.dockerfile @@ -76,7 +76,6 @@ COPY ci/scripts/install_sccache.sh /arrow/ci/scripts/ RUN /arrow/ci/scripts/install_sccache.sh unknown-linux-musl /usr/local/bin ENV ARROW_ACERO=ON \ - ARROW_AZURE=OFF \ ARROW_BUILD_TESTS=ON \ ARROW_DATASET=ON \ ARROW_FLIGHT=ON \ @@ -85,6 +84,7 @@ ENV ARROW_ACERO=ON \ ARROW_HDFS=ON \ ARROW_HOME=/usr/local \ ARROW_INSTALL_NAME_RPATH=OFF \ + ARROW_NO_DEPRECATED_API=ON \ ARROW_ORC=ON \ ARROW_PARQUET=ON \ ARROW_S3=ON \ diff --git a/ci/docker/ubuntu-20.04-cpp.dockerfile b/ci/docker/ubuntu-20.04-cpp.dockerfile index d78c7a99cf4..3e3b7ac3a6d 100644 --- a/ci/docker/ubuntu-20.04-cpp.dockerfile +++ b/ci/docker/ubuntu-20.04-cpp.dockerfile @@ -101,7 +101,6 @@ RUN apt-get update -y -q && \ libutf8proc-dev \ libxml2-dev \ libzstd-dev \ - lld \ make \ ninja-build \ nlohmann-json3-dev \ @@ -158,13 +157,13 @@ ENV absl_SOURCE=BUNDLED \ ARROW_HDFS=ON \ ARROW_HOME=/usr/local \ ARROW_INSTALL_NAME_RPATH=OFF \ + ARROW_NO_DEPRECATED_API=ON \ ARROW_ORC=ON \ ARROW_PARQUET=ON \ ARROW_S3=ON \ ARROW_SUBSTRAIT=ON \ ARROW_USE_ASAN=OFF \ ARROW_USE_CCACHE=ON \ - ARROW_USE_LLD=ON \ ARROW_USE_UBSAN=OFF \ ARROW_WITH_BROTLI=ON \ ARROW_WITH_BZ2=ON \ diff --git a/ci/docker/ubuntu-22.04-cpp-minimal.dockerfile b/ci/docker/ubuntu-22.04-cpp-minimal.dockerfile index 341d8a87e86..7eba541a63a 100644 --- a/ci/docker/ubuntu-22.04-cpp-minimal.dockerfile +++ b/ci/docker/ubuntu-22.04-cpp-minimal.dockerfile @@ -76,7 +76,6 @@ COPY ci/scripts/install_sccache.sh /arrow/ci/scripts/ RUN /arrow/ci/scripts/install_sccache.sh unknown-linux-musl /usr/local/bin ENV ARROW_ACERO=ON \ - ARROW_AZURE=OFF \ ARROW_BUILD_TESTS=ON \ ARROW_DATASET=ON \ ARROW_FLIGHT=ON \ @@ -85,6 +84,7 @@ ENV ARROW_ACERO=ON \ ARROW_HDFS=ON \ ARROW_HOME=/usr/local \ ARROW_INSTALL_NAME_RPATH=OFF \ + ARROW_NO_DEPRECATED_API=ON \ ARROW_ORC=ON \ ARROW_PARQUET=ON \ ARROW_S3=ON \ diff --git a/ci/docker/ubuntu-22.04-cpp.dockerfile b/ci/docker/ubuntu-22.04-cpp.dockerfile index f12e7456add..848f62ab8ae 100644 --- a/ci/docker/ubuntu-22.04-cpp.dockerfile +++ b/ci/docker/ubuntu-22.04-cpp.dockerfile @@ -65,7 +65,6 @@ RUN latest_system_llvm=14 && \ RUN apt-get update -y -q && \ apt-get install -y -q --no-install-recommends \ autoconf \ - bzip2 \ ca-certificates \ ccache \ cmake \ @@ -103,7 +102,6 @@ RUN apt-get update -y -q && \ libxml2-dev \ libzstd-dev \ make \ - mold \ ninja-build \ nlohmann-json3-dev \ npm \ @@ -116,20 +114,10 @@ RUN apt-get update -y -q && \ rapidjson-dev \ rsync \ tzdata \ - wget \ - xz-utils && \ + wget && \ apt-get clean && \ rm -rf /var/lib/apt/lists* -# install emscripten using EMSDK -ARG emscripten_version="3.1.45" -RUN cd ~ && git clone https://github.com/emscripten-core/emsdk.git && \ - cd emsdk && \ - ./emsdk install ${emscripten_version} && \ - ./emsdk activate ${emscripten_version} && \ - echo "Installed emsdk to:" ~/emsdk - - ARG gcc_version="" RUN if [ "${gcc_version}" = "" ]; then \ apt-get update -y -q && \ @@ -162,9 +150,6 @@ RUN if [ "${gcc_version}" = "" ]; then \ update-alternatives --set c++ /usr/bin/g++; \ fi -# make sure zlib is cached in the EMSDK folder -RUN source ~/emsdk/emsdk_env.sh && embuilder --pic build zlib - COPY ci/scripts/install_minio.sh /arrow/ci/scripts/ RUN /arrow/ci/scripts/install_minio.sh latest /usr/local @@ -196,13 +181,13 @@ ENV absl_SOURCE=BUNDLED \ ARROW_HDFS=ON \ ARROW_HOME=/usr/local \ ARROW_INSTALL_NAME_RPATH=OFF \ + ARROW_NO_DEPRECATED_API=ON \ ARROW_ORC=ON \ ARROW_PARQUET=ON \ ARROW_S3=ON \ ARROW_SUBSTRAIT=ON \ ARROW_USE_ASAN=OFF \ ARROW_USE_CCACHE=ON \ - ARROW_USE_MOLD=ON \ ARROW_USE_UBSAN=OFF \ ARROW_WITH_BROTLI=ON \ ARROW_WITH_BZ2=ON \ diff --git a/ci/docker/ubuntu-22.04-csharp.dockerfile b/ci/docker/ubuntu-22.04-csharp.dockerfile index 4d77ba060b8..aebbd8fab74 100644 --- a/ci/docker/ubuntu-22.04-csharp.dockerfile +++ b/ci/docker/ubuntu-22.04-csharp.dockerfile @@ -16,7 +16,7 @@ # under the License. ARG arch=amd64 -ARG dotnet=8.0 +ARG dotnet=7.0 ARG platform=jammy FROM mcr.microsoft.com/dotnet/sdk:${dotnet}-${platform}-${arch} diff --git a/ci/docker/ubuntu-24.04-cpp-minimal.dockerfile b/ci/docker/ubuntu-24.04-cpp-minimal.dockerfile deleted file mode 100644 index a995ab2a8bc..00000000000 --- a/ci/docker/ubuntu-24.04-cpp-minimal.dockerfile +++ /dev/null @@ -1,104 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -ARG base=amd64/ubuntu:24.04 -FROM ${base} - -SHELL ["/bin/bash", "-o", "pipefail", "-c"] - -RUN echo "debconf debconf/frontend select Noninteractive" | \ - debconf-set-selections - -RUN apt-get update -y -q && \ - apt-get install -y -q \ - build-essential \ - ccache \ - cmake \ - curl \ - git \ - libssl-dev \ - libcurl4-openssl-dev \ - python3-pip \ - tzdata \ - tzdata-legacy \ - wget && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists* - -# Installs LLVM toolchain, for Gandiva and testing other compilers -# -# Note that this is installed before the base packages to improve iteration -# while debugging package list with docker build. -ARG llvm -RUN latest_system_llvm=14 && \ - if [ ${llvm} -gt ${latest_system_llvm} ]; then \ - apt-get update -y -q && \ - apt-get install -y -q --no-install-recommends \ - apt-transport-https \ - ca-certificates \ - gnupg \ - lsb-release \ - wget && \ - wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ - code_name=$(lsb_release --codename --short) && \ - if [ ${llvm} -gt 10 ]; then \ - echo "deb https://apt.llvm.org/${code_name}/ llvm-toolchain-${code_name}-${llvm} main" > \ - /etc/apt/sources.list.d/llvm.list; \ - fi; \ - fi && \ - apt-get update -y -q && \ - apt-get install -y -q --no-install-recommends \ - clang-${llvm} \ - llvm-${llvm}-dev && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists* - -COPY ci/scripts/install_minio.sh /arrow/ci/scripts/ -RUN /arrow/ci/scripts/install_minio.sh latest /usr/local - -COPY ci/scripts/install_gcs_testbench.sh /arrow/ci/scripts/ -RUN /arrow/ci/scripts/install_gcs_testbench.sh default - -COPY ci/scripts/install_sccache.sh /arrow/ci/scripts/ -RUN /arrow/ci/scripts/install_sccache.sh unknown-linux-musl /usr/local/bin - -ENV ARROW_ACERO=ON \ - ARROW_AZURE=OFF \ - ARROW_BUILD_TESTS=ON \ - ARROW_DATASET=ON \ - ARROW_FLIGHT=ON \ - ARROW_GANDIVA=ON \ - ARROW_GCS=ON \ - ARROW_HDFS=ON \ - ARROW_HOME=/usr/local \ - ARROW_INSTALL_NAME_RPATH=OFF \ - ARROW_ORC=ON \ - ARROW_PARQUET=ON \ - ARROW_S3=ON \ - ARROW_USE_CCACHE=ON \ - ARROW_WITH_BROTLI=ON \ - ARROW_WITH_BZ2=ON \ - ARROW_WITH_LZ4=ON \ - ARROW_WITH_OPENTELEMETRY=OFF \ - ARROW_WITH_SNAPPY=ON \ - ARROW_WITH_ZLIB=ON \ - ARROW_WITH_ZSTD=ON \ - CMAKE_GENERATOR="Unix Makefiles" \ - PARQUET_BUILD_EXAMPLES=ON \ - PARQUET_BUILD_EXECUTABLES=ON \ - PATH=/usr/lib/ccache/:$PATH \ - PYTHON=python3 diff --git a/ci/docker/ubuntu-24.04-cpp.dockerfile b/ci/docker/ubuntu-24.04-cpp.dockerfile deleted file mode 100644 index 7d0772c33a2..00000000000 --- a/ci/docker/ubuntu-24.04-cpp.dockerfile +++ /dev/null @@ -1,206 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -ARG base=amd64/ubuntu:24.04 -FROM ${base} - -SHELL ["/bin/bash", "-o", "pipefail", "-c"] - -RUN echo "debconf debconf/frontend select Noninteractive" | \ - debconf-set-selections - -# Installs LLVM toolchain, for Gandiva and testing other compilers -# -# Note that this is installed before the base packages to improve iteration -# while debugging package list with docker build. -ARG clang_tools -ARG llvm -RUN latest_system_llvm=18 && \ - if [ ${llvm} -gt ${latest_system_llvm} -o \ - ${clang_tools} -gt ${latest_system_llvm} ]; then \ - apt-get update -y -q && \ - apt-get install -y -q --no-install-recommends \ - apt-transport-https \ - ca-certificates \ - gnupg \ - lsb-release \ - wget && \ - wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ - code_name=$(lsb_release --codename --short) && \ - if [ ${llvm} -gt 10 ]; then \ - echo "deb https://apt.llvm.org/${code_name}/ llvm-toolchain-${code_name}-${llvm} main" > \ - /etc/apt/sources.list.d/llvm.list; \ - fi && \ - if [ ${clang_tools} -ne ${llvm} -a \ - ${clang_tools} -gt ${latest_system_llvm} ]; then \ - echo "deb https://apt.llvm.org/${code_name}/ llvm-toolchain-${code_name}-${clang_tools} main" > \ - /etc/apt/sources.list.d/clang-tools.list; \ - fi; \ - fi && \ - apt-get update -y -q && \ - apt-get install -y -q --no-install-recommends \ - clang-${clang_tools} \ - clang-${llvm} \ - clang-format-${clang_tools} \ - clang-tidy-${clang_tools} \ - libclang-rt-${llvm}-dev \ - llvm-${llvm}-dev && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists* - -# Installs C++ toolchain and dependencies -RUN apt-get update -y -q && \ - apt-get install -y -q --no-install-recommends \ - autoconf \ - ca-certificates \ - ccache \ - cmake \ - curl \ - gdb \ - git \ - libbenchmark-dev \ - libboost-filesystem-dev \ - libboost-system-dev \ - libbrotli-dev \ - libbz2-dev \ - libc-ares-dev \ - libcurl4-openssl-dev \ - libgflags-dev \ - libgmock-dev \ - libgoogle-glog-dev \ - libgrpc++-dev \ - libidn2-dev \ - libkrb5-dev \ - libldap-dev \ - liblz4-dev \ - libnghttp2-dev \ - libprotobuf-dev \ - libprotoc-dev \ - libpsl-dev \ - libre2-dev \ - librtmp-dev \ - libsnappy-dev \ - libsqlite3-dev \ - libssh-dev \ - libssh2-1-dev \ - libssl-dev \ - libthrift-dev \ - libutf8proc-dev \ - libxml2-dev \ - libzstd-dev \ - make \ - mold \ - ninja-build \ - nlohmann-json3-dev \ - npm \ - pkg-config \ - protobuf-compiler \ - protobuf-compiler-grpc \ - python3-dev \ - python3-pip \ - python3-venv \ - rapidjson-dev \ - rsync \ - tzdata \ - tzdata-legacy \ - wget && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists* - -ARG gcc_version="" -RUN if [ "${gcc_version}" = "" ]; then \ - apt-get update -y -q && \ - apt-get install -y -q --no-install-recommends \ - g++ \ - gcc; \ - else \ - if [ "${gcc_version}" -gt "14" ]; then \ - apt-get update -y -q && \ - apt-get install -y -q --no-install-recommends software-properties-common && \ - add-apt-repository ppa:ubuntu-toolchain-r/volatile; \ - fi; \ - apt-get update -y -q && \ - apt-get install -y -q --no-install-recommends \ - g++-${gcc_version} \ - gcc-${gcc_version} && \ - update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${gcc_version} 100 && \ - update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${gcc_version} 100 && \ - update-alternatives --install \ - /usr/bin/$(uname --machine)-linux-gnu-gcc \ - $(uname --machine)-linux-gnu-gcc \ - /usr/bin/$(uname --machine)-linux-gnu-gcc-${gcc_version} 100 && \ - update-alternatives --install \ - /usr/bin/$(uname --machine)-linux-gnu-g++ \ - $(uname --machine)-linux-gnu-g++ \ - /usr/bin/$(uname --machine)-linux-gnu-g++-${gcc_version} 100 && \ - update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 100 && \ - update-alternatives --set cc /usr/bin/gcc && \ - update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 100 && \ - update-alternatives --set c++ /usr/bin/g++; \ - fi - -COPY ci/scripts/install_minio.sh /arrow/ci/scripts/ -RUN /arrow/ci/scripts/install_minio.sh latest /usr/local - -COPY ci/scripts/install_gcs_testbench.sh /arrow/ci/scripts/ -RUN /arrow/ci/scripts/install_gcs_testbench.sh default - -COPY ci/scripts/install_azurite.sh /arrow/ci/scripts/ -RUN /arrow/ci/scripts/install_azurite.sh - -COPY ci/scripts/install_sccache.sh /arrow/ci/scripts/ -RUN /arrow/ci/scripts/install_sccache.sh unknown-linux-musl /usr/local/bin - -# Prioritize system packages and local installation -ENV ARROW_ACERO=ON \ - ARROW_AZURE=ON \ - ARROW_BUILD_STATIC=ON \ - ARROW_BUILD_TESTS=ON \ - ARROW_DEPENDENCY_SOURCE=SYSTEM \ - ARROW_DATASET=ON \ - ARROW_FLIGHT=ON \ - ARROW_FLIGHT_SQL=ON \ - ARROW_GANDIVA=ON \ - ARROW_GCS=ON \ - ARROW_HDFS=ON \ - ARROW_HOME=/usr/local \ - ARROW_INSTALL_NAME_RPATH=OFF \ - ARROW_ORC=ON \ - ARROW_PARQUET=ON \ - ARROW_S3=ON \ - ARROW_SUBSTRAIT=ON \ - ARROW_USE_ASAN=OFF \ - ARROW_USE_CCACHE=ON \ - ARROW_USE_MOLD=ON \ - ARROW_USE_UBSAN=OFF \ - ARROW_WITH_BROTLI=ON \ - ARROW_WITH_BZ2=ON \ - ARROW_WITH_LZ4=ON \ - ARROW_WITH_OPENTELEMETRY=ON \ - ARROW_WITH_SNAPPY=ON \ - ARROW_WITH_ZLIB=ON \ - ARROW_WITH_ZSTD=ON \ - ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-${llvm}/bin/llvm-symbolizer \ - AWSSDK_SOURCE=BUNDLED \ - Azure_SOURCE=BUNDLED \ - google_cloud_cpp_storage_SOURCE=BUNDLED \ - ORC_SOURCE=BUNDLED \ - PARQUET_BUILD_EXAMPLES=ON \ - PARQUET_BUILD_EXECUTABLES=ON \ - PATH=/usr/lib/ccache/:$PATH \ - PYTHON=python3 \ - xsimd_SOURCE=BUNDLED diff --git a/ci/docker/ubuntu-swift.dockerfile b/ci/docker/ubuntu-swift.dockerfile index 26950b806d1..4789c9188c2 100644 --- a/ci/docker/ubuntu-swift.dockerfile +++ b/ci/docker/ubuntu-swift.dockerfile @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -FROM swift:5.9.0 +FROM swift:5.7.3 # Go is needed for generating test data RUN apt-get update -y -q && \ diff --git a/ci/etc/valgrind-cran.supp b/ci/etc/valgrind-cran.supp index e93c2a3465f..4d292202608 100644 --- a/ci/etc/valgrind-cran.supp +++ b/ci/etc/valgrind-cran.supp @@ -16,7 +16,7 @@ # under the License. { - # `testthat::skip()`s cause a valgrind error that does not show up on CRAN. + # `testthat::skip()`s cause a valgrind error that does not show up on CRAN. Memcheck:Cond fun:gregexpr_Regexc @@ -32,21 +32,3 @@ fun:getvar fun:bcEval } -{ - # This also doesn't seem to cause issues on CRAN, so suppress it. - - Memcheck:Leak - match-leak-kinds: possible - fun:malloc - fun:libdeflate_alloc_compressor - fun:do_memCompress - fun:bcEval_loop - fun:bcEval - fun:Rf_eval - fun:R_execClosure - fun:applyClosure_core - fun:Rf_applyClosure - fun:Rf_eval - fun:do_set - fun:Rf_eval -} diff --git a/ci/scripts/PKGBUILD b/ci/scripts/PKGBUILD index ed68faae950..50d4fc28c58 100644 --- a/ci/scripts/PKGBUILD +++ b/ci/scripts/PKGBUILD @@ -18,7 +18,7 @@ _realname=arrow pkgbase=mingw-w64-${_realname} pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}" -pkgver=17.0.0.9000 +pkgver=15.0.0.9000 pkgrel=8000 pkgdesc="Apache Arrow is a cross-language development platform for in-memory data (mingw-w64)" arch=("any") @@ -69,12 +69,6 @@ build() { mkdir -p ${cpp_build_dir} pushd ${cpp_build_dir} - # We use static cURL in google-cloud-cpp. If we can use cURL's CMake - # package, we don't need to specify CURL_STATICLIB explicitly. But - # we don't have cURL's CMake package. We need to use CXXFLAGS - # instead of ARROW_CXXFLAGS because ARROW_CXXFLAGS aren't passed to - # ExternProjects. - export CXXFLAGS="${CXXFLAGS} -DCURL_STATICLIB" # The Rtools libutf8proc is a static lib, but Findutf8proc.cmake doesn't # set the appropriate compiler definition. export CPPFLAGS="-DUTF8PROC_STATIC" diff --git a/ci/scripts/c_glib_build.sh b/ci/scripts/c_glib_build.sh index 059e45e2a13..6e3e33afb15 100755 --- a/ci/scripts/c_glib_build.sh +++ b/ci/scripts/c_glib_build.sh @@ -26,45 +26,20 @@ build_root=${2} : ${ARROW_GLIB_WERROR:=false} : ${ARROW_GLIB_VAPI:=true} : ${BUILD_DOCS_C_GLIB:=OFF} -with_doc=$([ "${BUILD_DOCS_C_GLIB}" == "ON" ] && echo "true" || echo "false") +with_gtk_doc=$([ "${BUILD_DOCS_C_GLIB}" == "ON" ] && echo "true" || echo "false") +export PKG_CONFIG_PATH=${ARROW_HOME}/lib/pkgconfig -if [ -n "${MSYSTEM:-}" ]; then - # Fix ARROW_HOME when running under MSYS2 - export ARROW_HOME="$(cygpath --unix "${ARROW_HOME}")" -fi - -export PATH="${ARROW_HOME}/bin:${PATH}" - -meson_pkg_config_path="${ARROW_HOME}/lib/pkgconfig" +export CFLAGS="-DARROW_NO_DEPRECATED_API" +export CXXFLAGS="-DARROW_NO_DEPRECATED_API" mkdir -p ${build_dir} -if [ -n "${VCPKG_ROOT:-}" -a -n "${VCPKG_TRIPLET:-}" ]; then - vcpkg_install_root="${build_root}/vcpkg_installed" - $VCPKG_ROOT/vcpkg install --x-manifest-root=${source_dir} --x-install-root=${vcpkg_install_root} - export PKG_CONFIG="${vcpkg_install_root}/${VCPKG_TRIPLET}/tools/pkgconf/pkgconf.exe" - meson_pkg_config_path="${vcpkg_install_root}/${VCPKG_TRIPLET}/lib/pkgconfig:${meson_pkg_config_path}" - # Configure PATH for libraries required by the gobject-introspection generated binary - cpp_vcpkg_install_root="${build_root}/cpp/vcpkg_installed" - PATH="${cpp_vcpkg_install_root}/${VCPKG_TRIPLET}/debug/bin:${PATH}" - PATH="${cpp_vcpkg_install_root}/${VCPKG_TRIPLET}/bin:${PATH}" - export PATH="${vcpkg_install_root}/${VCPKG_TRIPLET}/bin:${PATH}" -fi - -if [ -n "${VCToolsInstallDir:-}" -a -n "${MSYSTEM:-}" ]; then - # Meson finds the gnu link.exe instead of MSVC link.exe when running in MSYS2/git bash, - # so we need to make sure the MSCV link.exe is first in $PATH - export PATH="$(cygpath --unix "${VCToolsInstallDir}")/bin/HostX64/x64:${PATH}" -fi - # Build with Meson meson setup \ - --backend=ninja \ --prefix=$ARROW_HOME \ --libdir=lib \ - --pkg-config-path="${meson_pkg_config_path}" \ - -Ddoc=${with_doc} \ + -Dgtk_doc=${with_gtk_doc} \ -Dvapi=${ARROW_GLIB_VAPI} \ -Dwerror=${ARROW_GLIB_WERROR} \ ${build_dir} \ @@ -77,5 +52,5 @@ popd if [ "${BUILD_DOCS_C_GLIB}" == "ON" ]; then mkdir -p ${build_root}/docs/c_glib - cp -a ${ARROW_HOME}/share/doc/*-glib/ ${build_root}/docs/c_glib/ + rsync -a ${ARROW_HOME}/share/gtk-doc/html/ ${build_root}/docs/c_glib fi diff --git a/ci/scripts/c_glib_test.sh b/ci/scripts/c_glib_test.sh index 02753872dcb..f8083c7759d 100755 --- a/ci/scripts/c_glib_test.sh +++ b/ci/scripts/c_glib_test.sh @@ -24,7 +24,6 @@ build_dir=${2}/c_glib : ${ARROW_GLIB_VAPI:=true} -export DYLD_LIBRARY_PATH=${ARROW_HOME}/lib:${DYLD_LIBRARY_PATH} export LD_LIBRARY_PATH=${ARROW_HOME}/lib:${LD_LIBRARY_PATH} export PKG_CONFIG_PATH=${ARROW_HOME}/lib/pkgconfig export GI_TYPELIB_PATH=${ARROW_HOME}/lib/girepository-1.0 diff --git a/ci/scripts/conan_build.sh b/ci/scripts/conan_build.sh index 0ea3fc29192..b1ee0a8fc2a 100755 --- a/ci/scripts/conan_build.sh +++ b/ci/scripts/conan_build.sh @@ -30,39 +30,34 @@ export CONAN_HOOK_ERROR_LEVEL=40 conan_args=() conan_args+=(--build=missing) if [ -n "${ARROW_CONAN_PARQUET:-}" ]; then - conan_args+=(--options arrow/*:parquet=${ARROW_CONAN_PARQUET}) - conan_args+=(--options arrow/*:with_thrift=${ARROW_CONAN_PARQUET}) - conan_args+=(--options arrow/*:with_boost=${ARROW_CONAN_PARQUET}) + conan_args+=(--options arrow:parquet=${ARROW_CONAN_PARQUET}) fi if [ -n "${ARROW_CONAN_WITH_BROTLI:-}" ]; then - conan_args+=(--options arrow/*:with_brotli=${ARROW_CONAN_WITH_BROTLI}) + conan_args+=(--options arrow:with_brotli=${ARROW_CONAN_WITH_BROTLI}) fi if [ -n "${ARROW_CONAN_WITH_BZ2:-}" ]; then - conan_args+=(--options arrow/*:with_bz2=${ARROW_CONAN_WITH_BZ2}) + conan_args+=(--options arrow:with_bz2=${ARROW_CONAN_WITH_BZ2}) fi if [ -n "${ARROW_CONAN_WITH_FLIGHT_RPC:-}" ]; then - conan_args+=(--options arrow/*:with_flight_rpc=${ARROW_CONAN_WITH_FLIGHT_RPC}) - conan_args+=(--options arrow/*:with_grpc=${ARROW_CONAN_WITH_FLIGHT_RPC}) - conan_args+=(--options arrow/*:with_protobuf=${ARROW_CONAN_WITH_FLIGHT_RPC}) - conan_args+=(--options arrow/*:with_re2=${ARROW_CONAN_WITH_FLIGHT_RPC}) + conan_args+=(--options arrow:with_flight_rpc=${ARROW_CONAN_WITH_FLIGHT_RPC}) fi if [ -n "${ARROW_CONAN_WITH_GLOG:-}" ]; then - conan_args+=(--options arrow/*:with_glog=${ARROW_CONAN_WITH_GLOG}) + conan_args+=(--options arrow:with_glog=${ARROW_CONAN_WITH_GLOG}) fi if [ -n "${ARROW_CONAN_WITH_JEMALLOC:-}" ]; then - conan_args+=(--options arrow/*:with_jemalloc=${ARROW_CONAN_WITH_JEMALLOC}) + conan_args+=(--options arrow:with_jemalloc=${ARROW_CONAN_WITH_JEMALLOC}) fi if [ -n "${ARROW_CONAN_WITH_JSON:-}" ]; then - conan_args+=(--options arrow/*:with_json=${ARROW_CONAN_WITH_JSON}) + conan_args+=(--options arrow:with_json=${ARROW_CONAN_WITH_JSON}) fi if [ -n "${ARROW_CONAN_WITH_LZ4:-}" ]; then - conan_args+=(--options arrow/*:with_lz4=${ARROW_CONAN_WITH_LZ4}) + conan_args+=(--options arrow:with_lz4=${ARROW_CONAN_WITH_LZ4}) fi if [ -n "${ARROW_CONAN_WITH_SNAPPY:-}" ]; then - conan_args+=(--options arrow/*:with_snappy=${ARROW_CONAN_WITH_SNAPPY}) + conan_args+=(--options arrow:with_snappy=${ARROW_CONAN_WITH_SNAPPY}) fi if [ -n "${ARROW_CONAN_WITH_ZSTD:-}" ]; then - conan_args+=(--options arrow/*:with_zstd=${ARROW_CONAN_WITH_ZSTD}) + conan_args+=(--options arrow:with_zstd=${ARROW_CONAN_WITH_ZSTD}) fi version=$(grep '^set(ARROW_VERSION ' ${ARROW_HOME}/cpp/CMakeLists.txt | \ diff --git a/ci/scripts/cpp_build.sh b/ci/scripts/cpp_build.sh index bc2bba915f7..60cab1a9fea 100755 --- a/ci/scripts/cpp_build.sh +++ b/ci/scripts/cpp_build.sh @@ -30,7 +30,7 @@ if [ -x "$(command -v git)" ]; then fi # TODO(kszucs): consider to move these to CMake -if [ ! -z "${CONDA_PREFIX}" ] && [ "${ARROW_EMSCRIPTEN:-OFF}" = "OFF" ]; then +if [ ! -z "${CONDA_PREFIX}" ]; then echo -e "===\n=== Conda environment for build\n===" conda list @@ -92,138 +92,111 @@ esac mkdir -p ${build_dir} pushd ${build_dir} -if [ "${ARROW_EMSCRIPTEN:-OFF}" = "ON" ]; then - if [ "${UBUNTU}" = "20.04" ]; then - echo "arrow emscripten build is not supported on Ubuntu 20.04, run with UBUNTU=22.04" - exit -1 - fi - n_jobs=2 # Emscripten build fails on docker unless this is set really low - source ~/emsdk/emsdk_env.sh - export CMAKE_INSTALL_PREFIX=$(em-config CACHE)/sysroot - # conda sets LDFLAGS / CFLAGS etc. which break - # emcmake so we unset them - unset LDFLAGS CFLAGS CXXFLAGS CPPFLAGS - emcmake cmake \ - --preset=ninja-${ARROW_BUILD_TYPE:-debug}-emscripten \ - -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE_MAKEFILE:-OFF} \ - -DCMAKE_C_FLAGS="${CFLAGS:-}" \ - -DCMAKE_CXX_FLAGS="${CXXFLAGS:-}" \ - -DCMAKE_CXX_STANDARD="${CMAKE_CXX_STANDARD:-17}" \ - -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR:-lib} \ - -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}} \ - -DCMAKE_UNITY_BUILD=${CMAKE_UNITY_BUILD:-OFF} \ - ${ARROW_CMAKE_ARGS} \ - ${source_dir} -else - cmake \ - -Dabsl_SOURCE=${absl_SOURCE:-} \ - -DARROW_ACERO=${ARROW_ACERO:-OFF} \ - -DARROW_AZURE=${ARROW_AZURE:-OFF} \ - -DARROW_BOOST_USE_SHARED=${ARROW_BOOST_USE_SHARED:-ON} \ - -DARROW_BUILD_BENCHMARKS_REFERENCE=${ARROW_BUILD_BENCHMARKS:-OFF} \ - -DARROW_BUILD_BENCHMARKS=${ARROW_BUILD_BENCHMARKS:-OFF} \ - -DARROW_BUILD_EXAMPLES=${ARROW_BUILD_EXAMPLES:-OFF} \ - -DARROW_BUILD_INTEGRATION=${ARROW_BUILD_INTEGRATION:-OFF} \ - -DARROW_BUILD_OPENMP_BENCHMARKS=${ARROW_BUILD_OPENMP_BENCHMARKS:-OFF} \ - -DARROW_BUILD_SHARED=${ARROW_BUILD_SHARED:-ON} \ - -DARROW_BUILD_STATIC=${ARROW_BUILD_STATIC:-ON} \ - -DARROW_BUILD_TESTS=${ARROW_BUILD_TESTS:-OFF} \ - -DARROW_BUILD_UTILITIES=${ARROW_BUILD_UTILITIES:-ON} \ - -DARROW_COMPUTE=${ARROW_COMPUTE:-ON} \ - -DARROW_CSV=${ARROW_CSV:-ON} \ - -DARROW_CUDA=${ARROW_CUDA:-OFF} \ - -DARROW_CXXFLAGS=${ARROW_CXXFLAGS:-} \ - -DARROW_CXX_FLAGS_DEBUG="${ARROW_CXX_FLAGS_DEBUG:-}" \ - -DARROW_CXX_FLAGS_RELEASE="${ARROW_CXX_FLAGS_RELEASE:-}" \ - -DARROW_CXX_FLAGS_RELWITHDEBINFO="${ARROW_CXX_FLAGS_RELWITHDEBINFO:-}" \ - -DARROW_C_FLAGS_DEBUG="${ARROW_C_FLAGS_DEBUG:-}" \ - -DARROW_C_FLAGS_RELEASE="${ARROW_C_FLAGS_RELEASE:-}" \ - -DARROW_C_FLAGS_RELWITHDEBINFO="${ARROW_C_FLAGS_RELWITHDEBINFO:-}" \ - -DARROW_DATASET=${ARROW_DATASET:-OFF} \ - -DARROW_DEPENDENCY_SOURCE=${ARROW_DEPENDENCY_SOURCE:-AUTO} \ - -DARROW_DEPENDENCY_USE_SHARED=${ARROW_DEPENDENCY_USE_SHARED:-ON} \ - -DARROW_ENABLE_THREADING=${ARROW_ENABLE_THREADING:-ON} \ - -DARROW_ENABLE_TIMING_TESTS=${ARROW_ENABLE_TIMING_TESTS:-ON} \ - -DARROW_EXTRA_ERROR_CONTEXT=${ARROW_EXTRA_ERROR_CONTEXT:-OFF} \ - -DARROW_FILESYSTEM=${ARROW_FILESYSTEM:-ON} \ - -DARROW_FLIGHT=${ARROW_FLIGHT:-OFF} \ - -DARROW_FLIGHT_SQL=${ARROW_FLIGHT_SQL:-OFF} \ - -DARROW_FUZZING=${ARROW_FUZZING:-OFF} \ - -DARROW_GANDIVA_PC_CXX_FLAGS=${ARROW_GANDIVA_PC_CXX_FLAGS:-} \ - -DARROW_GANDIVA=${ARROW_GANDIVA:-OFF} \ - -DARROW_GCS=${ARROW_GCS:-OFF} \ - -DARROW_HDFS=${ARROW_HDFS:-ON} \ - -DARROW_INSTALL_NAME_RPATH=${ARROW_INSTALL_NAME_RPATH:-ON} \ - -DARROW_JEMALLOC=${ARROW_JEMALLOC:-ON} \ - -DARROW_JSON=${ARROW_JSON:-ON} \ - -DARROW_LARGE_MEMORY_TESTS=${ARROW_LARGE_MEMORY_TESTS:-OFF} \ - -DARROW_MIMALLOC=${ARROW_MIMALLOC:-OFF} \ - -DARROW_ORC=${ARROW_ORC:-OFF} \ - -DARROW_PARQUET=${ARROW_PARQUET:-OFF} \ - -DARROW_RUNTIME_SIMD_LEVEL=${ARROW_RUNTIME_SIMD_LEVEL:-MAX} \ - -DARROW_S3=${ARROW_S3:-OFF} \ - -DARROW_SIMD_LEVEL=${ARROW_SIMD_LEVEL:-DEFAULT} \ - -DARROW_SKYHOOK=${ARROW_SKYHOOK:-OFF} \ - -DARROW_SUBSTRAIT=${ARROW_SUBSTRAIT:-OFF} \ - -DARROW_TEST_LINKAGE=${ARROW_TEST_LINKAGE:-shared} \ - -DARROW_TEST_MEMCHECK=${ARROW_TEST_MEMCHECK:-OFF} \ - -DARROW_USE_ASAN=${ARROW_USE_ASAN:-OFF} \ - -DARROW_USE_CCACHE=${ARROW_USE_CCACHE:-ON} \ - -DARROW_USE_GLOG=${ARROW_USE_GLOG:-OFF} \ - -DARROW_USE_LD_GOLD=${ARROW_USE_LD_GOLD:-OFF} \ - -DARROW_USE_LLD=${ARROW_USE_LLD:-OFF} \ - -DARROW_USE_MOLD=${ARROW_USE_MOLD:-OFF} \ - -DARROW_USE_PRECOMPILED_HEADERS=${ARROW_USE_PRECOMPILED_HEADERS:-OFF} \ - -DARROW_USE_STATIC_CRT=${ARROW_USE_STATIC_CRT:-OFF} \ - -DARROW_USE_TSAN=${ARROW_USE_TSAN:-OFF} \ - -DARROW_USE_UBSAN=${ARROW_USE_UBSAN:-OFF} \ - -DARROW_VERBOSE_THIRDPARTY_BUILD=${ARROW_VERBOSE_THIRDPARTY_BUILD:-OFF} \ - -DARROW_WITH_BROTLI=${ARROW_WITH_BROTLI:-OFF} \ - -DARROW_WITH_BZ2=${ARROW_WITH_BZ2:-OFF} \ - -DARROW_WITH_LZ4=${ARROW_WITH_LZ4:-OFF} \ - -DARROW_WITH_OPENTELEMETRY=${ARROW_WITH_OPENTELEMETRY:-OFF} \ - -DARROW_WITH_MUSL=${ARROW_WITH_MUSL:-OFF} \ - -DARROW_WITH_SNAPPY=${ARROW_WITH_SNAPPY:-OFF} \ - -DARROW_WITH_UCX=${ARROW_WITH_UCX:-OFF} \ - -DARROW_WITH_UTF8PROC=${ARROW_WITH_UTF8PROC:-ON} \ - -DARROW_WITH_ZLIB=${ARROW_WITH_ZLIB:-OFF} \ - -DARROW_WITH_ZSTD=${ARROW_WITH_ZSTD:-OFF} \ - -DAWSSDK_SOURCE=${AWSSDK_SOURCE:-} \ - -DAzure_SOURCE=${Azure_SOURCE:-} \ - -Dbenchmark_SOURCE=${benchmark_SOURCE:-} \ - -DBOOST_SOURCE=${BOOST_SOURCE:-} \ - -DBrotli_SOURCE=${Brotli_SOURCE:-} \ - -DBUILD_WARNING_LEVEL=${BUILD_WARNING_LEVEL:-CHECKIN} \ - -Dc-ares_SOURCE=${cares_SOURCE:-} \ - -DCMAKE_BUILD_TYPE=${ARROW_BUILD_TYPE:-debug} \ - -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE_MAKEFILE:-OFF} \ - -DCMAKE_C_FLAGS="${CFLAGS:-}" \ - -DCMAKE_CXX_FLAGS="${CXXFLAGS:-}" \ - -DCMAKE_CXX_STANDARD="${CMAKE_CXX_STANDARD:-17}" \ - -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR:-lib} \ - -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}} \ - -DCMAKE_UNITY_BUILD=${CMAKE_UNITY_BUILD:-OFF} \ - -Dgflags_SOURCE=${gflags_SOURCE:-} \ - -Dgoogle_cloud_cpp_storage_SOURCE=${google_cloud_cpp_storage_SOURCE:-} \ - -DgRPC_SOURCE=${gRPC_SOURCE:-} \ - -DGTest_SOURCE=${GTest_SOURCE:-} \ - -Dlz4_SOURCE=${lz4_SOURCE:-} \ - -DORC_SOURCE=${ORC_SOURCE:-} \ - -DPARQUET_BUILD_EXAMPLES=${PARQUET_BUILD_EXAMPLES:-OFF} \ - -DPARQUET_BUILD_EXECUTABLES=${PARQUET_BUILD_EXECUTABLES:-OFF} \ - -DPARQUET_REQUIRE_ENCRYPTION=${PARQUET_REQUIRE_ENCRYPTION:-ON} \ - -DProtobuf_SOURCE=${Protobuf_SOURCE:-} \ - -DRapidJSON_SOURCE=${RapidJSON_SOURCE:-} \ - -Dre2_SOURCE=${re2_SOURCE:-} \ - -DSnappy_SOURCE=${Snappy_SOURCE:-} \ - -DThrift_SOURCE=${Thrift_SOURCE:-} \ - -Dutf8proc_SOURCE=${utf8proc_SOURCE:-} \ - -Dzstd_SOURCE=${zstd_SOURCE:-} \ - -Dxsimd_SOURCE=${xsimd_SOURCE:-} \ - -G "${CMAKE_GENERATOR:-Ninja}" \ - ${ARROW_CMAKE_ARGS} \ - ${source_dir} -fi +cmake \ + -Dabsl_SOURCE=${absl_SOURCE:-} \ + -DARROW_ACERO=${ARROW_ACERO:-OFF} \ + -DARROW_AZURE=${ARROW_AZURE:-OFF} \ + -DARROW_BOOST_USE_SHARED=${ARROW_BOOST_USE_SHARED:-ON} \ + -DARROW_BUILD_BENCHMARKS_REFERENCE=${ARROW_BUILD_BENCHMARKS:-OFF} \ + -DARROW_BUILD_BENCHMARKS=${ARROW_BUILD_BENCHMARKS:-OFF} \ + -DARROW_BUILD_EXAMPLES=${ARROW_BUILD_EXAMPLES:-OFF} \ + -DARROW_BUILD_INTEGRATION=${ARROW_BUILD_INTEGRATION:-OFF} \ + -DARROW_BUILD_SHARED=${ARROW_BUILD_SHARED:-ON} \ + -DARROW_BUILD_STATIC=${ARROW_BUILD_STATIC:-ON} \ + -DARROW_BUILD_TESTS=${ARROW_BUILD_TESTS:-OFF} \ + -DARROW_BUILD_UTILITIES=${ARROW_BUILD_UTILITIES:-ON} \ + -DARROW_COMPUTE=${ARROW_COMPUTE:-ON} \ + -DARROW_CSV=${ARROW_CSV:-ON} \ + -DARROW_CUDA=${ARROW_CUDA:-OFF} \ + -DARROW_CXXFLAGS=${ARROW_CXXFLAGS:-} \ + -DARROW_CXX_FLAGS_DEBUG="${ARROW_CXX_FLAGS_DEBUG:-}" \ + -DARROW_CXX_FLAGS_RELEASE="${ARROW_CXX_FLAGS_RELEASE:-}" \ + -DARROW_CXX_FLAGS_RELWITHDEBINFO="${ARROW_CXX_FLAGS_RELWITHDEBINFO:-}" \ + -DARROW_C_FLAGS_DEBUG="${ARROW_C_FLAGS_DEBUG:-}" \ + -DARROW_C_FLAGS_RELEASE="${ARROW_C_FLAGS_RELEASE:-}" \ + -DARROW_C_FLAGS_RELWITHDEBINFO="${ARROW_C_FLAGS_RELWITHDEBINFO:-}" \ + -DARROW_DATASET=${ARROW_DATASET:-OFF} \ + -DARROW_DEPENDENCY_SOURCE=${ARROW_DEPENDENCY_SOURCE:-AUTO} \ + -DARROW_ENABLE_THREADING=${ARROW_ENABLE_THREADING:-ON} \ + -DARROW_ENABLE_TIMING_TESTS=${ARROW_ENABLE_TIMING_TESTS:-ON} \ + -DARROW_EXTRA_ERROR_CONTEXT=${ARROW_EXTRA_ERROR_CONTEXT:-OFF} \ + -DARROW_FILESYSTEM=${ARROW_FILESYSTEM:-ON} \ + -DARROW_FLIGHT=${ARROW_FLIGHT:-OFF} \ + -DARROW_FLIGHT_SQL=${ARROW_FLIGHT_SQL:-OFF} \ + -DARROW_FUZZING=${ARROW_FUZZING:-OFF} \ + -DARROW_GANDIVA_PC_CXX_FLAGS=${ARROW_GANDIVA_PC_CXX_FLAGS:-} \ + -DARROW_GANDIVA=${ARROW_GANDIVA:-OFF} \ + -DARROW_GCS=${ARROW_GCS:-OFF} \ + -DARROW_HDFS=${ARROW_HDFS:-ON} \ + -DARROW_INSTALL_NAME_RPATH=${ARROW_INSTALL_NAME_RPATH:-ON} \ + -DARROW_JEMALLOC=${ARROW_JEMALLOC:-ON} \ + -DARROW_JSON=${ARROW_JSON:-ON} \ + -DARROW_LARGE_MEMORY_TESTS=${ARROW_LARGE_MEMORY_TESTS:-OFF} \ + -DARROW_MIMALLOC=${ARROW_MIMALLOC:-OFF} \ + -DARROW_NO_DEPRECATED_API=${ARROW_NO_DEPRECATED_API:-OFF} \ + -DARROW_ORC=${ARROW_ORC:-OFF} \ + -DARROW_PARQUET=${ARROW_PARQUET:-OFF} \ + -DARROW_RUNTIME_SIMD_LEVEL=${ARROW_RUNTIME_SIMD_LEVEL:-MAX} \ + -DARROW_S3=${ARROW_S3:-OFF} \ + -DARROW_SIMD_LEVEL=${ARROW_SIMD_LEVEL:-DEFAULT} \ + -DARROW_SKYHOOK=${ARROW_SKYHOOK:-OFF} \ + -DARROW_SUBSTRAIT=${ARROW_SUBSTRAIT:-OFF} \ + -DARROW_TEST_LINKAGE=${ARROW_TEST_LINKAGE:-shared} \ + -DARROW_TEST_MEMCHECK=${ARROW_TEST_MEMCHECK:-OFF} \ + -DARROW_USE_ASAN=${ARROW_USE_ASAN:-OFF} \ + -DARROW_USE_CCACHE=${ARROW_USE_CCACHE:-ON} \ + -DARROW_USE_GLOG=${ARROW_USE_GLOG:-OFF} \ + -DARROW_USE_LD_GOLD=${ARROW_USE_LD_GOLD:-OFF} \ + -DARROW_USE_PRECOMPILED_HEADERS=${ARROW_USE_PRECOMPILED_HEADERS:-OFF} \ + -DARROW_USE_STATIC_CRT=${ARROW_USE_STATIC_CRT:-OFF} \ + -DARROW_USE_TSAN=${ARROW_USE_TSAN:-OFF} \ + -DARROW_USE_UBSAN=${ARROW_USE_UBSAN:-OFF} \ + -DARROW_VERBOSE_THIRDPARTY_BUILD=${ARROW_VERBOSE_THIRDPARTY_BUILD:-OFF} \ + -DARROW_WITH_BROTLI=${ARROW_WITH_BROTLI:-OFF} \ + -DARROW_WITH_BZ2=${ARROW_WITH_BZ2:-OFF} \ + -DARROW_WITH_LZ4=${ARROW_WITH_LZ4:-OFF} \ + -DARROW_WITH_OPENTELEMETRY=${ARROW_WITH_OPENTELEMETRY:-OFF} \ + -DARROW_WITH_MUSL=${ARROW_WITH_MUSL:-OFF} \ + -DARROW_WITH_SNAPPY=${ARROW_WITH_SNAPPY:-OFF} \ + -DARROW_WITH_UCX=${ARROW_WITH_UCX:-OFF} \ + -DARROW_WITH_UTF8PROC=${ARROW_WITH_UTF8PROC:-ON} \ + -DARROW_WITH_ZLIB=${ARROW_WITH_ZLIB:-OFF} \ + -DARROW_WITH_ZSTD=${ARROW_WITH_ZSTD:-OFF} \ + -DAWSSDK_SOURCE=${AWSSDK_SOURCE:-} \ + -DAzure_SOURCE=${Azure_SOURCE:-} \ + -Dbenchmark_SOURCE=${benchmark_SOURCE:-} \ + -DBOOST_SOURCE=${BOOST_SOURCE:-} \ + -DBrotli_SOURCE=${Brotli_SOURCE:-} \ + -DBUILD_WARNING_LEVEL=${BUILD_WARNING_LEVEL:-CHECKIN} \ + -Dc-ares_SOURCE=${cares_SOURCE:-} \ + -DCMAKE_BUILD_TYPE=${ARROW_BUILD_TYPE:-debug} \ + -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE_MAKEFILE:-OFF} \ + -DCMAKE_C_FLAGS="${CFLAGS:-}" \ + -DCMAKE_CXX_FLAGS="${CXXFLAGS:-}" \ + -DCMAKE_CXX_STANDARD="${CMAKE_CXX_STANDARD:-17}" \ + -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR:-lib} \ + -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX:-${ARROW_HOME}} \ + -DCMAKE_UNITY_BUILD=${CMAKE_UNITY_BUILD:-OFF} \ + -Dgflags_SOURCE=${gflags_SOURCE:-} \ + -Dgoogle_cloud_cpp_storage_SOURCE=${google_cloud_cpp_storage_SOURCE:-} \ + -DgRPC_SOURCE=${gRPC_SOURCE:-} \ + -DGTest_SOURCE=${GTest_SOURCE:-} \ + -Dlz4_SOURCE=${lz4_SOURCE:-} \ + -DORC_SOURCE=${ORC_SOURCE:-} \ + -DPARQUET_BUILD_EXAMPLES=${PARQUET_BUILD_EXAMPLES:-OFF} \ + -DPARQUET_BUILD_EXECUTABLES=${PARQUET_BUILD_EXECUTABLES:-OFF} \ + -DPARQUET_REQUIRE_ENCRYPTION=${PARQUET_REQUIRE_ENCRYPTION:-ON} \ + -DProtobuf_SOURCE=${Protobuf_SOURCE:-} \ + -DRapidJSON_SOURCE=${RapidJSON_SOURCE:-} \ + -Dre2_SOURCE=${re2_SOURCE:-} \ + -DSnappy_SOURCE=${Snappy_SOURCE:-} \ + -DThrift_SOURCE=${Thrift_SOURCE:-} \ + -Dutf8proc_SOURCE=${utf8proc_SOURCE:-} \ + -Dzstd_SOURCE=${zstd_SOURCE:-} \ + -Dxsimd_SOURCE=${xsimd_SOURCE:-} \ + -G "${CMAKE_GENERATOR:-Ninja}" \ + ${ARROW_CMAKE_ARGS} \ + ${source_dir} export CMAKE_BUILD_PARALLEL_LEVEL=${CMAKE_BUILD_PARALLEL_LEVEL:-$[${n_jobs} + 1]} time cmake --build . --target install @@ -234,17 +207,12 @@ find . -name "*.o" -delete popd if [ -x "$(command -v ldconfig)" ]; then - if [ -x "$(command -v sudo)" ]; then - SUDO=sudo - else - SUDO= - fi - ${SUDO} ldconfig ${ARROW_HOME}/${CMAKE_INSTALL_LIBDIR:-lib} + ldconfig ${ARROW_HOME}/${CMAKE_INSTALL_LIBDIR:-lib} fi if [ "${ARROW_USE_CCACHE}" == "ON" ]; then - echo -e "===\n=== ccache statistics after build\n===" - ccache -sv 2>/dev/null || ccache -s + echo -e "===\n=== ccache statistics after build\n===" + ccache -sv 2>/dev/null || ccache -s fi if command -v sccache &> /dev/null; then @@ -254,6 +222,6 @@ fi if [ "${BUILD_DOCS_CPP}" == "ON" ]; then pushd ${source_dir}/apidoc - OUTPUT_DIRECTORY=${build_dir}/apidoc doxygen + doxygen popd fi diff --git a/ci/scripts/cpp_test.sh b/ci/scripts/cpp_test.sh index 7912bf23e49..1d685c51a93 100755 --- a/ci/scripts/cpp_test.sh +++ b/ci/scripts/cpp_test.sh @@ -49,9 +49,6 @@ case "$(uname)" in ;; Darwin) n_jobs=$(sysctl -n hw.ncpu) - # TODO: https://github.com/apache/arrow/issues/40410 - exclude_tests="arrow-s3fs-test" - ctest_options+=(--exclude-regex "${exclude_tests}") ;; MINGW*) n_jobs=${NUMBER_OF_PROCESSORS:-1} @@ -80,10 +77,6 @@ case "$(uname)" in ;; esac -if [ "${ARROW_EMSCRIPTEN:-OFF}" = "ON" ]; then - n_jobs=1 # avoid spurious fails on emscripten due to loading too many big executables -fi - pushd ${build_dir} if [ -z "${PYTHON}" ] && ! which python > /dev/null 2>&1; then @@ -93,7 +86,6 @@ ctest \ --label-regex unittest \ --output-on-failure \ --parallel ${n_jobs} \ - --repeat until-pass:3 \ --timeout ${ARROW_CTEST_TIMEOUT:-300} \ "${ctest_options[@]}" \ "$@" diff --git a/ci/scripts/go_bench.sh b/ci/scripts/go_bench.sh old mode 100755 new mode 100644 diff --git a/ci/scripts/go_cgo_python_test.sh b/ci/scripts/go_cgo_python_test.sh index a76b6d0613a..ef98e414bbf 100755 --- a/ci/scripts/go_cgo_python_test.sh +++ b/ci/scripts/go_cgo_python_test.sh @@ -21,10 +21,6 @@ set -ex source_dir=${1}/go -if [ -n "${ARROW_PYTHON_VENV:-}" ]; then - . "${ARROW_PYTHON_VENV}/bin/activate" -fi - export GOFLAGS="${GOFLAGS} -gcflags=all=-d=checkptr" pushd ${source_dir}/arrow/cdata/test diff --git a/ci/scripts/install_azurite.sh b/ci/scripts/install_azurite.sh index b8b1618bed3..2e7008360fd 100755 --- a/ci/scripts/install_azurite.sh +++ b/ci/scripts/install_azurite.sh @@ -19,32 +19,19 @@ set -e -node_version="$(node --version)" -echo "node version = ${node_version}" - -case "${node_version}" in - v12*) - # Pin azurite to 3.29.0 due to https://github.com/apache/arrow/issues/41505 - azurite_version=v3.29.0 - ;; - *) - azurite_version=latest - ;; -esac - case "$(uname)" in Darwin) - npm install -g azurite@${azurite_version} + npm install -g azurite which azurite ;; MINGW*) choco install nodejs.install - npm install -g azurite@${azurite_version} + npm install -g azurite ;; Linux) - npm install -g azurite@${azurite_version} + npm install -g azurite which azurite ;; esac - -echo "azurite version = $(azurite --version)" +echo "node version = $(node --version)" +echo "azurite version = $(azurite --version)" \ No newline at end of file diff --git a/ci/scripts/install_chromedriver.sh b/ci/scripts/install_chromedriver.sh deleted file mode 100755 index 9097a20bfc5..00000000000 --- a/ci/scripts/install_chromedriver.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# Install Chrome and Chromedriver for Selenium - -set -e - -chrome_version=$1 - -if [ $chrome_version = "latest" ]; then - latest_release_path=LATEST_RELEASE_STABLE -else - latest_release_path=LATEST_RELEASE_${chrome_version} -fi -CHROME_VERSION_FULL=$(wget -q --no-verbose -O - "https://googlechromelabs.github.io/chrome-for-testing/${latest_release_path}") -CHROME_DOWNLOAD_URL="https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION_FULL}-1_amd64.deb" -CHROMEDRIVER_DOWNLOAD_URL="https://storage.googleapis.com/chrome-for-testing-public/${CHROME_VERSION_FULL}/linux64/chromedriver-linux64.zip" -wget -q --no-verbose -O /tmp/google-chrome.deb "${CHROME_DOWNLOAD_URL}" -apt-get update -apt install -qqy /tmp/google-chrome.deb -rm -f /tmp/google-chrome.deb -rm -rf /var/lib/apt/lists/* -wget --no-verbose -O /tmp/chromedriver-linux64.zip "${CHROMEDRIVER_DOWNLOAD_URL}" -unzip /tmp/chromedriver-linux64.zip -d /opt/ -rm /tmp/chromedriver-linux64.zip -ln -fs /opt/chromedriver-linux64/chromedriver /usr/local/bin/chromedriver -echo "Using Chrome version: $(google-chrome --version)" -echo "Using Chrome Driver version: $(chromedriver --version)" diff --git a/ci/scripts/install_cmake.sh b/ci/scripts/install_cmake.sh index 7fdb06d90f0..2f5e5d52051 100755 --- a/ci/scripts/install_cmake.sh +++ b/ci/scripts/install_cmake.sh @@ -21,10 +21,7 @@ set -e declare -A archs archs=([amd64]=x86_64 - [arch64]=aarch64 - [arm64]=aarch64 - [arm64v8]=aarch64 - [x86_64]=x86_64) + [arm64v8]=aarch64) declare -A platforms platforms=([linux]=linux @@ -41,25 +38,5 @@ platform=${platforms[$2]} version=$3 prefix=$4 -mkdir -p ${prefix} -url="https://github.com/Kitware/CMake/releases/download/v${version}/cmake-${version}-${platform}-" -case ${platform} in - macos) - url+="universal.tar.gz" - curl -L ${url} | tar -xzf - --directory ${prefix} --strip-components=1 - ln -s CMake.app/Contents/bin ${prefix}/bin - ;; - windows) - url+="${arch}.zip" - archive_name=$(basename ${url}) - curl -L -o ${archive_name} ${url} - unzip ${archive_name} - base_name=$(basename ${archive_name} .zip) - mv ${base_name}/* ${prefix} - rm -rf ${base_name} ${archive_name} - ;; - *) - url+="${arch}.tar.gz" - curl -L ${url} | tar -xzf - --directory ${prefix} --strip-components=1 - ;; -esac +url="https://github.com/Kitware/CMake/releases/download/v${version}/cmake-${version}-${platform}-${arch}.tar.gz" +wget -q ${url} -O - | tar -xzf - --directory ${prefix} --strip-components=1 diff --git a/ci/scripts/install_dask.sh b/ci/scripts/install_dask.sh index b89e43cfb31..478c1d59979 100755 --- a/ci/scripts/install_dask.sh +++ b/ci/scripts/install_dask.sh @@ -27,8 +27,7 @@ fi dask=$1 if [ "${dask}" = "upstream_devel" ]; then - pip install "dask[dataframe] @ git+https://github.com/dask/dask.git" - pip install -U git+https://github.com/dask-contrib/dask-expr.git + pip install https://github.com/dask/dask/archive/main.tar.gz#egg=dask[dataframe] elif [ "${dask}" = "latest" ]; then pip install dask[dataframe] else diff --git a/ci/scripts/install_emscripten.sh b/ci/scripts/install_emscripten.sh deleted file mode 100755 index 4bad7238a6c..00000000000 --- a/ci/scripts/install_emscripten.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# install emscripten sdk version to match pyodide in $2 to directory $1/emsdk - -set -e - -target_path=$1 -pyodide_path=$2 - -emscripten_version=$(${pyodide_path}/python -c "import sys;print(*sys._emscripten_info.emscripten_version,sep='.')") - -cd ${target_path} -if [ ! -d emsdk ]; then - git clone https://github.com/emscripten-core/emsdk.git -fi -cd emsdk -./emsdk install ${emscripten_version} -./emsdk activate ${emscripten_version} -echo "Installed emsdk to: ${target_path}" \ No newline at end of file diff --git a/ci/scripts/install_gcs_testbench.sh b/ci/scripts/install_gcs_testbench.sh index 2090290c993..0aa6d20975b 100755 --- a/ci/scripts/install_gcs_testbench.sh +++ b/ci/scripts/install_gcs_testbench.sh @@ -34,9 +34,6 @@ case "$(uname -m)" in ;; esac -# On newer pythons install into the system will fail, so override that -export PIP_BREAK_SYSTEM_PACKAGES=1 - version=$1 if [[ "${version}" -eq "default" ]]; then version="v0.39.0" diff --git a/ci/scripts/install_minio.sh b/ci/scripts/install_minio.sh index 40762c9f32d..e493a183b45 100755 --- a/ci/scripts/install_minio.sh +++ b/ci/scripts/install_minio.sh @@ -71,7 +71,6 @@ download() local output=$1 local url=$2 - mkdir -p $(dirname ${output}) if type wget > /dev/null 2>&1; then wget -nv --output-document ${output} ${url} else diff --git a/ci/scripts/install_numba.sh b/ci/scripts/install_numba.sh index fba9f50b79c..470f291ba80 100755 --- a/ci/scripts/install_numba.sh +++ b/ci/scripts/install_numba.sh @@ -26,10 +26,6 @@ fi numba=$1 -if [ -n "${ARROW_PYTHON_VENV:-}" ]; then - . "${ARROW_PYTHON_VENV}/bin/activate" -fi - if [ "${numba}" = "master" ]; then pip install https://github.com/numba/numba/archive/main.tar.gz#egg=numba elif [ "${numba}" = "latest" ]; then diff --git a/ci/scripts/install_sccache.sh b/ci/scripts/install_sccache.sh index 136f39b3ae2..0346c0cc9ce 100755 --- a/ci/scripts/install_sccache.sh +++ b/ci/scripts/install_sccache.sh @@ -59,7 +59,7 @@ fi # Extract only the sccache binary into $PREFIX and ignore README and LICENSE. # --wildcards doesn't work on busybox. tar -xzvf $SCCACHE_ARCHIVE --strip-component=1 --directory $PREFIX --exclude="sccache*/*E*E*" -chmod a+x $PREFIX/sccache +chmod u+x $PREFIX/sccache if [ -n "${GITHUB_PATH}" ]; then echo "$PREFIX" >> $GITHUB_PATH diff --git a/ci/scripts/install_vcpkg.sh b/ci/scripts/install_vcpkg.sh index 08989d64448..cc80582326e 100755 --- a/ci/scripts/install_vcpkg.sh +++ b/ci/scripts/install_vcpkg.sh @@ -25,16 +25,13 @@ if [ "$#" -lt 1 ]; then fi arrow_dir=$(cd -- "$(dirname -- "$0")/../.." && pwd -P) +default_vcpkg_version=$(cat "${arrow_dir}/.env" | grep "VCPKG" | cut -d "=" -f2 | tr -d '"') default_vcpkg_ports_patch="${arrow_dir}/ci/vcpkg/ports.patch" vcpkg_destination=$1 -vcpkg_version=${2:-} +vcpkg_version=${2:-$default_vcpkg_version} vcpkg_ports_patch=${3:-$default_vcpkg_ports_patch} -if [ -z "${vcpkg_version}" ]; then - vcpkg_version=$(source "${arrow_dir}/.env" && echo "$VCPKG") -fi - # reduce the fetched data using a shallow clone git clone --shallow-since=2021-04-01 https://github.com/microsoft/vcpkg ${vcpkg_destination} diff --git a/ci/scripts/integration_arrow.sh b/ci/scripts/integration_arrow.sh index 2eb58e8dc75..a5a012ad2c5 100755 --- a/ci/scripts/integration_arrow.sh +++ b/ci/scripts/integration_arrow.sh @@ -40,8 +40,6 @@ if [ "${ARROW_INTEGRATION_JAVA}" == "ON" ]; then pip install jpype1 fi -export ARROW_BUILD_ROOT=${build_dir} - # Get more detailed context on crashes export PYTHONFAULTHANDLER=1 diff --git a/ci/scripts/integration_arrow_build.sh b/ci/scripts/integration_arrow_build.sh index 9b54049a2b8..e5c31527aed 100755 --- a/ci/scripts/integration_arrow_build.sh +++ b/ci/scripts/integration_arrow_build.sh @@ -30,8 +30,6 @@ build_dir=${2} ${arrow_dir}/ci/scripts/rust_build.sh ${arrow_dir} ${build_dir} -${arrow_dir}/ci/scripts/nanoarrow_build.sh ${arrow_dir} ${build_dir} - if [ "${ARROW_INTEGRATION_CPP}" == "ON" ]; then ${arrow_dir}/ci/scripts/cpp_build.sh ${arrow_dir} ${build_dir} fi diff --git a/ci/scripts/integration_hdfs.sh b/ci/scripts/integration_hdfs.sh index d0444ccb74f..c95449379c3 100755 --- a/ci/scripts/integration_hdfs.sh +++ b/ci/scripts/integration_hdfs.sh @@ -61,8 +61,9 @@ export PYARROW_TEST_HDFS=ON export PYARROW_HDFS_TEST_LIBHDFS_REQUIRE=ON pytest -vs --pyargs pyarrow.tests.test_fs +pytest -vs --pyargs pyarrow.tests.test_hdfs use_libhdfs_dir pytest -vs --pyargs pyarrow.tests.test_fs - +pytest -vs --pyargs pyarrow.tests.test_hdfs use_hadoop_home diff --git a/ci/scripts/java_build.sh b/ci/scripts/java_build.sh index 212ec6eb114..77dd1ccdafa 100755 --- a/ci/scripts/java_build.sh +++ b/ci/scripts/java_build.sh @@ -32,7 +32,7 @@ java_jni_dist_dir=${3} if [[ "$(uname -s)" == "Linux" ]] && [[ "$(uname -m)" == "s390x" ]]; then # Since some files for s390_64 are not available at maven central, # download pre-build files from Artifactory and install them explicitly - mvn_install="mvn clean install:install-file" + mvn_install="mvn install:install-file" wget="wget" artifactory_base_url="https://apache.jfrog.io/artifactory/arrow" @@ -72,16 +72,10 @@ if [ $ARROW_JAVA_SKIP_GIT_PLUGIN ]; then mvn="${mvn} -Dmaven.gitcommitid.skip=true" fi -# https://github.com/apache/arrow/issues/41429 -# TODO: We want to out-of-source build. This is a workaround. We copy -# all needed files to the build directory from the source directory -# and build in the build directory. -mkdir -p ${build_dir} -rm -rf ${build_dir}/format -cp -aL ${arrow_dir}/format ${build_dir}/ -rm -rf ${build_dir}/java -cp -aL ${source_dir} ${build_dir}/ -pushd ${build_dir}/java +# Use `2 * ncores` threads +mvn="${mvn} -T 2C" + +pushd ${source_dir} if [ "${ARROW_JAVA_SHADE_FLATBUFFERS}" == "ON" ]; then mvn="${mvn} -Pshade-flatbuffers" @@ -95,15 +89,13 @@ if [ "${ARROW_JAVA_JNI}" = "ON" ]; then mvn="${mvn} -Darrow.cpp.build.dir=${java_jni_dist_dir} -Parrow-jni" fi -# Use `2 * ncores` threads -${mvn} -T 2C clean install +${mvn} install if [ "${BUILD_DOCS_JAVA}" == "ON" ]; then # HTTP pooling is turned of to avoid download issues https://issues.apache.org/jira/browse/ARROW-11633 - # GH-43378: Maven site plugins not compatible with multithreading mkdir -p ${build_dir}/docs/java/reference - ${mvn} -Dcheckstyle.skip=true -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false clean install site - rsync -a target/site/apidocs/ ${build_dir}/docs/java/reference + ${mvn} -Dcheckstyle.skip=true -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false install site + rsync -a ${arrow_dir}/java/target/site/apidocs/ ${build_dir}/docs/java/reference fi popd diff --git a/ci/scripts/java_cdata_integration.sh b/ci/scripts/java_cdata_integration.sh index 0ee5d3026aa..86ea7cf1553 100755 --- a/ci/scripts/java_cdata_integration.sh +++ b/ci/scripts/java_cdata_integration.sh @@ -20,9 +20,9 @@ set -ex arrow_dir=${1} -build_dir=${2} +export ARROW_SOURCE_DIR=${arrow_dir} -pushd ${build_dir}/java/c/src/test/python +pushd ${arrow_dir}/java/c/src/test/python python integration_tests.py diff --git a/ci/scripts/java_full_build.sh b/ci/scripts/java_full_build.sh index 4beade50b45..2734f3e9dbe 100755 --- a/ci/scripts/java_full_build.sh +++ b/ci/scripts/java_full_build.sh @@ -49,14 +49,21 @@ fi # build the entire project mvn clean \ install \ + assembly:single \ + source:jar \ + javadoc:jar \ -Papache-release \ -Parrow-c-data \ -Parrow-jni \ -Darrow.cpp.build.dir=$dist_dir \ -Darrow.c.jni.dist.dir=$dist_dir \ - --no-transfer-progress + -DdescriptorId=source-release # copy all jar, zip and pom files to the distribution folder +find . \ + "(" -name "*-javadoc.jar" -o -name "*-sources.jar" ")" \ + -exec echo {} ";" \ + -exec cp {} $dist_dir ";" find ~/.m2/repository/org/apache/arrow \ "(" \ -name "*.jar" -o \ diff --git a/ci/scripts/java_jni_manylinux_build.sh b/ci/scripts/java_jni_manylinux_build.sh index 6f3769751af..da4987d307c 100755 --- a/ci/scripts/java_jni_manylinux_build.sh +++ b/ci/scripts/java_jni_manylinux_build.sh @@ -58,7 +58,7 @@ export ARROW_ORC : ${VCPKG_ROOT:=/opt/vcpkg} : ${VCPKG_FEATURE_FLAGS:=-manifests} : ${VCPKG_TARGET_TRIPLET:=${VCPKG_DEFAULT_TRIPLET:-x64-linux-static-${CMAKE_BUILD_TYPE}}} -: ${GANDIVA_CXX_FLAGS:=-isystem;${devtoolset_include_cpp};-isystem;${devtoolset_include_cpp}/x86_64-redhat-linux;-lpthread} +: ${GANDIVA_CXX_FLAGS:=-isystem;${devtoolset_include_cpp};-isystem;${devtoolset_include_cpp}/x86_64-redhat-linux;-isystem;-lpthread} if [ "${ARROW_USE_CCACHE}" == "ON" ]; then echo "=== ccache statistics before build ===" diff --git a/ci/scripts/java_test.sh b/ci/scripts/java_test.sh index 5efda4318f1..b059a2ed46e 100755 --- a/ci/scripts/java_test.sh +++ b/ci/scripts/java_test.sh @@ -35,23 +35,27 @@ mvn="${mvn} -T 2C" pushd ${source_dir} -${mvn} clean test +${mvn} test projects=() -if [ "${ARROW_JAVA_JNI}" = "ON" ]; then - projects+=(adapter/orc) - projects+=(dataset) +if [ "${ARROW_DATASET}" = "ON" ]; then + projects+=(gandiva) +fi +if [ "${ARROW_GANDIVA}" = "ON" ]; then projects+=(gandiva) fi +if [ "${ARROW_ORC}" = "ON" ]; then + projects+=(adapter/orc) +fi if [ "${#projects[@]}" -gt 0 ]; then - ${mvn} clean test \ + ${mvn} test \ -Parrow-jni \ -pl $(IFS=,; echo "${projects[*]}") \ -Darrow.cpp.build.dir=${java_jni_dist_dir} fi if [ "${ARROW_JAVA_CDATA}" = "ON" ]; then - ${mvn} clean test -Parrow-c-data -pl c -Darrow.c.jni.dist.dir=${java_jni_dist_dir} + ${mvn} test -Parrow-c-data -pl c -Darrow.c.jni.dist.dir=${java_jni_dist_dir} fi popd diff --git a/ci/scripts/js_build.sh b/ci/scripts/js_build.sh index 196539ee0f1..d61f74f0b7c 100755 --- a/ci/scripts/js_build.sh +++ b/ci/scripts/js_build.sh @@ -25,16 +25,7 @@ build_dir=${2} : ${BUILD_DOCS_JS:=OFF} -# https://github.com/apache/arrow/issues/41429 -# TODO: We want to out-of-source build. This is a workaround. We copy -# all needed files to the build directory from the source directory -# and build in the build directory. -rm -rf ${build_dir}/js -mkdir -p ${build_dir} -cp -aL ${arrow_dir}/LICENSE.txt ${build_dir}/ -cp -aL ${arrow_dir}/NOTICE.txt ${build_dir}/ -cp -aL ${source_dir} ${build_dir}/js -pushd ${build_dir}/js +pushd ${source_dir} yarn --immutable yarn lint:ci @@ -43,18 +34,18 @@ yarn build if [ "${BUILD_DOCS_JS}" == "ON" ]; then # If apache or upstream are defined use those as remote. # Otherwise use origin which could be a fork on PRs. - if [ "$(git -C ${arrow_dir} config --get remote.apache.url)" == "git@github.com:apache/arrow.git" ]; then + if [ "$(git config --get remote.apache.url)" == "git@github.com:apache/arrow.git" ]; then yarn doc --gitRemote apache - elif [[ "$(git -C ${arrow_dir}config --get remote.upstream.url)" =~ "https://github.com/apache/arrow" ]]; then + elif [[ "$(git config --get remote.upstream.url)" =~ "https://github.com/apache/arrow" ]]; then yarn doc --gitRemote upstream - elif [[ "$(basename -s .git $(git -C ${arrow_dir} config --get remote.origin.url))" == "arrow" ]]; then + elif [[ "$(basename -s .git $(git config --get remote.origin.url))" == "arrow" ]]; then yarn doc else echo "Failed to build docs because the remote is not set correctly. Please set the origin or upstream remote to https://github.com/apache/arrow.git or the apache remote to git@github.com:apache/arrow.git." exit 0 fi mkdir -p ${build_dir}/docs/js - rsync -a doc/ ${build_dir}/docs/js + rsync -a ${arrow_dir}/js/doc/ ${build_dir}/docs/js fi popd diff --git a/ci/scripts/js_test.sh b/ci/scripts/js_test.sh index 863b1c3d346..40de974ede1 100755 --- a/ci/scripts/js_test.sh +++ b/ci/scripts/js_test.sh @@ -20,9 +20,8 @@ set -ex source_dir=${1}/js -build_dir=${2}/js -pushd ${build_dir} +pushd ${source_dir} yarn lint yarn test diff --git a/ci/scripts/msys2_setup.sh b/ci/scripts/msys2_setup.sh index e5b08424022..8bd36328ec6 100755 --- a/ci/scripts/msys2_setup.sh +++ b/ci/scripts/msys2_setup.sh @@ -34,6 +34,7 @@ case "${target}" in packages+=(${MINGW_PACKAGE_PREFIX}-clang) packages+=(${MINGW_PACKAGE_PREFIX}-cmake) packages+=(${MINGW_PACKAGE_PREFIX}-double-conversion) + packages+=(${MINGW_PACKAGE_PREFIX}-flatbuffers) packages+=(${MINGW_PACKAGE_PREFIX}-gflags) packages+=(${MINGW_PACKAGE_PREFIX}-grpc) packages+=(${MINGW_PACKAGE_PREFIX}-gtest) @@ -67,6 +68,7 @@ esac case "${target}" in c_glib|ruby) packages+=(${MINGW_PACKAGE_PREFIX}-gobject-introspection) + packages+=(${MINGW_PACKAGE_PREFIX}-gtk-doc) packages+=(${MINGW_PACKAGE_PREFIX}-meson) packages+=(${MINGW_PACKAGE_PREFIX}-vala) ;; diff --git a/ci/scripts/nanoarrow_build.sh b/ci/scripts/nanoarrow_build.sh deleted file mode 100755 index 1612b9a2d01..00000000000 --- a/ci/scripts/nanoarrow_build.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -set -e - -arrow_dir=${1} -source_dir=${1}/nanoarrow -build_dir=${2}/nanoarrow - -# This file is used to build the nanoarrow binaries needed for the archery -# integration tests. Testing of the nanoarrow implementation in normal CI is handled -# by github workflows in the arrow-nanoarrow repository. - -if [ "${ARCHERY_INTEGRATION_WITH_NANOARROW}" -eq "0" ]; then - echo "=====================================================================" - echo "Not building nanoarrow" - echo "=====================================================================" - exit 0; -elif [ ! -d "${source_dir}" ]; then - echo "=====================================================================" - echo "The nanoarrow source is missing. Please clone the arrow-nanoarrow repository" - echo "to arrow/nanoarrow before running the integration tests:" - echo " git clone https://github.com/apache/arrow-nanoarrow.git path/to/arrow/nanoarrow" - echo "=====================================================================" - exit 1; -fi - -set -x - -mkdir -p ${build_dir} -pushd ${build_dir} - -cmake ${source_dir} -DNANOARROW_BUILD_INTEGRATION_TESTS=ON -cmake --build . - -popd diff --git a/ci/scripts/python_build.sh b/ci/scripts/python_build.sh index 9455baf3536..9bdcc4d6875 100755 --- a/ci/scripts/python_build.sh +++ b/ci/scripts/python_build.sh @@ -31,10 +31,6 @@ if [ -x "$(command -v git)" ]; then git config --global --add safe.directory ${arrow_dir} fi -if [ -n "${ARROW_PYTHON_VENV:-}" ]; then - . "${ARROW_PYTHON_VENV}/bin/activate" -fi - case "$(uname)" in Linux) n_jobs=$(nproc) @@ -74,46 +70,19 @@ export PYARROW_WITH_SUBSTRAIT=${ARROW_SUBSTRAIT:-OFF} export PYARROW_PARALLEL=${n_jobs} -: ${CMAKE_PREFIX_PATH:=${ARROW_HOME}} -export CMAKE_PREFIX_PATH export LD_LIBRARY_PATH=${ARROW_HOME}/lib:${LD_LIBRARY_PATH} -# https://github.com/apache/arrow/issues/41429 -# TODO: We want to out-of-source build. This is a workaround. We copy -# all needed files to the build directory from the source directory -# and build in the build directory. -rm -rf ${python_build_dir} -cp -aL ${source_dir} ${python_build_dir} -pushd ${python_build_dir} +pushd ${source_dir} # - Cannot call setup.py as it may install in the wrong directory # on Debian/Ubuntu (ARROW-15243). # - Cannot use build isolation as we want to use specific dependency versions # (e.g. Numpy, Pandas) on some CI jobs. ${PYTHON:-python} -m pip install --no-deps --no-build-isolation -vv . +# Remove build artifacts from source directory +find build/ -user root -delete popd if [ "${BUILD_DOCS_PYTHON}" == "ON" ]; then - # https://github.com/apache/arrow/issues/41429 - # TODO: We want to out-of-source build. This is a workaround. - # - # Copy docs/source because the "autosummary_generate = True" - # configuration generates files to docs/source/python/generated/. - rm -rf ${python_build_dir}/docs/source - mkdir -p ${python_build_dir}/docs - cp -a ${arrow_dir}/docs/source ${python_build_dir}/docs/ - rm -rf ${python_build_dir}/format - cp -a ${arrow_dir}/format ${python_build_dir}/ - rm -rf ${python_build_dir}/cpp/examples - mkdir -p ${python_build_dir}/cpp - cp -a ${arrow_dir}/cpp/examples ${python_build_dir}/cpp/ - rm -rf ${python_build_dir}/ci - cp -a ${arrow_dir}/ci/ ${python_build_dir}/ ncpus=$(python -c "import os; print(os.cpu_count())") - export ARROW_CPP_DOXYGEN_XML=${build_dir}/cpp/apidoc/xml - pushd ${build_dir} - sphinx-build \ - -b html \ - ${python_build_dir}/docs/source \ - ${build_dir}/docs - popd + sphinx-build -b html -j ${ncpus} ${arrow_dir}/docs/source ${build_dir}/docs fi diff --git a/ci/scripts/python_sdist_test.sh b/ci/scripts/python_sdist_test.sh index 8f263ceb05e..d3c6f0e6ade 100755 --- a/ci/scripts/python_sdist_test.sh +++ b/ci/scripts/python_sdist_test.sh @@ -28,7 +28,6 @@ export PARQUET_TEST_DATA=${arrow_dir}/cpp/submodules/parquet-testing/data export PYARROW_CMAKE_GENERATOR=${CMAKE_GENERATOR:-Ninja} export PYARROW_BUILD_TYPE=${CMAKE_BUILD_TYPE:-debug} export PYARROW_WITH_ACERO=${ARROW_ACERO:-ON} -export PYARROW_WITH_AZURE=${ARROW_AZURE:-OFF} export PYARROW_WITH_S3=${ARROW_S3:-OFF} export PYARROW_WITH_ORC=${ARROW_ORC:-OFF} export PYARROW_WITH_CUDA=${ARROW_CUDA:-OFF} @@ -55,11 +54,6 @@ if [ -n "${PYARROW_VERSION:-}" ]; then else sdist=$(ls ${arrow_dir}/python/dist/pyarrow-*.tar.gz | sort -r | head -n1) fi - -if [ -n "${ARROW_PYTHON_VENV:-}" ]; then - . "${ARROW_PYTHON_VENV}/bin/activate" -fi - ${PYTHON:-python} -m pip install ${sdist} pytest -r s ${PYTEST_ARGS:-} --pyargs pyarrow diff --git a/ci/scripts/python_test.sh b/ci/scripts/python_test.sh index f6b9b0d7cab..20ca3300c05 100755 --- a/ci/scripts/python_test.sh +++ b/ci/scripts/python_test.sh @@ -22,10 +22,6 @@ set -ex arrow_dir=${1} test_dir=${1}/python/build/dist -if [ -n "${ARROW_PYTHON_VENV:-}" ]; then - . "${ARROW_PYTHON_VENV}/bin/activate" -fi - export ARROW_SOURCE_DIR=${arrow_dir} export ARROW_TEST_DATA=${arrow_dir}/testing/data export PARQUET_TEST_DATA=${arrow_dir}/cpp/submodules/parquet-testing/data @@ -56,7 +52,6 @@ fi : ${PYARROW_TEST_S3:=${ARROW_S3:-ON}} export PYARROW_TEST_ACERO -export PYARROW_TEST_AZURE export PYARROW_TEST_CUDA export PYARROW_TEST_DATASET export PYARROW_TEST_FLIGHT diff --git a/ci/scripts/python_test_emscripten.sh b/ci/scripts/python_test_emscripten.sh deleted file mode 100755 index 4029722568b..00000000000 --- a/ci/scripts/python_test_emscripten.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# run tests against Chrome and node.js as representative -# WebAssembly platforms (i.e. one browser, one non-browser). - -set -ex - -build_dir=${1}/python -pyodide_dist_dir=${2} - -cd ${build_dir} - -# note: this uses the newest wheel in dist -pyodide_wheel=$(ls -t dist/pyarrow*.whl | head -1) - -echo "-------------- Running emscripten tests in Node ----------------------" -python scripts/run_emscripten_tests.py ${pyodide_wheel} --dist-dir=${pyodide_dist_dir} --runtime=node - -echo "-------------- Running emscripten tests in Chrome --------------------" -python scripts/run_emscripten_tests.py ${pyodide_wheel} --dist-dir=${pyodide_dist_dir} --runtime=chrome - diff --git a/ci/scripts/python_wheel_macos_build.sh b/ci/scripts/python_wheel_macos_build.sh index 3ed9d5d8dd1..bea54091007 100755 --- a/ci/scripts/python_wheel_macos_build.sh +++ b/ci/scripts/python_wheel_macos_build.sh @@ -50,12 +50,15 @@ echo "=== (${PYTHON_VERSION}) Install Python build dependencies ===" export PIP_SITE_PACKAGES=$(python -c 'import site; print(site.getsitepackages()[0])') export PIP_TARGET_PLATFORM="macosx_${MACOSX_DEPLOYMENT_TARGET//./_}_${arch}" +# TODO(GH-39848) Remove the `--pre --extra-index-url` for numpy nightly again before the 16.0 release pip install \ --upgrade \ --only-binary=:all: \ --target $PIP_SITE_PACKAGES \ --platform $PIP_TARGET_PLATFORM \ - -r ${source_dir}/python/requirements-wheel-build.txt + -r ${source_dir}/python/requirements-wheel-build.txt \ + --pre \ + --extra-index-url "https://pypi.anaconda.org/scientific-python-nightly-wheels/simple" pip install "delocate>=0.10.3" echo "=== (${PYTHON_VERSION}) Building Arrow C++ libraries ===" @@ -88,13 +91,6 @@ echo "=== (${PYTHON_VERSION}) Building Arrow C++ libraries ===" : ${VCPKG_FEATURE_FLAGS:=-manifests} : ${VCPKG_TARGET_TRIPLET:=${VCPKG_DEFAULT_TRIPLET:-x64-osx-static-${CMAKE_BUILD_TYPE}}} -echo "=== Protobuf compiler versions on PATH ===" -which -a protoc || echo "no protoc on PATH!" - -echo "=== Protobuf compiler version from vcpkg ===" -_pbc=${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}/tools/protobuf/protoc -echo "$_pbc: `$_pbc --version`" - mkdir -p ${build_dir}/build pushd ${build_dir}/build @@ -126,7 +122,6 @@ cmake \ -DARROW_SUBSTRAIT=${ARROW_SUBSTRAIT} \ -DARROW_TENSORFLOW=${ARROW_TENSORFLOW} \ -DARROW_USE_CCACHE=ON \ - -DARROW_VERBOSE_THIRDPARTY_BUILD=ON \ -DARROW_WITH_BROTLI=${ARROW_WITH_BROTLI} \ -DARROW_WITH_BZ2=${ARROW_WITH_BZ2} \ -DARROW_WITH_LZ4=${ARROW_WITH_LZ4} \ @@ -139,6 +134,7 @@ cmake \ -DCMAKE_INSTALL_PREFIX=${build_dir}/install \ -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} \ -DCMAKE_UNITY_BUILD=${CMAKE_UNITY_BUILD} \ + -DORC_PROTOBUF_EXECUTABLE=${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}/tools/protobuf/protoc \ -DORC_SOURCE=BUNDLED \ -DPARQUET_REQUIRE_ENCRYPTION=${PARQUET_REQUIRE_ENCRYPTION} \ -DVCPKG_MANIFEST_MODE=OFF \ diff --git a/ci/scripts/python_wheel_manylinux_build.sh b/ci/scripts/python_wheel_manylinux_build.sh index aa86494a9d4..4d4d4fb694e 100755 --- a/ci/scripts/python_wheel_manylinux_build.sh +++ b/ci/scripts/python_wheel_manylinux_build.sh @@ -123,6 +123,7 @@ cmake \ -DCMAKE_INSTALL_LIBDIR=lib \ -DCMAKE_INSTALL_PREFIX=/tmp/arrow-dist \ -DCMAKE_UNITY_BUILD=${CMAKE_UNITY_BUILD} \ + -DORC_PROTOBUF_EXECUTABLE=${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}/tools/protobuf/protoc \ -DORC_SOURCE=BUNDLED \ -DPARQUET_REQUIRE_ENCRYPTION=${PARQUET_REQUIRE_ENCRYPTION} \ -DVCPKG_MANIFEST_MODE=OFF \ @@ -160,26 +161,6 @@ export CMAKE_PREFIX_PATH=/tmp/arrow-dist pushd /arrow/python python setup.py bdist_wheel -echo "=== Strip symbols from wheel ===" -mkdir -p dist/temp-fix-wheel -mv dist/pyarrow-*.whl dist/temp-fix-wheel - -pushd dist/temp-fix-wheel -wheel_name=$(ls pyarrow-*.whl) -# Unzip and remove old wheel -unzip $wheel_name -rm $wheel_name -for filename in $(ls pyarrow/*.so pyarrow/*.so.*); do - echo "Stripping debug symbols from: $filename"; - strip --strip-debug $filename -done -# Zip wheel again after stripping symbols -zip -r $wheel_name . -mv $wheel_name .. -popd - -rm -rf dist/temp-fix-wheel - echo "=== (${PYTHON_VERSION}) Tag the wheel with manylinux${MANYLINUX_VERSION} ===" auditwheel repair -L . dist/pyarrow-*.whl -w repaired_wheels popd diff --git a/ci/scripts/python_wheel_unix_test.sh b/ci/scripts/python_wheel_unix_test.sh index cf87a170567..a25e5c51bdd 100755 --- a/ci/scripts/python_wheel_unix_test.sh +++ b/ci/scripts/python_wheel_unix_test.sh @@ -54,7 +54,7 @@ export PYARROW_TEST_S3=${ARROW_S3} export PYARROW_TEST_TENSORFLOW=ON export ARROW_TEST_DATA=${source_dir}/testing/data -export PARQUET_TEST_DATA=${source_dir}/cpp/submodules/parquet-testing/data +export PARQUET_TEST_DATA=${source_dir}/submodules/parquet-testing/data if [ "${INSTALL_PYARROW}" == "ON" ]; then # Install the built wheels diff --git a/ci/scripts/python_wheel_windows_build.bat b/ci/scripts/python_wheel_windows_build.bat index 54f02ec6f6e..73b0192d9bc 100644 --- a/ci/scripts/python_wheel_windows_build.bat +++ b/ci/scripts/python_wheel_windows_build.bat @@ -36,7 +36,7 @@ set ARROW_FLIGHT=ON set ARROW_GANDIVA=OFF set ARROW_GCS=ON set ARROW_HDFS=ON -set ARROW_ORC=ON +set ARROW_ORC=OFF set ARROW_PARQUET=ON set PARQUET_REQUIRE_ENCRYPTION=ON set ARROW_MIMALLOC=ON diff --git a/ci/scripts/python_wheel_windows_test.bat b/ci/scripts/python_wheel_windows_test.bat index 87c0bb12520..b14bfddfb36 100755 --- a/ci/scripts/python_wheel_windows_test.bat +++ b/ci/scripts/python_wheel_windows_test.bat @@ -24,7 +24,7 @@ set PYARROW_TEST_FLIGHT=ON set PYARROW_TEST_GANDIVA=OFF set PYARROW_TEST_GCS=ON set PYARROW_TEST_HDFS=ON -set PYARROW_TEST_ORC=ON +set PYARROW_TEST_ORC=OFF set PYARROW_TEST_PARQUET=ON set PYARROW_TEST_PARQUET_ENCRYPTION=ON set PYARROW_TEST_SUBSTRAIT=ON @@ -35,7 +35,7 @@ set PYARROW_TEST_TENSORFLOW=ON @REM set PYARROW_TEST_PANDAS=ON set ARROW_TEST_DATA=C:\arrow\testing\data -set PARQUET_TEST_DATA=C:\arrow\cpp\submodules\parquet-testing\data +set PARQUET_TEST_DATA=C:\arrow\submodules\parquet-testing\data @REM Install testing dependencies pip install -r C:\arrow\python\requirements-wheel-test.txt || exit /B 1 @@ -56,15 +56,8 @@ python -c "import pyarrow.dataset" || exit /B 1 python -c "import pyarrow.flight" || exit /B 1 python -c "import pyarrow.fs" || exit /B 1 python -c "import pyarrow.json" || exit /B 1 -python -c "import pyarrow.orc" || exit /B 1 python -c "import pyarrow.parquet" || exit /B 1 python -c "import pyarrow.substrait" || exit /B 1 -@rem Download IANA Timezone Database for ORC C++ -curl https://cygwin.osuosl.org/noarch/release/tzdata/tzdata-2024a-1.tar.xz --output tzdata.tar.xz || exit /B -mkdir %USERPROFILE%\Downloads\test\tzdata -arc unarchive tzdata.tar.xz %USERPROFILE%\Downloads\test\tzdata -set TZDIR=%USERPROFILE%\Downloads\test\tzdata\usr\share\zoneinfo - @REM Execute unittest pytest -r s --pyargs pyarrow || exit /B 1 diff --git a/ci/scripts/r_build.sh b/ci/scripts/r_build.sh index f4dc5a5781c..38b54e44340 100755 --- a/ci/scripts/r_build.sh +++ b/ci/scripts/r_build.sh @@ -24,29 +24,15 @@ build_dir=${2} : ${BUILD_DOCS_R:=OFF} -# https://github.com/apache/arrow/issues/41429 -# TODO: We want to out-of-source build. This is a workaround. We copy -# all needed files to the build directory from the source directory -# and build in the build directory. -rm -rf ${build_dir}/r -cp -aL ${source_dir} ${build_dir}/r -pushd ${build_dir}/r +pushd ${source_dir} # build first so that any stray compiled files in r/src are ignored ${R_BIN} CMD build . -if [ -x "$(command -v sudo)" ]; then - SUDO=sudo -else - SUDO= -fi -${SUDO} \ - env \ - PKG_CONFIG_PATH=${ARROW_HOME}/lib/pkgconfig:${PKG_CONFIG_PATH} \ - ${R_BIN} CMD INSTALL ${INSTALL_ARGS} arrow*.tar.gz +${R_BIN} CMD INSTALL ${INSTALL_ARGS} arrow*.tar.gz if [ "${BUILD_DOCS_R}" == "ON" ]; then ${R_BIN} -e "pkgdown::build_site(install = FALSE)" - rsync -a docs/ ${build_dir}/docs/r + rsync -a ${source_dir}/docs/ ${build_dir}/docs/r fi popd diff --git a/ci/scripts/r_docker_configure.sh b/ci/scripts/r_docker_configure.sh index 8a962fe576c..52db2e6df66 100755 --- a/ci/scripts/r_docker_configure.sh +++ b/ci/scripts/r_docker_configure.sh @@ -67,6 +67,26 @@ sloppiness = include_file_ctime hash_dir = false" >> ~/.ccache/ccache.conf fi +# Special hacking to try to reproduce quirks on centos using non-default build +# tooling. +if [[ -n "$DEVTOOLSET_VERSION" ]]; then + $PACKAGE_MANAGER install -y centos-release-scl + $PACKAGE_MANAGER install -y "devtoolset-$DEVTOOLSET_VERSION" + + # Enable devtoolset here so that `which gcc` finds the right compiler below + source /opt/rh/devtoolset-${DEVTOOLSET_VERSION}/enable + + # Build images which require the devtoolset don't have CXX17 variables + # set as the system compiler doesn't support C++17 + if [ ! "`{R_BIN} CMD config CXX17`" ]; then + mkdir -p ~/.R + echo "CC = $(which gcc) -fPIC" >> ~/.R/Makevars + echo "CXX17 = $(which g++) -fPIC" >> ~/.R/Makevars + echo "CXX17STD = -std=c++17" >> ~/.R/Makevars + echo "CXX17FLAGS = ${CXX11FLAGS}" >> ~/.R/Makevars + fi +fi + if [ -f "${ARROW_SOURCE_HOME}/ci/scripts/r_install_system_dependencies.sh" ]; then "${ARROW_SOURCE_HOME}/ci/scripts/r_install_system_dependencies.sh" fi diff --git a/ci/scripts/r_install_system_dependencies.sh b/ci/scripts/r_install_system_dependencies.sh index 7ddc2604f66..be0d75ef235 100755 --- a/ci/scripts/r_install_system_dependencies.sh +++ b/ci/scripts/r_install_system_dependencies.sh @@ -21,30 +21,29 @@ set -ex : ${ARROW_SOURCE_HOME:=/arrow} -# Figure out what package manager we have -if [ "`which dnf`" ]; then - PACKAGE_MANAGER=dnf -elif [ "`which yum`" ]; then - PACKAGE_MANAGER=yum -elif [ "`which zypper`" ]; then - PACKAGE_MANAGER=zypper -else - PACKAGE_MANAGER=apt-get - apt-get update -fi +if [ "$ARROW_S3" == "ON" ] || [ "$ARROW_GCS" == "ON" ] || [ "$ARROW_R_DEV" == "TRUE" ]; then + # Figure out what package manager we have + if [ "`which dnf`" ]; then + PACKAGE_MANAGER=dnf + elif [ "`which yum`" ]; then + PACKAGE_MANAGER=yum + elif [ "`which zypper`" ]; then + PACKAGE_MANAGER=zypper + else + PACKAGE_MANAGER=apt-get + apt-get update + fi -# Install curl and OpenSSL (technically, only needed for S3/GCS support, but -# installing the R curl package fails without it) -case "$PACKAGE_MANAGER" in - apt-get) - apt-get install -y libcurl4-openssl-dev libssl-dev - ;; - *) - $PACKAGE_MANAGER install -y libcurl-devel openssl-devel - ;; -esac + # Install curl and OpenSSL for S3/GCS support + case "$PACKAGE_MANAGER" in + apt-get) + apt-get install -y libcurl4-openssl-dev libssl-dev + ;; + *) + $PACKAGE_MANAGER install -y libcurl-devel openssl-devel + ;; + esac -if [ "$ARROW_S3" == "ON" ] || [ "$ARROW_GCS" == "ON" ] || [ "$ARROW_R_DEV" == "TRUE" ]; then # The Dockerfile should have put this file here if [ "$ARROW_S3" == "ON" ] && [ -f "${ARROW_SOURCE_HOME}/ci/scripts/install_minio.sh" ] && [ "`which wget`" ]; then "${ARROW_SOURCE_HOME}/ci/scripts/install_minio.sh" latest /usr/local diff --git a/ci/scripts/r_sanitize.sh b/ci/scripts/r_sanitize.sh index fb3e9a58363..600ee0fa2cb 100755 --- a/ci/scripts/r_sanitize.sh +++ b/ci/scripts/r_sanitize.sh @@ -46,12 +46,10 @@ unset ARROW_R_DEV export ARROW_R_VERBOSE_TEST=TRUE export UBSAN_OPTIONS="print_stacktrace=1,suppressions=/arrow/r/tools/ubsan.supp" -# From the old rhub image https://github.com/r-hub/rhub-linux-builders/blob/master/fedora-clang-devel-san/Dockerfile -export ASAN_OPTIONS="alloc_dealloc_mismatch=0:detect_leaks=0:detect_odr_violation=0" # run tests pushd tests -${R_BIN} --no-save < testthat.R > testthat.out 2>&1 || { cat testthat.out; exit 1; } +${R_BIN} < testthat.R > testthat.out 2>&1 || { cat testthat.out; exit 1; } cat testthat.out if grep -q "runtime error" testthat.out; then @@ -60,7 +58,7 @@ fi # run examples popd -${R_BIN} --no-save -e 'library(arrow); testthat::test_examples(".")' >> examples.out 2>&1 || { cat examples.out; exit 1; } +${R_BIN} -e 'library(arrow); testthat::test_examples(".")' >> examples.out 2>&1 || { cat examples.out; exit 1; } cat examples.out if grep -q "runtime error" examples.out; then diff --git a/ci/scripts/r_test.sh b/ci/scripts/r_test.sh index fe9d18edb8c..72078ab3c06 100755 --- a/ci/scripts/r_test.sh +++ b/ci/scripts/r_test.sh @@ -46,9 +46,7 @@ if [ "$ARROW_USE_PKG_CONFIG" != "false" ]; then export LD_LIBRARY_PATH=${ARROW_HOME}/lib:${LD_LIBRARY_PATH} export R_LD_LIBRARY_PATH=${LD_LIBRARY_PATH} fi - -export _R_CHECK_COMPILATION_FLAGS_KNOWN_="${_R_CHECK_COMPILATION_FLAGS_KNOWN_} ${ARROW_R_CXXFLAGS}" - +export _R_CHECK_COMPILATION_FLAGS_KNOWN_=${ARROW_R_CXXFLAGS} if [ "$ARROW_R_DEV" = "TRUE" ]; then # These are sometimes used in the Arrow C++ build and are not a problem export _R_CHECK_COMPILATION_FLAGS_KNOWN_="${_R_CHECK_COMPILATION_FLAGS_KNOWN_} -Wno-attributes -msse4.2 -Wno-noexcept-type -Wno-subobject-linkage" @@ -110,15 +108,16 @@ SCRIPT="as_cran <- !identical(tolower(Sys.getenv('NOT_CRAN')), 'true') on.exit(tools::pskill(pid_flight), add = TRUE) } + run_donttest <- identical(tolower(Sys.getenv('_R_CHECK_DONTTEST_EXAMPLES_', 'true')), 'true') + if (run_donttest) { + args <- c(args, '--run-donttest') + } + install_args <- Sys.getenv('INSTALL_ARGS') if (nzchar(install_args)) { args <- c(args, paste0('--install-args=\"', install_args, '\"')) } - message('Running rcmdcheck with:\n') - print(build_args) - print(args) - rcmdcheck::rcmdcheck(build_args = build_args, args = args, error_on = 'warning', check_dir = 'check', timeout = 3600)" echo "$SCRIPT" | ${R_BIN} --no-save diff --git a/ci/scripts/r_valgrind.sh b/ci/scripts/r_valgrind.sh index 0e40d792111..a14cb803ca8 100755 --- a/ci/scripts/r_valgrind.sh +++ b/ci/scripts/r_valgrind.sh @@ -33,7 +33,7 @@ ${R_BIN} CMD INSTALL ${INSTALL_ARGS} arrow*.tar.gz pushd tests # to generate suppression files run: -# ${R_BIN} --vanilla -d "valgrind --tool=memcheck --leak-check=full --track-origins=yes --gen-suppressions=all --log-file=memcheck.log" -f testthat.R +# ${R_BIN} --vanilla -d "valgrind --tool=memcheck --leak-check=full --track-origins=yes --gen-suppressions=all --log-file=memcheck.log" -f testthat.supp ${R_BIN} --vanilla -d "valgrind --tool=memcheck --leak-check=full --track-origins=yes --suppressions=/${1}/ci/etc/valgrind-cran.supp" -f testthat.R |& tee testthat.out # valgrind --error-exitcode=1 should return an erroring exit code that we can catch, diff --git a/ci/scripts/ruby_test.sh b/ci/scripts/ruby_test.sh index 507fa7858e8..56c33a4d637 100755 --- a/ci/scripts/ruby_test.sh +++ b/ci/scripts/ruby_test.sh @@ -22,7 +22,6 @@ set -ex source_dir=${1}/ruby build_dir=${2}/ruby -export DYLD_LIBRARY_PATH=${ARROW_HOME}/lib:${DYLD_LIBRARY_PATH} export LD_LIBRARY_PATH=${ARROW_HOME}/lib:${LD_LIBRARY_PATH} export PKG_CONFIG_PATH=${ARROW_HOME}/lib/pkgconfig export GI_TYPELIB_PATH=${ARROW_HOME}/lib/girepository-1.0 diff --git a/ci/scripts/swift_test.sh b/ci/scripts/swift_test.sh index aba90f31e50..b523e3891d9 100755 --- a/ci/scripts/swift_test.sh +++ b/ci/scripts/swift_test.sh @@ -34,14 +34,10 @@ popd source_dir=${1}/swift/Arrow pushd ${source_dir} -sed 's/\/\/ build://g' Package.swift > Package.swift.build -mv Package.swift.build Package.swift swift test popd source_dir=${1}/swift/ArrowFlight pushd ${source_dir} -sed 's/\/\/ build://g' Package.swift > Package.swift.build -mv Package.swift.build Package.swift swift test popd diff --git a/ci/vcpkg/ports.patch b/ci/vcpkg/ports.patch index 67fb2a4a3ea..0d4fb540a20 100644 --- a/ci/vcpkg/ports.patch +++ b/ci/vcpkg/ports.patch @@ -1,11 +1,11 @@ diff --git a/ports/curl/portfile.cmake b/ports/curl/portfile.cmake -index 7cab6f726..697ab1bb4 100644 +index bdc544e9e..53f6bbc3b 100644 --- a/ports/curl/portfile.cmake +++ b/ports/curl/portfile.cmake -@@ -84,9 +84,12 @@ vcpkg_cmake_configure( - -DBUILD_TESTING=OFF - -DENABLE_CURL_MANUAL=OFF +@@ -74,9 +74,12 @@ vcpkg_cmake_configure( + -DENABLE_MANUAL=OFF -DCURL_CA_FALLBACK=ON + -DCURL_USE_LIBPSL=OFF + -DCURL_CA_PATH=none + -DCURL_CA_BUNDLE=none -DCMAKE_DISABLE_FIND_PACKAGE_Perl=ON @@ -15,19 +15,6 @@ index 7cab6f726..697ab1bb4 100644 ) vcpkg_cmake_install() vcpkg_copy_pdbs() -diff --git a/ports/llvm/portfile.cmake b/ports/llvm/portfile.cmake -index a79c72a59..6b7fa6a66 100644 ---- a/ports/llvm/portfile.cmake -+++ b/ports/llvm/portfile.cmake -@@ -292,6 +292,8 @@ vcpkg_cmake_configure( - ${FEATURE_OPTIONS} - MAYBE_UNUSED_VARIABLES - COMPILER_RT_ENABLE_IOS -+ BOLT_TOOLS_INSTALL_DIR -+ LIBOMP_INSTALL_ALIASES - ) - - vcpkg_cmake_install(ADD_BIN_TO_PATH) diff --git a/ports/snappy/portfile.cmake b/ports/snappy/portfile.cmake index 0c7098082..c603c3653 100644 --- a/ports/snappy/portfile.cmake @@ -65,56 +52,16 @@ index 000000000..e839c93a4 + } + + static inline bool LeftShiftOverflows(uint8_t value, uint32_t shift) { -diff --git a/ports/thrift/portfile.cmake b/ports/thrift/portfile.cmake -index 1501782..71d2147 100644 ---- a/ports/thrift/portfile.cmake -+++ b/ports/thrift/portfile.cmake -@@ -12,7 +12,7 @@ vcpkg_find_acquire_program(BISON) - vcpkg_from_github( - OUT_SOURCE_PATH SOURCE_PATH - REPO apache/thrift -- REF "${VERSION}" -+ REF "v${VERSION}" - SHA512 5e4ee9870b30fe5ba484d39781c435716f7f3903793dc8aae96594ca813b1a5a73363b84719038ca8fa3ab8ef0a419a28410d936ff7b3bbadf36fc085a6883ae - HEAD_REF master - PATCHES -diff --git a/ports/thrift/vcpkg.json b/ports/thrift/vcpkg.json -index 2d5a854..9ff49ec 100644 ---- a/ports/thrift/vcpkg.json -+++ b/ports/thrift/vcpkg.json -@@ -1,6 +1,7 @@ - { - "name": "thrift", - "version": "0.20.0", -+ "port-version": 1, - "description": "Apache Thrift is a software project spanning a variety of programming languages and use cases. Our goal is to make reliable, performant communication and data serialization across languages as efficient and seamless as possible.", - "homepage": "https://github.com/apache/thrift", - "license": "Apache-2.0", -diff --git a/versions/baseline.json b/versions/baseline.json -index c6ce736..9ad1d63 100644 ---- a/versions/baseline.json -+++ b/versions/baseline.json -@@ -8622,7 +8622,7 @@ - }, - "thrift": { - "baseline": "0.20.0", -- "port-version": 0 -+ "port-version": 1 - }, - "tidy-html5": { - "baseline": "5.8.0", -diff --git a/versions/t-/thrift.json b/versions/t-/thrift.json -index 3db38c5..7464bde 100644 ---- a/versions/t-/thrift.json -+++ b/versions/t-/thrift.json -@@ -1,5 +1,10 @@ - { - "versions": [ -+ { -+ "git-tree": "13757a6b05741cf3c9c39e3a1dcc5e5cd685e025", -+ "version": "0.20.0", -+ "port-version": 1 -+ }, - { - "git-tree": "6855be1ce96497811d4eb0a9879baf6cf1b3610c", - "version": "0.20.0", +diff --git a/ports/llvm/portfile.cmake b/ports/llvm/portfile.cmake +index bf9397b66..c3112b673 100644 +--- a/ports/llvm/portfile.cmake ++++ b/ports/llvm/portfile.cmake +@@ -293,6 +293,8 @@ vcpkg_cmake_configure( + ${FEATURE_OPTIONS} + MAYBE_UNUSED_VARIABLES + COMPILER_RT_ENABLE_IOS ++ BOLT_TOOLS_INSTALL_DIR ++ LIBOMP_INSTALL_ALIASES + ) + + vcpkg_cmake_install(ADD_BIN_TO_PATH) diff --git a/ci/vcpkg/vcpkg.json b/ci/vcpkg/vcpkg.json index 58b1382d1ca..e86479a7c32 100644 --- a/ci/vcpkg/vcpkg.json +++ b/ci/vcpkg/vcpkg.json @@ -17,6 +17,7 @@ "brotli", "bzip2", "curl", + "flatbuffers", "gflags", "glog", "lz4", diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index a1e3138da9e..7f2f7812e3c 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -71,15 +71,7 @@ if(POLICY CMP0135) cmake_policy(SET CMP0135 NEW) endif() -# https://cmake.org/cmake/help/latest/policy/CMP0170.html -# -# CMP0170 is for enforcing dependency populations by users with -# FETCHCONTENT_FULLY_DISCONNECTED=ON. -if(POLICY CMP0170) - cmake_policy(SET CMP0170 NEW) -endif() - -set(ARROW_VERSION "18.0.0-SNAPSHOT") +set(ARROW_VERSION "16.0.0-SNAPSHOT") string(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+" ARROW_BASE_VERSION "${ARROW_VERSION}") @@ -264,6 +256,9 @@ if(ARROW_USE_CCACHE endif() if(ARROW_OPTIONAL_INSTALL) + # Don't make the "install" target depend on the "all" target + set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY true) + set(INSTALL_IS_OPTIONAL OPTIONAL) endif() @@ -439,6 +434,10 @@ endif() # Compiler flags # +if(ARROW_NO_DEPRECATED_API) + add_definitions(-DARROW_NO_DEPRECATED_API) +endif() + if(ARROW_EXTRA_ERROR_CONTEXT) add_definitions(-DARROW_EXTRA_ERROR_CONTEXT) endif() @@ -684,38 +683,307 @@ if(${INFER_FOUND}) endif() # -# Link targets +# Linker and Dependencies # +# Libraries to link statically with libarrow.so. +# +# Note that arrow::hadoop is a header only target that refers +# cpp/thirdparty/hadoop/include/. See +# cpp/cmake_modules/ThirdpartyToolchain.cmake for details. +set(ARROW_SHARED_LINK_LIBS arrow::flatbuffers arrow::hadoop) +set(ARROW_SHARED_INSTALL_INTERFACE_LIBS) +set(ARROW_STATIC_LINK_LIBS arrow::flatbuffers arrow::hadoop) +set(ARROW_STATIC_INSTALL_INTERFACE_LIBS) + +# We must use google-cloud-cpp::storage first. If +# google-cloud-cpp::storage depends on bundled Abseil, bundled Abseil +# and system Abseil may be mixed. +# +# For example, if Boost::headers is used before +# google-cloud-cpp::storage AND Boost::headers has +# -I/opt/homebrew/include AND /opt/homebrew/include/absl/ exists, +# /opt/homebrew/include/absl/**/*.h are used instead of .h provided by +# bundled Abseil. +if(ARROW_GCS) + list(APPEND ARROW_SHARED_LINK_LIBS google-cloud-cpp::storage) + list(APPEND ARROW_STATIC_LINK_LIBS google-cloud-cpp::storage) + if(google_cloud_cpp_storage_SOURCE STREQUAL "SYSTEM") + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS google-cloud-cpp::storage) + endif() +endif() + +if(ARROW_USE_BOOST) + list(APPEND ARROW_SHARED_LINK_LIBS Boost::headers) + list(APPEND ARROW_STATIC_LINK_LIBS Boost::headers) +endif() + +if(ARROW_USE_OPENSSL) + set(ARROW_OPENSSL_LIBS OpenSSL::Crypto OpenSSL::SSL) + list(APPEND ARROW_SHARED_LINK_LIBS ${ARROW_OPENSSL_LIBS}) + list(APPEND ARROW_STATIC_LINK_LIBS ${ARROW_OPENSSL_LIBS}) + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_OPENSSL_LIBS}) +endif() + +if(ARROW_WITH_BROTLI) + # Order is important for static linking + set(ARROW_BROTLI_LIBS Brotli::brotlienc Brotli::brotlidec Brotli::brotlicommon) + list(APPEND ARROW_SHARED_LINK_LIBS ${ARROW_BROTLI_LIBS}) + list(APPEND ARROW_STATIC_LINK_LIBS ${ARROW_BROTLI_LIBS}) + if(Brotli_SOURCE STREQUAL "SYSTEM") + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_BROTLI_LIBS}) + endif() +endif() + +if(ARROW_WITH_BZ2) + list(APPEND ARROW_STATIC_LINK_LIBS BZip2::BZip2) + if(BZip2_SOURCE STREQUAL "SYSTEM") + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS BZip2::BZip2) + endif() +endif() + +if(ARROW_WITH_LZ4) + list(APPEND ARROW_STATIC_LINK_LIBS LZ4::lz4) + if(lz4_SOURCE STREQUAL "SYSTEM") + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS LZ4::lz4) + endif() +endif() + +if(ARROW_WITH_SNAPPY) + list(APPEND ARROW_STATIC_LINK_LIBS ${Snappy_TARGET}) + if(Snappy_SOURCE STREQUAL "SYSTEM") + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${Snappy_TARGET}) + endif() +endif() + +if(ARROW_WITH_ZLIB) + list(APPEND ARROW_STATIC_LINK_LIBS ZLIB::ZLIB) + if(ZLIB_SOURCE STREQUAL "SYSTEM") + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ZLIB::ZLIB) + endif() +endif() + +if(ARROW_WITH_ZSTD) + list(APPEND ARROW_STATIC_LINK_LIBS ${ARROW_ZSTD_LIBZSTD}) + if(zstd_SOURCE STREQUAL "SYSTEM") + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_ZSTD_LIBZSTD}) + endif() +endif() + +if(ARROW_ORC) + list(APPEND ARROW_SHARED_LINK_LIBS orc::orc ${ARROW_PROTOBUF_LIBPROTOBUF}) + list(APPEND ARROW_STATIC_LINK_LIBS orc::orc ${ARROW_PROTOBUF_LIBPROTOBUF}) + if(ORC_SOURCE STREQUAL "SYSTEM") + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS orc::orc) + endif() +endif() + +if(ARROW_USE_GLOG) + list(APPEND ARROW_SHARED_LINK_LIBS glog::glog) + list(APPEND ARROW_STATIC_LINK_LIBS glog::glog) + if(GLOG_SOURCE STREQUAL "SYSTEM") + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS glog::glog) + endif() + add_definitions("-DARROW_USE_GLOG") +endif() + +if(ARROW_S3) + list(APPEND ARROW_SHARED_LINK_LIBS ${AWSSDK_LINK_LIBRARIES}) + list(APPEND ARROW_STATIC_LINK_LIBS ${AWSSDK_LINK_LIBRARIES}) + if(AWSSDK_SOURCE STREQUAL "SYSTEM") + list(APPEND + ARROW_STATIC_INSTALL_INTERFACE_LIBS + aws-cpp-sdk-identity-management + aws-cpp-sdk-sts + aws-cpp-sdk-cognito-identity + aws-cpp-sdk-s3 + aws-cpp-sdk-core) + elseif(AWSSDK_SOURCE STREQUAL "BUNDLED") + if(UNIX) + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS CURL::libcurl) + endif() + endif() +endif() + +if(ARROW_WITH_OPENTELEMETRY) + list(APPEND + ARROW_SHARED_LINK_LIBS + opentelemetry-cpp::trace + opentelemetry-cpp::ostream_span_exporter + opentelemetry-cpp::otlp_http_exporter) + list(APPEND + ARROW_STATIC_LINK_LIBS + opentelemetry-cpp::trace + opentelemetry-cpp::ostream_span_exporter + opentelemetry-cpp::otlp_http_exporter) + if(opentelemetry_SOURCE STREQUAL "SYSTEM") + list(APPEND + ARROW_STATIC_INSTALL_INTERFACE_LIBS + opentelemetry-cpp::trace + opentelemetry-cpp::ostream_span_exporter + opentelemetry-cpp::otlp_http_exporter) + endif() + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS CURL::libcurl) +endif() + +if(ARROW_WITH_AZURE_SDK) + list(APPEND ARROW_SHARED_LINK_LIBS ${AZURE_SDK_LINK_LIBRARIES}) + list(APPEND ARROW_STATIC_LINK_LIBS ${AZURE_SDK_LINK_LIBRARIES}) +endif() + +if(ARROW_WITH_UTF8PROC) + list(APPEND ARROW_SHARED_LINK_LIBS utf8proc::utf8proc) + list(APPEND ARROW_STATIC_LINK_LIBS utf8proc::utf8proc) + if(utf8proc_SOURCE STREQUAL "SYSTEM") + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS utf8proc::utf8proc) + endif() +endif() + +if(ARROW_WITH_RE2) + list(APPEND ARROW_SHARED_LINK_LIBS re2::re2) + list(APPEND ARROW_STATIC_LINK_LIBS re2::re2) + if(re2_SOURCE STREQUAL "SYSTEM") + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS re2::re2) + endif() +endif() + +if(ARROW_WITH_RAPIDJSON) + list(APPEND ARROW_SHARED_LINK_LIBS rapidjson::rapidjson) + list(APPEND ARROW_STATIC_LINK_LIBS rapidjson::rapidjson) +endif() + +if(ARROW_USE_XSIMD) + list(APPEND ARROW_SHARED_LINK_LIBS ${ARROW_XSIMD}) + list(APPEND ARROW_STATIC_LINK_LIBS ${ARROW_XSIMD}) +endif() + +# This should be done after if(ARROW_ORC) and if(ARROW_WITH_OPENTELEMETRY) +# because they depend on Protobuf. +if(ARROW_WITH_PROTOBUF) + if(Protobuf_SOURCE STREQUAL "SYSTEM") + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_PROTOBUF_LIBPROTOBUF}) + endif() +endif() + +add_custom_target(arrow_dependencies) +add_custom_target(arrow_benchmark_dependencies) +add_custom_target(arrow_test_dependencies) + +# ARROW-4581: CMake can be finicky about invoking the ExternalProject builds +# for some of the library dependencies, so we "nuke it from orbit" by making +# the toolchain dependency explicit using these "dependencies" targets +add_dependencies(arrow_dependencies toolchain) +add_dependencies(arrow_test_dependencies toolchain-tests) + +if(ARROW_STATIC_LINK_LIBS) + add_dependencies(arrow_dependencies ${ARROW_STATIC_LINK_LIBS}) + if(ARROW_HDFS OR ARROW_ORC) + if(NOT MSVC_TOOLCHAIN) + list(APPEND ARROW_STATIC_LINK_LIBS ${CMAKE_DL_LIBS}) + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${CMAKE_DL_LIBS}) + endif() + endif() +endif() + +set(ARROW_SHARED_PRIVATE_LINK_LIBS ${ARROW_STATIC_LINK_LIBS}) + +if(NOT MSVC_TOOLCHAIN) + list(APPEND ARROW_SHARED_LINK_LIBS ${CMAKE_DL_LIBS}) +endif() + +set(ARROW_TEST_LINK_TOOLCHAIN arrow::flatbuffers ${ARROW_GTEST_GMOCK} + ${ARROW_GTEST_GTEST_MAIN}) + +if(ARROW_BUILD_TESTS) + add_dependencies(arrow_test_dependencies ${ARROW_TEST_LINK_TOOLCHAIN}) +endif() + +if(ARROW_BUILD_BENCHMARKS) + # Some benchmarks use gtest + add_dependencies(arrow_benchmark_dependencies arrow_test_dependencies + toolchain-benchmarks) +endif() + +set(ARROW_TEST_STATIC_LINK_LIBS arrow_testing_static arrow_static + ${ARROW_SHARED_LINK_LIBS} ${ARROW_TEST_LINK_TOOLCHAIN}) + +set(ARROW_TEST_SHARED_LINK_LIBS arrow_testing_shared arrow_shared + ${ARROW_SHARED_LINK_LIBS} ${ARROW_TEST_LINK_TOOLCHAIN}) + +if(NOT MSVC) + list(APPEND ARROW_TEST_SHARED_LINK_LIBS ${CMAKE_DL_LIBS}) +endif() + if("${ARROW_TEST_LINKAGE}" STREQUAL "shared") if(ARROW_BUILD_TESTS AND NOT ARROW_BUILD_SHARED) - message(FATAL_ERROR "If using ARROW_TEST_LINKAGE=shared, must also \ + message(FATAL_ERROR "If using shared linkage for unit tests, must also \ pass ARROW_BUILD_SHARED=on") endif() # Use shared linking for unit tests if it's available - set(ARROW_TEST_LINK_LIBS arrow_testing_shared) + set(ARROW_TEST_LINK_LIBS ${ARROW_TEST_SHARED_LINK_LIBS}) set(ARROW_EXAMPLE_LINK_LIBS arrow_shared) else() if(ARROW_BUILD_TESTS AND NOT ARROW_BUILD_STATIC) message(FATAL_ERROR "If using static linkage for unit tests, must also \ pass ARROW_BUILD_STATIC=on") endif() - set(ARROW_TEST_LINK_LIBS arrow_testing_static) + set(ARROW_TEST_LINK_LIBS ${ARROW_TEST_STATIC_LINK_LIBS}) set(ARROW_EXAMPLE_LINK_LIBS arrow_static) endif() -# arrow::flatbuffers isn't needed for all tests but we specify it as -# the first link library. It's for prioritizing bundled FlatBuffers -# than system FlatBuffers. -list(PREPEND ARROW_TEST_LINK_LIBS arrow::flatbuffers) -list(APPEND ARROW_TEST_LINK_LIBS ${ARROW_GTEST_GMOCK} ${ARROW_GTEST_GTEST_MAIN}) if(ARROW_BUILD_BENCHMARKS) - set(ARROW_BENCHMARK_LINK_LIBS benchmark::benchmark_main ${ARROW_TEST_LINK_LIBS}) + # In the case that benchmark::benchmark_main is not available, + # we need to provide our own version. This only happens for older versions + # of benchmark. + if(NOT TARGET benchmark::benchmark_main) + add_library(arrow_benchmark_main STATIC src/arrow/util/benchmark_main.cc) + add_library(benchmark::benchmark_main ALIAS arrow_benchmark_main) + endif() + + set(ARROW_BENCHMARK_LINK_LIBS benchmark::benchmark_main benchmark::benchmark + ${ARROW_TEST_LINK_LIBS}) if(WIN32) - list(APPEND ARROW_BENCHMARK_LINK_LIBS shlwapi) + set(ARROW_BENCHMARK_LINK_LIBS Shlwapi.dll ${ARROW_BENCHMARK_LINK_LIBS}) endif() endif() +if(ARROW_JEMALLOC) + list(APPEND ARROW_SHARED_LINK_LIBS jemalloc::jemalloc) + list(APPEND ARROW_STATIC_LINK_LIBS jemalloc::jemalloc) +endif() + +if(ARROW_MIMALLOC) + add_definitions(-DARROW_MIMALLOC) + list(APPEND ARROW_SHARED_LINK_LIBS mimalloc::mimalloc) + list(APPEND ARROW_STATIC_LINK_LIBS mimalloc::mimalloc) +endif() + +# ---------------------------------------------------------------------- +# Handle platform-related libraries like -pthread + +set(ARROW_SYSTEM_LINK_LIBS) + +if(ARROW_ENABLE_THREADING) + list(APPEND ARROW_SYSTEM_LINK_LIBS Threads::Threads) +endif() +if(CMAKE_THREAD_LIBS_INIT) + string(APPEND ARROW_PC_LIBS_PRIVATE " ${CMAKE_THREAD_LIBS_INIT}") +endif() + +if(WIN32) + # Winsock + list(APPEND ARROW_SYSTEM_LINK_LIBS "ws2_32.dll") +endif() + +if(NOT WIN32 AND NOT APPLE) + # Pass -lrt on Linux only + list(APPEND ARROW_SYSTEM_LINK_LIBS rt) +endif() + +list(APPEND ARROW_SHARED_LINK_LIBS ${ARROW_SYSTEM_LINK_LIBS}) +list(APPEND ARROW_STATIC_LINK_LIBS ${ARROW_SYSTEM_LINK_LIBS}) +list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_SYSTEM_LINK_LIBS}) + # # Subdirectories # diff --git a/cpp/CMakePresets.json b/cpp/CMakePresets.json index 8886db0e110..9d99b3b2a79 100644 --- a/cpp/CMakePresets.json +++ b/cpp/CMakePresets.json @@ -46,34 +46,6 @@ "CMAKE_BUILD_TYPE": "RelWithDebInfo" } }, - { - "name": "features-emscripten", - "hidden": true, - "cacheVariables": { - "ARROW_ACERO": "ON", - "ARROW_BUILD_SHARED": "OFF", - "ARROW_BUILD_STATIC": "ON", - "ARROW_CSV": "ON", - "ARROW_CUDA": "OFF", - "ARROW_DEPENDENCY_SOURCE": "BUNDLED", - "ARROW_DEPENDENCY_USE_SHARED": "OFF", - "ARROW_ENABLE_THREADING": "OFF", - "ARROW_FLIGHT": "OFF", - "ARROW_IPC": "ON", - "ARROW_JEMALLOC": "OFF", - "ARROW_JSON": "ON", - "ARROW_MIMALLOC": "OFF", - "ARROW_ORC": "ON", - "ARROW_RUNTIME_SIMD_LEVEL": "NONE", - "ARROW_S3": "OFF", - "ARROW_SIMD_LEVEL": "NONE", - "ARROW_SUBSTRAIT": "ON", - "ARROW_WITH_BROTLI": "ON", - "ARROW_WITH_OPENTELEMETRY": "OFF", - "ARROW_WITH_SNAPPY": "ON", - "CMAKE_C_BYTE_ORDER": "LITTLE_ENDIAN" - } - }, { "name": "features-minimal", "hidden": true, @@ -222,14 +194,6 @@ "PARQUET_REQUIRE_ENCRYPTION": "ON" } }, - { - "name": "features-valgrind", - "hidden": true, - "cacheVariables": { - "ARROW_RUNTIME_SIMD_LEVEL": "AVX2", - "ARROW_TEST_MEMCHECK": "ON" - } - }, { "name": "ninja-debug-minimal", "inherits": [ @@ -341,46 +305,6 @@ "displayName": "Debug build with everything enabled (except benchmarks)", "cacheVariables": {} }, - { - "name": "ninja-debug-valgrind-basic", - "inherits": [ - "base-debug", - "features-basic", - "features-valgrind" - ], - "displayName": "Debug build for Valgrind with reduced dependencies", - "cacheVariables": {} - }, - { - "name": "ninja-debug-valgrind", - "inherits": [ - "base-debug", - "features-main", - "features-valgrind" - ], - "displayName": "Debug build for Valgrind with more optional components", - "cacheVariables": {} - }, - { - "name": "ninja-debug-valgrind-minimal", - "inherits": [ - "base-debug", - "features-minimal", - "features-valgrind" - ], - "displayName": "Debug build for Valgrind without anything enabled", - "cacheVariables": {} - }, - { - "name": "ninja-debug-valgrind-maximal", - "inherits": [ - "base-debug", - "features-maximal", - "features-valgrind" - ], - "displayName": "Debug build for Valgrind with everything enabled", - "cacheVariables": {} - }, { "name": "ninja-release-minimal", "inherits": [ @@ -417,24 +341,6 @@ "displayName": "Release build with CUDA integration", "cacheVariables": {} }, - { - "name": "ninja-debug-emscripten", - "inherits": [ - "features-emscripten", - "base-debug" - ], - "displayName": "Debug build which builds an Emscripten library", - "cacheVariables": {} - }, - { - "name": "ninja-release-emscripten", - "inherits": [ - "features-emscripten", - "base-release" - ], - "displayName": "Release build which builds an Emscripten library", - "cacheVariables": {} - }, { "name": "ninja-release-flight", "inherits": [ diff --git a/cpp/apidoc/Doxyfile b/cpp/apidoc/Doxyfile index 5be93032c00..e19c933cd45 100644 --- a/cpp/apidoc/Doxyfile +++ b/cpp/apidoc/Doxyfile @@ -2168,17 +2168,16 @@ INCLUDE_FILE_PATTERNS = PREDEFINED = __attribute__(x)= \ __declspec(x)= \ + PARQUET_EXPORT= \ + GANDIVA_EXPORT= \ + ARROW_EXPORT= \ ARROW_ACERO_EXPORT= \ - ARROW_ARG_UNUSED(x)=x \ - ARROW_DEPRECATED(x)= \ ARROW_DS_EXPORT= \ ARROW_ENGINE_EXPORT= \ - ARROW_EXPORT= \ - ARROW_EXTERN_TEMPLATE= \ ARROW_FLIGHT_EXPORT= \ ARROW_FLIGHT_SQL_EXPORT= \ - GANDIVA_EXPORT= \ - PARQUET_EXPORT= + ARROW_EXTERN_TEMPLATE= \ + ARROW_DEPRECATED(x)= # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The diff --git a/cpp/build-support/asan_symbolize.py b/cpp/build-support/asan_symbolize.py index 8bab72b661e..854090ae599 100755 --- a/cpp/build-support/asan_symbolize.py +++ b/cpp/build-support/asan_symbolize.py @@ -169,12 +169,12 @@ def symbolize(self, addr, binary, offset): atos_line = self.pipe.stdout.readline().rstrip() # A well-formed atos response looks like this: # foo(type1, type2) (in object.name) (filename.cc:80) - match = re.match(r'^(.*) \(in (.*)\) \((.*:\d*)\)$', atos_line) + match = re.match('^(.*) \(in (.*)\) \((.*:\d*)\)$', atos_line) if DEBUG: print('atos_line: {0}'.format(atos_line)) if match: function_name = match.group(1) - function_name = re.sub(r'\(.*?\)', '', function_name) + function_name = re.sub('\(.*?\)', '', function_name) file_name = fix_filename(match.group(3)) return ['%s in %s %s' % (addr, function_name, file_name)] else: @@ -342,7 +342,7 @@ def process_stdin(self): self.current_line = line.rstrip() #0 0x7f6e35cf2e45 (/blah/foo.so+0x11fe45) stack_trace_line_format = ( - r'^( *#([0-9]+) *)(0x[0-9a-f]+) *\((.*)\+(0x[0-9a-f]+)\)') + '^( *#([0-9]+) *)(0x[0-9a-f]+) *\((.*)\+(0x[0-9a-f]+)\)') match = re.match(stack_trace_line_format, line) if not match: print(self.current_line) diff --git a/cpp/build-support/emscripten-test-init.js b/cpp/build-support/emscripten-test-init.js deleted file mode 100644 index bbb542a29f0..00000000000 --- a/cpp/build-support/emscripten-test-init.js +++ /dev/null @@ -1,24 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -var Module = { -}; - -// make sure tests can access the current parquet test data files -Module.preRun = () => {ENV.PARQUET_TEST_DATA = process.env.PARQUET_TEST_DATA; - ENV.ARROW_TEST_DATA = process.env.ARROW_TEST_DATA; -}; \ No newline at end of file diff --git a/cpp/build-support/fuzzing/generate_corpuses.sh b/cpp/build-support/fuzzing/generate_corpuses.sh index ffd5c54e443..e3f00e64782 100755 --- a/cpp/build-support/fuzzing/generate_corpuses.sh +++ b/cpp/build-support/fuzzing/generate_corpuses.sh @@ -56,5 +56,4 @@ rm -rf ${CORPUS_DIR} ${OUT}/parquet-arrow-generate-fuzz-corpus ${CORPUS_DIR} # Add Parquet testing examples cp ${ARROW_CPP}/submodules/parquet-testing/data/*.parquet ${CORPUS_DIR} -cp ${ARROW_CPP}/submodules/parquet-testing/bad_data/*.parquet ${CORPUS_DIR} ${ARROW_CPP}/build-support/fuzzing/pack_corpus.py ${CORPUS_DIR} ${OUT}/parquet-arrow-fuzz_seed_corpus.zip diff --git a/cpp/build-support/lint_cpp_cli.py b/cpp/build-support/lint_cpp_cli.py index 47abd53fe92..a0eb8f0efe6 100755 --- a/cpp/build-support/lint_cpp_cli.py +++ b/cpp/build-support/lint_cpp_cli.py @@ -31,7 +31,6 @@ _NULLPTR_REGEX = re.compile(r'.*\bnullptr\b.*') _RETURN_NOT_OK_REGEX = re.compile(r'.*\sRETURN_NOT_OK.*') _ASSIGN_OR_RAISE_REGEX = re.compile(r'.*\sASSIGN_OR_RAISE.*') -_DCHECK_REGEX = re.compile(r'.*\sDCHECK.*') def _paths(paths): @@ -55,12 +54,14 @@ def lint_file(path): (lambda x: re.match(_RETURN_NOT_OK_REGEX, x), 'Use ARROW_RETURN_NOT_OK in header files', _paths('''\ arrow/status.h + test + arrow/util/hash.h arrow/python/util''')), (lambda x: re.match(_ASSIGN_OR_RAISE_REGEX, x), - 'Use ARROW_ASSIGN_OR_RAISE in header files', []), - (lambda x: re.match(_DCHECK_REGEX, x), - 'Use ARROW_DCHECK in header files', _paths('''\ - arrow/util/logging.h''')) + 'Use ARROW_ASSIGN_OR_RAISE in header files', _paths('''\ + arrow/result_internal.h + test + ''')) ] diff --git a/cpp/build-support/update-thrift.sh b/cpp/build-support/update-thrift.sh index 9e050a5e49d..9b8f2539cff 100755 --- a/cpp/build-support/update-thrift.sh +++ b/cpp/build-support/update-thrift.sh @@ -20,4 +20,4 @@ # Run this from cpp/ directory. thrift is expected to be in your path -thrift --gen cpp:moveable_types,templates -out src/generated src/parquet/parquet.thrift +thrift --gen cpp:moveable_types -out src/generated src/parquet/parquet.thrift diff --git a/cpp/cmake_modules/BuildUtils.cmake b/cpp/cmake_modules/BuildUtils.cmake index 692efa78376..083ac2fe9a8 100644 --- a/cpp/cmake_modules/BuildUtils.cmake +++ b/cpp/cmake_modules/BuildUtils.cmake @@ -97,27 +97,7 @@ function(arrow_create_merged_static_lib output_target) endforeach() if(APPLE) - # The apple-distributed libtool is what we want for bundling, but there is - # a GNU libtool that has a namecollision (and happens to be bundled with R, too). - # We are not compatible with GNU libtool, so we need to avoid it. - - # check in the obvious places first to find Apple's libtool - # HINTS is used before system paths and before PATHS, so we use that - # even though hard coded paths should go in PATHS - # TODO: use a VALIDATOR when we require cmake >= 3.25 - find_program(LIBTOOL_MACOS libtool HINTS /usr/bin - /Library/Developer/CommandLineTools/usr/bin) - - # confirm that the libtool we found is not GNU libtool - execute_process(COMMAND ${LIBTOOL_MACOS} -V - OUTPUT_VARIABLE LIBTOOL_V_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE) - if(NOT "${LIBTOOL_V_OUTPUT}" MATCHES ".*cctools-([0-9.]+).*") - message(FATAL_ERROR "libtool found appears to be the incompatible GNU libtool: ${LIBTOOL_MACOS}" - ) - endif() - - set(BUNDLE_COMMAND ${LIBTOOL_MACOS} "-no_warning_for_no_symbols" "-static" "-o" + set(BUNDLE_COMMAND "libtool" "-no_warning_for_no_symbols" "-static" "-o" ${output_lib_path} ${all_library_paths}) elseif(CMAKE_CXX_COMPILER_ID MATCHES "^(Clang|GNU|Intel|IntelLLVM)$") set(ar_script_path ${CMAKE_BINARY_DIR}/${ARG_NAME}.ar) @@ -721,11 +701,6 @@ function(ADD_TEST_CASE REL_TEST_NAME) "${EXECUTABLE_OUTPUT_PATH};$ENV{CONDA_PREFIX}/lib") endif() - # Ensure using bundled GoogleTest when we use bundled GoogleTest. - # ARROW_GTEST_GTEST_HEADERS is defined only when we use bundled - # GoogleTest. - target_link_libraries(${TEST_NAME} PRIVATE ${ARROW_GTEST_GTEST_HEADERS}) - if(ARG_STATIC_LINK_LIBS) # Customize link libraries target_link_libraries(${TEST_NAME} PRIVATE ${ARG_STATIC_LINK_LIBS}) @@ -765,8 +740,8 @@ function(ADD_TEST_CASE REL_TEST_NAME) valgrind --suppressions=valgrind.supp --tool=memcheck --gen-suppressions=all \ --num-callers=500 --leak-check=full --leak-check-heuristics=stdstring \ --error-exitcode=1 ${TEST_PATH} ${ARG_TEST_ARGUMENTS}") - elseif(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Emscripten") - add_test(NAME ${TEST_NAME} COMMAND ${TEST_NAME} ${ARG_TEST_ARGUMENTS}) + elseif(WIN32) + add_test(${TEST_NAME} ${TEST_PATH} ${ARG_TEST_ARGUMENTS}) else() add_test(${TEST_NAME} ${BUILD_SUPPORT_DIR}/run-test.sh diff --git a/cpp/cmake_modules/DefineOptions.cmake b/cpp/cmake_modules/DefineOptions.cmake index 41466a1c224..cce21b6bdba 100644 --- a/cpp/cmake_modules/DefineOptions.cmake +++ b/cpp/cmake_modules/DefineOptions.cmake @@ -110,17 +110,6 @@ macro(resolve_option_dependencies) if(MSVC_TOOLCHAIN) set(ARROW_USE_GLOG OFF) endif() - # Tests are crashed with mold + sanitizer checks. - if(ARROW_USE_ASAN - OR ARROW_USE_TSAN - OR ARROW_USE_UBSAN) - if(ARROW_USE_MOLD) - message(WARNING "ARROW_USE_MOLD is disabled when one of " - "ARROW_USE_ASAN, ARROW_USE_TSAN or ARROW_USE_UBSAN is specified " - "because it causes some problems.") - set(ARROW_USE_MOLD OFF) - endif() - endif() tsort_bool_option_dependencies() foreach(option_name ${ARROW_BOOL_OPTION_DEPENDENCIES_TSORTED}) @@ -158,6 +147,8 @@ if(ARROW_DEFINE_OPTIONS) define_option_string(ARROW_GIT_DESCRIPTION "The Arrow git commit description (if any)" "") + define_option(ARROW_NO_DEPRECATED_API "Exclude deprecated APIs from build" OFF) + define_option(ARROW_POSITION_INDEPENDENT_CODE "Whether to create position-independent target" ON) @@ -168,10 +159,6 @@ takes precedence over ccache if a storage backend is configured" ON) define_option(ARROW_USE_LD_GOLD "Use ld.gold for linking on Linux (if available)" OFF) - define_option(ARROW_USE_LLD "Use the LLVM lld for linking (if available)" OFF) - - define_option(ARROW_USE_MOLD "Use mold for linking on Linux (if available)" OFF) - define_option(ARROW_USE_PRECOMPILED_HEADERS "Use precompiled headers when compiling" OFF) diff --git a/cpp/cmake_modules/FindglogAlt.cmake b/cpp/cmake_modules/FindGLOG.cmake similarity index 77% rename from cpp/cmake_modules/FindglogAlt.cmake rename to cpp/cmake_modules/FindGLOG.cmake index eb16636add9..61b7d0694ef 100644 --- a/cpp/cmake_modules/FindglogAlt.cmake +++ b/cpp/cmake_modules/FindGLOG.cmake @@ -15,22 +15,9 @@ # # Usage of this module as follows: # -# find_package(glogAlt) +# find_package(GLOG) -if(glogAlt_FOUND) - return() -endif() - -set(find_package_args CONFIG) -if(glogAlt_FIND_VERSION) - list(APPEND find_package_args ${glogAlt_FIND_VERSION}) -endif() -if(glogAlt_FIND_QUIETLY) - list(APPEND find_package_args QUIET) -endif() -find_package(glog ${find_package_args}) -if(glog_FOUND) - set(glogAlt_FOUND TRUE) +if(GLOG_FOUND) return() endif() @@ -63,12 +50,11 @@ else() PATH_SUFFIXES ${ARROW_INCLUDE_PATH_SUFFIXES}) endif() -find_package_handle_standard_args(glogAlt REQUIRED_VARS GLOG_INCLUDE_DIR GLOG_LIB) +find_package_handle_standard_args(GLOG REQUIRED_VARS GLOG_INCLUDE_DIR GLOG_LIB) -if(glogAlt_FOUND) +if(GLOG_FOUND) add_library(glog::glog UNKNOWN IMPORTED) set_target_properties(glog::glog PROPERTIES IMPORTED_LOCATION "${GLOG_LIB}" - INTERFACE_INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIR}" - INTERFACE_COMPILE_DEFINITIONS "GLOG_USE_GLOG_EXPORT") + INTERFACE_INCLUDE_DIRECTORIES "${GLOG_INCLUDE_DIR}") endif() diff --git a/cpp/cmake_modules/FindProtobufAlt.cmake b/cpp/cmake_modules/FindProtobufAlt.cmake index 703e05c4731..15fe1b4f27e 100644 --- a/cpp/cmake_modules/FindProtobufAlt.cmake +++ b/cpp/cmake_modules/FindProtobufAlt.cmake @@ -28,27 +28,12 @@ endif() if(ProtobufAlt_FIND_QUIETLY) list(APPEND find_package_args QUIET) endif() -find_package(protobuf CONFIG ${find_package_args}) -set(ProtobufAlt_FOUND ${protobuf_FOUND}) +find_package(Protobuf ${find_package_args}) +set(ProtobufAlt_FOUND ${Protobuf_FOUND}) if(ProtobufAlt_FOUND) - if(Protobuf_PROTOC_EXECUTABLE) - # work around https://github.com/protocolbuffers/protobuf/issues/14576 - set_target_properties(protobuf::protoc PROPERTIES IMPORTED_LOCATION_RELEASE - "${Protobuf_PROTOC_EXECUTABLE}") - endif() - set(ProtobufAlt_VERSION ${protobuf_VERSION}) - set(ProtobufAlt_VERSION_MAJOR ${protobuf_VERSION_MAJOR}) - set(ProtobufAlt_VERSION_MINOR ${protobuf_VERSION_MINOR}) - set(ProtobufAlt_VERSION_PATCH ${protobuf_VERSION_PATCH}) - set(ProtobufAlt_VERSION_TWEEK ${protobuf_VERSION_TWEEK}) -else() - find_package(Protobuf ${find_package_args}) - set(ProtobufAlt_FOUND ${Protobuf_FOUND}) - if(ProtobufAlt_FOUND) - set(ProtobufAlt_VERSION ${Protobuf_VERSION}) - set(ProtobufAlt_VERSION_MAJOR ${Protobuf_VERSION_MAJOR}) - set(ProtobufAlt_VERSION_MINOR ${Protobuf_VERSION_MINOR}) - set(ProtobufAlt_VERSION_PATCH ${Protobuf_VERSION_PATCH}) - set(ProtobufAlt_VERSION_TWEEK ${Protobuf_VERSION_TWEEK}) - endif() + set(ProtobufAlt_VERSION ${Protobuf_VERSION}) + set(ProtobufAlt_VERSION_MAJOR ${Protobuf_VERSION_MAJOR}) + set(ProtobufAlt_VERSION_MINOR ${Protobuf_VERSION_MINOR}) + set(ProtobufAlt_VERSION_PATCH ${Protobuf_VERSION_PATCH}) + set(ProtobufAlt_VERSION_TWEEK ${Protobuf_VERSION_TWEEK}) endif() diff --git a/cpp/cmake_modules/FindPython3Alt.cmake b/cpp/cmake_modules/FindPython3Alt.cmake index a057be8da63..cd74bea3566 100644 --- a/cpp/cmake_modules/FindPython3Alt.cmake +++ b/cpp/cmake_modules/FindPython3Alt.cmake @@ -67,7 +67,7 @@ get_target_property(NUMPY_INCLUDE_DIRS Python3::NumPy INTERFACE_INCLUDE_DIRECTOR # detect it ourselves. # (https://gitlab.kitware.com/cmake/cmake/issues/20408) execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c" - "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))" + "from distutils import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX'))" RESULT_VARIABLE _PYTHON_RESULT OUTPUT_VARIABLE _PYTHON_STDOUT ERROR_VARIABLE _PYTHON_STDERR) diff --git a/cpp/cmake_modules/FindRapidJSONAlt.cmake b/cpp/cmake_modules/FindRapidJSONAlt.cmake index babb450e204..ef5acf18b82 100644 --- a/cpp/cmake_modules/FindRapidJSONAlt.cmake +++ b/cpp/cmake_modules/FindRapidJSONAlt.cmake @@ -29,14 +29,7 @@ endif() find_package(RapidJSON ${find_package_args}) if(RapidJSON_FOUND) set(RapidJSONAlt_FOUND TRUE) - if(NOT TARGET RapidJSON) - add_library(RapidJSON INTERFACE IMPORTED) - if(RapidJSON_INCLUDE_DIRS) - target_include_directories(RapidJSON INTERFACE "${RapidJSON_INCLUDE_DIRS}") - else() - target_include_directories(RapidJSON INTERFACE "${RAPIDJSON_INCLUDE_DIRS}") - endif() - endif() + set(RAPIDJSON_INCLUDE_DIR ${RAPIDJSON_INCLUDE_DIRS}) return() endif() @@ -81,14 +74,3 @@ find_package_handle_standard_args( RapidJSONAlt REQUIRED_VARS RAPIDJSON_INCLUDE_DIR VERSION_VAR RAPIDJSON_VERSION) - -if(RapidJSONAlt_FOUND) - if(WIN32 AND "${RAPIDJSON_INCLUDE_DIR}" MATCHES "^/") - # MSYS2 - execute_process(COMMAND "cygpath" "--windows" "${RAPIDJSON_INCLUDE_DIR}" - OUTPUT_VARIABLE RAPIDJSON_INCLUDE_DIR - OUTPUT_STRIP_TRAILING_WHITESPACE) - endif() - add_library(RapidJSON INTERFACE IMPORTED) - target_include_directories(RapidJSON INTERFACE "${RAPIDJSON_INCLUDE_DIR}") -endif() diff --git a/cpp/cmake_modules/FindThriftAlt.cmake b/cpp/cmake_modules/FindThriftAlt.cmake index 98a706deb99..f3e49021d57 100644 --- a/cpp/cmake_modules/FindThriftAlt.cmake +++ b/cpp/cmake_modules/FindThriftAlt.cmake @@ -191,10 +191,6 @@ if(ThriftAlt_FOUND) # thrift/windows/config.h for Visual C++. set_target_properties(thrift::thrift PROPERTIES INTERFACE_LINK_LIBRARIES "ws2_32") endif() - # Workaround: thrift.pc doesn't have Boost dependency. - if(TARGET Boost::headers) - target_link_libraries(thrift::thrift INTERFACE Boost::headers) - endif() if(Thrift_COMPILER_FOUND) add_executable(thrift::compiler IMPORTED) diff --git a/cpp/cmake_modules/Findlz4Alt.cmake b/cpp/cmake_modules/Findlz4Alt.cmake index 91e735107a9..77a22957f79 100644 --- a/cpp/cmake_modules/Findlz4Alt.cmake +++ b/cpp/cmake_modules/Findlz4Alt.cmake @@ -29,15 +29,9 @@ endif() find_package(lz4 ${find_package_args}) if(lz4_FOUND) set(lz4Alt_FOUND TRUE) - if(NOT TARGET LZ4::lz4) - # Conan uses lz4::lz4 not LZ4::lz4 - if(TARGET lz4::lz4) - add_library(LZ4::lz4 ALIAS lz4::lz4) - elseif(ARROW_LZ4_USE_SHARED) - add_library(LZ4::lz4 ALIAS LZ4::lz4_shared) - else() - add_library(LZ4::lz4 ALIAS LZ4::lz4_static) - endif() + # Conan uses lz4::lz4 not LZ4::lz4 + if(NOT TARGET LZ4::lz4 AND TARGET lz4::lz4) + add_library(LZ4::lz4 ALIAS lz4::lz4) endif() return() endif() diff --git a/cpp/cmake_modules/FindorcAlt.cmake b/cpp/cmake_modules/FindorcAlt.cmake index ce8cd11b4c3..dc3b978cf40 100644 --- a/cpp/cmake_modules/FindorcAlt.cmake +++ b/cpp/cmake_modules/FindorcAlt.cmake @@ -29,7 +29,6 @@ endif() find_package(orc ${find_package_args}) if(orc_FOUND) set(orcAlt_FOUND TRUE) - set(orcAlt_VERSION ${orc_VERSION}) return() endif() @@ -52,17 +51,8 @@ else() NAMES orc/orc-config.hh PATH_SUFFIXES ${ARROW_INCLUDE_PATH_SUFFIXES}) endif() -if(ORC_INCLUDE_DIR) - file(READ "${ORC_INCLUDE_DIR}/orc/orc-config.hh" ORC_CONFIG_HH_CONTENT) - string(REGEX MATCH "#define ORC_VERSION \"[0-9.]+\"" ORC_VERSION_DEFINITION - "${ORC_CONFIG_HH_CONTENT}") - string(REGEX MATCH "[0-9.]+" ORC_VERSION "${ORC_VERSION_DEFINITION}") -endif() -find_package_handle_standard_args( - orcAlt - REQUIRED_VARS ORC_STATIC_LIB ORC_INCLUDE_DIR - VERSION_VAR ORC_VERSION) +find_package_handle_standard_args(orcAlt REQUIRED_VARS ORC_STATIC_LIB ORC_INCLUDE_DIR) if(orcAlt_FOUND) if(NOT TARGET orc::orc) @@ -71,5 +61,4 @@ if(orcAlt_FOUND) PROPERTIES IMPORTED_LOCATION "${ORC_STATIC_LIB}" INTERFACE_INCLUDE_DIRECTORIES "${ORC_INCLUDE_DIR}") endif() - set(orcAlt_VERSION ${ORC_VERSION}) endif() diff --git a/cpp/cmake_modules/Findutf8proc.cmake b/cpp/cmake_modules/Findutf8proc.cmake index 9721f76f063..e3474140905 100644 --- a/cpp/cmake_modules/Findutf8proc.cmake +++ b/cpp/cmake_modules/Findutf8proc.cmake @@ -19,7 +19,7 @@ if(utf8proc_FOUND) return() endif() -if(ARROW_PACKAGE_KIND STREQUAL "vcpkg" OR VCPKG_TOOLCHAIN) +if(ARROW_PACKAGE_KIND STREQUAL "vcpkg") set(find_package_args "") if(utf8proc_FIND_VERSION) list(APPEND find_package_args ${utf8proc_FIND_VERSION}) diff --git a/cpp/cmake_modules/SetupCxxFlags.cmake b/cpp/cmake_modules/SetupCxxFlags.cmake index e2e1c4412ab..6940c6befac 100644 --- a/cpp/cmake_modules/SetupCxxFlags.cmake +++ b/cpp/cmake_modules/SetupCxxFlags.cmake @@ -24,9 +24,7 @@ include(CheckCXXSourceCompiles) message(STATUS "System processor: ${CMAKE_SYSTEM_PROCESSOR}") if(NOT DEFINED ARROW_CPU_FLAG) - if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") - set(ARROW_CPU_FLAG "emscripten") - elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64|amd64|X86|x86|i[3456]86|x64") + if(CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64|amd64|X86|x86|i[3456]86|x64") set(ARROW_CPU_FLAG "x86") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|ARM64|arm64") set(ARROW_CPU_FLAG "aarch64") @@ -314,13 +312,7 @@ if("${BUILD_WARNING_LEVEL}" STREQUAL "CHECKIN") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wall") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wextra") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wdocumentation") - set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -DARROW_WARN_DOCUMENTATION") - if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") - # size_t is 32 bit in Emscripten wasm32 - ignore conversion errors - set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-shorten-64-to-32") - else() - set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wshorten-64-to-32") - endif() + set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wshorten-64-to-32") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-missing-braces") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-unused-parameter") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-constant-logical-operand") @@ -330,9 +322,8 @@ if("${BUILD_WARNING_LEVEL}" STREQUAL "CHECKIN") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wall") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-conversion") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-sign-conversion") - set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wdate-time") - string(APPEND CXX_ONLY_FLAGS " -Wredundant-move") set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wunused-result") + set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wdate-time") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel" OR CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM") if(WIN32) @@ -634,74 +625,6 @@ if(NOT WIN32 AND NOT APPLE) endif() endif() -if(NOT WIN32 AND NOT APPLE) - if(ARROW_USE_MOLD) - find_program(LD_MOLD ld.mold) - if(LD_MOLD) - unset(MOLD_LINKER_FLAGS) - if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.1.0") - set(MOLD_LINKER_FLAGS "-fuse-ld=mold") - else() - message(STATUS "Need GCC 12.1.0 or later to use mold linker: ${CMAKE_CXX_COMPILER_VERSION}" - ) - endif() - elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.0.0") - set(MOLD_LINKER_FLAGS "--ld-path=${LD_MOLD}") - else() - message(STATUS "Need clang 12.0.0 or later to use mold linker: ${CMAKE_CXX_COMPILER_VERSION}" - ) - endif() - else() - message(STATUS "Using the default linker because compiler doesn't support mold: ${CMAKE_CXX_COMPILER_ID}" - ) - endif() - if(MOLD_LINKER_FLAGS) - message(STATUS "Using optional mold linker") - string(APPEND CMAKE_EXE_LINKER_FLAGS " ${MOLD_LINKER_FLAGS}") - string(APPEND CMAKE_MODULE_LINKER_FLAGS " ${MOLD_LINKER_FLAGS}") - string(APPEND CMAKE_SHARED_LINKER_FLAGS " ${MOLD_LINKER_FLAGS}") - endif() - else() - message(STATUS "Using the default linker because mold isn't found") - endif() - endif() -endif() - -if(ARROW_USE_LLD) - find_program(LD_LLD ld.lld) - if(LD_LLD) - unset(LLD_LINKER_FLAGS) - if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "9.1.0") - set(LLD_LINKER_FLAGS "-fuse-ld=lld") - else() - message(STATUS "Need GCC 9.1.0 or later to use LLD linker: ${CMAKE_CXX_COMPILER_VERSION}" - ) - endif() - elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.0.0") - set(LLD_LINKER_FLAGS "--ld-path=${LD_LLD}") - else() - message(STATUS "Need clang 12.0.0 or later to use LLD linker: ${CMAKE_CXX_COMPILER_VERSION}" - ) - endif() - else() - message(STATUS "Using the default linker because compiler doesn't support LLD: ${CMAKE_CXX_COMPILER_ID}" - ) - endif() - if(LLD_LINKER_FLAGS) - message(STATUS "Using optional LLVM LLD linker") - string(APPEND CMAKE_EXE_LINKER_FLAGS " ${LLD_LINKER_FLAGS}") - string(APPEND CMAKE_MODULE_LINKER_FLAGS " ${LLD_LINKER_FLAGS}") - string(APPEND CMAKE_SHARED_LINKER_FLAGS " ${LLD_LINKER_FLAGS}") - else() - message(STATUS "Using the default linker because the LLD isn't supported") - endif() - endif() -endif() - # compiler flags for different build types (run 'cmake -DCMAKE_BUILD_TYPE= .') # For all builds: # For CMAKE_BUILD_TYPE=Debug @@ -738,36 +661,17 @@ if(NOT MSVC) set(C_DEBUG_FLAGS "") set(CXX_DEBUG_FLAGS "") if(NOT MSVC) - if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") - # with -g it uses DWARF debug info, which is really slow to build - # on emscripten (and uses tons of memory) - string(REPLACE "-g" " " CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) - string(REPLACE "-g" " " CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG}) - string(APPEND C_DEBUG_FLAGS " -g2") - string(APPEND CXX_DEBUG_FLAGS " -g2") - string(APPEND C_RELWITHDEBINFO_FLAGS " -g2") - string(APPEND CXX_RELWITHDEBINFO_FLAGS " -g2") - # without -O1, emscripten executables are *MASSIVE*. Don't use -O0 - if(NOT CMAKE_C_FLAGS_DEBUG MATCHES "-O") - string(APPEND C_DEBUG_FLAGS " -O1") - endif() - if(NOT CMAKE_CXX_FLAGS_DEBUG MATCHES "-O") - string(APPEND CXX_DEBUG_FLAGS " -O1") - endif() - else() - if(NOT CMAKE_C_FLAGS_DEBUG MATCHES "-O") - string(APPEND C_DEBUG_FLAGS " -O0") - endif() - if(NOT CMAKE_CXX_FLAGS_DEBUG MATCHES "-O") - string(APPEND CXX_DEBUG_FLAGS " -O0") - endif() - - if(ARROW_GGDB_DEBUG) - string(APPEND C_DEBUG_FLAGS " -ggdb") - string(APPEND CXX_DEBUG_FLAGS " -ggdb") - string(APPEND C_RELWITHDEBINFO_FLAGS " -ggdb") - string(APPEND CXX_RELWITHDEBINFO_FLAGS " -ggdb") - endif() + if(NOT CMAKE_C_FLAGS_DEBUG MATCHES "-O") + string(APPEND C_DEBUG_FLAGS " -O0") + endif() + if(NOT CMAKE_CXX_FLAGS_DEBUG MATCHES "-O") + string(APPEND CXX_DEBUG_FLAGS " -O0") + endif() + if(ARROW_GGDB_DEBUG) + string(APPEND C_DEBUG_FLAGS " -ggdb") + string(APPEND CXX_DEBUG_FLAGS " -ggdb") + string(APPEND C_RELWITHDEBINFO_FLAGS " -ggdb") + string(APPEND CXX_RELWITHDEBINFO_FLAGS " -ggdb") endif() endif() @@ -798,40 +702,3 @@ if(MSVC) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${MSVC_LINKER_FLAGS}") endif() endif() - -if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") - # flags are: - # 1) We force *everything* to build as position independent - # 2) And with support for C++ exceptions - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -fexceptions") - # deprecated-literal-operator error is thrown in datetime (vendored lib in arrow) - set(CMAKE_CXX_FLAGS - "${CMAKE_CXX_FLAGS} -fPIC -fexceptions -Wno-error=deprecated-literal-operator") - - # flags for creating shared libraries (only used in pyarrow, because - # Emscripten builds libarrow as static) - # flags are: - # 1) Tell it to use JavaScript / WebAssembly 64 bit number support. - # 2) Tell it to build with support for C++ exceptions - # 3) Skip linker flags error which happens with -soname parameter - set(ARROW_EMSCRIPTEN_LINKER_FLAGS "-sWASM_BIGINT=1 -fexceptions -Wno-error=linkflags") - set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS - "-sSIDE_MODULE=1 ${ARROW_EMSCRIPTEN_LINKER_FLAGS}") - set(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS - "-sSIDE_MODULE=1 ${ARROW_EMSCRIPTEN_LINKER_FLAGS}") - set(CMAKE_SHARED_LINKER_FLAGS "-sSIDE_MODULE=1 ${ARROW_EMSCRIPTEN_LINKER_FLAGS}") - if(ARROW_TESTING) - # flags for building test executables for use in node - if("${CMAKE_BUILD_TYPE}" STREQUAL "RELEASE") - set(CMAKE_EXE_LINKER_FLAGS - "${ARROW_EMSCRIPTEN_LINKER_FLAGS} -sALLOW_MEMORY_GROWTH -lnodefs.js -lnoderawfs.js --pre-js ${BUILD_SUPPORT_DIR}/emscripten-test-init.js" - ) - else() - set(CMAKE_EXE_LINKER_FLAGS - "${ARROW_EMSCRIPTEN_LINKER_FLAGS} -sERROR_ON_WASM_CHANGES_AFTER_LINK=1 -sALLOW_MEMORY_GROWTH -lnodefs.js -lnoderawfs.js --pre-js ${BUILD_SUPPORT_DIR}/emscripten-test-init.js" - ) - endif() - else() - set(CMAKE_EXE_LINKER_FLAGS "${ARROW_EMSCRIPTEN_LINKER_FLAGS} -sALLOW_MEMORY_GROWTH") - endif() -endif() diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index 63e2c036c9a..b16ee077560 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake +++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake @@ -18,6 +18,11 @@ include(ProcessorCount) processorcount(NPROC) +add_custom_target(rapidjson) +add_custom_target(toolchain) +add_custom_target(toolchain-benchmarks) +add_custom_target(toolchain-tests) + # Accumulate all bundled targets and we will splice them together later as # libarrow_bundled_dependencies.a so that third party libraries have something # usable to create statically-linked builds with some BUNDLED dependencies, @@ -51,7 +56,7 @@ set(ARROW_THIRDPARTY_DEPENDENCIES BZip2 c-ares gflags - glog + GLOG google_cloud_cpp_storage gRPC GTest @@ -111,14 +116,6 @@ if("${lz4_SOURCE}" STREQUAL "" AND NOT "${Lz4_SOURCE}" STREQUAL "") set(lz4_SOURCE ${Lz4_SOURCE}) endif() -# For backward compatibility. We use "GLOG_SOURCE" if "glog_SOURCE" -# isn't specified and "GLOG_SOURCE" is specified. -# We renamed "GLOG" dependency name to "glog" in 16.0.0 because -# upstream uses "glog" not "GLOG" as package name. -if("${glog_SOURCE}" STREQUAL "" AND NOT "${GLOG_SOURCE}" STREQUAL "") - set(glog_SOURCE ${GLOG_SOURCE}) -endif() - # For backward compatibility. We use bundled jemalloc by default. if("${jemalloc_SOURCE}" STREQUAL "") set(jemalloc_SOURCE "BUNDLED") @@ -188,7 +185,7 @@ macro(build_dependency DEPENDENCY_NAME) build_cares() elseif("${DEPENDENCY_NAME}" STREQUAL "gflags") build_gflags() - elseif("${DEPENDENCY_NAME}" STREQUAL "glog") + elseif("${DEPENDENCY_NAME}" STREQUAL "GLOG") build_glog() elseif("${DEPENDENCY_NAME}" STREQUAL "google_cloud_cpp_storage") build_google_cloud_cpp_storage() @@ -634,10 +631,8 @@ endif() if(DEFINED ENV{ARROW_CARES_URL}) set(CARES_SOURCE_URL "$ENV{ARROW_CARES_URL}") else() - string(REPLACE "." "_" ARROW_CARES_BUILD_VERSION_UNDERSCORES - ${ARROW_CARES_BUILD_VERSION}) set_urls(CARES_SOURCE_URL - "https://github.com/c-ares/c-ares/releases/download/cares-${ARROW_CARES_BUILD_VERSION_UNDERSCORES}/c-ares-${ARROW_CARES_BUILD_VERSION}.tar.gz" + "https://c-ares.haxx.se/download/c-ares-${ARROW_CARES_BUILD_VERSION}.tar.gz" "${THIRDPARTY_MIRROR_URL}/cares-${ARROW_CARES_BUILD_VERSION}.tar.gz") endif() @@ -978,23 +973,6 @@ set(EP_COMMON_CMAKE_ARGS -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT} -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE_MAKEFILE}) -# if building with a toolchain file, pass that through -if(CMAKE_TOOLCHAIN_FILE) - list(APPEND EP_COMMON_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}) -endif() - -# and crosscompiling emulator (for try_run() ) -if(CMAKE_CROSSCOMPILING_EMULATOR) - string(REPLACE ";" ${EP_LIST_SEPARATOR} EP_CMAKE_CROSSCOMPILING_EMULATOR - "${CMAKE_CROSSCOMPILING_EMULATOR}") - list(APPEND EP_COMMON_CMAKE_ARGS - -DCMAKE_CROSSCOMPILING_EMULATOR=${EP_CMAKE_CROSSCOMPILING_EMULATOR}) -endif() - -if(CMAKE_PROJECT_INCLUDE) - list(APPEND EP_COMMON_CMAKE_ARGS -DCMAKE_PROJECT_INCLUDE=${CMAKE_PROJECT_INCLUDE}) -endif() - # Enable s/ccache if set by parent. if(CMAKE_C_COMPILER_LAUNCHER AND CMAKE_CXX_COMPILER_LAUNCHER) list(APPEND EP_COMMON_CMAKE_ARGS @@ -1172,6 +1150,7 @@ macro(build_boost) if(NOT TARGET Boost::dynamic_linking) # This doesn't add BOOST_ALL_DYN_LINK because bundled Boost is a static library. add_library(Boost::dynamic_linking INTERFACE IMPORTED) + add_dependencies(toolchain boost_ep) endif() set(BOOST_VENDORED TRUE) endmacro() @@ -1192,12 +1171,6 @@ if(MSVC AND ARROW_USE_STATIC_CRT) set(Boost_USE_STATIC_RUNTIME ON) endif() set(Boost_ADDITIONAL_VERSIONS - "1.84.0" - "1.84" - "1.83.0" - "1.83" - "1.82.0" - "1.82" "1.81.0" "1.81" "1.80.0" @@ -1265,7 +1238,7 @@ endif() # - S3FS and Flight benchmarks need Boost at runtime. if(ARROW_BUILD_INTEGRATION OR ARROW_BUILD_TESTS - OR (ARROW_FLIGHT AND (ARROW_TESTING OR ARROW_BUILD_BENCHMARKS)) + OR (ARROW_FLIGHT AND ARROW_BUILD_BENCHMARKS) OR (ARROW_S3 AND ARROW_BUILD_BENCHMARKS)) set(ARROW_USE_BOOST TRUE) set(ARROW_BOOST_REQUIRE_LIBRARY TRUE) @@ -1355,24 +1328,16 @@ macro(build_snappy) "-DCMAKE_INSTALL_PREFIX=${SNAPPY_PREFIX}") # Snappy unconditionally enables -Werror when building with clang this can lead # to build failures by way of new compiler warnings. This adds a flag to disable - # -Werror to the very end of the invocation to override the snappy internal setting. - set(SNAPPY_ADDITIONAL_CXX_FLAGS "") + # Werror to the very end of the invocation to override the snappy internal setting. if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - string(APPEND SNAPPY_ADDITIONAL_CXX_FLAGS " -Wno-error") - endif() - # Snappy unconditionally disables RTTI, which is incompatible with some other - # build settings (https://github.com/apache/arrow/issues/43688). - if(NOT MSVC) - string(APPEND SNAPPY_ADDITIONAL_CXX_FLAGS " -frtti") + foreach(CONFIG DEBUG MINSIZEREL RELEASE RELWITHDEBINFO) + list(APPEND + SNAPPY_CMAKE_ARGS + "-DCMAKE_CXX_FLAGS_${UPPERCASE_BUILD_TYPE}=${EP_CXX_FLAGS_${CONFIG}} -Wno-error" + ) + endforeach() endif() - foreach(CONFIG DEBUG MINSIZEREL RELEASE RELWITHDEBINFO) - list(APPEND - SNAPPY_CMAKE_ARGS - "-DCMAKE_CXX_FLAGS_${CONFIG}=${EP_CXX_FLAGS_${CONFIG}} ${SNAPPY_ADDITIONAL_CXX_FLAGS}" - ) - endforeach() - if(APPLE AND CMAKE_HOST_SYSTEM_VERSION VERSION_LESS 20) # On macOS 10.13 we need to explicitly add to avoid a missing include error # This can be removed once CRAN no longer checks on macOS 10.13 @@ -1382,14 +1347,6 @@ macro(build_snappy) set(SNAPPY_PATCH_COMMAND) endif() - if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") - # ignore linker flag errors, as Snappy sets - # -Werror -Wall, and Emscripten doesn't support -soname - list(APPEND SNAPPY_CMAKE_ARGS - "-DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS}" - "-Wno-error=linkflags") - endif() - externalproject_add(snappy_ep ${EP_COMMON_OPTIONS} BUILD_IN_SOURCE 1 @@ -1407,6 +1364,7 @@ macro(build_snappy) set_target_properties(${Snappy_TARGET} PROPERTIES IMPORTED_LOCATION "${SNAPPY_STATIC_LIB}") target_include_directories(${Snappy_TARGET} BEFORE INTERFACE "${SNAPPY_PREFIX}/include") + add_dependencies(toolchain snappy_ep) add_dependencies(${Snappy_TARGET} snappy_ep) list(APPEND ARROW_BUNDLED_STATIC_LIBS ${Snappy_TARGET}) @@ -1435,7 +1393,6 @@ macro(build_brotli) message(STATUS "Building brotli from source") set(BROTLI_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/brotli_ep/src/brotli_ep-install") set(BROTLI_INCLUDE_DIR "${BROTLI_PREFIX}/include") - set(BROTLI_LIB_DIR "${BROTLI_PREFIX}/lib") set(BROTLI_STATIC_LIBRARY_ENC "${BROTLI_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}brotlienc-static${CMAKE_STATIC_LIBRARY_SUFFIX}" ) @@ -1447,26 +1404,6 @@ macro(build_brotli) ) set(BROTLI_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${BROTLI_PREFIX}") - set(BROTLI_EP_OPTIONS) - if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") - # "cmake install" is disabled for Brotli on Emscripten, so the - # default INSTALL_COMMAND fails. We need to disable the default - # INSTALL_COMMAND. - list(APPEND - BROTLI_EP_OPTIONS - INSTALL_COMMAND - ${CMAKE_COMMAND} - -E - true) - - set(BROTLI_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/brotli_ep-prefix/src/brotli_ep-build) - set(BROTLI_BUILD_LIBS - "${BROTLI_BUILD_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}brotlienc-static${CMAKE_STATIC_LIBRARY_SUFFIX}" - "${BROTLI_BUILD_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}brotlidec-static${CMAKE_STATIC_LIBRARY_SUFFIX}" - "${BROTLI_BUILD_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}brotlicommon-static${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) - endif() - externalproject_add(brotli_ep ${EP_COMMON_OPTIONS} URL ${BROTLI_SOURCE_URL} @@ -1476,21 +1413,9 @@ macro(build_brotli) "${BROTLI_STATIC_LIBRARY_COMMON}" ${BROTLI_BUILD_BYPRODUCTS} CMAKE_ARGS ${BROTLI_CMAKE_ARGS} - STEP_TARGETS headers_copy ${BROTLI_EP_OPTIONS}) - - if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") - # Copy the libraries to our install directory manually. - set(BROTLI_BUILD_INCLUDE_DIR - ${CMAKE_CURRENT_BINARY_DIR}/brotli_ep-prefix/src/brotli_ep/c/include/brotli) - add_custom_command(TARGET brotli_ep - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${BROTLI_BUILD_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}*${CMAKE_STATIC_LIBRARY_SUFFIX} - ${BROTLI_LIB_DIR} - COMMAND ${CMAKE_COMMAND} -E copy_directory - ${BROTLI_BUILD_INCLUDE_DIR} ${BROTLI_INCLUDE_DIR}/brotli) - endif() + STEP_TARGETS headers_copy) + add_dependencies(toolchain brotli_ep) file(MAKE_DIRECTORY "${BROTLI_INCLUDE_DIR}") add_library(Brotli::brotlicommon STATIC IMPORTED) @@ -1526,8 +1451,6 @@ if(ARROW_WITH_BROTLI) PC_PACKAGE_NAMES libbrotlidec libbrotlienc) - # Order is important for static linking - set(ARROW_BROTLI_LIBS Brotli::brotlienc Brotli::brotlidec Brotli::brotlicommon) endif() if(PARQUET_REQUIRE_ENCRYPTION AND NOT ARROW_PARQUET) @@ -1548,7 +1471,6 @@ if(PARQUET_REQUIRE_ENCRYPTION REQUIRED_VERSION ${ARROW_OPENSSL_REQUIRED_VERSION}) set(ARROW_USE_OPENSSL ON) - set(ARROW_OPENSSL_LIBS OpenSSL::Crypto OpenSSL::SSL) endif() if(ARROW_USE_OPENSSL) @@ -1600,6 +1522,7 @@ macro(build_glog) BUILD_BYPRODUCTS "${GLOG_STATIC_LIB}" CMAKE_ARGS ${GLOG_CMAKE_ARGS}) + add_dependencies(toolchain glog_ep) file(MAKE_DIRECTORY "${GLOG_INCLUDE_DIR}") add_library(glog::glog STATIC IMPORTED) @@ -1611,11 +1534,7 @@ macro(build_glog) endmacro() if(ARROW_USE_GLOG) - resolve_dependency(glog - HAVE_ALT - TRUE - PC_PACKAGE_NAMES - libglog) + resolve_dependency(GLOG PC_PACKAGE_NAMES libglog) endif() # ---------------------------------------------------------------------- @@ -1662,6 +1581,8 @@ macro(build_gflags) BUILD_BYPRODUCTS "${GFLAGS_STATIC_LIB}" CMAKE_ARGS ${GFLAGS_CMAKE_ARGS}) + add_dependencies(toolchain gflags_ep) + add_thirdparty_lib(gflags::gflags_static STATIC ${GFLAGS_STATIC_LIB}) add_dependencies(gflags::gflags_static gflags_ep) set(GFLAGS_LIBRARY gflags::gflags_static) @@ -1732,9 +1653,6 @@ macro(build_thrift) if(DEFINED BOOST_ROOT) list(APPEND THRIFT_CMAKE_ARGS "-DBOOST_ROOT=${BOOST_ROOT}") endif() - if(DEFINED Boost_INCLUDE_DIR) - list(APPEND THRIFT_CMAKE_ARGS "-DBoost_INCLUDE_DIR=${Boost_INCLUDE_DIR}") - endif() if(DEFINED Boost_NAMESPACE) list(APPEND THRIFT_CMAKE_ARGS "-DBoost_NAMESPACE=${Boost_NAMESPACE}") endif() @@ -1776,6 +1694,7 @@ macro(build_thrift) if(ARROW_USE_BOOST) target_link_libraries(thrift::thrift INTERFACE Boost::headers) endif() + add_dependencies(toolchain thrift_ep) add_dependencies(thrift::thrift thrift_ep) set(Thrift_VERSION ${ARROW_THRIFT_BUILD_VERSION}) set(THRIFT_VENDORED TRUE) @@ -1872,40 +1791,11 @@ macro(build_protobuf) set_target_properties(arrow::protobuf::protoc PROPERTIES IMPORTED_LOCATION "${PROTOBUF_COMPILER}") + add_dependencies(toolchain protobuf_ep) add_dependencies(arrow::protobuf::libprotobuf protobuf_ep) add_dependencies(arrow::protobuf::protoc protobuf_ep) list(APPEND ARROW_BUNDLED_STATIC_LIBS arrow::protobuf::libprotobuf) - - if(CMAKE_CROSSCOMPILING) - # If we are cross compiling, we need to build protoc for the host - # system also, as it is used when building Arrow - # We do this by calling CMake as a child process - # with CXXFLAGS / CFLAGS and CMake flags cleared. - set(PROTOBUF_HOST_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/protobuf_ep_host-install") - set(PROTOBUF_HOST_COMPILER "${PROTOBUF_HOST_PREFIX}/bin/protoc") - - set(PROTOBUF_HOST_CMAKE_ARGS - "-DCMAKE_CXX_FLAGS=" - "-DCMAKE_C_FLAGS=" - "-DCMAKE_INSTALL_PREFIX=${PROTOBUF_HOST_PREFIX}" - -Dprotobuf_BUILD_TESTS=OFF - -Dprotobuf_DEBUG_POSTFIX=) - - externalproject_add(protobuf_ep_host - ${EP_COMMON_OPTIONS} - CMAKE_ARGS ${PROTOBUF_HOST_CMAKE_ARGS} - BUILD_BYPRODUCTS "${PROTOBUF_HOST_COMPILER}" - BUILD_IN_SOURCE 1 - URL ${PROTOBUF_SOURCE_URL} - URL_HASH "SHA256=${ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM}") - - add_executable(arrow::protobuf::host_protoc IMPORTED) - set_target_properties(arrow::protobuf::host_protoc - PROPERTIES IMPORTED_LOCATION "${PROTOBUF_HOST_COMPILER}") - - add_dependencies(arrow::protobuf::host_protoc protobuf_ep_host) - endif() endmacro() if(ARROW_WITH_PROTOBUF) @@ -1920,19 +1810,12 @@ if(ARROW_WITH_PROTOBUF) else() set(ARROW_PROTOBUF_REQUIRED_VERSION "2.6.1") endif() - if(ARROW_ORC - OR ARROW_SUBSTRAIT - OR ARROW_WITH_OPENTELEMETRY) - set(ARROW_PROTOBUF_ARROW_CMAKE_PACKAGE_NAME "Arrow") - set(ARROW_PROTOBUF_ARROW_PC_PACKAGE_NAME "arrow") - elseif(ARROW_FLIGHT) + if(ARROW_FLIGHT) set(ARROW_PROTOBUF_ARROW_CMAKE_PACKAGE_NAME "ArrowFlight") set(ARROW_PROTOBUF_ARROW_PC_PACKAGE_NAME "arrow-flight") else() - message(FATAL_ERROR "ARROW_WITH_PROTOBUF must be propagated in the build tooling installation." - " Please extend the mappings of ARROW_PROTOBUF_ARROW_CMAKE_PACKAGE_NAME and" - " ARROW_PROTOBUF_ARROW_PC_PACKAGE_NAME for newly introduced dependencies on" - " protobuf.") + set(ARROW_PROTOBUF_ARROW_CMAKE_PACKAGE_NAME "Arrow") + set(ARROW_PROTOBUF_ARROW_PC_PACKAGE_NAME "arrow") endif() # We need to use FORCE_ANY_NEWER_VERSION here to accept Protobuf # newer version such as 23.4. If we don't use it, 23.4 is processed @@ -1970,11 +1853,7 @@ if(ARROW_WITH_PROTOBUF) else() set(ARROW_PROTOBUF_LIBPROTOC protobuf::libprotoc) endif() - if(TARGET arrow::protobuf::host_protoc) - # make sure host protoc is used for compiling protobuf files - # during build of e.g. orc - set(ARROW_PROTOBUF_PROTOC arrow::protobuf::host_protoc) - elseif(TARGET arrow::protobuf::protoc) + if(TARGET arrow::protobuf::protoc) set(ARROW_PROTOBUF_PROTOC arrow::protobuf::protoc) else() if(NOT TARGET protobuf::protoc) @@ -2254,6 +2133,7 @@ if(ARROW_MIMALLOC) target_link_libraries(mimalloc::mimalloc INTERFACE "bcrypt.lib" "psapi.lib") endif() add_dependencies(mimalloc::mimalloc mimalloc_ep) + add_dependencies(toolchain mimalloc_ep) list(APPEND ARROW_BUNDLED_STATIC_LIBS mimalloc::mimalloc) @@ -2276,15 +2156,8 @@ function(build_gtest) if(APPLE) string(APPEND CMAKE_CXX_FLAGS " -Wno-unused-value" " -Wno-ignored-attributes") endif() - # If we're building static libs for Emscripten, we need to build *everything* as - # static libs. - if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") - set(BUILD_SHARED_LIBS OFF) - set(BUILD_STATIC_LIBS ON) - else() - set(BUILD_SHARED_LIBS ON) - set(BUILD_STATIC_LIBS OFF) - endif() + set(BUILD_SHARED_LIBS ON) + set(BUILD_STATIC_LIBS OFF) # We need to use "cache" variable to override the default # INSTALL_GTEST option by this value. See also: # https://cmake.org/cmake/help/latest/policy/CMP0077.html @@ -2314,10 +2187,6 @@ function(build_gtest) install(DIRECTORY "${googletest_SOURCE_DIR}/googlemock/include/" "${googletest_SOURCE_DIR}/googletest/include/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") - add_library(arrow::GTest::gtest_headers INTERFACE IMPORTED) - target_include_directories(arrow::GTest::gtest_headers - INTERFACE "${googletest_SOURCE_DIR}/googlemock/include/" - "${googletest_SOURCE_DIR}/googletest/include/") install(TARGETS gmock gmock_main gtest gtest_main EXPORT arrow_testing_targets RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" @@ -2362,14 +2231,12 @@ if(ARROW_TESTING) string(APPEND ARROW_TESTING_PC_LIBS " $") endif() - set(ARROW_GTEST_GTEST_HEADERS) set(ARROW_GTEST_GMOCK GTest::gmock) set(ARROW_GTEST_GTEST GTest::gtest) set(ARROW_GTEST_GTEST_MAIN GTest::gtest_main) else() string(APPEND ARROW_TESTING_PC_CFLAGS " -I\${includedir}/arrow-gtest") string(APPEND ARROW_TESTING_PC_LIBS " -larrow_gtest") - set(ARROW_GTEST_GTEST_HEADERS arrow::GTest::gtest_headers) set(ARROW_GTEST_GMOCK arrow::GTest::gmock) set(ARROW_GTEST_GTEST arrow::GTest::gtest) set(ARROW_GTEST_GTEST_MAIN arrow::GTest::gtest_main) @@ -2424,8 +2291,8 @@ macro(build_benchmark) PROPERTIES IMPORTED_LOCATION "${GBENCHMARK_MAIN_STATIC_LIB}") target_include_directories(benchmark::benchmark_main BEFORE INTERFACE "${GBENCHMARK_INCLUDE_DIR}") - target_link_libraries(benchmark::benchmark_main INTERFACE benchmark::benchmark) + add_dependencies(toolchain-benchmarks gbenchmark_ep) add_dependencies(benchmark::benchmark gbenchmark_ep) add_dependencies(benchmark::benchmark_main gbenchmark_ep) endmacro() @@ -2461,9 +2328,9 @@ macro(build_rapidjson) # The include directory must exist before it is referenced by a target. file(MAKE_DIRECTORY "${RAPIDJSON_INCLUDE_DIR}") - add_library(RapidJSON INTERFACE IMPORTED) - target_include_directories(RapidJSON INTERFACE "${RAPIDJSON_INCLUDE_DIR}") - add_dependencies(RapidJSON rapidjson_ep) + add_dependencies(toolchain rapidjson_ep) + add_dependencies(toolchain-tests rapidjson_ep) + add_dependencies(rapidjson rapidjson_ep) set(RAPIDJSON_VENDORED TRUE) endmacro() @@ -2477,6 +2344,19 @@ if(ARROW_WITH_RAPIDJSON) ${ARROW_RAPIDJSON_REQUIRED_VERSION} IS_RUNTIME_DEPENDENCY FALSE) + + if(RapidJSON_INCLUDE_DIR) + set(RAPIDJSON_INCLUDE_DIR "${RapidJSON_INCLUDE_DIR}") + endif() + if(WIN32 AND "${RAPIDJSON_INCLUDE_DIR}" MATCHES "^/") + # MSYS2 + execute_process(COMMAND "cygpath" "--windows" "${RAPIDJSON_INCLUDE_DIR}" + OUTPUT_VARIABLE RAPIDJSON_INCLUDE_DIR + OUTPUT_STRIP_TRAILING_WHITESPACE) + endif() + + add_library(rapidjson::rapidjson INTERFACE IMPORTED) + target_include_directories(rapidjson::rapidjson INTERFACE "${RAPIDJSON_INCLUDE_DIR}") endif() macro(build_xsimd) @@ -2495,9 +2375,8 @@ macro(build_xsimd) # The include directory must exist before it is referenced by a target. file(MAKE_DIRECTORY "${XSIMD_INCLUDE_DIR}") - add_library(arrow::xsimd INTERFACE IMPORTED) - target_include_directories(arrow::xsimd INTERFACE "${XSIMD_INCLUDE_DIR}") - add_dependencies(arrow::xsimd xsimd_ep) + add_dependencies(toolchain xsimd_ep) + add_dependencies(toolchain-tests xsimd_ep) set(XSIMD_VENDORED TRUE) endmacro() @@ -2519,6 +2398,8 @@ if(ARROW_USE_XSIMD) "8.1.0") if(xsimd_SOURCE STREQUAL "BUNDLED") + add_library(arrow::xsimd INTERFACE IMPORTED) + target_include_directories(arrow::xsimd INTERFACE "${XSIMD_INCLUDE_DIR}") set(ARROW_XSIMD arrow::xsimd) else() message(STATUS "xsimd found. Headers: ${xsimd_INCLUDE_DIRS}") @@ -2528,59 +2409,38 @@ endif() macro(build_zlib) message(STATUS "Building ZLIB from source") - - # ensure zlib is built with -fpic - # and make sure that the build finds the version in Emscripten ports - # - n.b. the actual linking happens because -sUSE_ZLIB=1 is - # set in the compiler variables, but cmake expects - # it to exist at configuration time if we aren't building it as - # bundled. We need to do this for all packages - # not just zlib as some depend on zlib, but we don't rebuild - # if it exists already - if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") - # build zlib using Emscripten ports - if(NOT EXISTS ${EMSCRIPTEN_SYSROOT}/lib/wasm32-emscripten/pic/libz.a) - execute_process(COMMAND embuilder --pic --force build zlib) - endif() - add_library(ZLIB::ZLIB STATIC IMPORTED) - set_property(TARGET ZLIB::ZLIB - PROPERTY IMPORTED_LOCATION - "${EMSCRIPTEN_SYSROOT}/lib/wasm32-emscripten/pic/libz.a") - target_include_directories(ZLIB::ZLIB INTERFACE "${EMSCRIPTEN_SYSROOT}/include") - list(APPEND ARROW_BUNDLED_STATIC_LIBS ZLIB::ZLIB) - else() - set(ZLIB_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zlib_ep/src/zlib_ep-install") - if(MSVC) - if(${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG") - set(ZLIB_STATIC_LIB_NAME zlibstaticd.lib) - else() - set(ZLIB_STATIC_LIB_NAME zlibstatic.lib) - endif() + set(ZLIB_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/zlib_ep/src/zlib_ep-install") + if(MSVC) + if(${UPPERCASE_BUILD_TYPE} STREQUAL "DEBUG") + set(ZLIB_STATIC_LIB_NAME zlibstaticd.lib) else() - set(ZLIB_STATIC_LIB_NAME libz.a) + set(ZLIB_STATIC_LIB_NAME zlibstatic.lib) endif() - set(ZLIB_STATIC_LIB "${ZLIB_PREFIX}/lib/${ZLIB_STATIC_LIB_NAME}") - set(ZLIB_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${ZLIB_PREFIX}") + else() + set(ZLIB_STATIC_LIB_NAME libz.a) + endif() + set(ZLIB_STATIC_LIB "${ZLIB_PREFIX}/lib/${ZLIB_STATIC_LIB_NAME}") + set(ZLIB_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=${ZLIB_PREFIX}") - externalproject_add(zlib_ep - ${EP_COMMON_OPTIONS} - URL ${ZLIB_SOURCE_URL} - URL_HASH "SHA256=${ARROW_ZLIB_BUILD_SHA256_CHECKSUM}" - BUILD_BYPRODUCTS "${ZLIB_STATIC_LIB}" - CMAKE_ARGS ${ZLIB_CMAKE_ARGS}) + externalproject_add(zlib_ep + ${EP_COMMON_OPTIONS} + URL ${ZLIB_SOURCE_URL} + URL_HASH "SHA256=${ARROW_ZLIB_BUILD_SHA256_CHECKSUM}" + BUILD_BYPRODUCTS "${ZLIB_STATIC_LIB}" + CMAKE_ARGS ${ZLIB_CMAKE_ARGS}) - file(MAKE_DIRECTORY "${ZLIB_PREFIX}/include") + file(MAKE_DIRECTORY "${ZLIB_PREFIX}/include") - add_library(ZLIB::ZLIB STATIC IMPORTED) - set(ZLIB_LIBRARIES ${ZLIB_STATIC_LIB}) - set(ZLIB_INCLUDE_DIRS "${ZLIB_PREFIX}/include") - set_target_properties(ZLIB::ZLIB PROPERTIES IMPORTED_LOCATION ${ZLIB_LIBRARIES}) - target_include_directories(ZLIB::ZLIB BEFORE INTERFACE "${ZLIB_INCLUDE_DIRS}") + add_library(ZLIB::ZLIB STATIC IMPORTED) + set(ZLIB_LIBRARIES ${ZLIB_STATIC_LIB}) + set(ZLIB_INCLUDE_DIRS "${ZLIB_PREFIX}/include") + set_target_properties(ZLIB::ZLIB PROPERTIES IMPORTED_LOCATION ${ZLIB_LIBRARIES}) + target_include_directories(ZLIB::ZLIB BEFORE INTERFACE "${ZLIB_INCLUDE_DIRS}") - add_dependencies(ZLIB::ZLIB zlib_ep) - list(APPEND ARROW_BUNDLED_STATIC_LIBS ZLIB::ZLIB) - endif() + add_dependencies(toolchain zlib_ep) + add_dependencies(ZLIB::ZLIB zlib_ep) + list(APPEND ARROW_BUNDLED_STATIC_LIBS ZLIB::ZLIB) set(ZLIB_VENDORED TRUE) endmacro() @@ -2613,6 +2473,7 @@ macro(build_lz4) add_library(LZ4::lz4 STATIC IMPORTED) set_target_properties(LZ4::lz4 PROPERTIES IMPORTED_LOCATION "${LZ4_STATIC_LIB}") target_include_directories(LZ4::lz4 BEFORE INTERFACE "${LZ4_PREFIX}/include") + add_dependencies(toolchain lz4_ep) add_dependencies(LZ4::lz4 lz4_ep) list(APPEND ARROW_BUNDLED_STATIC_LIBS LZ4::lz4) @@ -2665,6 +2526,7 @@ macro(build_zstd) target_include_directories(zstd::libzstd_static BEFORE INTERFACE "${ZSTD_PREFIX}/include") + add_dependencies(toolchain zstd_ep) add_dependencies(zstd::libzstd_static zstd_ep) list(APPEND ARROW_BUNDLED_STATIC_LIBS zstd::libzstd_static) @@ -2721,6 +2583,7 @@ macro(build_re2) set_target_properties(re2::re2 PROPERTIES IMPORTED_LOCATION "${RE2_STATIC_LIB}") target_include_directories(re2::re2 BEFORE INTERFACE "${RE2_PREFIX}/include") + add_dependencies(toolchain re2_ep) add_dependencies(re2::re2 re2_ep) set(RE2_VENDORED TRUE) # Set values so that FindRE2 finds this too @@ -2736,6 +2599,7 @@ if(ARROW_WITH_RE2) TRUE PC_PACKAGE_NAMES re2) + add_definitions(-DARROW_WITH_RE2) endif() macro(build_bzip2) @@ -2778,6 +2642,7 @@ macro(build_bzip2) target_include_directories(BZip2::BZip2 BEFORE INTERFACE "${BZIP2_PREFIX}/include") set(BZIP2_INCLUDE_DIR "${BZIP2_PREFIX}/include") + add_dependencies(toolchain bzip2_ep) add_dependencies(BZip2::BZip2 bzip2_ep) list(APPEND ARROW_BUNDLED_STATIC_LIBS BZip2::BZip2) @@ -2830,19 +2695,19 @@ macro(build_utf8proc) target_include_directories(utf8proc::utf8proc BEFORE INTERFACE "${UTF8PROC_PREFIX}/include") + add_dependencies(toolchain utf8proc_ep) add_dependencies(utf8proc::utf8proc utf8proc_ep) list(APPEND ARROW_BUNDLED_STATIC_LIBS utf8proc::utf8proc) endmacro() if(ARROW_WITH_UTF8PROC) - set(utf8proc_resolve_dependency_args utf8proc PC_PACKAGE_NAMES libutf8proc) - if(NOT VCPKG_TOOLCHAIN) - # utf8proc in vcpkg doesn't provide version information: - # https://github.com/microsoft/vcpkg/issues/39176 - list(APPEND utf8proc_resolve_dependency_args REQUIRED_VERSION "2.2.0") - endif() - resolve_dependency(${utf8proc_resolve_dependency_args}) + resolve_dependency(utf8proc + PC_PACKAGE_NAMES + libutf8proc + REQUIRED_VERSION + "2.2.0") + add_definitions(-DARROW_WITH_UTF8PROC) endif() macro(build_cares) @@ -2868,6 +2733,7 @@ macro(build_cares) file(MAKE_DIRECTORY ${CARES_INCLUDE_DIR}) + add_dependencies(toolchain cares_ep) add_library(c-ares::cares STATIC IMPORTED) set_target_properties(c-ares::cares PROPERTIES IMPORTED_LOCATION "${CARES_STATIC_LIB}") target_include_directories(c-ares::cares BEFORE INTERFACE "${CARES_INCLUDE_DIR}") @@ -2888,6 +2754,33 @@ endmacro() # ---------------------------------------------------------------------- # Dependencies for Arrow Flight RPC +macro(ensure_absl) + if(NOT absl_FOUND) + if(${absl_SOURCE} STREQUAL "AUTO") + # We can't use resolve_dependency(absl 20211102) to use Abseil + # 20211102 or later because Abseil's CMake package uses "EXACT" + # version match strategy. Our CMake configuration will work with + # Abseil LTS 20211102 or later. So we want to accept Abseil LTS + # 20211102 or later. We need to update + # ARROW_ABSL_REQUIRED_LTS_VERSIONS list when new Abseil LTS is + # released. + set(ARROW_ABSL_REQUIRED_LTS_VERSIONS 20230125 20220623 20211102) + foreach(_VERSION ${ARROW_ABSL_REQUIRED_LTS_VERSIONS}) + find_package(absl ${_VERSION}) + if(absl_FOUND) + break() + endif() + endforeach() + # If we can't find Abseil LTS 20211102 or later, we use bundled + # Abseil. + if(NOT absl_FOUND) + set(absl_SOURCE "BUNDLED") + endif() + endif() + resolve_dependency(absl) + endif() +endmacro() + macro(build_absl) message(STATUS "Building Abseil-cpp from source") set(absl_FOUND TRUE) @@ -2896,10 +2789,6 @@ macro(build_absl) set(ABSL_INCLUDE_DIR "${ABSL_PREFIX}/include") set(ABSL_CMAKE_ARGS "${EP_COMMON_CMAKE_ARGS}" -DABSL_RUN_TESTS=OFF "-DCMAKE_INSTALL_PREFIX=${ABSL_PREFIX}") - if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0) - set(ABSL_CXX_FLAGS "${EP_CXX_FLAGS} -include stdint.h") - list(APPEND ABSL_CMAKE_ARGS "-DCMAKE_CXX_FLAGS=${ABSL_CXX_FLAGS}") - endif() set(ABSL_BUILD_BYPRODUCTS) set(ABSL_LIBRARIES) @@ -3836,6 +3725,7 @@ macro(build_grpc) TRUE PC_PACKAGE_NAMES libcares) + ensure_absl() message(STATUS "Building gRPC from source") @@ -4088,6 +3978,7 @@ macro(build_grpc) ${GRPC_CPP_PLUGIN}) add_dependencies(grpc_ep grpc_dependencies) + add_dependencies(toolchain grpc_ep) add_dependencies(gRPC::grpc++ grpc_ep) add_dependencies(gRPC::grpc_cpp_plugin grpc_ep) set(GRPC_VENDORED TRUE) @@ -4125,40 +4016,12 @@ macro(build_grpc) endif() endmacro() -if(ARROW_WITH_GOOGLE_CLOUD_CPP OR ARROW_WITH_GRPC) - set(ARROW_ABSL_REQUIRED_VERSION 20211102) - # Google Cloud C++ SDK and gRPC require Google Abseil - if(ARROW_WITH_GOOGLE_CLOUD_CPP) - set(ARROW_ABSL_CMAKE_PACKAGE_NAME Arrow) - set(ARROW_ABSL_PC_PACKAGE_NAME arrow) - else() - set(ARROW_ABSL_CMAKE_PACKAGE_NAME ArrowFlight) - set(ARROW_ABSL_PC_PACKAGE_NAME arrow-flight) - endif() - resolve_dependency(absl - ARROW_CMAKE_PACKAGE_NAME - ${ARROW_ABSL_CMAKE_PACKAGE_NAME} - ARROW_PC_PACKAGE_NAME - ${ARROW_ABSL_PC_PACKAGE_NAME} - HAVE_ALT - FALSE - FORCE_ANY_NEWER_VERSION - TRUE - REQUIRED_VERSION - ${ARROW_ABSL_REQUIRED_VERSION}) -endif() - if(ARROW_WITH_GRPC) if(NOT ARROW_ENABLE_THREADING) message(FATAL_ERROR "Can't use gRPC with ARROW_ENABLE_THREADING=OFF") endif() set(ARROW_GRPC_REQUIRED_VERSION "1.30.0") - if(absl_SOURCE STREQUAL "BUNDLED" AND NOT gRPC_SOURCE STREQUAL "BUNDLED") - # System gRPC can't be used with bundled Abseil - message(STATUS "Forcing gRPC_SOURCE to BUNDLED because absl_SOURCE is BUNDLED") - set(gRPC_SOURCE "BUNDLED") - endif() if(NOT Protobuf_SOURCE STREQUAL gRPC_SOURCE) # ARROW-15495: Protobuf/gRPC must come from the same source message(STATUS "Forcing gRPC_SOURCE to Protobuf_SOURCE (${Protobuf_SOURCE})") @@ -4244,8 +4107,7 @@ macro(build_nlohmann_json) set(NLOHMANN_JSON_INCLUDE_DIR "${NLOHMANN_JSON_PREFIX}/include") set(NLOHMANN_JSON_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} "-DCMAKE_INSTALL_PREFIX=" - # google-cloud-cpp requires JSON_MultipleHeaders=ON - -DJSON_BuildTests=OFF -DJSON_MultipleHeaders=ON) + -DJSON_BuildTests=OFF) set(NLOHMANN_JSON_BUILD_BYPRODUCTS ${NLOHMANN_JSON_PREFIX}/include/nlohmann/json.hpp) @@ -4277,6 +4139,7 @@ macro(build_google_cloud_cpp_storage) message(STATUS "Only building the google-cloud-cpp::storage component") # List of dependencies taken from https://github.com/googleapis/google-cloud-cpp/blob/main/doc/packaging.md + ensure_absl() build_crc32c_once() # Curl is required on all platforms, but building it internally might also trip over S3's copy. @@ -4313,7 +4176,6 @@ macro(build_google_cloud_cpp_storage) # We need this to build with OpenSSL 3.0. # See also: https://github.com/googleapis/google-cloud-cpp/issues/8544 -DGOOGLE_CLOUD_CPP_ENABLE_WERROR=OFF - -DGOOGLE_CLOUD_CPP_WITH_MOCKS=OFF -DOPENSSL_CRYPTO_LIBRARY=${OPENSSL_CRYPTO_LIBRARY} -DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR} -DOPENSSL_SSL_LIBRARY=${OPENSSL_SSL_LIBRARY}) @@ -4366,6 +4228,8 @@ macro(build_google_cloud_cpp_storage) # Work around https://gitlab.kitware.com/cmake/cmake/issues/15052 file(MAKE_DIRECTORY ${GOOGLE_CLOUD_CPP_INCLUDE_DIR}) + add_dependencies(toolchain google_cloud_cpp_ep) + add_library(google-cloud-cpp::common STATIC IMPORTED) set_target_properties(google-cloud-cpp::common PROPERTIES IMPORTED_LOCATION @@ -4400,9 +4264,6 @@ macro(build_google_cloud_cpp_storage) nlohmann_json::nlohmann_json OpenSSL::SSL OpenSSL::Crypto) - if(WIN32) - target_link_libraries(google-cloud-cpp::rest-internal INTERFACE ws2_32) - endif() add_library(google-cloud-cpp::storage STATIC IMPORTED) set_target_properties(google-cloud-cpp::storage @@ -4508,219 +4369,97 @@ target_include_directories(arrow::hadoop INTERFACE "${HADOOP_HOME}/include") # ---------------------------------------------------------------------- # Apache ORC -function(build_orc) +macro(build_orc) message(STATUS "Building Apache ORC from source") - if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.29) - fetchcontent_declare(orc - ${FC_DECLARE_COMMON_OPTIONS} - URL ${ORC_SOURCE_URL} - URL_HASH "SHA256=${ARROW_ORC_BUILD_SHA256_CHECKSUM}") - prepare_fetchcontent() - - set(CMAKE_UNITY_BUILD FALSE) - - set(ORC_PREFER_STATIC_LZ4 - OFF - CACHE BOOL "" FORCE) - get_target_property(LZ4_INCLUDE_DIR LZ4::lz4 INTERFACE_INCLUDE_DIRECTORIES) - if(NOT LZ4_INCLUDE_DIR) - find_path(LZ4_INCLUDE_DIR NAMES lz4.h) - endif() - get_filename_component(LZ4_ROOT "${LZ4_INCLUDE_DIR}" DIRECTORY) - set(LZ4_HOME - "${LZ4_ROOT}" - CACHE STRING "" FORCE) - set(LZ4_LIBRARY - LZ4::lz4 - CACHE STRING "" FORCE) - - set(ORC_PREFER_STATIC_PROTOBUF - OFF - CACHE BOOL "" FORCE) - get_target_property(PROTOBUF_INCLUDE_DIR ${ARROW_PROTOBUF_LIBPROTOBUF} - INTERFACE_INCLUDE_DIRECTORIES) - get_filename_component(Protobuf_ROOT "${PROTOBUF_INCLUDE_DIR}" DIRECTORY) - set(PROTOBUF_HOME - ${Protobuf_ROOT} - CACHE STRING "" FORCE) - # ORC uses this. - target_include_directories(${ARROW_PROTOBUF_LIBPROTOC} - INTERFACE "${PROTOBUF_INCLUDE_DIR}") - set(PROTOBUF_EXECUTABLE ${ARROW_PROTOBUF_PROTOC}) - set(PROTOBUF_LIBRARY ${ARROW_PROTOBUF_LIBPROTOBUF}) - set(PROTOC_LIBRARY ${ARROW_PROTOBUF_LIBPROTOC}) - - set(ORC_PREFER_STATIC_SNAPPY - OFF - CACHE BOOL "" FORCE) - get_target_property(SNAPPY_INCLUDE_DIR ${Snappy_TARGET} INTERFACE_INCLUDE_DIRECTORIES) - get_filename_component(Snappy_ROOT "${SNAPPY_INCLUDE_DIR}" DIRECTORY) - set(SNAPPY_HOME - ${Snappy_ROOT} - CACHE STRING "" FORCE) - set(SNAPPY_LIBRARY - ${Snappy_TARGET} - CACHE STRING "" FORCE) - - set(ORC_PREFER_STATIC_ZLIB - OFF - CACHE BOOL "" FORCE) - get_target_property(ZLIB_INCLUDE_DIR ZLIB::ZLIB INTERFACE_INCLUDE_DIRECTORIES) - get_filename_component(ZLIB_ROOT "${ZLIB_INCLUDE_DIR}" DIRECTORY) - set(ZLIB_HOME - ${ZLIB_ROOT} - CACHE STRING "" FORCE) - set(ZLIB_LIBRARY - ZLIB::ZLIB - CACHE STRING "" FORCE) - - set(ORC_PREFER_STATIC_ZSTD - OFF - CACHE BOOL "" FORCE) - get_target_property(ZSTD_INCLUDE_DIR ${ARROW_ZSTD_LIBZSTD} - INTERFACE_INCLUDE_DIRECTORIES) - get_filename_component(ZSTD_ROOT "${ZSTD_INCLUDE_DIR}" DIRECTORY) - set(ZSTD_HOME - ${ZSTD_ROOT} - CACHE STRING "" FORCE) - set(ZSTD_LIBRARY ${ARROW_ZSTD_LIBZSTD}) - - set(BUILD_CPP_TESTS - OFF - CACHE BOOL "" FORCE) - set(BUILD_JAVA - OFF - CACHE BOOL "" FORCE) - set(BUILD_LIBHDFSPP - OFF - CACHE BOOL "" FORCE) - set(BUILD_TOOLS - OFF - CACHE BOOL "" FORCE) - set(INSTALL_VENDORED_LIBS - OFF - CACHE BOOL "" FORCE) - set(STOP_BUILD_ON_WARNING - OFF - CACHE BOOL "" FORCE) - - # We can remove this with ORC 2.0.2 or later. - list(PREPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_BINARY_DIR}/_deps/orc-src/cmake_modules) - - fetchcontent_makeavailable(orc) - - add_library(orc::orc INTERFACE IMPORTED) - target_link_libraries(orc::orc INTERFACE orc) - target_include_directories(orc::orc INTERFACE "${orc_BINARY_DIR}/c++/include" - "${orc_SOURCE_DIR}/c++/include") - - list(APPEND ARROW_BUNDLED_STATIC_LIBS orc) - else() - set(ORC_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/orc_ep-install") - set(ORC_HOME "${ORC_PREFIX}") - set(ORC_INCLUDE_DIR "${ORC_PREFIX}/include") - set(ORC_STATIC_LIB - "${ORC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}orc${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) + set(ORC_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/orc_ep-install") + set(ORC_HOME "${ORC_PREFIX}") + set(ORC_INCLUDE_DIR "${ORC_PREFIX}/include") + set(ORC_STATIC_LIB + "${ORC_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}orc${CMAKE_STATIC_LIBRARY_SUFFIX}") - get_target_property(ORC_PROTOBUF_ROOT ${ARROW_PROTOBUF_LIBPROTOBUF} - INTERFACE_INCLUDE_DIRECTORIES) - get_filename_component(ORC_PROTOBUF_ROOT "${ORC_PROTOBUF_ROOT}" DIRECTORY) + get_target_property(ORC_PROTOBUF_ROOT ${ARROW_PROTOBUF_LIBPROTOBUF} + INTERFACE_INCLUDE_DIRECTORIES) + get_filename_component(ORC_PROTOBUF_ROOT "${ORC_PROTOBUF_ROOT}" DIRECTORY) - get_target_property(ORC_SNAPPY_INCLUDE_DIR ${Snappy_TARGET} - INTERFACE_INCLUDE_DIRECTORIES) - get_filename_component(ORC_SNAPPY_ROOT "${ORC_SNAPPY_INCLUDE_DIR}" DIRECTORY) + get_target_property(ORC_SNAPPY_INCLUDE_DIR ${Snappy_TARGET} + INTERFACE_INCLUDE_DIRECTORIES) + get_filename_component(ORC_SNAPPY_ROOT "${ORC_SNAPPY_INCLUDE_DIR}" DIRECTORY) - get_target_property(ORC_LZ4_ROOT LZ4::lz4 INTERFACE_INCLUDE_DIRECTORIES) - get_filename_component(ORC_LZ4_ROOT "${ORC_LZ4_ROOT}" DIRECTORY) + get_target_property(ORC_LZ4_ROOT LZ4::lz4 INTERFACE_INCLUDE_DIRECTORIES) + get_filename_component(ORC_LZ4_ROOT "${ORC_LZ4_ROOT}" DIRECTORY) - get_target_property(ORC_ZSTD_ROOT ${ARROW_ZSTD_LIBZSTD} INTERFACE_INCLUDE_DIRECTORIES) - get_filename_component(ORC_ZSTD_ROOT "${ORC_ZSTD_ROOT}" DIRECTORY) + get_target_property(ORC_ZSTD_ROOT ${ARROW_ZSTD_LIBZSTD} INTERFACE_INCLUDE_DIRECTORIES) + get_filename_component(ORC_ZSTD_ROOT "${ORC_ZSTD_ROOT}" DIRECTORY) - set(ORC_CMAKE_ARGS - ${EP_COMMON_CMAKE_ARGS} - "-DCMAKE_INSTALL_PREFIX=${ORC_PREFIX}" - -DSTOP_BUILD_ON_WARNING=OFF - -DBUILD_LIBHDFSPP=OFF - -DBUILD_JAVA=OFF - -DBUILD_TOOLS=OFF - -DBUILD_CPP_TESTS=OFF - -DINSTALL_VENDORED_LIBS=OFF - "-DLZ4_HOME=${ORC_LZ4_ROOT}" - "-DPROTOBUF_EXECUTABLE=$" - "-DPROTOBUF_HOME=${ORC_PROTOBUF_ROOT}" - "-DPROTOBUF_INCLUDE_DIR=$" - "-DPROTOBUF_LIBRARY=$" - "-DPROTOC_LIBRARY=$" - "-DSNAPPY_HOME=${ORC_SNAPPY_ROOT}" - "-DSNAPPY_LIBRARY=$" - "-DLZ4_LIBRARY=$" - "-DLZ4_STATIC_LIB=$" - "-DLZ4_INCLUDE_DIR=${ORC_LZ4_ROOT}/include" - "-DSNAPPY_INCLUDE_DIR=${ORC_SNAPPY_INCLUDE_DIR}" - "-DZSTD_HOME=${ORC_ZSTD_ROOT}" - "-DZSTD_INCLUDE_DIR=$" - "-DZSTD_LIBRARY=$") - if(ZLIB_ROOT) - set(ORC_CMAKE_ARGS ${ORC_CMAKE_ARGS} "-DZLIB_HOME=${ZLIB_ROOT}") - endif() + set(ORC_CMAKE_ARGS + ${EP_COMMON_CMAKE_ARGS} + "-DCMAKE_INSTALL_PREFIX=${ORC_PREFIX}" + -DSTOP_BUILD_ON_WARNING=OFF + -DBUILD_LIBHDFSPP=OFF + -DBUILD_JAVA=OFF + -DBUILD_TOOLS=OFF + -DBUILD_CPP_TESTS=OFF + -DINSTALL_VENDORED_LIBS=OFF + "-DLZ4_HOME=${ORC_LZ4_ROOT}" + "-DPROTOBUF_EXECUTABLE=$" + "-DPROTOBUF_HOME=${ORC_PROTOBUF_ROOT}" + "-DPROTOBUF_INCLUDE_DIR=$" + "-DPROTOBUF_LIBRARY=$" + "-DPROTOC_LIBRARY=$" + "-DSNAPPY_HOME=${ORC_SNAPPY_ROOT}" + "-DSNAPPY_INCLUDE_DIR=${ORC_SNAPPY_INCLUDE_DIR}" + "-DZSTD_HOME=${ORC_ZSTD_ROOT}" + "-DZSTD_INCLUDE_DIR=$" + "-DZSTD_LIBRARY=$") + if(ZLIB_ROOT) + set(ORC_CMAKE_ARGS ${ORC_CMAKE_ARGS} "-DZLIB_HOME=${ZLIB_ROOT}") + endif() - # Work around CMake bug - file(MAKE_DIRECTORY ${ORC_INCLUDE_DIR}) + # Work around CMake bug + file(MAKE_DIRECTORY ${ORC_INCLUDE_DIR}) - externalproject_add(orc_ep - ${EP_COMMON_OPTIONS} - URL ${ORC_SOURCE_URL} - URL_HASH "SHA256=${ARROW_ORC_BUILD_SHA256_CHECKSUM}" - BUILD_BYPRODUCTS ${ORC_STATIC_LIB} - CMAKE_ARGS ${ORC_CMAKE_ARGS} - DEPENDS ${ARROW_PROTOBUF_LIBPROTOBUF} - ${ARROW_PROTOBUF_PROTOC} - ${ARROW_ZSTD_LIBZSTD} - ${Snappy_TARGET} - LZ4::lz4 - ZLIB::ZLIB) - add_library(orc::orc STATIC IMPORTED) - set_target_properties(orc::orc PROPERTIES IMPORTED_LOCATION "${ORC_STATIC_LIB}") - target_include_directories(orc::orc BEFORE INTERFACE "${ORC_INCLUDE_DIR}") - target_link_libraries(orc::orc INTERFACE LZ4::lz4 ZLIB::ZLIB ${ARROW_ZSTD_LIBZSTD} - ${Snappy_TARGET}) - # Protobuf generated files may use ABSL_DCHECK*() and - # absl::log_internal_check_op is needed for them. - if(TARGET absl::log_internal_check_op) - target_link_libraries(orc::orc INTERFACE absl::log_internal_check_op) - endif() - if(NOT MSVC) - if(NOT APPLE AND ARROW_ENABLE_THREADING) - target_link_libraries(orc::orc INTERFACE Threads::Threads) - endif() - target_link_libraries(orc::orc INTERFACE ${CMAKE_DL_LIBS}) + externalproject_add(orc_ep + ${EP_COMMON_OPTIONS} + URL ${ORC_SOURCE_URL} + URL_HASH "SHA256=${ARROW_ORC_BUILD_SHA256_CHECKSUM}" + BUILD_BYPRODUCTS ${ORC_STATIC_LIB} + CMAKE_ARGS ${ORC_CMAKE_ARGS} + DEPENDS ${ARROW_PROTOBUF_LIBPROTOBUF} + ${ARROW_ZSTD_LIBZSTD} + ${Snappy_TARGET} + LZ4::lz4 + ZLIB::ZLIB) + + set(ORC_VENDORED 1) + + add_library(orc::orc STATIC IMPORTED) + set_target_properties(orc::orc PROPERTIES IMPORTED_LOCATION "${ORC_STATIC_LIB}") + target_include_directories(orc::orc BEFORE INTERFACE "${ORC_INCLUDE_DIR}") + target_link_libraries(orc::orc INTERFACE LZ4::lz4 ZLIB::ZLIB ${ARROW_ZSTD_LIBZSTD} + ${Snappy_TARGET}) + # Protobuf generated files may use ABSL_DCHECK*() and + # absl::log_internal_check_op is needed for them. + if(TARGET absl::log_internal_check_op) + target_link_libraries(orc::orc INTERFACE absl::log_internal_check_op) + endif() + if(NOT MSVC) + if(NOT APPLE AND ARROW_ENABLE_THREADING) + target_link_libraries(orc::orc INTERFACE Threads::Threads) endif() - target_link_libraries(orc::orc INTERFACE ${ARROW_PROTOBUF_LIBPROTOBUF}) - add_dependencies(orc::orc orc_ep) - list(APPEND ARROW_BUNDLED_STATIC_LIBS orc::orc) + target_link_libraries(orc::orc INTERFACE ${CMAKE_DL_LIBS}) endif() - set(ORC_VENDORED - TRUE - PARENT_SCOPE) - set(ARROW_BUNDLED_STATIC_LIBS - ${ARROW_BUNDLED_STATIC_LIBS} - PARENT_SCOPE) -endfunction() + add_dependencies(toolchain orc_ep) + add_dependencies(orc::orc orc_ep) + + list(APPEND ARROW_BUNDLED_STATIC_LIBS orc::orc) +endmacro() if(ARROW_ORC) resolve_dependency(orc HAVE_ALT TRUE) - if(ORC_VENDORED) - set(ARROW_ORC_VERSION ${ARROW_ORC_BUILD_VERSION}) - else() - target_link_libraries(orc::orc INTERFACE ${ARROW_PROTOBUF_LIBPROTOBUF}) - set(ARROW_ORC_VERSION ${orcAlt_VERSION}) - message(STATUS "Found ORC static library: ${ORC_STATIC_LIB}") - message(STATUS "Found ORC headers: ${ORC_INCLUDE_DIR}") - endif() + message(STATUS "Found ORC static library: ${ORC_STATIC_LIB}") + message(STATUS "Found ORC headers: ${ORC_INCLUDE_DIR}") endif() # ---------------------------------------------------------------------- @@ -4742,11 +4481,8 @@ macro(build_opentelemetry) set(_OPENTELEMETRY_LIBS common http_client_curl - logs - ostream_log_record_exporter ostream_span_exporter otlp_http_client - otlp_http_log_record_exporter otlp_http_exporter otlp_recordable proto @@ -4779,14 +4515,6 @@ macro(build_opentelemetry) set(_OPENTELEMETRY_STATIC_LIBRARY "${OPENTELEMETRY_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http${CMAKE_STATIC_LIBRARY_SUFFIX}" ) - elseif(_OPENTELEMETRY_LIB STREQUAL "otlp_http_log_record_exporter") - set(_OPENTELEMETRY_STATIC_LIBRARY - "${OPENTELEMETRY_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_otlp_http_log${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) - elseif(_OPENTELEMETRY_LIB STREQUAL "ostream_log_record_exporter") - set(_OPENTELEMETRY_STATIC_LIBRARY - "${OPENTELEMETRY_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_exporter_ostream_logs${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) else() set(_OPENTELEMETRY_STATIC_LIBRARY "${OPENTELEMETRY_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}opentelemetry_${_OPENTELEMETRY_LIB}${CMAKE_STATIC_LIBRARY_SUFFIX}" @@ -4821,16 +4549,9 @@ macro(build_opentelemetry) IMPORTED_LOCATION) list(APPEND OPENTELEMETRY_CMAKE_ARGS + -DWITH_OTLP=ON -DWITH_OTLP_HTTP=ON -DWITH_OTLP_GRPC=OFF - # Disabled because it seemed to cause linking errors. May be worth a closer look. - -DWITH_FUNC_TESTS=OFF - # These options are slated for removal in v1.14 and their features are deemed stable - # as of v1.13. However, setting their corresponding ENABLE_* macros in headers seems - # finicky - resulting in build failures or ABI-related runtime errors during HTTP - # client initialization. There may still be a solution, but we disable them for now. - -DWITH_OTLP_HTTP_SSL_PREVIEW=OFF - -DWITH_OTLP_HTTP_SSL_TLS_PREVIEW=OFF "-DProtobuf_INCLUDE_DIR=${OPENTELEMETRY_PROTOBUF_INCLUDE_DIR}" "-DProtobuf_LIBRARY=${OPENTELEMETRY_PROTOBUF_INCLUDE_DIR}" "-DProtobuf_PROTOC_EXECUTABLE=${OPENTELEMETRY_PROTOC_EXECUTABLE}") @@ -4896,6 +4617,9 @@ macro(build_opentelemetry) DEPENDEES download DEPENDERS configure) + add_dependencies(toolchain opentelemetry_ep) + add_dependencies(toolchain-tests opentelemetry_ep) + set(OPENTELEMETRY_VENDORED 1) target_link_libraries(opentelemetry-cpp::common @@ -4904,25 +4628,19 @@ macro(build_opentelemetry) target_link_libraries(opentelemetry-cpp::resources INTERFACE opentelemetry-cpp::common) target_link_libraries(opentelemetry-cpp::trace INTERFACE opentelemetry-cpp::common opentelemetry-cpp::resources) - target_link_libraries(opentelemetry-cpp::logs INTERFACE opentelemetry-cpp::common - opentelemetry-cpp::resources) target_link_libraries(opentelemetry-cpp::http_client_curl - INTERFACE opentelemetry-cpp::common opentelemetry-cpp::ext - CURL::libcurl) + INTERFACE opentelemetry-cpp::ext CURL::libcurl) target_link_libraries(opentelemetry-cpp::proto INTERFACE ${ARROW_PROTOBUF_LIBPROTOBUF}) target_link_libraries(opentelemetry-cpp::otlp_recordable - INTERFACE opentelemetry-cpp::logs opentelemetry-cpp::trace - opentelemetry-cpp::resources opentelemetry-cpp::proto) + INTERFACE opentelemetry-cpp::trace opentelemetry-cpp::resources + opentelemetry-cpp::proto) target_link_libraries(opentelemetry-cpp::otlp_http_client - INTERFACE opentelemetry-cpp::common opentelemetry-cpp::proto + INTERFACE opentelemetry-cpp::sdk opentelemetry-cpp::proto opentelemetry-cpp::http_client_curl nlohmann_json::nlohmann_json) target_link_libraries(opentelemetry-cpp::otlp_http_exporter INTERFACE opentelemetry-cpp::otlp_recordable opentelemetry-cpp::otlp_http_client) - target_link_libraries(opentelemetry-cpp::otlp_http_log_record_exporter - INTERFACE opentelemetry-cpp::otlp_recordable - opentelemetry-cpp::otlp_http_client) foreach(_OPENTELEMETRY_LIB ${_OPENTELEMETRY_LIBS}) add_dependencies(opentelemetry-cpp::${_OPENTELEMETRY_LIB} opentelemetry_ep) @@ -4943,13 +4661,6 @@ if(ARROW_WITH_OPENTELEMETRY) find_curl() set(opentelemetry-cpp_SOURCE "AUTO") resolve_dependency(opentelemetry-cpp) - set(ARROW_OPENTELEMETRY_LIBS - opentelemetry-cpp::trace - opentelemetry-cpp::logs - opentelemetry-cpp::otlp_http_log_record_exporter - opentelemetry-cpp::ostream_log_record_exporter - opentelemetry-cpp::ostream_span_exporter - opentelemetry-cpp::otlp_http_exporter) get_target_property(OPENTELEMETRY_INCLUDE_DIR opentelemetry-cpp::api INTERFACE_INCLUDE_DIRECTORIES) message(STATUS "Found OpenTelemetry headers: ${OPENTELEMETRY_INCLUDE_DIR}") @@ -4965,20 +4676,8 @@ macro(build_awssdk) set(AWSSDK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/awssdk_ep-install") set(AWSSDK_INCLUDE_DIR "${AWSSDK_PREFIX}/include") - # The AWS SDK has a few warnings around shortening lengths - set(AWS_C_FLAGS "${EP_C_FLAGS}") - set(AWS_CXX_FLAGS "${EP_CXX_FLAGS}") - if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STREQUAL - "Clang") - # Negate warnings that AWS SDK cannot build under - string(APPEND AWS_C_FLAGS " -Wno-error=shorten-64-to-32") - string(APPEND AWS_CXX_FLAGS " -Wno-error=shorten-64-to-32") - endif() - set(AWSSDK_COMMON_CMAKE_ARGS ${EP_COMMON_CMAKE_ARGS} - -DCMAKE_C_FLAGS=${AWS_C_FLAGS} - -DCMAKE_CXX_FLAGS=${AWS_CXX_FLAGS} -DCPP_STANDARD=${CMAKE_CXX_STANDARD} -DCMAKE_INSTALL_PREFIX=${AWSSDK_PREFIX} -DCMAKE_PREFIX_PATH=${AWSSDK_PREFIX} @@ -5297,6 +4996,7 @@ macro(build_awssdk) ${AWS_CPP_SDK_S3_STATIC_LIBRARY} ${AWS_CPP_SDK_STS_STATIC_LIBRARY} DEPENDS aws_crt_cpp_ep) + add_dependencies(toolchain awssdk_ep) foreach(_AWSSDK_LIB ${_AWSSDK_LIBS}) if(${_AWSSDK_LIB} MATCHES "^aws-cpp-sdk-") add_dependencies(${_AWSSDK_LIB} awssdk_ep) @@ -5325,9 +5025,6 @@ macro(build_awssdk) PROPERTY INTERFACE_LINK_LIBRARIES ZLIB::ZLIB) add_dependencies(awssdk_ep zlib_ep) endif() - set_property(TARGET AWS::aws-c-io - APPEND - PROPERTY INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS}) elseif(WIN32) set_property(TARGET aws-cpp-sdk-core APPEND @@ -5344,9 +5041,6 @@ macro(build_awssdk) "ncrypt.lib" "Secur32.lib" "Shlwapi.lib") - set_property(TARGET AWS::aws-c-io - APPEND - PROPERTY INTERFACE_LINK_LIBRARIES "crypt32.lib") endif() # AWSSDK is static-only build @@ -5434,8 +5128,12 @@ endfunction() if(ARROW_WITH_AZURE_SDK) resolve_dependency(Azure REQUIRED_VERSION 1.10.2) - set(AZURE_SDK_LINK_LIBRARIES Azure::azure-storage-files-datalake - Azure::azure-storage-blobs Azure::azure-identity) + set(AZURE_SDK_LINK_LIBRARIES + Azure::azure-storage-files-datalake + Azure::azure-storage-common + Azure::azure-storage-blobs + Azure::azure-identity + Azure::azure-core) endif() # ---------------------------------------------------------------------- # ucx - communication framework for modern, high-bandwidth and low-latency networks @@ -5500,6 +5198,7 @@ macro(build_ucx) add_library(ucx::ucs SHARED IMPORTED) set_target_properties(ucx::ucs PROPERTIES IMPORTED_LOCATION "${UCX_SHARED_LIB_UCS}") + add_dependencies(toolchain ucx_ep) add_dependencies(ucx::ucp ucx_ep) add_dependencies(ucx::uct ucx_ep) add_dependencies(ucx::ucs ucx_ep) @@ -5519,3 +5218,9 @@ if(ARROW_WITH_UCX) endif() message(STATUS "All bundled static libraries: ${ARROW_BUNDLED_STATIC_LIBS}") + +# Write out the package configurations. + +configure_file("src/arrow/util/config.h.cmake" "src/arrow/util/config.h" ESCAPE_QUOTES) +install(FILES "${ARROW_BINARY_DIR}/src/arrow/util/config.h" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/arrow/util") diff --git a/cpp/cmake_modules/UseCython.cmake b/cpp/cmake_modules/UseCython.cmake index 7d88daa4fad..e15ac59490c 100644 --- a/cpp/cmake_modules/UseCython.cmake +++ b/cpp/cmake_modules/UseCython.cmake @@ -184,9 +184,4 @@ function(cython_add_module _name pyx_target_name generated_files) add_dependencies(${_name} ${pyx_target_name}) endfunction() -execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from Cython.Compiler.Version import version; print(version)" - OUTPUT_VARIABLE CYTHON_VERSION_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE) -set(CYTHON_VERSION "${CYTHON_VERSION_OUTPUT}") - include(CMakeParseArguments) diff --git a/cpp/cmake_modules/san-config.cmake b/cpp/cmake_modules/san-config.cmake index 8c2983e18b4..2221dc16665 100644 --- a/cpp/cmake_modules/san-config.cmake +++ b/cpp/cmake_modules/san-config.cmake @@ -78,7 +78,6 @@ if(${ARROW_USE_TSAN}) # Some of the above also need to be passed to the linker. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie -fsanitize=thread") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -pie -fsanitize=thread") # Strictly speaking, TSAN doesn't require dynamic linking. But it does # require all code to be position independent, and the easiest way to diff --git a/cpp/examples/arrow/CMakeLists.txt b/cpp/examples/arrow/CMakeLists.txt index a5b69a5d8b4..4625f130565 100644 --- a/cpp/examples/arrow/CMakeLists.txt +++ b/cpp/examples/arrow/CMakeLists.txt @@ -17,9 +17,7 @@ add_arrow_example(row_wise_conversion_example) -if(ARROW_WITH_RAPIDJSON) - add_arrow_example(rapidjson_row_converter EXTRA_LINK_LIBS RapidJSON) -endif() +add_arrow_example(rapidjson_row_converter) if(ARROW_ACERO) if(ARROW_BUILD_SHARED) @@ -95,17 +93,6 @@ if(ARROW_FLIGHT) add_custom_target(flight_grpc_example_gen ALL DEPENDS ${FLIGHT_EXAMPLE_GENERATED_PROTO_FILES}) - set(FLIGHT_GRPC_EXAMPLE_LINK_LIBS - ${FLIGHT_EXAMPLES_LINK_LIBS} - gRPC::grpc++ - ${GRPC_REFLECTION_LINK_LIBS} - ${ARROW_PROTOBUF_LIBPROTOBUF} - ${GFLAGS_LIBRARIES}) - if(TARGET absl::log_internal_check_op) - # Protobuf generated files may use ABSL_DCHECK*() and - # absl::log_internal_check_op is needed for them. - list(APPEND FLIGHT_GRPC_EXAMPLE_LINK_LIBS absl::log_internal_check_op) - endif() add_arrow_example(flight_grpc_example DEPENDENCIES flight_grpc_example_gen @@ -115,7 +102,11 @@ if(ARROW_FLIGHT) EXTRA_INCLUDES ${CMAKE_BINARY_DIR} EXTRA_LINK_LIBS - ${FLIGHT_GRPC_EXAMPLE_LINK_LIBS} + ${FLIGHT_EXAMPLES_LINK_LIBS} + gRPC::grpc++ + ${GRPC_REFLECTION_LINK_LIBS} + ${ARROW_PROTOBUF_LIBPROTOBUF} + ${GFLAGS_LIBRARIES} EXTRA_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/helloworld.pb.cc" "${CMAKE_CURRENT_BINARY_DIR}/helloworld.grpc.pb.cc") @@ -195,13 +186,3 @@ if(ARROW_GANDIVA) endif() add_arrow_example(gandiva_example EXTRA_LINK_LIBS ${GANDIVA_EXAMPLE_LINK_LIBS}) endif() - -if(ARROW_FILESYSTEM) - add_library(filesystem_definition_example MODULE filesystem_definition_example.cc) - target_link_libraries(filesystem_definition_example ${ARROW_EXAMPLE_LINK_LIBS}) - - add_arrow_example(filesystem_usage_example) - target_compile_definitions(filesystem-usage-example - PUBLIC FILESYSTEM_EXAMPLE_LIBPATH="$" - ) -endif() diff --git a/cpp/examples/arrow/filesystem_definition_example.cc b/cpp/examples/arrow/filesystem_definition_example.cc deleted file mode 100644 index 65301bb843b..00000000000 --- a/cpp/examples/arrow/filesystem_definition_example.cc +++ /dev/null @@ -1,151 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -#include -#include -#include -#include -#include - -// Demonstrate registering a user-defined Arrow FileSystem outside -// of the Arrow source tree. - -using arrow::Result; -using arrow::Status; -namespace io = arrow::io; -namespace fs = arrow::fs; - -class ExampleFileSystem : public fs::FileSystem { - public: - explicit ExampleFileSystem(const io::IOContext& io_context) - : fs::FileSystem{io_context} {} - - // This is a mock filesystem whose root directory contains a single file. - // All operations which would mutate will simply raise an error. - static constexpr std::string_view kPath = "example_file"; - static constexpr std::string_view kContents = "hello world"; - static fs::FileInfo info() { - fs::FileInfo info; - info.set_path(std::string{kPath}); - info.set_type(fs::FileType::File); - info.set_size(kContents.size()); - return info; - } - - static Status NotFound(std::string_view path) { - return Status::IOError("Path does not exist '", path, "'"); - } - - static Status NoMutation() { - return Status::IOError("operations which would mutate are not permitted"); - } - - Result PathFromUri(const std::string& uri_string) const override { - ARROW_ASSIGN_OR_RAISE(auto uri, arrow::util::Uri::FromString(uri_string)); - return uri.path(); - } - - std::string type_name() const override { return "example"; } - - bool Equals(const FileSystem& other) const override { - return type_name() == other.type_name(); - } - - /// \cond FALSE - using FileSystem::CreateDir; - using FileSystem::DeleteDirContents; - using FileSystem::GetFileInfo; - using FileSystem::OpenAppendStream; - using FileSystem::OpenOutputStream; - /// \endcond - - Result GetFileInfo(const std::string& path) override { - if (path == kPath) { - return info(); - } - return NotFound(path); - } - - Result> GetFileInfo(const fs::FileSelector& select) override { - if (select.base_dir == "/" || select.base_dir == "") { - return std::vector{info()}; - } - if (select.allow_not_found) { - return std::vector{}; - } - return NotFound(select.base_dir); - } - - Status CreateDir(const std::string& path, bool recursive) override { - return NoMutation(); - } - - Status DeleteDir(const std::string& path) override { return NoMutation(); } - - Status DeleteDirContents(const std::string& path, bool missing_dir_ok) override { - return NoMutation(); - } - - Status DeleteRootDirContents() override { return NoMutation(); } - - Status DeleteFile(const std::string& path) override { return NoMutation(); } - - Status Move(const std::string& src, const std::string& dest) override { - return NoMutation(); - } - - Status CopyFile(const std::string& src, const std::string& dest) override { - return NoMutation(); - } - - Result> OpenInputStream( - const std::string& path) override { - return OpenInputFile(path); - } - - Result> OpenInputFile( - const std::string& path) override { - if (path == kPath) { - return io::BufferReader::FromString(std::string{kContents}); - } - return NotFound(path); - } - - Result> OpenOutputStream( - const std::string& path, - const std::shared_ptr& metadata) override { - return NoMutation(); - } - - Result> OpenAppendStream( - const std::string& path, - const std::shared_ptr& metadata) override { - return NoMutation(); - } -}; - -auto kExampleFileSystemModule = ARROW_REGISTER_FILESYSTEM( - "example", - [](const arrow::util::Uri& uri, const io::IOContext& io_context, - std::string* out_path) -> Result> { - auto fs = std::make_shared(io_context); - if (out_path) { - ARROW_ASSIGN_OR_RAISE(*out_path, fs->PathFromUri(uri.ToString())); - } - return fs; - }, - {}); diff --git a/cpp/examples/arrow/filesystem_usage_example.cc b/cpp/examples/arrow/filesystem_usage_example.cc deleted file mode 100644 index e674586bc63..00000000000 --- a/cpp/examples/arrow/filesystem_usage_example.cc +++ /dev/null @@ -1,55 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -#include - -#include -#include - -namespace fs = arrow::fs; - -// Demonstrate dynamically loading a user-defined Arrow FileSystem - -arrow::Status Execute() { - ARROW_RETURN_NOT_OK(arrow::fs::LoadFileSystemFactories(FILESYSTEM_EXAMPLE_LIBPATH)); - - std::string uri = "example:///example_file"; - std::cout << "Uri: " << uri << std::endl; - - std::string path; - ARROW_ASSIGN_OR_RAISE(auto fs, arrow::fs::FileSystemFromUri(uri, &path)); - std::cout << "Path: " << path << std::endl; - - fs::FileSelector sel; - sel.base_dir = "/"; - ARROW_ASSIGN_OR_RAISE(auto infos, fs->GetFileInfo(sel)); - - std::cout << "Root directory contains:" << std::endl; - for (const auto& info : infos) { - std::cout << "- " << info << std::endl; - } - return arrow::Status::OK(); -} - -int main() { - auto status = Execute(); - if (!status.ok()) { - std::cerr << "Error occurred : " << status.message() << std::endl; - return EXIT_FAILURE; - } - return EXIT_SUCCESS; -} diff --git a/cpp/examples/parquet/parquet_stream_api/stream_reader_writer.cc b/cpp/examples/parquet/parquet_stream_api/stream_reader_writer.cc index 7189aa85391..1f7246b7816 100644 --- a/cpp/examples/parquet/parquet_stream_api/stream_reader_writer.cc +++ b/cpp/examples/parquet/parquet_stream_api/stream_reader_writer.cc @@ -25,7 +25,6 @@ #include #include "arrow/io/file.h" -#include "arrow/util/config.h" #include "parquet/exception.h" #include "parquet/stream_reader.h" #include "parquet/stream_writer.h" diff --git a/cpp/gdb_arrow.py b/cpp/gdb_arrow.py index c3f5ab62981..6c3af1680bd 100644 --- a/cpp/gdb_arrow.py +++ b/cpp/gdb_arrow.py @@ -304,8 +304,7 @@ def format_timestamp(val, unit): seconds, subseconds = divmod(val, traits.multiplier) try: dt = datetime.datetime.utcfromtimestamp(seconds) - except (ValueError, OSError, OverflowError): - # value out of range for datetime.datetime + except (ValueError, OSError): # value out of range for datetime.datetime pretty = "too large to represent" else: pretty = dt.isoformat().replace('T', ' ') @@ -957,12 +956,10 @@ def storage_type(self): def to_string(self): """ - The result of calling ToString(show_metadata=True). + The result of calling ToString(). """ - # XXX `show_metadata` is an optional argument, but gdb doesn't allow - # omitting it. return StdString(gdb.parse_and_eval( - f"{for_evaluation(self.val)}.ToString(true)")) + f"{for_evaluation(self.val)}.ToString()")) class Schema: diff --git a/cpp/src/arrow/CMakeLists.txt b/cpp/src/arrow/CMakeLists.txt index 89f28ee416e..c1fafeebc03 100644 --- a/cpp/src/arrow/CMakeLists.txt +++ b/cpp/src/arrow/CMakeLists.txt @@ -26,220 +26,6 @@ add_dependencies(arrow-all arrow-benchmarks arrow-integration) -# Libraries to link with libarrow.so. They aren't exported. -set(ARROW_SHARED_PRIVATE_LINK_LIBS) - -# Libraries to link with exported libarrow.{so,a}. -set(ARROW_SHARED_INSTALL_INTERFACE_LIBS) -set(ARROW_STATIC_INSTALL_INTERFACE_LIBS) - -if(ARROW_GCS) - if(google_cloud_cpp_storage_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS google-cloud-cpp::storage) - endif() -endif() - -if(ARROW_USE_OPENSSL) - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_OPENSSL_LIBS}) -endif() - -if(ARROW_WITH_BROTLI) - if(Brotli_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_BROTLI_LIBS}) - endif() -endif() - -if(ARROW_WITH_BZ2) - if(BZip2_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS BZip2::BZip2) - endif() -endif() - -if(ARROW_WITH_LZ4) - if(lz4_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS LZ4::lz4) - endif() -endif() - -if(ARROW_WITH_SNAPPY) - if(Snappy_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${Snappy_TARGET}) - endif() -endif() - -if(ARROW_WITH_ZLIB) - if(ZLIB_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ZLIB::ZLIB) - endif() -endif() - -if(ARROW_WITH_ZSTD) - if(zstd_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_ZSTD_LIBZSTD}) - endif() -endif() - -if(ARROW_ORC) - if(ORC_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS orc::orc) - endif() -endif() - -if(ARROW_USE_GLOG) - if(GLOG_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS glog::glog) - endif() -endif() - -if(ARROW_S3) - if(AWSSDK_SOURCE STREQUAL "SYSTEM") - list(APPEND - ARROW_STATIC_INSTALL_INTERFACE_LIBS - aws-cpp-sdk-identity-management - aws-cpp-sdk-sts - aws-cpp-sdk-cognito-identity - aws-cpp-sdk-s3 - aws-cpp-sdk-core) - elseif(AWSSDK_SOURCE STREQUAL "BUNDLED") - if(UNIX) - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS CURL::libcurl) - endif() - endif() -endif() - -if(ARROW_WITH_OPENTELEMETRY) - if(opentelemetry_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_OPENTELEMETRY_LIBS}) - endif() - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS CURL::libcurl) -endif() - -if(ARROW_WITH_UTF8PROC) - if(utf8proc_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS utf8proc::utf8proc) - endif() -endif() - -if(ARROW_WITH_RE2) - if(re2_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS re2::re2) - endif() -endif() - -# This should be done after if(ARROW_ORC) and if(ARROW_WITH_OPENTELEMETRY) -# because they depend on Protobuf. -if(ARROW_WITH_PROTOBUF) - if(Protobuf_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_PROTOBUF_LIBPROTOBUF}) - endif() -endif() - -if(ARROW_ENABLE_THREADING) - list(APPEND ARROW_SHARED_PRIVATE_LINK_LIBS Threads::Threads) - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS Threads::Threads) -endif() - -set(ARROW_TEST_LINK_TOOLCHAIN ${ARROW_GTEST_GMOCK} ${ARROW_GTEST_GTEST_MAIN}) -set(ARROW_TEST_STATIC_LINK_LIBS arrow::flatbuffers arrow_testing_static arrow_static - ${ARROW_TEST_LINK_TOOLCHAIN}) -set(ARROW_TEST_SHARED_LINK_LIBS arrow::flatbuffers arrow_testing_shared arrow_shared - ${ARROW_TEST_LINK_TOOLCHAIN}) - -if(CMAKE_DL_LIBS) - list(APPEND ARROW_SHARED_INSTALL_INTERFACE_LIBS ${CMAKE_DL_LIBS}) - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${CMAKE_DL_LIBS}) - list(APPEND ARROW_TEST_SHARED_LINK_LIBS ${CMAKE_DL_LIBS}) - list(APPEND ARROW_TEST_STATIC_LINK_LIBS ${CMAKE_DL_LIBS}) - string(APPEND ARROW_PC_LIBS_PRIVATE " -l${CMAKE_DL_LIBS}") -endif() - -# ---------------------------------------------------------------------- -# Handle platform-related libraries like -pthread - -set(ARROW_SYSTEM_LINK_LIBS) - -if(CMAKE_THREAD_LIBS_INIT) - string(APPEND ARROW_PC_LIBS_PRIVATE " ${CMAKE_THREAD_LIBS_INIT}") -endif() - -if(WIN32) - list(APPEND ARROW_SYSTEM_LINK_LIBS "ws2_32") -endif() - -if(NOT WIN32 AND NOT APPLE) - # Pass -lrt on Linux only - list(APPEND ARROW_SYSTEM_LINK_LIBS rt) -endif() - -list(APPEND ARROW_SHARED_INSTALL_INTERFACE_LIBS ${ARROW_SYSTEM_LINK_LIBS}) -list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_SYSTEM_LINK_LIBS}) - -# Need -latomic on Raspbian. -# See also: https://issues.apache.org/jira/browse/ARROW-12860 -if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND ${CMAKE_SYSTEM_PROCESSOR} MATCHES "armv7") - string(APPEND ARROW_PC_LIBS_PRIVATE " -latomic") - list(APPEND ARROW_SHARED_INSTALL_INTERFACE_LIBS "atomic") - list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS "atomic") -endif() - -# This creates OBJECT libraries for arrow_shared/arrow_static. This is -# not intended to use for other libraries such as -# arrow_acero_shared/arrow_acero_static for now. -# -# arrow_shared/arrow_static depends on many external libraries such as -# Zstandard and jemalloc. If we use bundled libraries, we can't start -# building arrow_shared/arrow_static until all bundled libraries are -# built. It prevent parallel build speedup. -# -# We can avoid the situation by creating small OBJECT libraries that -# depend only needed external libraries. If an OBJECT library doesn't -# depend on any bundled libraries, it can be built before bundled -# libraries are built. If an OBJECT library depend on only a few -# bundled libraries, it can be built after only they are built. -function(arrow_add_object_library PREFIX) - set(SOURCES ${ARGN}) - string(TOLOWER "${PREFIX}" prefix) - if(WIN32) - set(targets) - if(ARROW_BUILD_SHARED) - add_library(${prefix}_shared OBJECT ${SOURCES}) - set_target_properties(${prefix}_shared PROPERTIES POSITION_INDEPENDENT_CODE ON) - target_compile_definitions(${prefix}_shared PRIVATE ARROW_EXPORTING) - target_compile_features(${prefix}_shared PRIVATE cxx_std_17) - set(${PREFIX}_TARGET_SHARED - ${prefix}_shared - PARENT_SCOPE) - list(APPEND targets ${prefix}_shared) - endif() - if(ARROW_BUILD_STATIC) - add_library(${prefix}_static OBJECT ${SOURCES}) - set_target_properties(${prefix}_static PROPERTIES POSITION_INDEPENDENT_CODE ON) - target_compile_definitions(${prefix}_static PRIVATE ARROW_STATIC) - target_compile_features(${prefix}_static PRIVATE cxx_std_17) - set(${PREFIX}_TARGET_STATIC - ${prefix}_static - PARENT_SCOPE) - list(APPEND targets ${prefix}_static) - endif() - set(${PREFIX}_TARGETS - ${targets} - PARENT_SCOPE) - else() - add_library(${prefix} OBJECT ${SOURCES}) - set_target_properties(${prefix} PROPERTIES POSITION_INDEPENDENT_CODE ON) - target_compile_features(${prefix} PRIVATE cxx_std_17) - set(${PREFIX}_TARGET_SHARED - ${prefix} - PARENT_SCOPE) - set(${PREFIX}_TARGET_STATIC - ${prefix} - PARENT_SCOPE) - set(${PREFIX}_TARGETS - ${prefix} - PARENT_SCOPE) - endif() -endfunction() - # Adding unit tests part of the "arrow" portion of the test suite function(ADD_ARROW_TEST REL_TEST_NAME) set(options) @@ -333,38 +119,53 @@ function(ADD_ARROW_BENCHMARK REL_TEST_NAME) ${ARG_UNPARSED_ARGUMENTS}) endfunction() -macro(append_runtime_avx2_src SRCS SRC) +macro(append_runtime_avx2_src SRC) if(ARROW_HAVE_RUNTIME_AVX2) - list(APPEND ${SRCS} ${SRC}) + list(APPEND ARROW_SRCS ${SRC}) set_source_files_properties(${SRC} PROPERTIES SKIP_PRECOMPILE_HEADERS ON) set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS ${ARROW_AVX2_FLAG}) endif() endmacro() -macro(append_runtime_avx2_bmi2_src SRCS SRC) +macro(append_runtime_avx2_bmi2_src SRC) if(ARROW_HAVE_RUNTIME_AVX2 AND ARROW_HAVE_RUNTIME_BMI2) - list(APPEND ${SRCS} ${SRC}) + list(APPEND ARROW_SRCS ${SRC}) set_source_files_properties(${SRC} PROPERTIES SKIP_PRECOMPILE_HEADERS ON) set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS "${ARROW_AVX2_FLAG} ${ARROW_BMI2_FLAG}") endif() endmacro() -macro(append_runtime_avx512_src SRCS SRC) +macro(append_runtime_avx512_src SRC) if(ARROW_HAVE_RUNTIME_AVX512) - list(APPEND ${SRCS} ${SRC}) + list(APPEND ARROW_SRCS ${SRC}) set_source_files_properties(${SRC} PROPERTIES SKIP_PRECOMPILE_HEADERS ON) set_source_files_properties(${SRC} PROPERTIES COMPILE_FLAGS ${ARROW_AVX512_FLAG}) endif() endmacro() -# Write out compile-time configuration constants -configure_file("util/config.h.cmake" "util/config.h" ESCAPE_QUOTES) -configure_file("util/config_internal.h.cmake" "util/config_internal.h" ESCAPE_QUOTES) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/util/config.h" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/arrow/util") - set(ARROW_SRCS + array/array_base.cc + array/array_binary.cc + array/array_decimal.cc + array/array_dict.cc + array/array_nested.cc + array/array_primitive.cc + array/array_run_end.cc + array/builder_adaptive.cc + array/builder_base.cc + array/builder_binary.cc + array/builder_decimal.cc + array/builder_dict.cc + array/builder_run_end.cc + array/builder_nested.cc + array/builder_primitive.cc + array/builder_union.cc + array/concatenate.cc + array/data.cc + array/diff.cc + array/util.cc + array/validate.cc builder.cc buffer.cc chunked_array.cc @@ -374,7 +175,7 @@ set(ARROW_SRCS datum.cc device.cc extension_type.cc - extension/bool8.cc + memory_pool.cc pretty_print.cc record_batch.cc result.cc @@ -391,110 +192,18 @@ set(ARROW_SRCS type_traits.cc visitor.cc c/bridge.cc - c/dlpack.cc) - -arrow_add_object_library(ARROW_ARRAY - array/array_base.cc - array/array_binary.cc - array/array_decimal.cc - array/array_dict.cc - array/array_nested.cc - array/array_primitive.cc - array/array_run_end.cc - array/builder_adaptive.cc - array/builder_base.cc - array/builder_binary.cc - array/builder_decimal.cc - array/builder_dict.cc - array/builder_run_end.cc - array/builder_nested.cc - array/builder_primitive.cc - array/builder_union.cc - array/concatenate.cc - array/data.cc - array/diff.cc - array/statistics.cc - array/util.cc - array/validate.cc) - -arrow_add_object_library(ARROW_IO - io/buffered.cc - io/caching.cc - io/compressed.cc - io/file.cc - io/hdfs.cc - io/hdfs_internal.cc - io/interfaces.cc - io/memory.cc - io/slow.cc - io/stdio.cc - io/transform.cc) -foreach(ARROW_IO_TARGET ${ARROW_IO_TARGETS}) - target_link_libraries(${ARROW_IO_TARGET} PRIVATE arrow::hadoop) - if(NOT MSVC) - target_link_libraries(${ARROW_IO_TARGET} PRIVATE ${CMAKE_DL_LIBS}) - endif() -endforeach() - -set(ARROW_MEMORY_POOL_SRCS memory_pool.cc) -if(ARROW_JEMALLOC) - list(APPEND ARROW_MEMORY_POOL_SRCS memory_pool_jemalloc.cc) - set_source_files_properties(memory_pool_jemalloc.cc - PROPERTIES SKIP_PRECOMPILE_HEADERS ON - SKIP_UNITY_BUILD_INCLUSION ON) -endif() -arrow_add_object_library(ARROW_MEMORY_POOL ${ARROW_MEMORY_POOL_SRCS}) -if(ARROW_JEMALLOC) - foreach(ARROW_MEMORY_POOL_TARGET ${ARROW_MEMORY_POOL_TARGETS}) - target_link_libraries(${ARROW_MEMORY_POOL_TARGET} PRIVATE jemalloc::jemalloc) - endforeach() -endif() -if(ARROW_MIMALLOC) - foreach(ARROW_MEMORY_POOL_TARGET ${ARROW_MEMORY_POOL_TARGETS}) - target_link_libraries(${ARROW_MEMORY_POOL_TARGET} PRIVATE mimalloc::mimalloc) - endforeach() -endif() - -set(ARROW_VENDORED_SRCS - vendored/base64.cpp - vendored/datetime/tz.cpp - vendored/double-conversion/bignum-dtoa.cc - vendored/double-conversion/bignum.cc - vendored/double-conversion/cached-powers.cc - vendored/double-conversion/double-to-string.cc - vendored/double-conversion/fast-dtoa.cc - vendored/double-conversion/fixed-dtoa.cc - vendored/double-conversion/string-to-double.cc - vendored/double-conversion/strtod.cc - vendored/musl/strptime.c - vendored/uriparser/UriCommon.c - vendored/uriparser/UriCompare.c - vendored/uriparser/UriEscape.c - vendored/uriparser/UriFile.c - vendored/uriparser/UriIp4.c - vendored/uriparser/UriIp4Base.c - vendored/uriparser/UriMemory.c - vendored/uriparser/UriNormalize.c - vendored/uriparser/UriNormalizeBase.c - vendored/uriparser/UriParse.c - vendored/uriparser/UriParseBase.c - vendored/uriparser/UriQuery.c - vendored/uriparser/UriRecompose.c - vendored/uriparser/UriResolve.c - vendored/uriparser/UriShorten.c) -if(APPLE) - list(APPEND ARROW_VENDORED_SRCS vendored/datetime/ios.mm) -endif() -set_source_files_properties(vendored/datetime/tz.cpp - PROPERTIES SKIP_PRECOMPILE_HEADERS ON - SKIP_UNITY_BUILD_INCLUSION ON) -arrow_add_object_library(ARROW_VENDORED ${ARROW_VENDORED_SRCS}) -# Disable DLL exports in vendored uriparser library -foreach(ARROW_VENDORED_TARGET ${ARROW_VENDORED_TARGETS}) - target_compile_definitions(${ARROW_VENDORED_TARGET} PRIVATE URI_STATIC_BUILD) -endforeach() - -set(ARROW_UTIL_SRCS + c/dlpack.cc + io/buffered.cc + io/caching.cc + io/compressed.cc + io/file.cc + io/hdfs.cc + io/hdfs_internal.cc + io/interfaces.cc + io/memory.cc + io/slow.cc + io/stdio.cc + io/transform.cc util/align_util.cc util/async_util.cc util/atfork_internal.cc @@ -516,7 +225,6 @@ set(ARROW_UTIL_SRCS util/decimal.cc util/delimiting.cc util/dict_util.cc - util/fixed_width_internal.cc util/float16.cc util/formatting.cc util/future.cc @@ -524,7 +232,6 @@ set(ARROW_UTIL_SRCS util/int_util.cc util/io_util.cc util/list_util.cc - util/logger.cc util/logging.cc util/key_value_metadata.cc util/memory.cc @@ -542,221 +249,216 @@ set(ARROW_UTIL_SRCS util/unreachable.cc util/uri.cc util/utf8.cc - util/value_parsing.cc) + util/value_parsing.cc + vendored/base64.cpp + vendored/datetime/tz.cpp + vendored/double-conversion/bignum.cc + vendored/double-conversion/bignum-dtoa.cc + vendored/double-conversion/cached-powers.cc + vendored/double-conversion/double-to-string.cc + vendored/double-conversion/fast-dtoa.cc + vendored/double-conversion/fixed-dtoa.cc + vendored/double-conversion/string-to-double.cc + vendored/double-conversion/strtod.cc) -append_runtime_avx2_src(ARROW_UTIL_SRCS util/bpacking_avx2.cc) -append_runtime_avx512_src(ARROW_UTIL_SRCS util/bpacking_avx512.cc) -if(ARROW_HAVE_NEON) - list(APPEND ARROW_UTIL_SRCS util/bpacking_neon.cc) +if(ARROW_JEMALLOC) + list(APPEND ARROW_SRCS memory_pool_jemalloc.cc) + set_source_files_properties(memory_pool_jemalloc.cc + PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON) endif() -if(ARROW_WITH_BROTLI) - list(APPEND ARROW_UTIL_SRCS util/compression_brotli.cc) -endif() -if(ARROW_WITH_BZ2) - list(APPEND ARROW_UTIL_SRCS util/compression_bz2.cc) -endif() -if(ARROW_WITH_LZ4) - list(APPEND ARROW_UTIL_SRCS util/compression_lz4.cc) -endif() -if(ARROW_WITH_OPENTELEMETRY) - list(APPEND ARROW_UTIL_SRCS util/tracing_internal.cc) -endif() -if(ARROW_WITH_SNAPPY) - list(APPEND ARROW_UTIL_SRCS util/compression_snappy.cc) -endif() -if(ARROW_WITH_ZLIB) - list(APPEND ARROW_UTIL_SRCS util/compression_zlib.cc) +append_runtime_avx2_src(util/bpacking_avx2.cc) +append_runtime_avx512_src(util/bpacking_avx512.cc) + +if(ARROW_HAVE_NEON) + list(APPEND ARROW_SRCS util/bpacking_neon.cc) endif() -if(ARROW_WITH_ZSTD) - list(APPEND ARROW_UTIL_SRCS util/compression_zstd.cc) + +if(APPLE) + list(APPEND ARROW_SRCS vendored/datetime/ios.mm) endif() -arrow_add_object_library(ARROW_UTIL ${ARROW_UTIL_SRCS}) +set(ARROW_C_SRCS + vendored/musl/strptime.c + vendored/uriparser/UriCommon.c + vendored/uriparser/UriCompare.c + vendored/uriparser/UriEscape.c + vendored/uriparser/UriFile.c + vendored/uriparser/UriIp4Base.c + vendored/uriparser/UriIp4.c + vendored/uriparser/UriMemory.c + vendored/uriparser/UriNormalizeBase.c + vendored/uriparser/UriNormalize.c + vendored/uriparser/UriParseBase.c + vendored/uriparser/UriParse.c + vendored/uriparser/UriQuery.c + vendored/uriparser/UriRecompose.c + vendored/uriparser/UriResolve.c + vendored/uriparser/UriShorten.c) + +set_source_files_properties(vendored/datetime/tz.cpp + PROPERTIES SKIP_PRECOMPILE_HEADERS ON + SKIP_UNITY_BUILD_INCLUSION ON) # Disable DLL exports in vendored uriparser library -foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS}) - target_compile_definitions(${ARROW_UTIL_TARGET} PRIVATE URI_STATIC_BUILD) -endforeach() +add_definitions(-DURI_STATIC_BUILD) -if(ARROW_USE_BOOST) - foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS}) - target_link_libraries(${ARROW_UTIL_TARGET} PRIVATE Boost::headers) - endforeach() -endif() -if(ARROW_USE_GLOG) - foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS}) - target_link_libraries(${ARROW_UTIL_TARGET} PRIVATE glog::glog) - endforeach() -endif() -if(ARROW_USE_XSIMD) - foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS}) - target_link_libraries(${ARROW_UTIL_TARGET} PRIVATE ${ARROW_XSIMD}) - endforeach() -endif() if(ARROW_WITH_BROTLI) - foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS}) - target_link_libraries(${ARROW_UTIL_TARGET} PRIVATE ${ARROW_BROTLI_LIBS}) - endforeach() + add_definitions(-DARROW_WITH_BROTLI) + list(APPEND ARROW_SRCS util/compression_brotli.cc) endif() + if(ARROW_WITH_BZ2) - foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS}) - target_link_libraries(${ARROW_UTIL_TARGET} PRIVATE BZip2::BZip2) - endforeach() + add_definitions(-DARROW_WITH_BZ2) + list(APPEND ARROW_SRCS util/compression_bz2.cc) endif() + if(ARROW_WITH_LZ4) - foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS}) - target_link_libraries(${ARROW_UTIL_TARGET} PRIVATE LZ4::lz4) - endforeach() -endif() -if(ARROW_WITH_SNAPPY) - foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS}) - target_link_libraries(${ARROW_UTIL_TARGET} PRIVATE ${Snappy_TARGET}) - endforeach() + add_definitions(-DARROW_WITH_LZ4) + list(APPEND ARROW_SRCS util/compression_lz4.cc) endif() + if(ARROW_WITH_OPENTELEMETRY) - foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS}) - target_link_libraries(${ARROW_UTIL_TARGET} PRIVATE ${ARROW_OPENTELEMETRY_LIBS}) - endforeach() + list(APPEND ARROW_SRCS util/tracing_internal.cc) endif() -if(ARROW_WITH_ZLIB) - foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS}) - target_link_libraries(${ARROW_UTIL_TARGET} PRIVATE ZLIB::ZLIB) - endforeach() -endif() -if(ARROW_WITH_ZSTD) - foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS}) - target_link_libraries(${ARROW_UTIL_TARGET} PRIVATE ${ARROW_ZSTD_LIBZSTD}) - endforeach() + +if(ARROW_WITH_SNAPPY) + add_definitions(-DARROW_WITH_SNAPPY) + list(APPEND ARROW_SRCS util/compression_snappy.cc) endif() -if(ARROW_WITH_OPENTELEMETRY) - arrow_add_object_library(ARROW_TELEMETRY telemetry/logging.cc) +if(ARROW_WITH_ZLIB) + add_definitions(-DARROW_WITH_ZLIB) + list(APPEND ARROW_SRCS util/compression_zlib.cc) +endif() - foreach(ARROW_TELEMETRY_TARGET ${ARROW_TELEMETRY_TARGETS}) - target_link_libraries(${ARROW_TELEMETRY_TARGET} PRIVATE ${ARROW_OPENTELEMETRY_LIBS}) - endforeach() -else() - set(ARROW_TELEMETRY_TARGET_SHARED) - set(ARROW_TELEMETRY_TARGET_STATIC) +if(ARROW_WITH_ZSTD) + add_definitions(-DARROW_WITH_ZSTD) + list(APPEND ARROW_SRCS util/compression_zstd.cc) endif() -set(ARROW_TESTING_SHARED_LINK_LIBS arrow_shared ${ARROW_GTEST_GTEST}) -set(ARROW_TESTING_SHARED_PRIVATE_LINK_LIBS arrow::flatbuffers RapidJSON) -set(ARROW_TESTING_STATIC_LINK_LIBS arrow::flatbuffers RapidJSON arrow_static +set(ARROW_TESTING_SHARED_LINK_LIBS arrow::flatbuffers rapidjson::rapidjson arrow_shared + ${ARROW_GTEST_GTEST}) +set(ARROW_TESTING_STATIC_LINK_LIBS arrow::flatbuffers rapidjson::rapidjson arrow_static ${ARROW_GTEST_GTEST}) -set(ARROW_TESTING_SHARED_INSTALL_INTERFACE_LIBS Arrow::arrow_shared) -set(ARROW_TESTING_STATIC_INSTALL_INTERFACE_LIBS Arrow::arrow_static) -# that depend on gtest -if(GTest_SOURCE STREQUAL "SYSTEM") - list(APPEND ARROW_TESTING_SHARED_INSTALL_INTERFACE_LIBS ${ARROW_GTEST_GTEST}) - list(APPEND ARROW_TESTING_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_GTEST_GTEST}) -else() - list(APPEND ARROW_TESTING_SHARED_INSTALL_INTERFACE_LIBS ArrowTesting::gtest) - list(APPEND ARROW_TESTING_STATIC_INSTALL_INTERFACE_LIBS ArrowTesting::gtest) -endif() -if(WIN32) - list(APPEND ARROW_TESTING_SHARED_LINK_LIBS "ws2_32") - list(APPEND ARROW_TESTING_STATIC_LINK_LIBS "ws2_32") - list(APPEND ARROW_TESTING_STATIC_INSTALL_INTERFACE_LIBS "ws2_32") -endif() set(ARROW_TESTING_SRCS io/test_common.cc ipc/test_common.cc - testing/fixed_width_test_util.cc testing/gtest_util.cc testing/random.cc testing/generator.cc testing/util.cc) +# Add dependencies for third-party allocators. +# If possible we only want memory_pool.cc to wait for allocators to finish building, +# but that only works with Ninja +# (see https://gitlab.kitware.com/cmake/cmake/issues/19677) + +set(_allocator_dependencies "") # Empty list +if(jemalloc_VENDORED) + list(APPEND _allocator_dependencies jemalloc_ep) +endif() +if(mimalloc_VENDORED) + list(APPEND _allocator_dependencies mimalloc_ep) +endif() + +if(_allocator_dependencies) + if("${CMAKE_GENERATOR}" STREQUAL "Ninja") + set_source_files_properties(memory_pool.cc PROPERTIES OBJECT_DEPENDS + "${_allocator_dependencies}") + else() + add_dependencies(arrow_dependencies ${_allocator_dependencies}) + endif() + set_source_files_properties(memory_pool.cc PROPERTIES SKIP_PRECOMPILE_HEADERS ON + SKIP_UNITY_BUILD_INCLUSION ON) +endif() + +unset(_allocator_dependencies) + +if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set_property(SOURCE util/io_util.cc + APPEND_STRING + PROPERTY COMPILE_FLAGS " -Wno-unused-macros ") +endif() + # # Configure the base Arrow libraries # if(ARROW_BUILD_INTEGRATION OR ARROW_BUILD_TESTS) - arrow_add_object_library(ARROW_INTEGRATION integration/c_data_integration_internal.cc - integration/json_integration.cc integration/json_internal.cc) - foreach(ARROW_INTEGRATION_TARGET ${ARROW_INTEGRATION_TARGETS}) - target_link_libraries(${ARROW_INTEGRATION_TARGET} PRIVATE RapidJSON) - endforeach() -else() - set(ARROW_INTEGRATION_TARGET_SHARED) - set(ARROW_INTEGRATION_TARGET_STATIC) + list(APPEND + ARROW_SRCS + integration/c_data_integration_internal.cc + integration/json_integration.cc + integration/json_internal.cc) endif() if(ARROW_CSV) - arrow_add_object_library(ARROW_CSV - csv/converter.cc - csv/chunker.cc - csv/column_builder.cc - csv/column_decoder.cc - csv/options.cc - csv/parser.cc - csv/reader.cc - csv/writer.cc) - if(ARROW_USE_XSIMD) - foreach(ARROW_CSV_TARGET ${ARROW_CSV_TARGETS}) - target_link_libraries(${ARROW_CSV_TARGET} PRIVATE ${ARROW_XSIMD}) - endforeach() - endif() + list(APPEND + ARROW_SRCS + csv/converter.cc + csv/chunker.cc + csv/column_builder.cc + csv/column_decoder.cc + csv/options.cc + csv/parser.cc + csv/reader.cc + csv/writer.cc) list(APPEND ARROW_TESTING_SRCS csv/test_common.cc) -else() - set(ARROW_CSV_TARGET_SHARED) - set(ARROW_CSV_TARGET_STATIC) endif() # Baseline Compute functionality + scalar casts and a few select kernels -set(ARROW_COMPUTE_SRCS - compute/api_aggregate.cc - compute/api_scalar.cc - compute/api_vector.cc - compute/cast.cc - compute/exec.cc - compute/expression.cc - compute/function.cc - compute/function_internal.cc - compute/kernel.cc - compute/key_hash_internal.cc - compute/key_map_internal.cc - compute/light_array_internal.cc - compute/ordering.cc - compute/registry.cc - compute/kernels/codegen_internal.cc - compute/kernels/ree_util_internal.cc - compute/kernels/scalar_cast_boolean.cc - compute/kernels/scalar_cast_dictionary.cc - compute/kernels/scalar_cast_extension.cc - compute/kernels/scalar_cast_internal.cc - compute/kernels/scalar_cast_nested.cc - compute/kernels/scalar_cast_numeric.cc - compute/kernels/scalar_cast_string.cc - compute/kernels/scalar_cast_temporal.cc - compute/kernels/util_internal.cc - compute/kernels/vector_hash.cc - compute/kernels/vector_selection.cc - compute/kernels/vector_selection_filter_internal.cc - compute/kernels/vector_selection_internal.cc - compute/kernels/vector_selection_take_internal.cc - compute/row/encode_internal.cc - compute/row/compare_internal.cc - compute/row/grouper.cc - compute/row/row_encoder_internal.cc - compute/row/row_internal.cc - compute/util.cc - compute/util_internal.cc) - -append_runtime_avx2_src(ARROW_COMPUTE_SRCS compute/key_hash_internal_avx2.cc) -append_runtime_avx2_bmi2_src(ARROW_COMPUTE_SRCS compute/key_map_internal_avx2.cc) -append_runtime_avx2_src(ARROW_COMPUTE_SRCS compute/row/compare_internal_avx2.cc) -append_runtime_avx2_src(ARROW_COMPUTE_SRCS compute/row/encode_internal_avx2.cc) -append_runtime_avx2_bmi2_src(ARROW_COMPUTE_SRCS compute/util_avx2.cc) +list(APPEND + ARROW_SRCS + compute/api_aggregate.cc + compute/api_scalar.cc + compute/api_vector.cc + compute/cast.cc + compute/exec.cc + compute/expression.cc + compute/function.cc + compute/function_internal.cc + compute/kernel.cc + compute/key_hash.cc + compute/key_map.cc + compute/light_array.cc + compute/ordering.cc + compute/registry.cc + compute/kernels/codegen_internal.cc + compute/kernels/row_encoder.cc + compute/kernels/ree_util_internal.cc + compute/kernels/scalar_cast_boolean.cc + compute/kernels/scalar_cast_dictionary.cc + compute/kernels/scalar_cast_extension.cc + compute/kernels/scalar_cast_internal.cc + compute/kernels/scalar_cast_nested.cc + compute/kernels/scalar_cast_numeric.cc + compute/kernels/scalar_cast_string.cc + compute/kernels/scalar_cast_temporal.cc + compute/kernels/util_internal.cc + compute/kernels/vector_hash.cc + compute/kernels/vector_selection.cc + compute/kernels/vector_selection_filter_internal.cc + compute/kernels/vector_selection_internal.cc + compute/kernels/vector_selection_take_internal.cc + compute/row/encode_internal.cc + compute/row/compare_internal.cc + compute/row/grouper.cc + compute/row/row_internal.cc + compute/util.cc) + +append_runtime_avx2_src(compute/key_hash_avx2.cc) +append_runtime_avx2_bmi2_src(compute/key_map_avx2.cc) +append_runtime_avx2_src(compute/row/compare_internal_avx2.cc) +append_runtime_avx2_src(compute/row/encode_internal_avx2.cc) +append_runtime_avx2_bmi2_src(compute/util_avx2.cc) if(ARROW_COMPUTE) # Include the remaining kernels list(APPEND - ARROW_COMPUTE_SRCS + ARROW_SRCS compute/kernels/aggregate_basic.cc compute/kernels/aggregate_mode.cc compute/kernels/aggregate_quantile.cc @@ -786,101 +488,53 @@ if(ARROW_COMPUTE) compute/kernels/vector_select_k.cc compute/kernels/vector_sort.cc) - append_runtime_avx2_src(ARROW_COMPUTE_SRCS compute/kernels/aggregate_basic_avx2.cc) - append_runtime_avx512_src(ARROW_COMPUTE_SRCS compute/kernels/aggregate_basic_avx512.cc) -endif() - -arrow_add_object_library(ARROW_COMPUTE ${ARROW_COMPUTE_SRCS}) -if(ARROW_USE_BOOST) - foreach(ARROW_COMPUTE_TARGET ${ARROW_COMPUTE_TARGETS}) - target_link_libraries(${ARROW_COMPUTE_TARGET} PRIVATE Boost::headers) - endforeach() -endif() -if(ARROW_USE_XSIMD) - foreach(ARROW_COMPUTE_TARGET ${ARROW_COMPUTE_TARGETS}) - target_link_libraries(${ARROW_COMPUTE_TARGET} PRIVATE ${ARROW_XSIMD}) - endforeach() -endif() -if(ARROW_WITH_OPENTELEMETRY) - foreach(ARROW_COMPUTE_TARGET ${ARROW_COMPUTE_TARGETS}) - target_link_libraries(${ARROW_COMPUTE_TARGET} PRIVATE ${ARROW_OPENTELEMETRY_LIBS}) - endforeach() -endif() -if(ARROW_WITH_RE2) - foreach(ARROW_COMPUTE_TARGET ${ARROW_COMPUTE_TARGETS}) - target_link_libraries(${ARROW_COMPUTE_TARGET} PRIVATE re2::re2) - endforeach() -endif() -if(ARROW_WITH_UTF8PROC) - foreach(ARROW_COMPUTE_TARGET ${ARROW_COMPUTE_TARGETS}) - target_link_libraries(${ARROW_COMPUTE_TARGET} PRIVATE utf8proc::utf8proc) - endforeach() + append_runtime_avx2_src(compute/kernels/aggregate_basic_avx2.cc) + append_runtime_avx512_src(compute/kernels/aggregate_basic_avx512.cc) endif() if(ARROW_FILESYSTEM) - set(ARROW_FILESYSTEM_SRCS - filesystem/filesystem.cc - filesystem/localfs.cc - filesystem/mockfs.cc - filesystem/path_util.cc - filesystem/util_internal.cc) + if(ARROW_HDFS) + add_definitions(-DARROW_HDFS) + endif() + + list(APPEND + ARROW_SRCS + filesystem/filesystem.cc + filesystem/localfs.cc + filesystem/mockfs.cc + filesystem/path_util.cc + filesystem/util_internal.cc) if(ARROW_AZURE) - list(APPEND ARROW_FILESYSTEM_SRCS filesystem/azurefs.cc) + list(APPEND ARROW_SRCS filesystem/azurefs.cc) set_source_files_properties(filesystem/azurefs.cc PROPERTIES SKIP_PRECOMPILE_HEADERS ON SKIP_UNITY_BUILD_INCLUSION ON) endif() if(ARROW_GCS) - list(APPEND ARROW_FILESYSTEM_SRCS filesystem/gcsfs.cc filesystem/gcsfs_internal.cc) + list(APPEND ARROW_SRCS filesystem/gcsfs.cc filesystem/gcsfs_internal.cc) set_source_files_properties(filesystem/gcsfs.cc filesystem/gcsfs_internal.cc PROPERTIES SKIP_PRECOMPILE_HEADERS ON SKIP_UNITY_BUILD_INCLUSION ON) endif() if(ARROW_HDFS) - list(APPEND ARROW_FILESYSTEM_SRCS filesystem/hdfs.cc) + list(APPEND ARROW_SRCS filesystem/hdfs.cc) endif() if(ARROW_S3) - list(APPEND ARROW_FILESYSTEM_SRCS filesystem/s3fs.cc) + list(APPEND ARROW_SRCS filesystem/s3fs.cc) set_source_files_properties(filesystem/s3fs.cc PROPERTIES SKIP_PRECOMPILE_HEADERS ON SKIP_UNITY_BUILD_INCLUSION ON) endif() - arrow_add_object_library(ARROW_FILESYSTEM ${ARROW_FILESYSTEM_SRCS}) - if(ARROW_AZURE) - foreach(ARROW_FILESYSTEM_TARGET ${ARROW_FILESYSTEM_TARGETS}) - target_link_libraries(${ARROW_FILESYSTEM_TARGET} - PRIVATE ${AZURE_SDK_LINK_LIBRARIES}) - endforeach() - endif() - if(ARROW_GCS) - foreach(ARROW_FILESYSTEM_TARGET ${ARROW_FILESYSTEM_TARGETS}) - target_link_libraries(${ARROW_FILESYSTEM_TARGET} PRIVATE google-cloud-cpp::storage) - endforeach() - endif() - if(ARROW_HDFS) - foreach(ARROW_FILESYSTEM_TARGET ${ARROW_FILESYSTEM_TARGETS}) - target_link_libraries(${ARROW_FILESYSTEM_TARGET} PRIVATE arrow::hadoop) - endforeach() - endif() - if(ARROW_S3) - foreach(ARROW_FILESYSTEM_TARGET ${ARROW_FILESYSTEM_TARGETS}) - target_link_libraries(${ARROW_FILESYSTEM_TARGET} PRIVATE ${AWSSDK_LINK_LIBRARIES}) - endforeach() - endif() - list(APPEND ARROW_TESTING_SHARED_LINK_LIBS ${ARROW_GTEST_GMOCK}) list(APPEND ARROW_TESTING_STATIC_LINK_LIBS ${ARROW_GTEST_GMOCK}) list(APPEND ARROW_TESTING_SRCS filesystem/test_util.cc) -else() - set(ARROW_FILESYSTEM_TARGET_SHARED) - set(ARROW_FILESYSTEM_TARGET_STATIC) endif() if(ARROW_IPC) list(APPEND - ARROW_IPC_SRCS + ARROW_SRCS ipc/dictionary.cc ipc/feather.cc ipc/message.cc @@ -888,56 +542,32 @@ if(ARROW_IPC) ipc/options.cc ipc/reader.cc ipc/writer.cc) + if(ARROW_JSON) - list(APPEND ARROW_IPC_SRCS ipc/json_simple.cc) - endif() - arrow_add_object_library(ARROW_IPC ${ARROW_IPC_SRCS}) - foreach(ARROW_IPC_TARGET ${ARROW_IPC_TARGETS}) - target_link_libraries(${ARROW_IPC_TARGET} PRIVATE arrow::flatbuffers) - endforeach() - if(ARROW_JSON) - foreach(ARROW_IPC_TARGET ${ARROW_IPC_TARGETS}) - target_link_libraries(${ARROW_IPC_TARGET} PRIVATE RapidJSON) - endforeach() + list(APPEND ARROW_SRCS ipc/json_simple.cc) endif() -else() - set(ARROW_IPC_TARGET_SHARED) - set(ARROW_IPC_TARGET_STATIC) endif() if(ARROW_JSON) - arrow_add_object_library(ARROW_JSON - extension/fixed_shape_tensor.cc - extension/opaque.cc - json/options.cc - json/chunked_builder.cc - json/chunker.cc - json/converter.cc - json/object_parser.cc - json/object_writer.cc - json/parser.cc - json/reader.cc) - foreach(ARROW_JSON_TARGET ${ARROW_JSON_TARGETS}) - target_link_libraries(${ARROW_JSON_TARGET} PRIVATE RapidJSON) - endforeach() -else() - set(ARROW_JSON_TARGET_SHARED) - set(ARROW_JSON_TARGET_STATIC) + list(APPEND + ARROW_SRCS + extension/fixed_shape_tensor.cc + json/options.cc + json/chunked_builder.cc + json/chunker.cc + json/converter.cc + json/object_parser.cc + json/object_writer.cc + json/parser.cc + json/reader.cc) endif() if(ARROW_ORC) - arrow_add_object_library(ARROW_ORC adapters/orc/adapter.cc adapters/orc/options.cc - adapters/orc/util.cc) - foreach(ARROW_ORC_TARGET ${ARROW_ORC_TARGETS}) - target_link_libraries(${ARROW_ORC_TARGET} PRIVATE orc::orc) - if(ARROW_ORC_VERSION VERSION_LESS "2.0.0") - target_compile_definitions(${ARROW_ORC_TARGET} - PRIVATE ARROW_ORC_NEED_TIME_ZONE_DATABASE_CHECK) - endif() - endforeach() -else() - set(ARROW_ORC_TARGET_SHARED) - set(ARROW_ORC_TARGET_STATIC) + list(APPEND + ARROW_SRCS + adapters/orc/adapter.cc + adapters/orc/options.cc + adapters/orc/util.cc) endif() if(CXX_LINKER_SUPPORTS_VERSION_SCRIPT) @@ -946,6 +576,8 @@ if(CXX_LINKER_SUPPORTS_VERSION_SCRIPT) set(ARROW_SHARED_LINK_FLAGS ${ARROW_VERSION_SCRIPT_FLAGS}) endif() +set(ARROW_ALL_SRCS ${ARROW_SRCS} ${ARROW_C_SRCS}) + if(ARROW_BUILD_STATIC AND ARROW_BUNDLED_STATIC_LIBS) set(ARROW_BUILD_BUNDLED_DEPENDENCIES TRUE) else() @@ -988,6 +620,14 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") endif() endif() +# Need -latomic on Raspbian. +# See also: https://issues.apache.org/jira/browse/ARROW-12860 +if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND ${CMAKE_SYSTEM_PROCESSOR} MATCHES "armv7") + string(APPEND ARROW_PC_LIBS_PRIVATE " -latomic") + list(APPEND ARROW_SHARED_INSTALL_INTERFACE_LIBS "atomic") + list(APPEND ARROW_STATIC_INSTALL_INTERFACE_LIBS "atomic") +endif() + # If libarrow.a is only built, "pkg-config --cflags --libs arrow" # outputs build flags for static linking not shared # linking. ARROW_PC_* except ARROW_PC_*_PRIVATE are for the static @@ -1013,44 +653,21 @@ add_arrow_lib(arrow PKG_CONFIG_NAME arrow SOURCES - ${ARROW_SRCS} + ${ARROW_ALL_SRCS} OUTPUTS ARROW_LIBRARIES PRECOMPILED_HEADERS "$<$:arrow/pch.h>" + DEPENDENCIES + arrow_dependencies SHARED_LINK_FLAGS ${ARROW_SHARED_LINK_FLAGS} + SHARED_LINK_LIBS + ${ARROW_SHARED_LINK_LIBS} SHARED_PRIVATE_LINK_LIBS - ${ARROW_ARRAY_TARGET_SHARED} - ${ARROW_COMPUTE_TARGET_SHARED} - ${ARROW_CSV_TARGET_SHARED} - ${ARROW_FILESYSTEM_TARGET_SHARED} - ${ARROW_INTEGRATION_TARGET_SHARED} - ${ARROW_IO_TARGET_SHARED} - ${ARROW_IPC_TARGET_SHARED} - ${ARROW_JSON_TARGET_SHARED} - ${ARROW_MEMORY_POOL_TARGET_SHARED} - ${ARROW_ORC_TARGET_SHARED} - ${ARROW_TELEMETRY_TARGET_SHARED} - ${ARROW_UTIL_TARGET_SHARED} - ${ARROW_VENDORED_TARGET_SHARED} ${ARROW_SHARED_PRIVATE_LINK_LIBS} - ${ARROW_SYSTEM_LINK_LIBS} STATIC_LINK_LIBS - ${ARROW_ARRAY_TARGET_STATIC} - ${ARROW_COMPUTE_TARGET_STATIC} - ${ARROW_CSV_TARGET_STATIC} - ${ARROW_FILESYSTEM_TARGET_STATIC} - ${ARROW_INTEGRATION_TARGET_STATIC} - ${ARROW_IO_TARGET_STATIC} - ${ARROW_IPC_TARGET_STATIC} - ${ARROW_JSON_TARGET_STATIC} - ${ARROW_MEMORY_POOL_TARGET_STATIC} - ${ARROW_ORC_TARGET_STATIC} - ${ARROW_TELEMETRY_TARGET_STATIC} - ${ARROW_UTIL_TARGET_STATIC} - ${ARROW_VENDORED_TARGET_STATIC} - ${ARROW_SYSTEM_LINK_LIBS} + ${ARROW_STATIC_LINK_LIBS} STATIC_INSTALL_INTERFACE_LIBS ${ARROW_STATIC_INSTALL_INTERFACE_LIBS} SHARED_INSTALL_INTERFACE_LIBS @@ -1113,6 +730,16 @@ if(ARROW_WITH_BACKTRACE) endif() if(ARROW_TESTING) + # that depend on gtest + set(ARROW_TESTING_SHARED_INSTALL_INTERFACE_LIBS Arrow::arrow_shared) + set(ARROW_TESTING_STATIC_INSTALL_INTERFACE_LIBS Arrow::arrow_static) + if(GTest_SOURCE STREQUAL "SYSTEM") + list(APPEND ARROW_TESTING_SHARED_INSTALL_INTERFACE_LIBS ${ARROW_GTEST_GTEST}) + list(APPEND ARROW_TESTING_STATIC_INSTALL_INTERFACE_LIBS ${ARROW_GTEST_GTEST}) + else() + list(APPEND ARROW_TESTING_SHARED_INSTALL_INTERFACE_LIBS ArrowTesting::gtest) + list(APPEND ARROW_TESTING_STATIC_INSTALL_INTERFACE_LIBS ArrowTesting::gtest) + endif() add_arrow_lib(arrow_testing CMAKE_PACKAGE_NAME ArrowTesting @@ -1124,10 +751,10 @@ if(ARROW_TESTING) ARROW_TESTING_LIBRARIES PRECOMPILED_HEADERS "$<$:arrow/pch.h>" + DEPENDENCIES + arrow_test_dependencies SHARED_LINK_LIBS ${ARROW_TESTING_SHARED_LINK_LIBS} - SHARED_PRIVATE_LINK_LIBS - ${ARROW_TESTING_SHARED_PRIVATE_LINK_LIBS} SHARED_INSTALL_INTERFACE_LIBS ${ARROW_TESTING_SHARED_INSTALL_INTERFACE_LIBS} STATIC_LINK_LIBS @@ -1171,7 +798,6 @@ add_arrow_test(array_test array/array_struct_test.cc array/array_union_test.cc array/array_view_test.cc - array/statistics_test.cc PRECOMPILED_HEADERS "$<$:arrow/testing/pch.h>") @@ -1191,6 +817,7 @@ add_arrow_test(misc_test status_test.cc) add_arrow_test(public_api_test) + set_source_files_properties(public_api_test.cc PROPERTIES SKIP_PRECOMPILE_HEADERS ON SKIP_UNITY_BUILD_INCLUSION ON) @@ -1213,7 +840,6 @@ add_arrow_benchmark(builder_benchmark) add_arrow_benchmark(compare_benchmark) add_arrow_benchmark(memory_pool_benchmark) add_arrow_benchmark(type_benchmark) -add_arrow_benchmark(tensor_benchmark) # # Recurse into sub-directories @@ -1278,10 +904,6 @@ if(ARROW_SUBSTRAIT) add_subdirectory(engine) endif() -if(ARROW_WITH_OPENTELEMETRY) - add_subdirectory(telemetry) -endif() - if(ARROW_TENSORFLOW) add_subdirectory(adapters/tensorflow) endif() diff --git a/cpp/src/arrow/acero/CMakeLists.txt b/cpp/src/arrow/acero/CMakeLists.txt index 73079059f1d..b77d52a23ee 100644 --- a/cpp/src/arrow/acero/CMakeLists.txt +++ b/cpp/src/arrow/acero/CMakeLists.txt @@ -62,19 +62,26 @@ append_acero_runtime_avx2_src(bloom_filter_avx2.cc) append_acero_runtime_avx2_src(swiss_join_avx2.cc) set(ARROW_ACERO_SHARED_LINK_LIBS) -set(ARROW_ACERO_SHARED_PRIVATE_LINK_LIBS) set(ARROW_ACERO_STATIC_LINK_LIBS) set(ARROW_ACERO_STATIC_INSTALL_INTERFACE_LIBS) set(ARROW_ACERO_SHARED_INSTALL_INTERFACE_LIBS) if(ARROW_WITH_OPENTELEMETRY) - list(APPEND ARROW_ACERO_SHARED_PRIVATE_LINK_LIBS ${ARROW_OPENTELEMETRY_LIBS}) - list(APPEND ARROW_ACERO_STATIC_LINK_LIBS ${ARROW_OPENTELEMETRY_LIBS}) + list(APPEND + ARROW_ACERO_SHARED_LINK_LIBS + opentelemetry-cpp::trace + opentelemetry-cpp::ostream_span_exporter + opentelemetry-cpp::otlp_http_exporter) + list(APPEND + ARROW_ACERO_STATIC_LINK_LIBS + opentelemetry-cpp::trace + opentelemetry-cpp::ostream_span_exporter + opentelemetry-cpp::otlp_http_exporter) endif() list(APPEND ARROW_ACERO_STATIC_INSTALL_INTERFACE_LIBS Arrow::arrow_static) list(APPEND ARROW_ACERO_SHARED_INSTALL_INTERFACE_LIBS Arrow::arrow_shared) -list(APPEND ARROW_ACERO_STATIC_LINK_LIBS arrow_static) +list(APPEND ARROW_ACERO_STATIC_LINK_LIBS arrow_static ${ARROW_STATIC_LINK_LIBS}) list(APPEND ARROW_ACERO_SHARED_LINK_LIBS arrow_shared) add_arrow_lib(arrow_acero @@ -88,10 +95,10 @@ add_arrow_lib(arrow_acero ${ARROW_ACERO_SRCS} PRECOMPILED_HEADERS "$<$:arrow/acero/pch.h>" + DEPENDENCIES + toolchain SHARED_LINK_LIBS ${ARROW_ACERO_SHARED_LINK_LIBS} - SHARED_PRIVATE_LINK_LIBS - ${ARROW_ACERO_SHARED_PRIVATE_LINK_LIBS} SHARED_INSTALL_INTERFACE_LIBS ${ARROW_ACERO_SHARED_INSTALL_INTERFACE_LIBS} STATIC_LINK_LIBS @@ -115,22 +122,12 @@ endforeach() # Define arrow_acero_testing object library for common test files if(ARROW_TESTING) - # test_nodes.cc isn't used by all tests but link to it for simple - # CMakeLists.txt. - add_library(arrow_acero_testing OBJECT test_nodes.cc test_util_internal.cc) + add_library(arrow_acero_testing OBJECT test_util_internal.cc) # Even though this is still just an object library we still need to "link" our # dependencies so that include paths are configured correctly target_link_libraries(arrow_acero_testing PRIVATE ${ARROW_ACERO_TEST_LINK_LIBS}) - # Only for test_nodes.cc. - if(ARROW_WITH_OPENTELEMETRY) - target_link_libraries(arrow_acero_testing PRIVATE ${ARROW_OPENTELEMETRY_LIBS}) - endif() list(APPEND ARROW_ACERO_TEST_LINK_LIBS arrow_acero_testing) endif() -# Only for hash_aggregate_test.cc. -if(ARROW_USE_BOOST) - list(APPEND ARROW_ACERO_TEST_LINK_LIBS Boost::headers) -endif() # Adding unit tests part of the "dataset" portion of the test suite function(add_arrow_acero_test REL_TEST_NAME) @@ -165,16 +162,27 @@ function(add_arrow_acero_test REL_TEST_NAME) ${ARG_UNPARSED_ARGUMENTS}) endfunction() -add_arrow_acero_test(plan_test SOURCES plan_test.cc test_nodes_test.cc) -add_arrow_acero_test(source_node_test SOURCES source_node_test.cc) -add_arrow_acero_test(fetch_node_test SOURCES fetch_node_test.cc) -add_arrow_acero_test(order_by_node_test SOURCES order_by_node_test.cc) +add_arrow_acero_test(plan_test + SOURCES + plan_test.cc + test_nodes_test.cc + test_nodes.cc) +add_arrow_acero_test(source_node_test SOURCES source_node_test.cc test_nodes.cc) +add_arrow_acero_test(fetch_node_test SOURCES fetch_node_test.cc test_nodes.cc) +add_arrow_acero_test(order_by_node_test SOURCES order_by_node_test.cc test_nodes.cc) add_arrow_acero_test(hash_join_node_test SOURCES hash_join_node_test.cc bloom_filter_test.cc) -add_arrow_acero_test(pivot_longer_node_test SOURCES pivot_longer_node_test.cc) - -add_arrow_acero_test(asof_join_node_test SOURCES asof_join_node_test.cc) -add_arrow_acero_test(sorted_merge_node_test SOURCES sorted_merge_node_test.cc) +add_arrow_acero_test(pivot_longer_node_test SOURCES pivot_longer_node_test.cc + test_nodes.cc) + +# asof_join_node and sorted_merge_node use std::thread internally +# and doesn't use ThreadPool so it will +# be broken if threading is turned off +if(ARROW_ENABLE_THREADING) + add_arrow_acero_test(asof_join_node_test SOURCES asof_join_node_test.cc test_nodes.cc) + add_arrow_acero_test(sorted_merge_node_test SOURCES sorted_merge_node_test.cc + test_nodes.cc) +endif() add_arrow_acero_test(tpch_node_test SOURCES tpch_node_test.cc) add_arrow_acero_test(union_node_test SOURCES union_node_test.cc) @@ -223,7 +231,9 @@ if(ARROW_BUILD_BENCHMARKS) add_arrow_acero_benchmark(project_benchmark SOURCES benchmark_util.cc project_benchmark.cc) - add_arrow_acero_benchmark(asof_join_benchmark SOURCES asof_join_benchmark.cc) + if(ARROW_ENABLE_THREADING) + add_arrow_acero_benchmark(asof_join_benchmark SOURCES asof_join_benchmark.cc) + endif() add_arrow_acero_benchmark(tpch_benchmark SOURCES tpch_benchmark.cc) @@ -246,7 +256,9 @@ if(ARROW_BUILD_BENCHMARKS) target_link_libraries(arrow-acero-expression-benchmark PUBLIC arrow_acero_static) target_link_libraries(arrow-acero-filter-benchmark PUBLIC arrow_acero_static) target_link_libraries(arrow-acero-project-benchmark PUBLIC arrow_acero_static) - target_link_libraries(arrow-acero-asof-join-benchmark PUBLIC arrow_acero_static) + if(ARROW_ENABLE_THREADING) + target_link_libraries(arrow-acero-asof-join-benchmark PUBLIC arrow_acero_static) + endif() target_link_libraries(arrow-acero-tpch-benchmark PUBLIC arrow_acero_static) if(ARROW_BUILD_OPENMP_BENCHMARKS) target_link_libraries(arrow-acero-hash-join-benchmark PUBLIC arrow_acero_static) @@ -255,7 +267,9 @@ if(ARROW_BUILD_BENCHMARKS) target_link_libraries(arrow-acero-expression-benchmark PUBLIC arrow_acero_shared) target_link_libraries(arrow-acero-filter-benchmark PUBLIC arrow_acero_shared) target_link_libraries(arrow-acero-project-benchmark PUBLIC arrow_acero_shared) - target_link_libraries(arrow-acero-asof-join-benchmark PUBLIC arrow_acero_shared) + if(ARROW_ENABLE_THREADING) + target_link_libraries(arrow-acero-asof-join-benchmark PUBLIC arrow_acero_shared) + endif() target_link_libraries(arrow-acero-tpch-benchmark PUBLIC arrow_acero_shared) if(ARROW_BUILD_OPENMP_BENCHMARKS) target_link_libraries(arrow-acero-hash-join-benchmark PUBLIC arrow_acero_shared) diff --git a/cpp/src/arrow/acero/aggregate_benchmark.cc b/cpp/src/arrow/acero/aggregate_benchmark.cc index 854862e3e48..4db7e443227 100644 --- a/cpp/src/arrow/acero/aggregate_benchmark.cc +++ b/cpp/src/arrow/acero/aggregate_benchmark.cc @@ -29,7 +29,6 @@ #include "arrow/util/benchmark_util.h" #include "arrow/util/bit_util.h" #include "arrow/util/bitmap_reader.h" -#include "arrow/util/byte_size.h" #include "arrow/util/string.h" namespace arrow { @@ -51,7 +50,6 @@ namespace acero { #include using arrow::internal::ToChars; -using arrow::util::TotalBufferSize; #ifdef ARROW_WITH_BENCHMARKS_REFERENCE @@ -373,11 +371,9 @@ static void BenchmarkGroupBy(benchmark::State& state, std::vector agg for (std::size_t arg_idx = 0; arg_idx < arguments.size(); arg_idx++) { aggregates[arg_idx].target = {FieldRef(static_cast(arg_idx))}; } - int64_t total_bytes = TotalBufferSize(*batch); for (auto _ : state) { ABORT_NOT_OK(BatchGroupBy(batch, aggregates, key_refs)); } - state.SetBytesProcessed(total_bytes * state.iterations()); } #define GROUP_BY_BENCHMARK(Name, Impl) \ @@ -582,8 +578,6 @@ static void SumKernel(benchmark::State& state) { for (auto _ : state) { ABORT_NOT_OK(Sum(array).status()); } - - state.SetItemsProcessed(state.iterations() * array_size); } static void SumKernelArgs(benchmark::internal::Benchmark* bench) { @@ -617,8 +611,6 @@ void ModeKernel(benchmark::State& state, int min, int max) { for (auto _ : state) { ABORT_NOT_OK(Mode(array).status()); } - - state.SetItemsProcessed(state.iterations() * array_size); } template @@ -633,18 +625,13 @@ void ModeKernelNarrow(benchmark::State& state) { template <> void ModeKernelNarrow(benchmark::State& state) { - using CType = typename TypeTraits::CType; - RegressionArgs args(state); - const int64_t array_size = args.size / sizeof(CType); auto rand = random::RandomArrayGenerator(1924); auto array = rand.Boolean(args.size * 8, 0.5, args.null_proportion); for (auto _ : state) { ABORT_NOT_OK(Mode(array).status()); } - - state.SetItemsProcessed(state.iterations() * array_size); } template @@ -681,8 +668,6 @@ static void MinMaxKernelBench(benchmark::State& state) { for (auto _ : state) { ABORT_NOT_OK(MinMax(array).status()); } - - state.SetItemsProcessed(state.iterations() * array_size); } static void MinMaxKernelBenchArgs(benchmark::internal::Benchmark* bench) { @@ -713,8 +698,6 @@ static void CountKernelBenchInt64(benchmark::State& state) { for (auto _ : state) { ABORT_NOT_OK(Count(array->Slice(1, array_size)).status()); } - - state.SetItemsProcessed(state.iterations() * array_size); } BENCHMARK(CountKernelBenchInt64)->Args({1 * 1024 * 1024, 2}); // 1M with 50% null. @@ -735,8 +718,6 @@ void VarianceKernelBench(benchmark::State& state) { for (auto _ : state) { ABORT_NOT_OK(Variance(array, options).status()); } - - state.SetItemsProcessed(state.iterations() * array_size); } static void VarianceKernelBenchArgs(benchmark::internal::Benchmark* bench) { diff --git a/cpp/src/arrow/acero/aggregate_internal.cc b/cpp/src/arrow/acero/aggregate_internal.cc index 0c1bc3db365..9c4b7fe5ae9 100644 --- a/cpp/src/arrow/acero/aggregate_internal.cc +++ b/cpp/src/arrow/acero/aggregate_internal.cc @@ -102,7 +102,7 @@ Result> InitKernel(const HashAggregateKernel* kerne ARROW_ASSIGN_OR_RAISE( auto state, kernel->init(&kernel_ctx, KernelInitArgs{kernel, aggr_in_types, options})); - return state; + return std::move(state); } Result> GetKernels( @@ -129,7 +129,7 @@ Result>> InitKernels( ARROW_ASSIGN_OR_RAISE(states[i], InitKernel(kernels[i], ctx, aggregates[i], in_types[i])); } - return states; + return std::move(states); } Result ResolveKernels( @@ -242,7 +242,7 @@ Result> ExtractValues(const ExecBatch& input_batch, DCHECK(false); } } - return values; + return std::move(values); } } // namespace aggregate diff --git a/cpp/src/arrow/acero/asof_join_benchmark.cc b/cpp/src/arrow/acero/asof_join_benchmark.cc index ed2ac2258eb..600c230a3fc 100644 --- a/cpp/src/arrow/acero/asof_join_benchmark.cc +++ b/cpp/src/arrow/acero/asof_join_benchmark.cc @@ -91,7 +91,7 @@ static void TableJoinOverhead(benchmark::State& state, ASSERT_OK(DeclarationToStatus(std::move(join_node), /*use_threads=*/false)); } - state.counters["rows_per_second"] = benchmark::Counter( + state.counters["input_rows_per_second"] = benchmark::Counter( static_cast(state.iterations() * (left_table_stats.rows + right_hand_rows)), benchmark::Counter::kIsRate); @@ -131,8 +131,9 @@ static void AsOfJoinOverhead(benchmark::State& state) { // this generates the set of right hand tables to test on. void SetArgs(benchmark::internal::Benchmark* bench) { bench - ->ArgNames({"left_freq", "left_cols", "left_ids", "batch_size", "num_right_tables", - "right_freq", "right_cols", "right_ids"}) + ->ArgNames({"left_freq", "left_cols", "left_ids", "left_batch_size", + "num_right_tables", "right_freq", "right_cols", "right_ids", + "right_batch_size"}) ->UseRealTime(); int default_freq = 400; diff --git a/cpp/src/arrow/acero/asof_join_node.cc b/cpp/src/arrow/acero/asof_join_node.cc index 2248362241c..e96d5ad44a9 100644 --- a/cpp/src/arrow/acero/asof_join_node.cc +++ b/cpp/src/arrow/acero/asof_join_node.cc @@ -32,7 +32,7 @@ #include "arrow/acero/exec_plan.h" #include "arrow/acero/options.h" -#include "arrow/acero/unmaterialized_table_internal.h" +#include "arrow/acero/unmaterialized_table.h" #ifndef NDEBUG #include "arrow/acero/options_internal.h" #endif @@ -45,8 +45,8 @@ #include "arrow/compute/function_internal.h" #endif #include "arrow/acero/time_series_util.h" -#include "arrow/compute/key_hash_internal.h" -#include "arrow/compute/light_array_internal.h" +#include "arrow/compute/key_hash.h" +#include "arrow/compute/light_array.h" #include "arrow/record_batch.h" #include "arrow/result.h" #include "arrow/status.h" @@ -548,10 +548,8 @@ class InputState { // true when the queue is empty and, when memo may have future entries (the case of a // positive tolerance), when the memo is empty. // used when checking whether RHS is up to date with LHS. - // NOTE: The emptiness must be decided by a single call to Empty() in caller, due to the - // potential race with Push(), see GH-41614. - bool CurrentEmpty(bool empty) const { - return memo_.no_future_ ? empty : (memo_.times_.empty() && empty); + bool CurrentEmpty() const { + return memo_.no_future_ ? Empty() : memo_.times_.empty() && Empty(); } // in case memo may not have future entries (the case of a non-positive tolerance), @@ -652,15 +650,13 @@ class InputState { // timestamp, update latest_time and latest_ref_row to the value that immediately pass // the horizon. Update the memo-store with any entries or future entries so observed. // Returns true if updates were made, false if not. - // NOTE: The emptiness must be decided by a single call to Empty() in caller, due to the - // potential race with Push(), see GH-41614. - Result AdvanceAndMemoize(OnType ts, bool empty) { + Result AdvanceAndMemoize(OnType ts) { // Advance the right side row index until we reach the latest right row (for each key) // for the given left timestamp. DEBUG_SYNC(node_, "Advancing input ", index_, DEBUG_MANIP(std::endl)); // Check if already updated for TS (or if there is no latest) - if (empty) { // can't advance if empty and no future entries + if (Empty()) { // can't advance if empty and no future entries return memo_.no_future_ ? false : memo_.RemoveEntriesWithLesserTime(ts); } @@ -922,46 +918,34 @@ class CompositeTableBuilder { // guaranteeing this probability is below 1 in a billion. The fix is 128-bit hashing. // See ARROW-17653 class AsofJoinNode : public ExecNode { - // A simple wrapper for the result of a single call to UpdateRhs(), identifying: - // 1) If any RHS has advanced. - // 2) If all RHS are up to date with LHS. - struct RhsUpdateState { - bool any_advanced; - bool all_up_to_date_with_lhs; - }; - // Advances the RHS as far as possible to be up to date for the current LHS timestamp, - // and checks if all RHS are up to date with LHS. The reason they have to be performed - // together is that they both depend on the emptiness of the RHS, which can be changed - // by Push() executing in another thread. - Result UpdateRhs() { + // Advances the RHS as far as possible to be up to date for the current LHS timestamp + Result UpdateRhs() { auto& lhs = *state_.at(0); auto lhs_latest_time = lhs.GetLatestTime(); - RhsUpdateState update_state{/*any_advanced=*/false, /*all_up_to_date_with_lhs=*/true}; + bool any_updated = false; for (size_t i = 1; i < state_.size(); ++i) { - auto& rhs = *state_[i]; - - // Obtain RHS emptiness once for subsequent AdvanceAndMemoize() and CurrentEmpty(). - bool rhs_empty = rhs.Empty(); - // Obtain RHS current time here because AdvanceAndMemoize() can change the - // emptiness. - OnType rhs_current_time = rhs_empty ? OnType{} : rhs.GetLatestTime(); - - ARROW_ASSIGN_OR_RAISE(bool advanced, - rhs.AdvanceAndMemoize(lhs_latest_time, rhs_empty)); - update_state.any_advanced |= advanced; + ARROW_ASSIGN_OR_RAISE(bool advanced, state_[i]->AdvanceAndMemoize(lhs_latest_time)); + any_updated |= advanced; + } + return any_updated; + } - if (update_state.all_up_to_date_with_lhs && !rhs.Finished()) { + // Returns false if RHS not up to date for LHS + bool IsUpToDateWithLhsRow() const { + auto& lhs = *state_[0]; + if (lhs.Empty()) return false; // can't proceed if nothing on the LHS + OnType lhs_ts = lhs.GetLatestTime(); + for (size_t i = 1; i < state_.size(); ++i) { + auto& rhs = *state_[i]; + if (!rhs.Finished()) { // If RHS is finished, then we know it's up to date - if (rhs.CurrentEmpty(rhs_empty)) { - // RHS isn't finished, but is empty --> not up to date - update_state.all_up_to_date_with_lhs = false; - } else if (lhs_latest_time > rhs_current_time) { - // RHS isn't up to date (and not finished) - update_state.all_up_to_date_with_lhs = false; - } + if (rhs.CurrentEmpty()) + return false; // RHS isn't finished, but is empty --> not up to date + if (lhs_ts > rhs.GetCurrentTime()) + return false; // RHS isn't up to date (and not finished) } } - return update_state; + return true; } Result> ProcessInner() { @@ -979,19 +963,20 @@ class AsofJoinNode : public ExecNode { // If LHS is finished or empty then there's nothing we can do here if (lhs.Finished() || lhs.Empty()) break; - ARROW_ASSIGN_OR_RAISE(auto rhs_update_state, UpdateRhs()); + // Advance each of the RHS as far as possible to be up to date for the LHS timestamp + ARROW_ASSIGN_OR_RAISE(bool any_rhs_advanced, UpdateRhs()); // If we have received enough inputs to produce the next output batch // (decided by IsUpToDateWithLhsRow), we will perform the join and // materialize the output batch. The join is done by advancing through // the LHS and adding joined row to rows_ (done by Emplace). Finally, // input batches that are no longer needed are removed to free up memory. - if (rhs_update_state.all_up_to_date_with_lhs) { + if (IsUpToDateWithLhsRow()) { dst.Emplace(state_, tolerance_); ARROW_ASSIGN_OR_RAISE(bool advanced, lhs.Advance()); if (!advanced) break; // if we can't advance LHS, we're done for this batch } else { - if (!rhs_update_state.any_advanced) break; // need to wait for new data + if (!any_rhs_advanced) break; // need to wait for new data } } @@ -1014,8 +999,6 @@ class AsofJoinNode : public ExecNode { } } -#ifdef ARROW_ENABLE_THREADING - template struct Defer { Callable callable; @@ -1102,7 +1085,6 @@ class AsofJoinNode : public ExecNode { } static void ProcessThreadWrapper(AsofJoinNode* node) { node->ProcessThread(); } -#endif public: AsofJoinNode(ExecPlan* plan, NodeVector inputs, std::vector input_labels, @@ -1134,10 +1116,8 @@ class AsofJoinNode : public ExecNode { } virtual ~AsofJoinNode() { -#ifdef ARROW_ENABLE_THREADING - PushProcess(false); + process_.Push(false); // poison pill process_thread_.join(); -#endif } const std::vector& indices_of_on_key() { return indices_of_on_key_; } @@ -1262,7 +1242,7 @@ class AsofJoinNode : public ExecNode { if (by_key_type[k] == NULLPTR) { by_key_type[k] = by_field[k]->type().get(); } else if (*by_key_type[k] != *by_field[k]->type()) { - return Status::Invalid("Expected by-key type ", *by_key_type[k], " but got ", + return Status::Invalid("Expected on-key type ", *by_key_type[k], " but got ", *by_field[k]->type(), " for field ", by_field[k]->name(), " in input ", j); } @@ -1415,8 +1395,7 @@ class AsofJoinNode : public ExecNode { rb->ToString(), DEBUG_MANIP(std::endl)); ARROW_RETURN_NOT_OK(state_.at(k)->Push(rb)); - PushProcess(true); - + process_.Push(true); return Status::OK(); } @@ -1431,77 +1410,22 @@ class AsofJoinNode : public ExecNode { // The reason for this is that there are cases at the end of a table where we don't // know whether the RHS of the join is up-to-date until we know that the table is // finished. - PushProcess(true); - + process_.Push(true); return Status::OK(); } - void PushProcess(bool value) { -#ifdef ARROW_ENABLE_THREADING - process_.Push(value); -#else - if (value) { - ProcessNonThreaded(); - } else if (!process_task_.is_finished()) { - EndFromSingleThread(); - } -#endif - } + Status StartProducing() override { #ifndef ARROW_ENABLE_THREADING - bool ProcessNonThreaded() { - while (!process_task_.is_finished()) { - Result> result = ProcessInner(); - - if (result.ok()) { - auto out_rb = *result; - if (!out_rb) break; - ExecBatch out_b(*out_rb); - out_b.index = batches_produced_++; - DEBUG_SYNC(this, "produce batch ", out_b.index, ":", DEBUG_MANIP(std::endl), - out_rb->ToString(), DEBUG_MANIP(std::endl)); - Status st = output_->InputReceived(this, std::move(out_b)); - if (!st.ok()) { - // this isn't really from a thread, - // but we call through to this for consistency - EndFromSingleThread(std::move(st)); - return false; - } - } else { - // this isn't really from a thread, - // but we call through to this for consistency - EndFromSingleThread(result.status()); - return false; - } - } - auto& lhs = *state_.at(0); - if (lhs.Finished() && !process_task_.is_finished()) { - EndFromSingleThread(Status::OK()); - } - return true; - } - - void EndFromSingleThread(Status st = Status::OK()) { - process_task_.MarkFinished(st); - if (st.ok()) { - st = output_->InputFinished(this, batches_produced_); - } - for (const auto& s : state_) { - st &= s->ForceShutdown(); - } - } - + return Status::NotImplemented("ASOF join requires threading enabled"); #endif - Status StartProducing() override { ARROW_ASSIGN_OR_RAISE(process_task_, plan_->query_context()->BeginExternalTask( "AsofJoinNode::ProcessThread")); if (!process_task_.is_valid()) { // Plan has already aborted. Do not start process thread return Status::OK(); } -#ifdef ARROW_ENABLE_THREADING process_thread_ = std::thread(&AsofJoinNode::ProcessThreadWrapper, this); -#endif return Status::OK(); } @@ -1509,10 +1433,8 @@ class AsofJoinNode : public ExecNode { void ResumeProducing(ExecNode* output, int32_t counter) override {} Status StopProducingImpl() override { -#ifdef ARROW_ENABLE_THREADING process_.Clear(); -#endif - PushProcess(false); + process_.Push(false); return Status::OK(); } @@ -1542,13 +1464,11 @@ class AsofJoinNode : public ExecNode { // Backpressure counter common to all inputs std::atomic backpressure_counter_; -#ifdef ARROW_ENABLE_THREADING // Queue for triggering processing of a given input // (a false value is a poison pill) ConcurrentQueue process_; // Worker thread std::thread process_thread_; -#endif Future<> process_task_; // In-progress batches produced @@ -1576,13 +1496,9 @@ AsofJoinNode::AsofJoinNode(ExecPlan* plan, NodeVector inputs, debug_os_(join_options.debug_opts ? join_options.debug_opts->os : nullptr), debug_mutex_(join_options.debug_opts ? join_options.debug_opts->mutex : nullptr), #endif - backpressure_counter_(1) -#ifdef ARROW_ENABLE_THREADING - , + backpressure_counter_(1), process_(), - process_thread_() -#endif -{ + process_thread_() { for (auto& key_hasher : key_hashers_) { key_hasher->node_ = this; } diff --git a/cpp/src/arrow/acero/asof_join_node_test.cc b/cpp/src/arrow/acero/asof_join_node_test.cc index 555f580028f..d95d2aaad36 100644 --- a/cpp/src/arrow/acero/asof_join_node_test.cc +++ b/cpp/src/arrow/acero/asof_join_node_test.cc @@ -41,8 +41,8 @@ #include "arrow/acero/util.h" #include "arrow/api.h" #include "arrow/compute/api_scalar.h" +#include "arrow/compute/kernels/row_encoder_internal.h" #include "arrow/compute/kernels/test_util.h" -#include "arrow/compute/row/row_encoder_internal.h" #include "arrow/testing/gtest_util.h" #include "arrow/testing/matchers.h" #include "arrow/testing/random.h" @@ -1678,59 +1678,5 @@ TEST(AsofJoinTest, BackpressureWithBatchesGen) { /*slow_r0=*/false); } -// Reproduction of GH-40675: A logical race between Process() and Push() that can be more -// easily observed with single small batch. -TEST(AsofJoinTest, RhsEmptinessRace) { - auto left_batch = ExecBatchFromJSON( - {int64(), utf8()}, R"([[1, "a"], [1, "b"], [5, "a"], [6, "b"], [7, "f"]])"); - auto right_batch = ExecBatchFromJSON( - {int64(), utf8(), float64()}, R"([[2, "a", 1.0], [9, "b", 3.0], [15, "g", 5.0]])"); - - Declaration left{ - "exec_batch_source", - ExecBatchSourceNodeOptions(schema({field("colA", int64()), field("col2", utf8())}), - {std::move(left_batch)})}; - Declaration right{ - "exec_batch_source", - ExecBatchSourceNodeOptions(schema({field("colB", int64()), field("col3", utf8()), - field("colC", float64())}), - {std::move(right_batch)})}; - AsofJoinNodeOptions asof_join_opts({{{"colA"}, {{"col2"}}}, {{"colB"}, {{"col3"}}}}, 1); - Declaration asof_join{ - "asofjoin", {std::move(left), std::move(right)}, std::move(asof_join_opts)}; - - ASSERT_OK_AND_ASSIGN(auto result, DeclarationToExecBatches(std::move(asof_join))); - - auto exp_batch = ExecBatchFromJSON( - {int64(), utf8(), float64()}, - R"([[1, "a", 1.0], [1, "b", null], [5, "a", null], [6, "b", null], [7, "f", null]])"); - AssertExecBatchesEqualIgnoringOrder(result.schema, {exp_batch}, result.batches); -} - -// Reproduction of GH-41149: Another case of the same root cause as GH-40675, but with -// empty "by" columns. -TEST(AsofJoinTest, RhsEmptinessRaceEmptyBy) { - auto left_batch = ExecBatchFromJSON({int64()}, R"([[1], [2], [3]])"); - auto right_batch = - ExecBatchFromJSON({utf8(), int64()}, R"([["Z", 2], ["B", 3], ["A", 4]])"); - - Declaration left{"exec_batch_source", - ExecBatchSourceNodeOptions(schema({field("on", int64())}), - {std::move(left_batch)})}; - Declaration right{ - "exec_batch_source", - ExecBatchSourceNodeOptions(schema({field("colVals", utf8()), field("on", int64())}), - {std::move(right_batch)})}; - AsofJoinNodeOptions asof_join_opts({{{"on"}, {}}, {{"on"}, {}}}, 1); - Declaration asof_join{ - "asofjoin", {std::move(left), std::move(right)}, std::move(asof_join_opts)}; - - ASSERT_OK_AND_ASSIGN(auto result, DeclarationToExecBatches(std::move(asof_join))); - - auto exp_batch = - ExecBatchFromJSON({int64(), utf8()}, R"([[1, "Z"], [2, "Z"], [3, "B"]])"); - AssertExecBatchesEqualIgnoringOrder(result.schema, {exp_batch}, result.batches); -} - } // namespace acero } // namespace arrow diff --git a/cpp/src/arrow/acero/backpressure_handler.h b/cpp/src/arrow/acero/backpressure_handler.h index db6c3799354..178272315d7 100644 --- a/cpp/src/arrow/acero/backpressure_handler.h +++ b/cpp/src/arrow/acero/backpressure_handler.h @@ -45,7 +45,7 @@ class BackpressureHandler { } BackpressureHandler backpressure_handler(input, low_threshold, high_threshold, std::move(backpressure_control)); - return backpressure_handler; + return std::move(backpressure_handler); } void Handle(size_t start_level, size_t end_level) { diff --git a/cpp/src/arrow/acero/bloom_filter_test.cc b/cpp/src/arrow/acero/bloom_filter_test.cc index a2d6e9575a1..bad331cfd99 100644 --- a/cpp/src/arrow/acero/bloom_filter_test.cc +++ b/cpp/src/arrow/acero/bloom_filter_test.cc @@ -27,7 +27,7 @@ #include "arrow/acero/task_util.h" #include "arrow/acero/test_util_internal.h" #include "arrow/acero/util.h" -#include "arrow/compute/key_hash_internal.h" +#include "arrow/compute/key_hash.h" #include "arrow/util/bitmap_ops.h" #include "arrow/util/config.h" #include "arrow/util/cpu_info.h" diff --git a/cpp/src/arrow/acero/exec_plan.cc b/cpp/src/arrow/acero/exec_plan.cc index d9fb1942fcc..97119726d4b 100644 --- a/cpp/src/arrow/acero/exec_plan.cc +++ b/cpp/src/arrow/acero/exec_plan.cc @@ -128,7 +128,7 @@ struct ExecPlanImpl : public ExecPlan { Future<> scheduler_finished = arrow::util::AsyncTaskScheduler::Make( [this](arrow::util::AsyncTaskScheduler* async_scheduler) { QueryContext* ctx = query_context(); - RETURN_NOT_OK(ctx->Init(async_scheduler)); + RETURN_NOT_OK(ctx->Init(ctx->max_concurrency(), async_scheduler)); #ifdef ARROW_WITH_OPENTELEMETRY if (HasMetadata()) { diff --git a/cpp/src/arrow/acero/hash_aggregate_test.cc b/cpp/src/arrow/acero/hash_aggregate_test.cc index 743cb20d196..2626fd50379 100644 --- a/cpp/src/arrow/acero/hash_aggregate_test.cc +++ b/cpp/src/arrow/acero/hash_aggregate_test.cc @@ -318,7 +318,7 @@ Result RunGroupBy(const BatchesWithSchema& input, { {"source", SourceNodeOptions{input.schema, input.gen(use_threads, /*slow=*/false)}}, - {"aggregate", AggregateNodeOptions{aggregates, std::move(keys), + {"aggregate", AggregateNodeOptions{std::move(aggregates), std::move(keys), std::move(segment_keys)}}, {"sink", SinkNodeOptions{&sink_gen}}, }) @@ -592,12 +592,6 @@ void TestSegments(std::unique_ptr& segmenter, const ExecSpan& batc ASSERT_EQ(expected_segment, segment); offset = segment.offset + segment.length; } - // Assert next is the last (empty) segment. - ASSERT_OK_AND_ASSIGN(auto segment, segmenter->GetNextSegment(batch, offset)); - ASSERT_GE(segment.offset, batch.length); - ASSERT_EQ(segment.length, 0); - ASSERT_TRUE(segment.is_open); - ASSERT_TRUE(segment.extends); } Result> MakeGrouper(const std::vector& key_types) { @@ -688,142 +682,48 @@ TEST(RowSegmenter, Basics) { } TEST(RowSegmenter, NonOrdered) { - { - std::vector types = {int32()}; - auto batch = ExecBatchFromJSON(types, "[[1], [1], [2], [1], [2]]"); - ASSERT_OK_AND_ASSIGN(auto segmenter, MakeRowSegmenter(types)); - TestSegments(segmenter, ExecSpan(batch), - {{0, 2, false, true}, - {2, 1, false, false}, - {3, 1, false, false}, - {4, 1, true, false}, - {5, 0, true, true}}); - } - { - std::vector types = {int32(), int32()}; - auto batch = ExecBatchFromJSON(types, "[[1, 1], [1, 1], [2, 2], [1, 2], [2, 2]]"); - ASSERT_OK_AND_ASSIGN(auto segmenter, MakeRowSegmenter(types)); - TestSegments(segmenter, ExecSpan(batch), - {{0, 2, false, true}, - {2, 1, false, false}, - {3, 1, false, false}, - {4, 1, true, false}, - {5, 0, true, true}}); - } + std::vector types = {int32()}; + auto batch = ExecBatchFromJSON(types, "[[1], [1], [2], [1], [2]]"); + ASSERT_OK_AND_ASSIGN(auto segmenter, MakeRowSegmenter(types)); + TestSegments(segmenter, ExecSpan(batch), + {{0, 2, false, true}, + {2, 1, false, false}, + {3, 1, false, false}, + {4, 1, true, false}, + {5, 0, true, true}}); } TEST(RowSegmenter, EmptyBatches) { - { - std::vector types = {int32()}; - std::vector batches = { - ExecBatchFromJSON(types, "[]"), ExecBatchFromJSON(types, "[]"), - ExecBatchFromJSON(types, "[[1]]"), ExecBatchFromJSON(types, "[]"), - ExecBatchFromJSON(types, "[[1]]"), ExecBatchFromJSON(types, "[]"), - ExecBatchFromJSON(types, "[[2], [2]]"), ExecBatchFromJSON(types, "[]"), - }; - ASSERT_OK_AND_ASSIGN(auto segmenter, MakeRowSegmenter(types)); - TestSegments(segmenter, ExecSpan(batches[0]), {}); - TestSegments(segmenter, ExecSpan(batches[1]), {}); - TestSegments(segmenter, ExecSpan(batches[2]), {{0, 1, true, true}}); - TestSegments(segmenter, ExecSpan(batches[3]), {}); - TestSegments(segmenter, ExecSpan(batches[4]), {{0, 1, true, true}}); - TestSegments(segmenter, ExecSpan(batches[5]), {}); - TestSegments(segmenter, ExecSpan(batches[6]), {{0, 2, true, false}}); - TestSegments(segmenter, ExecSpan(batches[7]), {}); - } - { - std::vector types = {int32(), int32()}; - std::vector batches = { - ExecBatchFromJSON(types, "[]"), - ExecBatchFromJSON(types, "[]"), - ExecBatchFromJSON(types, "[[1, 1]]"), - ExecBatchFromJSON(types, "[]"), - ExecBatchFromJSON(types, "[[1, 1]]"), - ExecBatchFromJSON(types, "[]"), - ExecBatchFromJSON(types, "[[2, 2], [2, 2]]"), - ExecBatchFromJSON(types, "[]"), - }; - ASSERT_OK_AND_ASSIGN(auto segmenter, MakeRowSegmenter(types)); - TestSegments(segmenter, ExecSpan(batches[0]), {}); - TestSegments(segmenter, ExecSpan(batches[1]), {}); - TestSegments(segmenter, ExecSpan(batches[2]), {{0, 1, true, true}}); - TestSegments(segmenter, ExecSpan(batches[3]), {}); - TestSegments(segmenter, ExecSpan(batches[4]), {{0, 1, true, true}}); - TestSegments(segmenter, ExecSpan(batches[5]), {}); - TestSegments(segmenter, ExecSpan(batches[6]), {{0, 2, true, false}}); - TestSegments(segmenter, ExecSpan(batches[7]), {}); - } + std::vector types = {int32()}; + std::vector batches = { + ExecBatchFromJSON(types, "[]"), ExecBatchFromJSON(types, "[]"), + ExecBatchFromJSON(types, "[[1]]"), ExecBatchFromJSON(types, "[]"), + ExecBatchFromJSON(types, "[[1]]"), ExecBatchFromJSON(types, "[]"), + ExecBatchFromJSON(types, "[[2], [2]]"), ExecBatchFromJSON(types, "[]"), + }; + ASSERT_OK_AND_ASSIGN(auto segmenter, MakeRowSegmenter(types)); + TestSegments(segmenter, ExecSpan(batches[0]), {}); + TestSegments(segmenter, ExecSpan(batches[1]), {}); + TestSegments(segmenter, ExecSpan(batches[2]), {{0, 1, true, true}}); + TestSegments(segmenter, ExecSpan(batches[3]), {}); + TestSegments(segmenter, ExecSpan(batches[4]), {{0, 1, true, true}}); + TestSegments(segmenter, ExecSpan(batches[5]), {}); + TestSegments(segmenter, ExecSpan(batches[6]), {{0, 2, true, false}}); + TestSegments(segmenter, ExecSpan(batches[7]), {}); } TEST(RowSegmenter, MultipleSegments) { - { - std::vector types = {int32()}; - auto batch = - ExecBatchFromJSON(types, "[[1], [1], [2], [5], [3], [3], [5], [5], [4]]"); - ASSERT_OK_AND_ASSIGN(auto segmenter, MakeRowSegmenter(types)); - TestSegments(segmenter, ExecSpan(batch), - {{0, 2, false, true}, - {2, 1, false, false}, - {3, 1, false, false}, - {4, 2, false, false}, - {6, 2, false, false}, - {8, 1, true, false}, - {9, 0, true, true}}); - } - { - std::vector types = {int32(), int32()}; - auto batch = ExecBatchFromJSON( - types, - "[[1, 1], [1, 1], [2, 2], [5, 5], [3, 3], [3, 3], [5, 5], [5, 5], [4, 4]]"); - ASSERT_OK_AND_ASSIGN(auto segmenter, MakeRowSegmenter(types)); - TestSegments(segmenter, ExecSpan(batch), - {{0, 2, false, true}, - {2, 1, false, false}, - {3, 1, false, false}, - {4, 2, false, false}, - {6, 2, false, false}, - {8, 1, true, false}, - {9, 0, true, true}}); - } -} - -TEST(RowSegmenter, MultipleSegmentsMultipleBatches) { - { - std::vector types = {int32()}; - std::vector batches = { - ExecBatchFromJSON(types, "[[1]]"), ExecBatchFromJSON(types, "[[1], [2]]"), - ExecBatchFromJSON(types, "[[5], [3]]"), - ExecBatchFromJSON(types, "[[3], [5], [5]]"), ExecBatchFromJSON(types, "[[4]]")}; - - ASSERT_OK_AND_ASSIGN(auto segmenter, MakeRowSegmenter(types)); - TestSegments(segmenter, ExecSpan(batches[0]), {{0, 1, true, true}}); - TestSegments(segmenter, ExecSpan(batches[1]), - {{0, 1, false, true}, {1, 1, true, false}}); - TestSegments(segmenter, ExecSpan(batches[2]), - {{0, 1, false, false}, {1, 1, true, false}}); - TestSegments(segmenter, ExecSpan(batches[3]), - {{0, 1, false, true}, {1, 2, true, false}}); - TestSegments(segmenter, ExecSpan(batches[4]), {{0, 1, true, false}}); - } - { - std::vector types = {int32(), int32()}; - std::vector batches = { - ExecBatchFromJSON(types, "[[1, 1]]"), - ExecBatchFromJSON(types, "[[1, 1], [2, 2]]"), - ExecBatchFromJSON(types, "[[5, 5], [3, 3]]"), - ExecBatchFromJSON(types, "[[3, 3], [5, 5], [5, 5]]"), - ExecBatchFromJSON(types, "[[4, 4]]")}; - - ASSERT_OK_AND_ASSIGN(auto segmenter, MakeRowSegmenter(types)); - TestSegments(segmenter, ExecSpan(batches[0]), {{0, 1, true, true}}); - TestSegments(segmenter, ExecSpan(batches[1]), - {{0, 1, false, true}, {1, 1, true, false}}); - TestSegments(segmenter, ExecSpan(batches[2]), - {{0, 1, false, false}, {1, 1, true, false}}); - TestSegments(segmenter, ExecSpan(batches[3]), - {{0, 1, false, true}, {1, 2, true, false}}); - TestSegments(segmenter, ExecSpan(batches[4]), {{0, 1, true, false}}); - } + std::vector types = {int32()}; + auto batch = ExecBatchFromJSON(types, "[[1], [1], [2], [5], [3], [3], [5], [5], [4]]"); + ASSERT_OK_AND_ASSIGN(auto segmenter, MakeRowSegmenter(types)); + TestSegments(segmenter, ExecSpan(batch), + {{0, 2, false, true}, + {2, 1, false, false}, + {3, 1, false, false}, + {4, 2, false, false}, + {6, 2, false, false}, + {8, 1, true, false}, + {9, 0, true, true}}); } namespace { diff --git a/cpp/src/arrow/acero/hash_join.cc b/cpp/src/arrow/acero/hash_join.cc index ddcd2a09957..296b2c56e00 100644 --- a/cpp/src/arrow/acero/hash_join.cc +++ b/cpp/src/arrow/acero/hash_join.cc @@ -27,8 +27,8 @@ #include "arrow/acero/hash_join_dict.h" #include "arrow/acero/task_util.h" +#include "arrow/compute/kernels/row_encoder_internal.h" #include "arrow/compute/row/encode_internal.h" -#include "arrow/compute/row/row_encoder_internal.h" #include "arrow/util/tracing_internal.h" namespace arrow { @@ -791,7 +791,7 @@ class HashJoinBasicImpl : public HashJoinImpl { Result> HashJoinImpl::MakeBasic() { std::unique_ptr impl{new HashJoinBasicImpl()}; - return impl; + return std::move(impl); } } // namespace acero diff --git a/cpp/src/arrow/acero/hash_join_benchmark.cc b/cpp/src/arrow/acero/hash_join_benchmark.cc index 470960b1c50..9be4bed6065 100644 --- a/cpp/src/arrow/acero/hash_join_benchmark.cc +++ b/cpp/src/arrow/acero/hash_join_benchmark.cc @@ -23,7 +23,7 @@ #include "arrow/acero/test_util_internal.h" #include "arrow/acero/util.h" #include "arrow/api.h" -#include "arrow/compute/row/row_encoder_internal.h" +#include "arrow/compute/kernels/row_encoder_internal.h" #include "arrow/testing/random.h" #include "arrow/util/thread_pool.h" @@ -51,10 +51,6 @@ struct BenchmarkSettings { double null_percentage = 0.0; double cardinality = 1.0; // Proportion of distinct keys in build side double selectivity = 1.0; // Probability of a match for a given row - int var_length_min = 2; // Minimal length of any var length types - int var_length_max = 20; // Maximum length of any var length types - - Expression residual_filter = literal(true); }; class JoinBenchmark { @@ -83,8 +79,8 @@ class JoinBenchmark { build_metadata["null_probability"] = std::to_string(settings.null_percentage); build_metadata["min"] = std::to_string(min_build_value); build_metadata["max"] = std::to_string(max_build_value); - build_metadata["min_length"] = std::to_string(settings.var_length_min); - build_metadata["max_length"] = std::to_string(settings.var_length_max); + build_metadata["min_length"] = "2"; + build_metadata["max_length"] = "20"; std::unordered_map probe_metadata; probe_metadata["null_probability"] = std::to_string(settings.null_percentage); @@ -130,9 +126,10 @@ class JoinBenchmark { stats_.num_probe_rows = settings.num_probe_batches * settings.batch_size; schema_mgr_ = std::make_unique(); + Expression filter = literal(true); DCHECK_OK(schema_mgr_->Init(settings.join_type, *l_batches_with_schema.schema, left_keys, *r_batches_with_schema.schema, right_keys, - settings.residual_filter, "l_", "r_")); + filter, "l_", "r_")); if (settings.use_basic_implementation) { join_ = *HashJoinImpl::MakeBasic(); @@ -148,7 +145,7 @@ class JoinBenchmark { }; scheduler_ = TaskScheduler::Make(); - DCHECK_OK(ctx_.Init(nullptr)); + DCHECK_OK(ctx_.Init(settings.num_threads, nullptr)); auto register_task_group_callback = [&](std::function task, std::function cont) { @@ -161,7 +158,7 @@ class JoinBenchmark { DCHECK_OK(join_->Init( &ctx_, settings.join_type, settings.num_threads, &(schema_mgr_->proj_maps[0]), - &(schema_mgr_->proj_maps[1]), std::move(key_cmp), settings.residual_filter, + &(schema_mgr_->proj_maps[1]), std::move(key_cmp), std::move(filter), std::move(register_task_group_callback), std::move(start_task_group_callback), [](int64_t, ExecBatch) { return Status::OK(); }, [](int64_t) { return Status::OK(); })); @@ -311,60 +308,6 @@ static void BM_HashJoinBasic_NullPercentage(benchmark::State& st) { HashJoinBasicBenchmarkImpl(st, settings); } - -template -static void BM_HashJoinBasic_TrivialResidualFilter(benchmark::State& st, - JoinType join_type, - Expression residual_filter, - Args&&...) { - BenchmarkSettings settings; - settings.join_type = join_type; - settings.build_payload_types = {binary()}; - settings.probe_payload_types = {binary()}; - - settings.use_basic_implementation = st.range(0); - - settings.num_build_batches = 1024; - settings.num_probe_batches = 1024; - - // Let payload column length from 1 to 100. - settings.var_length_min = 1; - settings.var_length_max = 100; - - settings.residual_filter = std::move(residual_filter); - - HashJoinBasicBenchmarkImpl(st, settings); -} - -template -static void BM_HashJoinBasic_ComplexResidualFilter(benchmark::State& st, - JoinType join_type, Args&&...) { - BenchmarkSettings settings; - settings.join_type = join_type; - settings.build_payload_types = {binary()}; - settings.probe_payload_types = {binary()}; - - settings.use_basic_implementation = st.range(0); - - settings.num_build_batches = 1024; - settings.num_probe_batches = 1024; - - // Let payload column length from 1 to 100. - settings.var_length_min = 1; - settings.var_length_max = 100; - - // Create filter referring payload columns from both sides. - // binary_length(probe_payload) + binary_length(build_payload) <= 2 * selectivity - settings.selectivity = static_cast(st.range(1)) / 100.0; - using arrow::compute::call; - using arrow::compute::field_ref; - settings.residual_filter = - call("less_equal", {call("plus", {call("binary_length", {field_ref("lp0")}), - call("binary_length", {field_ref("rp0")})}), - literal(2 * settings.selectivity)}); - - HashJoinBasicBenchmarkImpl(st, settings); -} #endif std::vector hashtable_krows = benchmark::CreateRange(1, 4096, 8); @@ -492,136 +435,6 @@ BENCHMARK(BM_HashJoinBasic_BuildParallelism) BENCHMARK(BM_HashJoinBasic_NullPercentage) ->ArgNames({"Null Percentage"}) ->DenseRange(0, 100, 10); - -const char* use_basic_argname = "Use basic"; -std::vector use_basic_arg = benchmark::CreateDenseRange(0, 1, 1); - -std::vector trivial_residual_filter_argnames = {use_basic_argname}; -std::vector> trivial_residual_filter_args = {use_basic_arg}; - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Inner/Literal(true)", - JoinType::INNER, literal(true)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Left Semi/Literal(true)", - JoinType::LEFT_SEMI, literal(true)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Right Semi/Literal(true)", - JoinType::RIGHT_SEMI, literal(true)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Left Anti/Literal(true)", - JoinType::LEFT_ANTI, literal(true)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Right Anti/Literal(true)", - JoinType::RIGHT_ANTI, literal(true)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Left Outer/Literal(true)", - JoinType::LEFT_OUTER, literal(true)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Right Outer/Literal(true)", - JoinType::RIGHT_OUTER, literal(true)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Full Outer/Literal(true)", - JoinType::FULL_OUTER, literal(true)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Inner/Literal(false)", - JoinType::INNER, literal(false)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Left Semi/Literal(false)", - JoinType::LEFT_SEMI, literal(false)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Right Semi/Literal(false)", - JoinType::RIGHT_SEMI, literal(false)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Left Anti/Literal(false)", - JoinType::LEFT_ANTI, literal(false)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Right Anti/Literal(false)", - JoinType::RIGHT_ANTI, literal(false)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Left Outer/Literal(false)", - JoinType::LEFT_OUTER, literal(false)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Right Outer/Literal(false)", - JoinType::RIGHT_OUTER, literal(false)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_TrivialResidualFilter, "Full Outer/Literal(false)", - JoinType::FULL_OUTER, literal(false)) - ->ArgNames(trivial_residual_filter_argnames) - ->ArgsProduct(trivial_residual_filter_args); - -std::vector complex_residual_filter_argnames = {use_basic_argname, - "Selectivity"}; -std::vector> complex_residual_filter_args = { - use_basic_arg, benchmark::CreateDenseRange(0, 100, 20)}; - -BENCHMARK_CAPTURE(BM_HashJoinBasic_ComplexResidualFilter, "Inner", JoinType::INNER) - ->ArgNames(complex_residual_filter_argnames) - ->ArgsProduct(complex_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_ComplexResidualFilter, "Left Semi", - JoinType::LEFT_SEMI) - ->ArgNames(complex_residual_filter_argnames) - ->ArgsProduct(complex_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_ComplexResidualFilter, "Right Semi", - JoinType::RIGHT_SEMI) - ->ArgNames(complex_residual_filter_argnames) - ->ArgsProduct(complex_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_ComplexResidualFilter, "Left Anti", - JoinType::LEFT_ANTI) - ->ArgNames(complex_residual_filter_argnames) - ->ArgsProduct(complex_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_ComplexResidualFilter, "Right Anti", - JoinType::RIGHT_ANTI) - ->ArgNames(complex_residual_filter_argnames) - ->ArgsProduct(complex_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_ComplexResidualFilter, "Left Outer", - JoinType::LEFT_OUTER) - ->ArgNames(complex_residual_filter_argnames) - ->ArgsProduct(complex_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_ComplexResidualFilter, "Right Outer", - JoinType::RIGHT_OUTER) - ->ArgNames(complex_residual_filter_argnames) - ->ArgsProduct(complex_residual_filter_args); - -BENCHMARK_CAPTURE(BM_HashJoinBasic_ComplexResidualFilter, "Full Outer", - JoinType::FULL_OUTER) - ->ArgNames(complex_residual_filter_argnames) - ->ArgsProduct(complex_residual_filter_args); #else BENCHMARK_CAPTURE(BM_HashJoinBasic_KeyTypes, "{int32}", {int32()}) diff --git a/cpp/src/arrow/acero/hash_join_dict.h b/cpp/src/arrow/acero/hash_join_dict.h index 02454a71462..c7d8d785d07 100644 --- a/cpp/src/arrow/acero/hash_join_dict.h +++ b/cpp/src/arrow/acero/hash_join_dict.h @@ -22,7 +22,7 @@ #include "arrow/acero/schema_util.h" #include "arrow/compute/exec.h" -#include "arrow/compute/row/row_encoder_internal.h" +#include "arrow/compute/kernels/row_encoder_internal.h" #include "arrow/result.h" #include "arrow/status.h" #include "arrow/type.h" diff --git a/cpp/src/arrow/acero/hash_join_node.cc b/cpp/src/arrow/acero/hash_join_node.cc index 67f902e64be..254dad361ff 100644 --- a/cpp/src/arrow/acero/hash_join_node.cc +++ b/cpp/src/arrow/acero/hash_join_node.cc @@ -27,7 +27,7 @@ #include "arrow/acero/options.h" #include "arrow/acero/schema_util.h" #include "arrow/acero/util.h" -#include "arrow/compute/key_hash_internal.h" +#include "arrow/compute/key_hash.h" #include "arrow/util/checked_cast.h" #include "arrow/util/future.h" #include "arrow/util/thread_pool.h" @@ -351,7 +351,7 @@ Result HashJoinSchema::BindFilter(Expression filter, const Schema& right_schema, ExecContext* exec_context) { if (filter.IsBound() || filter == literal(true)) { - return filter; + return std::move(filter); } // Step 1: Construct filter schema FieldVector fields; @@ -386,7 +386,7 @@ Result HashJoinSchema::BindFilter(Expression filter, filter.ToString(), " evaluates to ", filter.type()->ToString()); } - return filter; + return std::move(filter); } Expression HashJoinSchema::RewriteFilterToUseFilterSchema( @@ -497,11 +497,11 @@ struct BloomFilterPushdownContext { using BuildFinishedCallback = std::function; using FiltersReceivedCallback = std::function; using FilterFinishedCallback = std::function; - Status Init(HashJoinNode* owner, size_t num_threads, - RegisterTaskGroupCallback register_task_group_callback, - StartTaskGroupCallback start_task_group_callback, - FiltersReceivedCallback on_bloom_filters_received, - bool disable_bloom_filter, bool use_sync_execution); + void Init(HashJoinNode* owner, size_t num_threads, + RegisterTaskGroupCallback register_task_group_callback, + StartTaskGroupCallback start_task_group_callback, + FiltersReceivedCallback on_bloom_filters_received, bool disable_bloom_filter, + bool use_sync_execution); Status StartProducing(size_t thread_index); @@ -559,7 +559,8 @@ struct BloomFilterPushdownContext { std::vector hashes(batch.length); std::vector bv(bit_vector_bytes); - arrow::util::TempVectorStack* stack = &tld_[thread_index].stack; + ARROW_ASSIGN_OR_RAISE(arrow::util::TempVectorStack * stack, + ctx_->GetTempStack(thread_index)); // Start with full selection for the current batch memset(selected.data(), 0xff, bit_vector_bytes); @@ -653,17 +654,7 @@ struct BloomFilterPushdownContext { FiltersReceivedCallback all_received_callback_; FilterFinishedCallback on_finished_; } eval_; - - static constexpr auto kTempStackUsage = - Hashing32::kHashBatchTempStackUsage + - (sizeof(uint32_t) + /*extra=*/1) * arrow::util::MiniBatch::kMiniBatchLength; - - struct ThreadLocalData { - arrow::util::TempVectorStack stack; - }; - std::vector tld_; }; - bool HashJoinSchema::HasDictionaries() const { for (int side = 0; side <= 1; ++side) { for (int icol = 0; icol < proj_maps[side].num_cols(HashJoinProjection::INPUT); @@ -749,11 +740,13 @@ class HashJoinNode : public ExecNode, public TracedNode { // Create hash join implementation object // SwissJoin does not support: // a) 64-bit string offsets - // b) dictionaries + // b) residual predicates + // c) dictionaries // bool use_swiss_join; #if ARROW_LITTLE_ENDIAN - use_swiss_join = !schema_mgr->HasDictionaries() && !schema_mgr->HasLargeBinary(); + use_swiss_join = (filter == literal(true)) && !schema_mgr->HasDictionaries() && + !schema_mgr->HasLargeBinary(); #else use_swiss_join = false; #endif @@ -939,7 +932,7 @@ class HashJoinNode : public ExecNode, public TracedNode { // we will change it back to just the CPU's thread pool capacity. size_t num_threads = (GetCpuThreadPoolCapacity() + io::GetIOThreadPoolCapacity() + 1); - RETURN_NOT_OK(pushdown_context_.Init( + pushdown_context_.Init( this, num_threads, [ctx](std::function fn, std::function on_finished) { @@ -949,7 +942,7 @@ class HashJoinNode : public ExecNode, public TracedNode { return ctx->StartTaskGroup(task_group_id, num_tasks); }, [this](size_t thread_index) { return OnFiltersReceived(thread_index); }, - disable_bloom_filter_, use_sync_execution)); + disable_bloom_filter_, use_sync_execution); RETURN_NOT_OK(impl_->Init( ctx, join_type_, num_threads, &(schema_mgr_->proj_maps[0]), @@ -1046,7 +1039,7 @@ class HashJoinNode : public ExecNode, public TracedNode { BloomFilterPushdownContext pushdown_context_; }; -Status BloomFilterPushdownContext::Init( +void BloomFilterPushdownContext::Init( HashJoinNode* owner, size_t num_threads, RegisterTaskGroupCallback register_task_group_callback, StartTaskGroupCallback start_task_group_callback, @@ -1083,12 +1076,6 @@ Status BloomFilterPushdownContext::Init( return eval_.on_finished_(thread_index, std::move(eval_.batches_)); }); start_task_group_callback_ = std::move(start_task_group_callback); - tld_.resize(num_threads); - for (auto& local_data : tld_) { - RETURN_NOT_OK(local_data.stack.Init(ctx_->memory_pool(), kTempStackUsage)); - } - - return Status::OK(); } Status BloomFilterPushdownContext::StartProducing(size_t thread_index) { @@ -1139,7 +1126,8 @@ Status BloomFilterPushdownContext::BuildBloomFilter_exec_task(size_t thread_inde } ARROW_ASSIGN_OR_RAISE(ExecBatch key_batch, ExecBatch::Make(std::move(key_columns))); - arrow::util::TempVectorStack* stack = &tld_[thread_index].stack; + ARROW_ASSIGN_OR_RAISE(arrow::util::TempVectorStack * stack, + ctx_->GetTempStack(thread_index)); arrow::util::TempVectorHolder hash_holder( stack, arrow::util::MiniBatch::kMiniBatchLength); uint32_t* hashes = hash_holder.mutable_data(); diff --git a/cpp/src/arrow/acero/hash_join_node.h b/cpp/src/arrow/acero/hash_join_node.h index ad60019ceab..cca64d59830 100644 --- a/cpp/src/arrow/acero/hash_join_node.h +++ b/cpp/src/arrow/acero/hash_join_node.h @@ -17,7 +17,6 @@ #pragma once -#include #include #include "arrow/acero/options.h" @@ -89,7 +88,7 @@ class ARROW_ACERO_EXPORT HashJoinSchema { const Expression& filter); bool PayloadIsEmpty(int side) { - assert(side == 0 || side == 1); + ARROW_DCHECK(side == 0 || side == 1); return proj_maps[side].num_cols(HashJoinProjection::PAYLOAD) == 0; } diff --git a/cpp/src/arrow/acero/hash_join_node_test.cc b/cpp/src/arrow/acero/hash_join_node_test.cc index 9065e286a22..58551f4eca0 100644 --- a/cpp/src/arrow/acero/hash_join_node_test.cc +++ b/cpp/src/arrow/acero/hash_join_node_test.cc @@ -26,11 +26,9 @@ #include "arrow/acero/test_util_internal.h" #include "arrow/acero/util.h" #include "arrow/api.h" +#include "arrow/compute/kernels/row_encoder_internal.h" #include "arrow/compute/kernels/test_util.h" -#include "arrow/compute/light_array_internal.h" -#include "arrow/compute/row/row_encoder_internal.h" #include "arrow/testing/extension_type.h" -#include "arrow/testing/generator.h" #include "arrow/testing/gtest_util.h" #include "arrow/testing/matchers.h" #include "arrow/testing/random.h" @@ -41,13 +39,8 @@ using testing::UnorderedElementsAreArray; namespace arrow { -using arrow::gen::Constant; -using arrow::random::kSeedMax; -using arrow::random::RandomArrayGenerator; -using compute::and_; using compute::call; using compute::default_exec_context; -using compute::ExecBatchBuilder; using compute::ExecSpan; using compute::field_ref; using compute::SortIndices; @@ -1900,170 +1893,58 @@ TEST(HashJoin, CheckHashJoinNodeOptionsValidation) { } } -class ResidualFilterCaseRunner { - public: - ResidualFilterCaseRunner(BatchesWithSchema left_input, BatchesWithSchema right_input) - : left_input_(std::move(left_input)), right_input_(std::move(right_input)) {} - - void Run(JoinType join_type, std::vector left_keys, - std::vector right_keys, Expression filter, - const std::vector& expected) const { - RunInternal(HashJoinNodeOptions{join_type, std::move(left_keys), - std::move(right_keys), std::move(filter)}, - expected); - } - - void Run(JoinType join_type, std::vector left_keys, - std::vector right_keys, std::vector left_output, - std::vector right_output, Expression filter, - const std::vector& expected) const { - RunInternal(HashJoinNodeOptions{join_type, std::move(left_keys), - std::move(right_keys), std::move(left_output), - std::move(right_output), std::move(filter)}, - expected); - } - - private: - void RunInternal(const HashJoinNodeOptions& options, - const std::vector& expected) const { - auto join_type_str = JoinTypeString(options.join_type); - auto join_cond_str = - JoinConditionString(options.left_keys, options.right_keys, options.filter); - auto output_str = OutputString(options.left_output, options.right_output); - for (bool parallel : {false, true}) { - auto parallel_str = parallel ? "parallel" : "serial"; - ARROW_SCOPED_TRACE(join_type_str + " " + join_cond_str + " " + output_str + " " + - parallel_str); - - Declaration left{"source", - SourceNodeOptions{left_input_.schema, - left_input_.gen(parallel, /*slow=*/false)}}; - Declaration right{"source", - SourceNodeOptions{right_input_.schema, - right_input_.gen(parallel, /*slow=*/false)}}; - - Declaration join{"hashjoin", {std::move(left), std::move(right)}, options}; - - ASSERT_OK_AND_ASSIGN(auto result, - DeclarationToExecBatches(std::move(join), parallel)); - AssertExecBatchesEqualIgnoringOrder(result.schema, expected, result.batches); - } - } - - private: - BatchesWithSchema left_input_; - BatchesWithSchema right_input_; - - private: - static std::string JoinTypeString(JoinType t) { - switch (t) { - case JoinType::LEFT_SEMI: - return "LEFT_SEMI"; - case JoinType::RIGHT_SEMI: - return "RIGHT_SEMI"; - case JoinType::LEFT_ANTI: - return "LEFT_ANTI"; - case JoinType::RIGHT_ANTI: - return "RIGHT_ANTI"; - case JoinType::INNER: - return "INNER"; - case JoinType::LEFT_OUTER: - return "LEFT_OUTER"; - case JoinType::RIGHT_OUTER: - return "RIGHT_OUTER"; - case JoinType::FULL_OUTER: - return "FULL_OUTER"; - } - ARROW_DCHECK(false); - return ""; - } - - static std::string JoinConditionString(const std::vector& left_keys, - const std::vector& right_keys, - const Expression& filter) { - ARROW_DCHECK(left_keys.size() > 0); - ARROW_DCHECK(left_keys.size() == right_keys.size()); - std::stringstream ss; - ss << "on ("; - for (size_t i = 0; i < left_keys.size(); ++i) { - ss << left_keys[i].ToString() << " = " << right_keys[i].ToString() << " and "; - } - ss << filter.ToString(); - ss << ")"; - return ss.str(); - } - - static std::string OutputString(const std::vector& left_output, - const std::vector& right_output) { - std::vector both_output; - both_output.reserve(left_output.size() + right_output.size()); - both_output.insert(both_output.end(), left_output.begin(), left_output.end()); - both_output.insert(both_output.end(), right_output.begin(), right_output.end()); - std::stringstream ss; - ss << "output ("; - for (size_t i = 0; i < both_output.size(); ++i) { - if (i != 0) { - ss << ", "; - } - ss << both_output[i].ToString(); - } - ss << ")"; - return ss.str(); - } -}; - TEST(HashJoin, ResidualFilter) { - BatchesWithSchema input_left; - input_left.batches = {ExecBatchFromJSON({int32(), int32(), utf8()}, R"([ - [1, 6, "alpha"], - [2, 5, "beta"], - [3, 4, "alpha"]])")}; - input_left.schema = - schema({field("l1", int32()), field("l2", int32()), field("l_str", utf8())}); + for (bool parallel : {false, true}) { + SCOPED_TRACE(parallel ? "parallel/merged" : "serial"); + + BatchesWithSchema input_left; + input_left.batches = {ExecBatchFromJSON({int32(), int32(), utf8()}, R"([ + [1, 6, "alpha"], + [2, 5, "beta"], + [3, 4, "alpha"] + ])")}; + input_left.schema = + schema({field("l1", int32()), field("l2", int32()), field("l_str", utf8())}); + + BatchesWithSchema input_right; + input_right.batches = {ExecBatchFromJSON({int32(), int32(), utf8()}, R"([ + [5, 11, "alpha"], + [2, 12, "beta"], + [4, 16, "alpha"] + ])")}; + input_right.schema = + schema({field("r1", int32()), field("r2", int32()), field("r_str", utf8())}); - BatchesWithSchema input_right; - input_right.batches = {ExecBatchFromJSON({int32(), int32(), utf8()}, R"([ - [5, 11, "alpha"], - [2, 12, "beta"], - [4, 16, "alpha"]])")}; - input_right.schema = - schema({field("r1", int32()), field("r2", int32()), field("r_str", utf8())}); - - const ResidualFilterCaseRunner runner{std::move(input_left), std::move(input_right)}; - - Expression mul = call("multiply", {field_ref("l1"), field_ref("l2")}); - Expression combination = call("add", {mul, field_ref("r1")}); - Expression filter = less_equal(combination, field_ref("r2")); - - runner.Run(JoinType::FULL_OUTER, {"l_str"}, {"r_str"}, std::move(filter), - {ExecBatchFromJSON({int32(), int32(), utf8(), int32(), int32(), utf8()}, R"([ - [1, 6, "alpha", 4, 16, "alpha"], - [1, 6, "alpha", 5, 11, "alpha"], - [2, 5, "beta", 2, 12, "beta"], - [3, 4, "alpha", 4, 16, "alpha"]])")}); -} + Declaration left{ + "source", + SourceNodeOptions{input_left.schema, input_left.gen(parallel, /*slow=*/false)}}; + Declaration right{ + "source", + SourceNodeOptions{input_right.schema, input_right.gen(parallel, /*slow=*/false)}}; -TEST(HashJoin, FilterEmptyRows) { - // Regression test for GH-41121. - BatchesWithSchema input_left; - input_left.batches = { - ExecBatchFromJSON({int32(), utf8(), int32()}, R"([[2, "Jarry", 28]])")}; - input_left.schema = - schema({field("id", int32()), field("name", utf8()), field("age", int32())}); + Expression mul = call("multiply", {field_ref("l1"), field_ref("l2")}); + Expression combination = call("add", {mul, field_ref("r1")}); + Expression residual_filter = less_equal(combination, field_ref("r2")); - BatchesWithSchema input_right; - input_right.batches = {ExecBatchFromJSON( - {int32(), int32(), utf8()}, - R"([[2, 10, "Jack"], [3, 12, "Mark"], [4, 15, "Tom"], [1, 10, "Jack"]])")}; - input_right.schema = - schema({field("id", int32()), field("stu_id", int32()), field("subject", utf8())}); + HashJoinNodeOptions join_opts{ + JoinType::FULL_OUTER, + /*left_keys=*/{"l_str"}, + /*right_keys=*/{"r_str"}, std::move(residual_filter), "l_", "r_"}; - const ResidualFilterCaseRunner runner{std::move(input_left), std::move(input_right)}; + Declaration join{"hashjoin", {std::move(left), std::move(right)}, join_opts}; - Expression filter = greater(field_ref("age"), literal(25)); + ASSERT_OK_AND_ASSIGN(auto result, + DeclarationToExecBatches(std::move(join), parallel)); - runner.Run(JoinType::LEFT_ANTI, {"id"}, {"stu_id"}, std::move(filter), - {ExecBatchFromJSON({int32(), utf8(), int32()}, R"([[2, "Jarry", 28]])")}); + std::vector expected = { + ExecBatchFromJSON({int32(), int32(), utf8(), int32(), int32(), utf8()}, R"([ + [1, 6, "alpha", 4, 16, "alpha"], + [1, 6, "alpha", 5, 11, "alpha"], + [2, 5, "beta", 2, 12, "beta"], + [3, 4, "alpha", 4, 16, "alpha"]])")}; + + AssertExecBatchesEqualIgnoringOrder(result.schema, result.batches, expected); + } } TEST(HashJoin, TrivialResidualFilter) { @@ -2078,993 +1959,47 @@ TEST(HashJoin, TrivialResidualFilter) { std::vector expected_strings = {expected_true, expected_false}; std::vector filters = {always_true, always_false}; - BatchesWithSchema input_left; - input_left.batches = {ExecBatchFromJSON({int32(), utf8()}, R"([ - [1, "alpha"]])")}; - input_left.schema = schema({field("l1", int32()), field("l_str", utf8())}); - - BatchesWithSchema input_right; - input_right.batches = {ExecBatchFromJSON({int32(), utf8()}, R"([ - [1, "alpha"]])")}; - input_right.schema = schema({field("r1", int32()), field("r_str", utf8())}); - - ResidualFilterCaseRunner runner{std::move(input_left), std::move(input_right)}; - for (size_t test_id = 0; test_id < 2; test_id++) { - runner.Run(JoinType::INNER, {"l_str"}, {"r_str"}, filters[test_id], - {ExecBatchFromJSON({int32(), utf8(), int32(), utf8()}, - expected_strings[test_id])}); - } -} - -TEST(HashJoin, FineGrainedResidualFilter) { - struct JoinSchema { - std::shared_ptr left, right; - - struct Projector { - std::shared_ptr left, right; - std::vector left_output, right_output; - - std::vector LeftOutput(JoinType join_type) const { - if (join_type == JoinType::RIGHT_SEMI || join_type == JoinType::RIGHT_ANTI) { - return {}; - } - std::vector output(left_output.size()); - std::transform(left_output.begin(), left_output.end(), output.begin(), - [](int i) { return i; }); - return output; - } - - std::vector RightOutput(JoinType join_type) const { - if (join_type == JoinType::LEFT_SEMI || join_type == JoinType::LEFT_ANTI) { - return {}; - } - std::vector output(right_output.size()); - std::transform(right_output.begin(), right_output.end(), output.begin(), - [](int i) { return i; }); - return output; - } - - ExecBatch Project(JoinType join_type, const ExecBatch& batch) const { - std::vector values; - if (join_type != JoinType::RIGHT_SEMI && join_type != JoinType::RIGHT_ANTI) { - for (int i : left_output) { - values.push_back(batch[i]); - } - } - if (join_type != JoinType::LEFT_SEMI && join_type != JoinType::LEFT_ANTI) { - int left_size = - join_type == JoinType::RIGHT_SEMI || join_type == JoinType::RIGHT_ANTI - ? 0 - : left->num_fields(); - for (int i : right_output) { - values.push_back(batch[left_size + i]); - } - } - return {std::move(values), batch.length}; - } - }; - - Projector GetProjector(std::vector left_output, std::vector right_output) { - return Projector{left, right, std::move(left_output), std::move(right_output)}; - } - }; - - BatchesWithSchema left; - left.batches = {ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload"], - [null, 0, "l_payload"], - [null, 42, "l_payload"], - ["left_only", null, "l_payload"], - ["left_only", 0, "l_payload"], - ["left_only", 42, "l_payload"], - ["both1", null, "l_payload"], - ["both1", 0, "l_payload"], - ["both1", 42, "l_payload"], - ["both2", null, "l_payload"], - ["both2", 0, "l_payload"], - ["both2", 42, "l_payload"]])")}; - left.schema = schema( - {field("l_key", utf8()), field("l_filter", int32()), field("l_payload", utf8())}); - - BatchesWithSchema right; - right.batches = {ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - [null, null, "r_payload"], - [null, 0, "r_payload"], - [null, 42, "r_payload"], - ["both1", null, "r_payload"], - ["both1", 0, "r_payload"], - ["both1", 42, "r_payload"], - ["both2", null, "r_payload"], - ["both2", 0, "r_payload"], - ["both2", 42, "r_payload"], - ["right_only", null, "r_payload"], - ["right_only", 0, "r_payload"], - ["right_only", 42, "r_payload"]])")}; - right.schema = schema( - {field("r_key", utf8()), field("r_filter", int32()), field("r_payload", utf8())}); - - JoinSchema join_schema{left.schema, right.schema}; - std::vector projectors{ - join_schema.GetProjector({0, 1, 2}, {0, 1, 2}), // Output all. - join_schema.GetProjector({0}, {0}), // Output key columns only. - join_schema.GetProjector({1}, {1}), // Output filter columns only. - join_schema.GetProjector({2}, {2})}; // Output payload columns only. - - const ResidualFilterCaseRunner runner{std::move(left), std::move(right)}; - - { - // Literal true and scalar true. - for (Expression filter : {literal(true), equal(literal(1), literal(1))}) { - std::vector left_keys{"l_key", "l_filter"}, - right_keys{"r_key", "r_filter"}; - { - // Inner join. - JoinType join_type = JoinType::INNER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - ["both1", 0, "l_payload", "both1", 0, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", 0, "l_payload", "both2", 0, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Left outer join. - JoinType join_type = JoinType::LEFT_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload", null, null, null], - [null, 0, "l_payload", null, null, null], - [null, 42, "l_payload", null, null, null], - ["left_only", null, "l_payload", null, null, null], - ["left_only", 0, "l_payload", null, null, null], - ["left_only", 42, "l_payload", null, null, null], - ["both1", null, "l_payload", null, null, null], - ["both2", null, "l_payload", null, null, null], - ["both1", 0, "l_payload", "both1", 0, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", 0, "l_payload", "both2", 0, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Right outer join. - JoinType join_type = JoinType::RIGHT_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - ["both1", 0, "l_payload", "both1", 0, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", 0, "l_payload", "both2", 0, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"], - [null, null, null, null, null, "r_payload"], - [null, null, null, null, 0, "r_payload"], - [null, null, null, null, 42, "r_payload"], - [null, null, null, "both1", null, "r_payload"], - [null, null, null, "both2", null, "r_payload"], - [null, null, null, "right_only", null, "r_payload"], - [null, null, null, "right_only", 0, "r_payload"], - [null, null, null, "right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Full outer join. - JoinType join_type = JoinType::FULL_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload", null, null, null], - [null, 0, "l_payload", null, null, null], - [null, 42, "l_payload", null, null, null], - ["left_only", null, "l_payload", null, null, null], - ["left_only", 0, "l_payload", null, null, null], - ["left_only", 42, "l_payload", null, null, null], - ["both1", null, "l_payload", null, null, null], - ["both2", null, "l_payload", null, null, null], - ["both1", 0, "l_payload", "both1", 0, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", 0, "l_payload", "both2", 0, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"], - [null, null, null, null, null, "r_payload"], - [null, null, null, null, 0, "r_payload"], - [null, null, null, null, 42, "r_payload"], - [null, null, null, "both1", null, "r_payload"], - [null, null, null, "both2", null, "r_payload"], - [null, null, null, "right_only", null, "r_payload"], - [null, null, null, "right_only", 0, "r_payload"], - [null, null, null, "right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Left semi join. - JoinType join_type = JoinType::LEFT_SEMI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - ["both1", 0, "l_payload"], - ["both1", 42, "l_payload"], - ["both2", 0, "l_payload"], - ["both2", 42, "l_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Left anti join. - JoinType join_type = JoinType::LEFT_ANTI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload"], - [null, 0, "l_payload"], - [null, 42, "l_payload"], - ["left_only", null, "l_payload"], - ["left_only", 0, "l_payload"], - ["left_only", 42, "l_payload"], - ["both1", null, "l_payload"], - ["both2", null, "l_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Right semi join. - JoinType join_type = JoinType::RIGHT_SEMI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - ["both1", 0, "r_payload"], - ["both1", 42, "r_payload"], - ["both2", 0, "r_payload"], - ["both2", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Right anti join. - JoinType join_type = JoinType::RIGHT_ANTI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - [null, null, "r_payload"], - [null, 0, "r_payload"], - [null, 42, "r_payload"], - ["both1", null, "r_payload"], - ["both2", null, "r_payload"], - ["right_only", null, "r_payload"], - ["right_only", 0, "r_payload"], - ["right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - } - } - - { - // Literal false, null, and scalar false, null. - for (Expression filter : - {literal(false), literal(NullScalar()), equal(literal(0), literal(1)), - equal(literal(1), literal(NullScalar()))}) { - std::vector left_keys{"l_key", "l_filter"}, - right_keys{"r_key", "r_filter"}; - { - // Inner join. - JoinType join_type = JoinType::INNER; - auto expected = ExecBatchFromJSON( - {utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Left outer join. - JoinType join_type = JoinType::LEFT_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload", null, null, null], - [null, 0, "l_payload", null, null, null], - [null, 42, "l_payload", null, null, null], - ["left_only", null, "l_payload", null, null, null], - ["left_only", 0, "l_payload", null, null, null], - ["left_only", 42, "l_payload", null, null, null], - ["both1", null, "l_payload", null, null, null], - ["both1", 0, "l_payload", null, null, null], - ["both1", 42, "l_payload", null, null, null], - ["both2", null, "l_payload", null, null, null], - ["both2", 0, "l_payload", null, null, null], - ["both2", 42, "l_payload", null, null, null]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Right outer join. - JoinType join_type = JoinType::RIGHT_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - [null, null, null, null, null, "r_payload"], - [null, null, null, null, 0, "r_payload"], - [null, null, null, null, 42, "r_payload"], - [null, null, null, "both1", null, "r_payload"], - [null, null, null, "both1", 0, "r_payload"], - [null, null, null, "both1", 42, "r_payload"], - [null, null, null, "both2", null, "r_payload"], - [null, null, null, "both2", 0, "r_payload"], - [null, null, null, "both2", 42, "r_payload"], - [null, null, null, "right_only", null, "r_payload"], - [null, null, null, "right_only", 0, "r_payload"], - [null, null, null, "right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Full outer join. - JoinType join_type = JoinType::FULL_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload", null, null, null], - [null, 0, "l_payload", null, null, null], - [null, 42, "l_payload", null, null, null], - ["left_only", null, "l_payload", null, null, null], - ["left_only", 0, "l_payload", null, null, null], - ["left_only", 42, "l_payload", null, null, null], - ["both1", null, "l_payload", null, null, null], - ["both1", 0, "l_payload", null, null, null], - ["both1", 42, "l_payload", null, null, null], - ["both2", null, "l_payload", null, null, null], - ["both2", 0, "l_payload", null, null, null], - ["both2", 42, "l_payload", null, null, null], - [null, null, null, null, null, "r_payload"], - [null, null, null, null, 0, "r_payload"], - [null, null, null, null, 42, "r_payload"], - [null, null, null, "both1", null, "r_payload"], - [null, null, null, "both1", 0, "r_payload"], - [null, null, null, "both1", 42, "r_payload"], - [null, null, null, "both2", null, "r_payload"], - [null, null, null, "both2", 0, "r_payload"], - [null, null, null, "both2", 42, "r_payload"], - [null, null, null, "right_only", null, "r_payload"], - [null, null, null, "right_only", 0, "r_payload"], - [null, null, null, "right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Left semi join. - JoinType join_type = JoinType::LEFT_SEMI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Left anti join. - JoinType join_type = JoinType::LEFT_ANTI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload"], - [null, 0, "l_payload"], - [null, 42, "l_payload"], - ["left_only", null, "l_payload"], - ["left_only", 0, "l_payload"], - ["left_only", 42, "l_payload"], - ["both1", null, "l_payload"], - ["both1", 0, "l_payload"], - ["both1", 42, "l_payload"], - ["both2", null, "l_payload"], - ["both2", 0, "l_payload"], - ["both2", 42, "l_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Right semi join. - JoinType join_type = JoinType::RIGHT_SEMI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Right anti join. - JoinType join_type = JoinType::RIGHT_ANTI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - [null, null, "r_payload"], - [null, 0, "r_payload"], - [null, 42, "r_payload"], - ["both1", null, "r_payload"], - ["both1", 0, "r_payload"], - ["both1", 42, "r_payload"], - ["both2", null, "r_payload"], - ["both2", 0, "r_payload"], - ["both2", 42, "r_payload"], - ["right_only", null, "r_payload"], - ["right_only", 0, "r_payload"], - ["right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - } - } - - { - // Non-trivial filters referring left columns only. - for (Expression filter : {equal(field_ref("l_filter"), literal(42)), - not_equal(literal(0), field_ref("l_filter"))}) { - std::vector left_keys{"l_key"}, right_keys{"r_key"}; - { - // Inner join. - JoinType join_type = JoinType::INNER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - ["both1", 42, "l_payload", "both1", null, "r_payload"], - ["both1", 42, "l_payload", "both1", 0, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", 42, "l_payload", "both2", null, "r_payload"], - ["both2", 42, "l_payload", "both2", 0, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Left outer join. - JoinType join_type = JoinType::LEFT_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload", null, null, null], - [null, 0, "l_payload", null, null, null], - [null, 42, "l_payload", null, null, null], - ["left_only", null, "l_payload", null, null, null], - ["left_only", 0, "l_payload", null, null, null], - ["left_only", 42, "l_payload", null, null, null], - ["both1", null, "l_payload", null, null, null], - ["both1", 0, "l_payload", null, null, null], - ["both2", null, "l_payload", null, null, null], - ["both2", 0, "l_payload", null, null, null], - ["both1", 42, "l_payload", "both1", null, "r_payload"], - ["both1", 42, "l_payload", "both1", 0, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", 42, "l_payload", "both2", null, "r_payload"], - ["both2", 42, "l_payload", "both2", 0, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Right outer join. - JoinType join_type = JoinType::RIGHT_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - ["both1", 42, "l_payload", "both1", null, "r_payload"], - ["both1", 42, "l_payload", "both1", 0, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", 42, "l_payload", "both2", null, "r_payload"], - ["both2", 42, "l_payload", "both2", 0, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"], - [null, null, null, null, null, "r_payload"], - [null, null, null, null, 0, "r_payload"], - [null, null, null, null, 42, "r_payload"], - [null, null, null, "right_only", null, "r_payload"], - [null, null, null, "right_only", 0, "r_payload"], - [null, null, null, "right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Full outer join. - JoinType join_type = JoinType::FULL_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload", null, null, null], - [null, 0, "l_payload", null, null, null], - [null, 42, "l_payload", null, null, null], - ["left_only", null, "l_payload", null, null, null], - ["left_only", 0, "l_payload", null, null, null], - ["left_only", 42, "l_payload", null, null, null], - ["both1", null, "l_payload", null, null, null], - ["both1", 0, "l_payload", null, null, null], - ["both2", null, "l_payload", null, null, null], - ["both2", 0, "l_payload", null, null, null], - ["both1", 42, "l_payload", "both1", null, "r_payload"], - ["both1", 42, "l_payload", "both1", 0, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", 42, "l_payload", "both2", null, "r_payload"], - ["both2", 42, "l_payload", "both2", 0, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"], - [null, null, null, null, null, "r_payload"], - [null, null, null, null, 0, "r_payload"], - [null, null, null, null, 42, "r_payload"], - [null, null, null, "right_only", null, "r_payload"], - [null, null, null, "right_only", 0, "r_payload"], - [null, null, null, "right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Left semi join. - JoinType join_type = JoinType::LEFT_SEMI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - ["both1", 42, "l_payload"], - ["both2", 42, "l_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Left anti join. - JoinType join_type = JoinType::LEFT_ANTI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload"], - [null, 0, "l_payload"], - [null, 42, "l_payload"], - ["left_only", null, "l_payload"], - ["left_only", 0, "l_payload"], - ["left_only", 42, "l_payload"], - ["both1", null, "l_payload"], - ["both1", 0, "l_payload"], - ["both2", null, "l_payload"], - ["both2", 0, "l_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Right semi join. - JoinType join_type = JoinType::RIGHT_SEMI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - ["both1", null, "r_payload"], - ["both1", 0, "r_payload"], - ["both1", 42, "r_payload"], - ["both2", null, "r_payload"], - ["both2", 0, "r_payload"], - ["both2", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Right anti join. - JoinType join_type = JoinType::RIGHT_ANTI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - [null, null, "r_payload"], - [null, 0, "r_payload"], - [null, 42, "r_payload"], - ["right_only", null, "r_payload"], - ["right_only", 0, "r_payload"], - ["right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - } - } - - { - // Non-trivial filters referring right columns only. - for (Expression filter : {equal(field_ref("r_filter"), literal(42)), - not_equal(literal(0), field_ref("r_filter"))}) { - std::vector left_keys{"l_key"}, right_keys{"r_key"}; - { - // Inner join. - JoinType join_type = JoinType::INNER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - ["both1", null, "l_payload", "both1", 42, "r_payload"], - ["both1", 0, "l_payload", "both1", 42, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", null, "l_payload", "both2", 42, "r_payload"], - ["both2", 0, "l_payload", "both2", 42, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Left outer join. - JoinType join_type = JoinType::LEFT_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload", null, null, null], - [null, 0, "l_payload", null, null, null], - [null, 42, "l_payload", null, null, null], - ["left_only", null, "l_payload", null, null, null], - ["left_only", 0, "l_payload", null, null, null], - ["left_only", 42, "l_payload", null, null, null], - ["both1", null, "l_payload", "both1", 42, "r_payload"], - ["both1", 0, "l_payload", "both1", 42, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", null, "l_payload", "both2", 42, "r_payload"], - ["both2", 0, "l_payload", "both2", 42, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Right outer join. - JoinType join_type = JoinType::RIGHT_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - ["both1", null, "l_payload", "both1", 42, "r_payload"], - ["both1", 0, "l_payload", "both1", 42, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", null, "l_payload", "both2", 42, "r_payload"], - ["both2", 0, "l_payload", "both2", 42, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"], - [null, null, null, "both1", null, "r_payload"], - [null, null, null, "both1", 0, "r_payload"], - [null, null, null, "both2", null, "r_payload"], - [null, null, null, "both2", 0, "r_payload"], - [null, null, null, null, null, "r_payload"], - [null, null, null, null, 0, "r_payload"], - [null, null, null, null, 42, "r_payload"], - [null, null, null, "right_only", null, "r_payload"], - [null, null, null, "right_only", 0, "r_payload"], - [null, null, null, "right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Full outer join. - JoinType join_type = JoinType::FULL_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload", null, null, null], - [null, 0, "l_payload", null, null, null], - [null, 42, "l_payload", null, null, null], - ["left_only", null, "l_payload", null, null, null], - ["left_only", 0, "l_payload", null, null, null], - ["left_only", 42, "l_payload", null, null, null], - ["both1", null, "l_payload", "both1", 42, "r_payload"], - ["both1", 0, "l_payload", "both1", 42, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", null, "l_payload", "both2", 42, "r_payload"], - ["both2", 0, "l_payload", "both2", 42, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"], - [null, null, null, "both1", null, "r_payload"], - [null, null, null, "both1", 0, "r_payload"], - [null, null, null, "both2", null, "r_payload"], - [null, null, null, "both2", 0, "r_payload"], - [null, null, null, null, null, "r_payload"], - [null, null, null, null, 0, "r_payload"], - [null, null, null, null, 42, "r_payload"], - [null, null, null, "right_only", null, "r_payload"], - [null, null, null, "right_only", 0, "r_payload"], - [null, null, null, "right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Left semi join. - JoinType join_type = JoinType::LEFT_SEMI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - ["both1", null, "l_payload"], - ["both1", 0, "l_payload"], - ["both1", 42, "l_payload"], - ["both2", null, "l_payload"], - ["both2", 0, "l_payload"], - ["both2", 42, "l_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Left anti join. - JoinType join_type = JoinType::LEFT_ANTI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload"], - [null, 0, "l_payload"], - [null, 42, "l_payload"], - ["left_only", null, "l_payload"], - ["left_only", 0, "l_payload"], - ["left_only", 42, "l_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } + for (bool parallel : {false, true}) { + SCOPED_TRACE(parallel ? "parallel/merged" : "serial"); - { - // Right semi join. - JoinType join_type = JoinType::RIGHT_SEMI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - ["both1", 42, "r_payload"], - ["both2", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } + BatchesWithSchema input_left; + input_left.batches = {ExecBatchFromJSON({int32(), utf8()}, R"([ + [1, "alpha"] + ])")}; + input_left.schema = schema({field("l1", int32()), field("l_str", utf8())}); - { - // Right anti join. - JoinType join_type = JoinType::RIGHT_ANTI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - [null, null, "r_payload"], - [null, 0, "r_payload"], - [null, 42, "r_payload"], - ["both1", null, "r_payload"], - ["both1", 0, "r_payload"], - ["both2", null, "r_payload"], - ["both2", 0, "r_payload"], - ["right_only", null, "r_payload"], - ["right_only", 0, "r_payload"], - ["right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - } - } + BatchesWithSchema input_right; + input_right.batches = {ExecBatchFromJSON({int32(), utf8()}, R"([ + [1, "alpha"] + ])")}; + input_right.schema = schema({field("r1", int32()), field("r_str", utf8())}); - { - // Non-trivial filters referring both left and right columns. - for (Expression filter : - {equal(field_ref("l_filter"), field_ref("r_filter")), - equal(call("subtract", {field_ref("l_filter"), field_ref("r_filter")}), - literal(0))}) { - std::vector left_keys{"l_key"}, right_keys{"r_key"}; - { - // Inner join. - JoinType join_type = JoinType::INNER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - ["both1", 0, "l_payload", "both1", 0, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", 0, "l_payload", "both2", 0, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } + auto exec_ctx = std::make_unique( + default_memory_pool(), + parallel ? arrow::internal::GetCpuThreadPool() : nullptr); - { - // Left outer join. - JoinType join_type = JoinType::LEFT_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload", null, null, null], - [null, 0, "l_payload", null, null, null], - [null, 42, "l_payload", null, null, null], - ["left_only", null, "l_payload", null, null, null], - ["left_only", 0, "l_payload", null, null, null], - ["left_only", 42, "l_payload", null, null, null], - ["both1", null, "l_payload", null, null, null], - ["both2", null, "l_payload", null, null, null], - ["both1", 0, "l_payload", "both1", 0, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", 0, "l_payload", "both2", 0, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } + Declaration left{ + "source", + SourceNodeOptions{input_left.schema, input_left.gen(parallel, /*slow=*/false)}}; + Declaration right{"source", + SourceNodeOptions{input_right.schema, + input_right.gen(parallel, /*slow=*/false)}}; - { - // Right outer join. - JoinType join_type = JoinType::RIGHT_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - ["both1", 0, "l_payload", "both1", 0, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", 0, "l_payload", "both2", 0, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"], - [null, null, null, null, null, "r_payload"], - [null, null, null, null, 0, "r_payload"], - [null, null, null, null, 42, "r_payload"], - [null, null, null, "both1", null, "r_payload"], - [null, null, null, "both2", null, "r_payload"], - [null, null, null, "right_only", null, "r_payload"], - [null, null, null, "right_only", 0, "r_payload"], - [null, null, null, "right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } + HashJoinNodeOptions join_opts{ + JoinType::INNER, + /*left_keys=*/{"l_str"}, + /*right_keys=*/{"r_str"}, filters[test_id], "l_", "r_"}; - { - // Full outer join. - JoinType join_type = JoinType::FULL_OUTER; - auto expected = - ExecBatchFromJSON({utf8(), int32(), utf8(), utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload", null, null, null], - [null, 0, "l_payload", null, null, null], - [null, 42, "l_payload", null, null, null], - ["left_only", null, "l_payload", null, null, null], - ["left_only", 0, "l_payload", null, null, null], - ["left_only", 42, "l_payload", null, null, null], - ["both1", null, "l_payload", null, null, null], - ["both2", null, "l_payload", null, null, null], - ["both1", 0, "l_payload", "both1", 0, "r_payload"], - ["both1", 42, "l_payload", "both1", 42, "r_payload"], - ["both2", 0, "l_payload", "both2", 0, "r_payload"], - ["both2", 42, "l_payload", "both2", 42, "r_payload"], - [null, null, null, null, null, "r_payload"], - [null, null, null, null, 0, "r_payload"], - [null, null, null, null, 42, "r_payload"], - [null, null, null, "both1", null, "r_payload"], - [null, null, null, "both2", null, "r_payload"], - [null, null, null, "right_only", null, "r_payload"], - [null, null, null, "right_only", 0, "r_payload"], - [null, null, null, "right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } + Declaration join{"hashjoin", {std::move(left), std::move(right)}, join_opts}; - { - // Left semi join. - JoinType join_type = JoinType::LEFT_SEMI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - ["both1", 0, "l_payload"], - ["both1", 42, "l_payload"], - ["both2", 0, "l_payload"], - ["both2", 42, "l_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } + ASSERT_OK_AND_ASSIGN(auto result, + DeclarationToExecBatches(std::move(join), parallel)); - { - // Left anti join. - JoinType join_type = JoinType::LEFT_ANTI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - [null, null, "l_payload"], - [null, 0, "l_payload"], - [null, 42, "l_payload"], - ["left_only", null, "l_payload"], - ["left_only", 0, "l_payload"], - ["left_only", 42, "l_payload"], - ["both1", null, "l_payload"], - ["both2", null, "l_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } + std::vector expected = {ExecBatchFromJSON( + {int32(), utf8(), int32(), utf8()}, expected_strings[test_id])}; - { - // Right semi join. - JoinType join_type = JoinType::RIGHT_SEMI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - ["both1", 0, "r_payload"], - ["both1", 42, "r_payload"], - ["both2", 0, "r_payload"], - ["both2", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } - - { - // Right anti join. - JoinType join_type = JoinType::RIGHT_ANTI; - auto expected = ExecBatchFromJSON({utf8(), int32(), utf8()}, R"([ - [null, null, "r_payload"], - [null, 0, "r_payload"], - [null, 42, "r_payload"], - ["both1", null, "r_payload"], - ["both2", null, "r_payload"], - ["right_only", null, "r_payload"], - ["right_only", 0, "r_payload"], - ["right_only", 42, "r_payload"]])"); - for (const auto& projector : projectors) { - runner.Run(join_type, left_keys, right_keys, projector.LeftOutput(join_type), - projector.RightOutput(join_type), filter, - {projector.Project(join_type, expected)}); - } - } + AssertExecBatchesEqualIgnoringOrder(result.schema, result.batches, expected); } } } @@ -3208,242 +2143,5 @@ TEST(HashJoin, ChainedIntegerHashJoins) { } } -// Test that a large number of joins don't overflow the temp vector stack, like GH-39582 -// and GH-39951. -TEST(HashJoin, ManyJoins) { - // The idea of this case is to create many nested join nodes that may possibly cause - // recursive usage of temp vector stack. To make sure that the recursion happens: - // 1. A left-deep join tree is created so that the left-most (the final probe side) - // table will go through all the hash tables from the right side. - // 2. Left-outer join is used so that every join will increase the cardinality. - // 3. The left-most table contains rows of unique integers from 0 to N. - // 4. Each right table at level i contains two rows of integer i, so that the probing of - // each level will increase the result by one row. - // 5. The left-most table is a single batch of enough rows, so that at each level, the - // probing will accumulate enough result rows to have to output to the subsequent level - // before finishing the current batch (releasing the buffer allocated on the temp vector - // stack), which is essentially the recursive usage of the temp vector stack. - - // A fair number of joins to guarantee temp vector stack overflow before GH-41335. - const int num_joins = 16; - - // `ExecBatchBuilder::num_rows_max()` is the number of rows for swiss join to accumulate - // before outputting. - const int num_left_rows = ExecBatchBuilder::num_rows_max(); - ASSERT_OK_AND_ASSIGN( - auto left_batches, - MakeIntegerBatches({[](int row_id) -> int64_t { return row_id; }}, - schema({field("l_key", int32())}), - /*num_batches=*/1, /*batch_size=*/num_left_rows)); - Declaration root{"exec_batch_source", - ExecBatchSourceNodeOptions(std::move(left_batches.schema), - std::move(left_batches.batches))}; - - HashJoinNodeOptions join_opts(JoinType::LEFT_OUTER, /*left_keys=*/{"l_key"}, - /*right_keys=*/{"r_key"}); - - for (int i = 0; i < num_joins; ++i) { - ASSERT_OK_AND_ASSIGN(auto right_batches, - MakeIntegerBatches({[i](int) -> int64_t { return i; }}, - schema({field("r_key", int32())}), - /*num_batches=*/1, /*batch_size=*/2)); - Declaration table{"exec_batch_source", - ExecBatchSourceNodeOptions(std::move(right_batches.schema), - std::move(right_batches.batches))}; - - Declaration new_root{"hashjoin", {std::move(root), std::move(table)}, join_opts}; - root = std::move(new_root); - } - - ASSERT_OK_AND_ASSIGN(std::ignore, DeclarationToTable(std::move(root))); -} - -namespace { - -void AssertRowCountEq(Declaration source, int64_t expected) { - Declaration count{"aggregate", - {std::move(source)}, - AggregateNodeOptions{/*aggregates=*/{{"count_all", "count(*)"}}}}; - ASSERT_OK_AND_ASSIGN(auto batches, DeclarationToExecBatches(std::move(count))); - ASSERT_EQ(batches.batches.size(), 1); - ASSERT_EQ(batches.batches[0].values.size(), 1); - ASSERT_TRUE(batches.batches[0].values[0].is_scalar()); - ASSERT_EQ(batches.batches[0].values[0].scalar()->type->id(), Type::INT64); - ASSERT_TRUE(batches.batches[0].values[0].scalar_as().is_valid); - ASSERT_EQ(batches.batches[0].values[0].scalar_as().value, expected); -} - -} // namespace - -// GH-43495: Test that both the key and the payload of the right side (the build side) are -// fixed length and larger than 4GB, and the 64-bit offset in the hash table can handle it -// correctly. -TEST(HashJoin, LARGE_MEMORY_TEST(BuildSideOver4GBFixedLength)) { - constexpr int64_t k5GB = 5ll * 1024 * 1024 * 1024; - constexpr int fixed_length = 128; - const auto type = fixed_size_binary(fixed_length); - constexpr uint8_t byte_no_match_min = static_cast('A'); - constexpr uint8_t byte_no_match_max = static_cast('y'); - constexpr uint8_t byte_match = static_cast('z'); - const auto value_match = - std::make_shared(std::string(fixed_length, byte_match)); - constexpr int16_t num_rows_per_batch_left = 128; - constexpr int16_t num_rows_per_batch_right = 4096; - const int64_t num_batches_left = 8; - const int64_t num_batches_right = - k5GB / (num_rows_per_batch_right * type->byte_width()); - - // Left side composed of num_batches_left identical batches of num_rows_per_batch_left - // rows of value_match-es. - BatchesWithSchema batches_left; - { - // A column with num_rows_per_batch_left value_match-es. - ASSERT_OK_AND_ASSIGN(auto column, - Constant(value_match)->Generate(num_rows_per_batch_left)); - - // Use the column as both the key and the payload. - ExecBatch batch({column, column}, num_rows_per_batch_left); - batches_left = - BatchesWithSchema{std::vector(num_batches_left, std::move(batch)), - schema({field("l_key", type), field("l_payload", type)})}; - } - - // Right side composed of num_batches_right identical batches of - // num_rows_per_batch_right rows containing only 1 value_match. - BatchesWithSchema batches_right; - { - // A column with (num_rows_per_batch_right - 1) non-value_match-es (possibly null) and - // 1 value_match. - auto non_matches = RandomArrayGenerator(kSeedMax).FixedSizeBinary( - num_rows_per_batch_right - 1, fixed_length, - /*null_probability =*/0.01, /*min_byte=*/byte_no_match_min, - /*max_byte=*/byte_no_match_max); - ASSERT_OK_AND_ASSIGN(auto match, Constant(value_match)->Generate(1)); - ASSERT_OK_AND_ASSIGN(auto column, Concatenate({non_matches, match})); - - // Use the column as both the key and the payload. - ExecBatch batch({column, column}, num_rows_per_batch_right); - batches_right = - BatchesWithSchema{std::vector(num_batches_right, std::move(batch)), - schema({field("r_key", type), field("r_payload", type)})}; - } - - Declaration left{"exec_batch_source", - ExecBatchSourceNodeOptions(std::move(batches_left.schema), - std::move(batches_left.batches))}; - - Declaration right{"exec_batch_source", - ExecBatchSourceNodeOptions(std::move(batches_right.schema), - std::move(batches_right.batches))}; - - HashJoinNodeOptions join_opts(JoinType::INNER, /*left_keys=*/{"l_key"}, - /*right_keys=*/{"r_key"}); - Declaration join{"hashjoin", {std::move(left), std::move(right)}, join_opts}; - - ASSERT_OK_AND_ASSIGN(auto batches_result, DeclarationToExecBatches(std::move(join))); - Declaration result{"exec_batch_source", - ExecBatchSourceNodeOptions(std::move(batches_result.schema), - std::move(batches_result.batches))}; - - // The row count of hash join should be (number of value_match-es in left side) * - // (number of value_match-es in right side). - AssertRowCountEq(result, - num_batches_left * num_rows_per_batch_left * num_batches_right); - - // All rows should be value_match-es. - auto predicate = and_({equal(field_ref("l_key"), literal(value_match)), - equal(field_ref("l_payload"), literal(value_match)), - equal(field_ref("r_key"), literal(value_match)), - equal(field_ref("r_payload"), literal(value_match))}); - Declaration filter{"filter", {result}, FilterNodeOptions{std::move(predicate)}}; - AssertRowCountEq(std::move(filter), - num_batches_left * num_rows_per_batch_left * num_batches_right); -} - -// GH-43495: Test that both the key and the payload of the right side (the build side) are -// var length and larger than 4GB, and the 64-bit offset in the hash table can handle it -// correctly. -TEST(HashJoin, LARGE_MEMORY_TEST(BuildSideOver4GBVarLength)) { - constexpr int64_t k5GB = 5ll * 1024 * 1024 * 1024; - const auto type = utf8(); - constexpr int value_no_match_length_min = 128; - constexpr int value_no_match_length_max = 129; - constexpr int value_match_length = 130; - const auto value_match = - std::make_shared(std::string(value_match_length, 'X')); - constexpr int16_t num_rows_per_batch_left = 128; - constexpr int16_t num_rows_per_batch_right = 4096; - const int64_t num_batches_left = 8; - const int64_t num_batches_right = - k5GB / (num_rows_per_batch_right * value_no_match_length_min); - - // Left side composed of num_batches_left identical batches of num_rows_per_batch_left - // rows of value_match-es. - BatchesWithSchema batches_left; - { - // A column with num_rows_per_batch_left value_match-es. - ASSERT_OK_AND_ASSIGN(auto column, - Constant(value_match)->Generate(num_rows_per_batch_left)); - - // Use the column as both the key and the payload. - ExecBatch batch({column, column}, num_rows_per_batch_left); - batches_left = - BatchesWithSchema{std::vector(num_batches_left, std::move(batch)), - schema({field("l_key", type), field("l_payload", type)})}; - } - - // Right side composed of num_batches_right identical batches of - // num_rows_per_batch_right rows containing only 1 value_match. - BatchesWithSchema batches_right; - { - // A column with (num_rows_per_batch_right - 1) non-value_match-es (possibly null) and - // 1 value_match. - auto non_matches = - RandomArrayGenerator(kSeedMax).String(num_rows_per_batch_right - 1, - /*min_length=*/value_no_match_length_min, - /*max_length=*/value_no_match_length_max, - /*null_probability =*/0.01); - ASSERT_OK_AND_ASSIGN(auto match, Constant(value_match)->Generate(1)); - ASSERT_OK_AND_ASSIGN(auto column, Concatenate({non_matches, match})); - - // Use the column as both the key and the payload. - ExecBatch batch({column, column}, num_rows_per_batch_right); - batches_right = - BatchesWithSchema{std::vector(num_batches_right, std::move(batch)), - schema({field("r_key", type), field("r_payload", type)})}; - } - - Declaration left{"exec_batch_source", - ExecBatchSourceNodeOptions(std::move(batches_left.schema), - std::move(batches_left.batches))}; - - Declaration right{"exec_batch_source", - ExecBatchSourceNodeOptions(std::move(batches_right.schema), - std::move(batches_right.batches))}; - - HashJoinNodeOptions join_opts(JoinType::INNER, /*left_keys=*/{"l_key"}, - /*right_keys=*/{"r_key"}); - Declaration join{"hashjoin", {std::move(left), std::move(right)}, join_opts}; - - ASSERT_OK_AND_ASSIGN(auto batches_result, DeclarationToExecBatches(std::move(join))); - Declaration result{"exec_batch_source", - ExecBatchSourceNodeOptions(std::move(batches_result.schema), - std::move(batches_result.batches))}; - - // The row count of hash join should be (number of value_match-es in left side) * - // (number of value_match-es in right side). - AssertRowCountEq(result, - num_batches_left * num_rows_per_batch_left * num_batches_right); - - // All rows should be value_match-es. - auto predicate = and_({equal(field_ref("l_key"), literal(value_match)), - equal(field_ref("l_payload"), literal(value_match)), - equal(field_ref("r_key"), literal(value_match)), - equal(field_ref("r_payload"), literal(value_match))}); - Declaration filter{"filter", {result}, FilterNodeOptions{std::move(predicate)}}; - AssertRowCountEq(std::move(filter), - num_batches_left * num_rows_per_batch_left * num_batches_right); -} - } // namespace acero } // namespace arrow diff --git a/cpp/src/arrow/acero/options.h b/cpp/src/arrow/acero/options.h index 4447e9c67a1..1ede3fbfc8e 100644 --- a/cpp/src/arrow/acero/options.h +++ b/cpp/src/arrow/acero/options.h @@ -105,8 +105,8 @@ class ARROW_ACERO_EXPORT SourceNodeOptions : public ExecNodeOptions { /// \brief a node that generates data from a table already loaded in memory /// /// The table source node will slice off chunks, defined by `max_batch_size` -/// for parallel processing. The table source node extends source node and so these -/// chunks will be iteratively processed in small batches. \see SourceNodeOptions +/// for parallel processing. The source node extends source node and so these +/// chunks will be iteratively processed in small batches. \see SourceNode /// for details. class ARROW_ACERO_EXPORT TableSourceNodeOptions : public ExecNodeOptions { public: diff --git a/cpp/src/arrow/acero/order_by_impl.cc b/cpp/src/arrow/acero/order_by_impl.cc index 1165799fc66..2c624f6ab89 100644 --- a/cpp/src/arrow/acero/order_by_impl.cc +++ b/cpp/src/arrow/acero/order_by_impl.cc @@ -93,14 +93,14 @@ Result> OrderByImpl::MakeSort( ExecContext* ctx, const std::shared_ptr& output_schema, const SortOptions& options) { std::unique_ptr impl{new SortBasicImpl(ctx, output_schema, options)}; - return impl; + return std::move(impl); } Result> OrderByImpl::MakeSelectK( ExecContext* ctx, const std::shared_ptr& output_schema, const SelectKOptions& options) { std::unique_ptr impl{new SelectKBasicImpl(ctx, output_schema, options)}; - return impl; + return std::move(impl); } } // namespace acero diff --git a/cpp/src/arrow/acero/query_context.cc b/cpp/src/arrow/acero/query_context.cc index 18beb19ab7f..9f838508fcd 100644 --- a/cpp/src/arrow/acero/query_context.cc +++ b/cpp/src/arrow/acero/query_context.cc @@ -40,7 +40,8 @@ QueryContext::QueryContext(QueryOptions opts, ExecContext exec_context) const CpuInfo* QueryContext::cpu_info() const { return CpuInfo::GetInstance(); } int64_t QueryContext::hardware_flags() const { return cpu_info()->hardware_flags(); } -Status QueryContext::Init(util::AsyncTaskScheduler* scheduler) { +Status QueryContext::Init(size_t max_num_threads, util::AsyncTaskScheduler* scheduler) { + tld_.resize(max_num_threads); async_scheduler_ = scheduler; return Status::OK(); } @@ -49,6 +50,15 @@ size_t QueryContext::GetThreadIndex() { return thread_indexer_(); } size_t QueryContext::max_concurrency() const { return thread_indexer_.Capacity(); } +Result QueryContext::GetTempStack(size_t thread_index) { + if (!tld_[thread_index].is_init) { + RETURN_NOT_OK(tld_[thread_index].stack.Init( + memory_pool(), 8 * util::MiniBatch::kMiniBatchLength * sizeof(uint64_t))); + tld_[thread_index].is_init = true; + } + return &tld_[thread_index].stack; +} + Result> QueryContext::BeginExternalTask(std::string_view name) { Future<> completion_future = Future<>::Make(); if (async_scheduler_->AddSimpleTask([completion_future] { return completion_future; }, diff --git a/cpp/src/arrow/acero/query_context.h b/cpp/src/arrow/acero/query_context.h index 3eff2994398..9ea11679cba 100644 --- a/cpp/src/arrow/acero/query_context.h +++ b/cpp/src/arrow/acero/query_context.h @@ -38,7 +38,7 @@ class ARROW_ACERO_EXPORT QueryContext { QueryContext(QueryOptions opts = {}, ExecContext exec_context = *default_exec_context()); - Status Init(arrow::util::AsyncTaskScheduler* scheduler); + Status Init(size_t max_num_threads, arrow::util::AsyncTaskScheduler* scheduler); const ::arrow::internal::CpuInfo* cpu_info() const; int64_t hardware_flags() const; @@ -52,6 +52,7 @@ class ARROW_ACERO_EXPORT QueryContext { size_t GetThreadIndex(); size_t max_concurrency() const; + Result GetTempStack(size_t thread_index); /// \brief Start an external task /// @@ -144,6 +145,11 @@ class ARROW_ACERO_EXPORT QueryContext { std::unique_ptr task_scheduler_ = TaskScheduler::Make(); ThreadIndexer thread_indexer_; + struct ThreadLocalData { + bool is_init = false; + arrow::util::TempVectorStack stack; + }; + std::vector tld_; std::atomic in_flight_bytes_to_disk_{0}; }; diff --git a/cpp/src/arrow/acero/schema_util.h b/cpp/src/arrow/acero/schema_util.h index db3076a5884..6760022feb4 100644 --- a/cpp/src/arrow/acero/schema_util.h +++ b/cpp/src/arrow/acero/schema_util.h @@ -17,13 +17,13 @@ #pragma once -#include #include #include #include #include -#include "arrow/type.h" // for DataType, FieldRef, Field and Schema +#include "arrow/compute/light_array.h" // for KeyColumnMetadata +#include "arrow/type.h" // for DataType, FieldRef, Field and Schema namespace arrow { @@ -47,8 +47,8 @@ struct SchemaProjectionMap { const int* source_to_base; const int* base_to_target; inline int get(int i) const { - assert(i >= 0 && i < num_cols); - assert(source_to_base[i] != kMissingField); + ARROW_DCHECK(i >= 0 && i < num_cols); + ARROW_DCHECK(source_to_base[i] != kMissingField); return base_to_target[source_to_base[i]]; } }; @@ -66,7 +66,7 @@ class SchemaProjectionMaps { Status Init(ProjectionIdEnum full_schema_handle, const Schema& schema, const std::vector& projection_handles, const std::vector*>& projections) { - assert(projection_handles.size() == projections.size()); + ARROW_DCHECK(projection_handles.size() == projections.size()); ARROW_RETURN_NOT_OK(RegisterSchema(full_schema_handle, schema)); for (size_t i = 0; i < projections.size(); ++i) { ARROW_RETURN_NOT_OK( @@ -174,7 +174,7 @@ class SchemaProjectionMaps { } } // We should never get here - assert(false); + ARROW_DCHECK(false); return -1; } @@ -207,7 +207,7 @@ class SchemaProjectionMaps { break; } } - assert(field_id != SchemaProjectionMap::kMissingField); + ARROW_DCHECK(field_id != SchemaProjectionMap::kMissingField); mapping[i] = field_id; inverse_mapping[field_id] = i; } diff --git a/cpp/src/arrow/acero/sink_node.cc b/cpp/src/arrow/acero/sink_node.cc index 66f447aa87f..4ab6b4537de 100644 --- a/cpp/src/arrow/acero/sink_node.cc +++ b/cpp/src/arrow/acero/sink_node.cc @@ -423,7 +423,6 @@ class ConsumingSinkNode : public ExecNode, std::atomic backpressure_counter_ = 0; std::unique_ptr sequencer_; }; - static Result MakeTableConsumingSinkNode(ExecPlan* plan, std::vector inputs, const ExecNodeOptions& options) { diff --git a/cpp/src/arrow/acero/sorted_merge_node.cc b/cpp/src/arrow/acero/sorted_merge_node.cc index 2845383cee9..4d4565a6bb5 100644 --- a/cpp/src/arrow/acero/sorted_merge_node.cc +++ b/cpp/src/arrow/acero/sorted_merge_node.cc @@ -28,7 +28,7 @@ #include "arrow/acero/options.h" #include "arrow/acero/query_context.h" #include "arrow/acero/time_series_util.h" -#include "arrow/acero/unmaterialized_table_internal.h" +#include "arrow/acero/unmaterialized_table.h" #include "arrow/acero/util.h" #include "arrow/array/builder_base.h" #include "arrow/result.h" @@ -262,22 +262,19 @@ class SortedMergeNode : public ExecNode { : ExecNode(plan, inputs, GetInputLabels(inputs), std::move(output_schema)), ordering_(std::move(new_ordering)), input_counter(inputs_.size()), - output_counter(inputs_.size()) -#ifdef ARROW_ENABLE_THREADING - , - process_thread() -#endif - { + output_counter(inputs_.size()), + process_thread() { SetLabel("sorted_merge"); } ~SortedMergeNode() override { - PushTask(kPoisonPill); -#ifdef ARROW_ENABLE_THREADING + process_queue.Push( + kPoisonPill); // poison pill + // We might create a temporary (such as to inspect the output + // schema), in which case there isn't anything to join if (process_thread.joinable()) { process_thread.join(); } -#endif } static arrow::Result Make( @@ -358,25 +355,10 @@ class SortedMergeNode : public ExecNode { // InputState's ConcurrentQueue manages locking input_counter[index] += rb->num_rows(); ARROW_RETURN_NOT_OK(state[index]->Push(rb)); - PushTask(kNewTask); + process_queue.Push(kNewTask); return Status::OK(); } - void PushTask(bool ok) { -#ifdef ARROW_ENABLE_THREADING - process_queue.Push(ok); -#else - if (process_task.is_finished()) { - return; - } - if (ok == kNewTask) { - PollOnce(); - } else { - EndFromProcessThread(); - } -#endif - } - arrow::Status InputFinished(arrow::acero::ExecNode* input, int total_batches) override { ARROW_DCHECK(std_has(inputs_, input)); { @@ -386,8 +368,7 @@ class SortedMergeNode : public ExecNode { state.at(k)->set_total_batches(total_batches); } // Trigger a final process call for stragglers - PushTask(kNewTask); - + process_queue.Push(kNewTask); return Status::OK(); } @@ -398,17 +379,13 @@ class SortedMergeNode : public ExecNode { // Plan has already aborted. Do not start process thread return Status::OK(); } -#ifdef ARROW_ENABLE_THREADING process_thread = std::thread(&SortedMergeNode::StartPoller, this); -#endif return Status::OK(); } arrow::Status StopProducingImpl() override { -#ifdef ARROW_ENABLE_THREADING process_queue.Clear(); -#endif - PushTask(kPoisonPill); + process_queue.Push(kPoisonPill); return Status::OK(); } @@ -431,7 +408,6 @@ class SortedMergeNode : public ExecNode { << input_counter[i] << " != " << output_counter[i]; } -#ifdef ARROW_ENABLE_THREADING ARROW_UNUSED( plan_->query_context()->executor()->Spawn([this, st = std::move(st)]() mutable { Defer cleanup([this, &st]() { process_task.MarkFinished(st); }); @@ -439,12 +415,6 @@ class SortedMergeNode : public ExecNode { st = output_->InputFinished(this, batches_produced); } })); -#else - process_task.MarkFinished(st); - if (st.ok()) { - st = output_->InputFinished(this, batches_produced); - } -#endif } bool CheckEnded() { @@ -582,7 +552,6 @@ class SortedMergeNode : public ExecNode { return true; } -#ifdef ARROW_ENABLE_THREADING void EmitBatches() { while (true) { // Implementation note: If the queue is empty, we will block here @@ -598,7 +567,6 @@ class SortedMergeNode : public ExecNode { /// The entry point for processThread static void StartPoller(SortedMergeNode* node) { node->EmitBatches(); } -#endif arrow::Ordering ordering_; @@ -615,13 +583,11 @@ class SortedMergeNode : public ExecNode { std::atomic batches_produced{0}; -#ifdef ARROW_ENABLE_THREADING // Queue to trigger processing of a given input. False acts as a poison pill ConcurrentQueue process_queue; // Once StartProducing is called, we initialize this thread to poll the // input states and emit batches std::thread process_thread; -#endif arrow::Future<> process_task; // Map arg index --> completion counter diff --git a/cpp/src/arrow/acero/swiss_join.cc b/cpp/src/arrow/acero/swiss_join.cc index 4d0c8187ac6..2f79ed299bb 100644 --- a/cpp/src/arrow/acero/swiss_join.cc +++ b/cpp/src/arrow/acero/swiss_join.cc @@ -24,10 +24,10 @@ #include "arrow/acero/swiss_join_internal.h" #include "arrow/acero/util.h" #include "arrow/array/util.h" // MakeArrayFromScalar -#include "arrow/compute/key_hash_internal.h" +#include "arrow/compute/kernels/row_encoder_internal.h" +#include "arrow/compute/key_hash.h" #include "arrow/compute/row/compare_internal.h" #include "arrow/compute/row/encode_internal.h" -#include "arrow/compute/row/row_encoder_internal.h" #include "arrow/util/bit_util.h" #include "arrow/util/bitmap_ops.h" #include "arrow/util/tracing_internal.h" @@ -122,7 +122,7 @@ void RowArrayAccessor::Visit(const RowTableImpl& rows, int column_id, int num_ro if (!is_fixed_length_column) { int varbinary_column_id = VarbinaryColumnId(rows.metadata(), column_id); const uint8_t* row_ptr_base = rows.data(2); - const RowTableImpl::offset_type* row_offsets = rows.offsets(); + const uint32_t* row_offsets = rows.offsets(); uint32_t field_offset_within_row, field_length; if (varbinary_column_id == 0) { @@ -173,7 +173,7 @@ void RowArrayAccessor::Visit(const RowTableImpl& rows, int column_id, int num_ro // Case 4: This is a fixed length column in a varying length row // const uint8_t* row_ptr_base = rows.data(2) + field_offset_within_row; - const RowTableImpl::offset_type* row_offsets = rows.offsets(); + const uint32_t* row_offsets = rows.offsets(); for (int i = 0; i < num_rows; ++i) { uint32_t row_id = row_ids[i]; const uint8_t* row_ptr = row_ptr_base + row_offsets[row_id]; @@ -473,10 +473,17 @@ Status RowArrayMerge::PrepareForMerge(RowArray* target, (*first_target_row_id)[sources.size()] = num_rows; } + if (num_bytes > std::numeric_limits::max()) { + return Status::Invalid( + "There are more than 2^32 bytes of key data. Acero cannot " + "process a join of this magnitude"); + } + // Allocate target memory // target->rows_.Clean(); - RETURN_NOT_OK(target->rows_.AppendEmpty(static_cast(num_rows), num_bytes)); + RETURN_NOT_OK(target->rows_.AppendEmpty(static_cast(num_rows), + static_cast(num_bytes))); // In case of varying length rows, // initialize the first row offset for each range of rows corresponding to a @@ -558,15 +565,15 @@ void RowArrayMerge::CopyVaryingLength(RowTableImpl* target, const RowTableImpl& int64_t first_target_row_offset, const int64_t* source_rows_permutation) { int64_t num_source_rows = source.length(); - RowTableImpl::offset_type* target_offsets = target->mutable_offsets(); - const RowTableImpl::offset_type* source_offsets = source.offsets(); + uint32_t* target_offsets = target->mutable_offsets(); + const uint32_t* source_offsets = source.offsets(); // Permutation of source rows is optional. // if (!source_rows_permutation) { int64_t target_row_offset = first_target_row_offset; for (int64_t i = 0; i < num_source_rows; ++i) { - target_offsets[first_target_row_id + i] = target_row_offset; + target_offsets[first_target_row_id + i] = static_cast(target_row_offset); target_row_offset += source_offsets[i + 1] - source_offsets[i]; } // We purposefully skip outputting of N+1 offset, to allow concurrent @@ -586,10 +593,7 @@ void RowArrayMerge::CopyVaryingLength(RowTableImpl* target, const RowTableImpl& int64_t source_row_id = source_rows_permutation[i]; const uint64_t* source_row_ptr = reinterpret_cast( source.data(2) + source_offsets[source_row_id]); - int64_t length = source_offsets[source_row_id + 1] - source_offsets[source_row_id]; - // Though the row offset is 64-bit, the length of a single row must be 32-bit as - // required by current row table implementation. - DCHECK_LE(length, std::numeric_limits::max()); + uint32_t length = source_offsets[source_row_id + 1] - source_offsets[source_row_id]; // Rows should be 64-bit aligned. // In that case we can copy them using a sequence of 64-bit read/writes. @@ -600,7 +604,7 @@ void RowArrayMerge::CopyVaryingLength(RowTableImpl* target, const RowTableImpl& *target_row_ptr++ = *source_row_ptr++; } - target_offsets[first_target_row_id + i] = target_row_offset; + target_offsets[first_target_row_id + i] = static_cast(target_row_offset); target_row_offset += length; } } @@ -1081,30 +1085,10 @@ void SwissTableForJoin::UpdateHasMatchForKeys(int64_t thread_id, int num_ids, if (num_ids == 0 || !bit_vector) { return; } - for (int ikey = 0; ikey < num_ids; ++ikey) { - // Mark payloads corresponding to this key in hash table as having a match. - // - uint32_t key_id = key_ids[ikey]; - uint32_t first_payload_for_key = key_to_payload() ? key_to_payload()[key_id] : key_id; - uint32_t last_payload_for_key = - key_to_payload() ? key_to_payload()[key_id + 1] - 1 : key_id; - for (uint32_t ipayload = first_payload_for_key; ipayload <= last_payload_for_key; - ++ipayload) { - bit_util::SetBit(bit_vector, ipayload); - } - } -} - -void SwissTableForJoin::UpdateHasMatchForPayloads(int64_t thread_id, int num_ids, - const uint32_t* payload_ids) { - uint8_t* bit_vector = local_has_match(thread_id); - if (num_ids == 0 || !bit_vector) { - return; - } for (int i = 0; i < num_ids; ++i) { - // Mark payload in hash table as having a match. + // Mark row in hash table as having a match // - bit_util::SetBit(bit_vector, payload_ids[i]); + bit_util::SetBit(bit_vector, key_ids[i]); } } @@ -1139,6 +1123,29 @@ uint32_t SwissTableForJoin::payload_id_to_key_id(uint32_t payload_id) const { return static_cast(first_greater - entries) - 1; } +void SwissTableForJoin::payload_ids_to_key_ids(int num_rows, const uint32_t* payload_ids, + uint32_t* key_ids) const { + if (num_rows == 0) { + return; + } + if (no_duplicate_keys_) { + memcpy(key_ids, payload_ids, num_rows * sizeof(uint32_t)); + return; + } + + const uint32_t* entries = key_to_payload(); + uint32_t key_id = payload_id_to_key_id(payload_ids[0]); + key_ids[0] = key_id; + for (int i = 1; i < num_rows; ++i) { + ARROW_DCHECK(payload_ids[i] > payload_ids[i - 1]); + while (entries[key_id + 1] <= payload_ids[i]) { + ++key_id; + ARROW_DCHECK(key_id < num_keys()); + } + key_ids[i] = key_id; + } +} + Status SwissTableForJoinBuild::Init(SwissTableForJoin* target, int dop, int64_t num_rows, bool reject_duplicate_keys, bool no_payload, const std::vector& key_types, @@ -1574,10 +1581,6 @@ Status JoinResultMaterialize::AppendProbeOnly(const ExecBatch& key_and_payload, int num_rows_to_append, const uint16_t* row_ids, int* num_rows_appended) { - if (num_rows_to_append == 0) { - *num_rows_appended = 0; - return Status::OK(); - } num_rows_to_append = std::min(ExecBatchBuilder::num_rows_max() - num_rows_, num_rows_to_append); if (HasProbeOutput()) { @@ -1604,10 +1607,6 @@ Status JoinResultMaterialize::AppendBuildOnly(int num_rows_to_append, const uint32_t* key_ids, const uint32_t* payload_ids, int* num_rows_appended) { - if (num_rows_to_append == 0) { - *num_rows_appended = 0; - return Status::OK(); - } num_rows_to_append = std::min(ExecBatchBuilder::num_rows_max() - num_rows_, num_rows_to_append); if (HasProbeOutput()) { @@ -1635,10 +1634,6 @@ Status JoinResultMaterialize::Append(const ExecBatch& key_and_payload, int num_rows_to_append, const uint16_t* row_ids, const uint32_t* key_ids, const uint32_t* payload_ids, int* num_rows_appended) { - if (num_rows_to_append == 0) { - *num_rows_appended = 0; - return Status::OK(); - } num_rows_to_append = std::min(ExecBatchBuilder::num_rows_max() - num_rows_, num_rows_to_append); if (HasProbeOutput()) { @@ -1796,7 +1791,7 @@ void JoinMatchIterator::SetLookupResult(int num_batch_rows, int start_batch_row, bool JoinMatchIterator::GetNextBatch(int num_rows_max, int* out_num_rows, uint16_t* batch_row_ids, uint32_t* key_ids, - uint32_t* payload_ids, int row_id_to_skip) { + uint32_t* payload_ids) { *out_num_rows = 0; if (no_duplicate_keys_) { @@ -1821,8 +1816,7 @@ bool JoinMatchIterator::GetNextBatch(int num_rows_max, int* out_num_rows, // matches to output. // while (current_row_ < num_batch_rows_ && *out_num_rows < num_rows_max) { - if (!bit_util::GetBit(batch_has_match_, current_row_) || - current_row_ == row_id_to_skip) { + if (!bit_util::GetBit(batch_has_match_, current_row_)) { ++current_row_; current_match_for_row_ = 0; continue; @@ -1861,420 +1855,14 @@ bool JoinMatchIterator::GetNextBatch(int num_rows_max, int* out_num_rows, return (*out_num_rows) > 0; } -namespace { - -// Given match_bitvector identifies that there is a match for row[batch_start_row + i] in -// given input batch if bit match_bitvector[i] == passing_bit. Collect all the passing row -// ids according to the given match_bitvector. -// -void CollectPassingBatchIds(int passing_bit, int64_t hardware_flags, int batch_start_row, - int num_batch_rows, const uint8_t* match_bitvector, - int* num_passing_ids, uint16_t* passing_batch_row_ids) { - arrow::util::bit_util::bits_to_indexes(passing_bit, hardware_flags, num_batch_rows, - match_bitvector, num_passing_ids, - passing_batch_row_ids); - // Add base batch row index. - // - for (int i = 0; i < *num_passing_ids; ++i) { - passing_batch_row_ids[i] += static_cast(batch_start_row); - } -} - -} // namespace - -void JoinResidualFilter::Init(Expression filter, QueryContext* ctx, MemoryPool* pool, - int64_t hardware_flags, - const HashJoinProjectionMaps* probe_schemas, - const HashJoinProjectionMaps* build_schemas, - SwissTableForJoin* hash_table) { - filter_ = std::move(filter); - ctx_ = ctx; - pool_ = pool; - hardware_flags_ = hardware_flags; - probe_schemas_ = probe_schemas; - build_schemas_ = build_schemas; - hash_table_ = hash_table; - - { - probe_filter_to_key_and_payload_.resize( - probe_schemas_->num_cols(HashJoinProjection::FILTER)); - int num_key_cols = probe_schemas_->num_cols(HashJoinProjection::KEY); - auto to_key = - probe_schemas_->map(HashJoinProjection::FILTER, HashJoinProjection::KEY); - auto to_payload = - probe_schemas_->map(HashJoinProjection::FILTER, HashJoinProjection::PAYLOAD); - for (int i = 0; static_cast(i) < probe_filter_to_key_and_payload_.size(); - ++i) { - if (auto idx = to_key.get(i); idx != SchemaProjectionMap::kMissingField) { - probe_filter_to_key_and_payload_[i] = idx; - } else if (idx = to_payload.get(i); idx != SchemaProjectionMap::kMissingField) { - probe_filter_to_key_and_payload_[i] = idx + num_key_cols; - } else { - ARROW_DCHECK(false); - } - } - } - - { - int num_columns = build_schemas_->num_cols(HashJoinProjection::FILTER); - auto to_key = - build_schemas_->map(HashJoinProjection::FILTER, HashJoinProjection::KEY); - auto to_payload = - build_schemas_->map(HashJoinProjection::FILTER, HashJoinProjection::PAYLOAD); - for (int i = 0; i < num_columns; ++i) { - if (to_key.get(i) != SchemaProjectionMap::kMissingField) { - num_build_keys_referred_++; - } else if (to_payload.get(i) != SchemaProjectionMap::kMissingField) { - num_build_payloads_referred_++; - } else { - ARROW_DCHECK(false); - } - } - } -} - -void JoinResidualFilter::OnBuildFinished() { - minibatch_size_ = hash_table_->keys()->swiss_table()->minibatch_size(); - build_keys_ = hash_table_->keys()->keys(); - build_payloads_ = hash_table_->payloads(); - key_to_payload_ = hash_table_->key_to_payload(); -} - -void JoinResidualFilter::InitFilterBitVector(int num_batch_rows, - uint8_t* filter_bitvector) { - std::memset(filter_bitvector, 0, bit_util::BytesForBits(num_batch_rows)); -} - -void JoinResidualFilter::UpdateFilterBitVector(int batch_start_row, int num_batch_rows, - const uint16_t* batch_row_ids, - uint8_t* filter_bitvector) { - for (int i = 0; i < num_batch_rows; ++i) { - int bit_idx = batch_row_ids[i] - batch_start_row; - bit_util::SetBitTo(filter_bitvector, bit_idx, 1); - } -} - -Status JoinResidualFilter::FilterLeftSemi(const ExecBatch& keypayload_batch, - int batch_start_row, int num_batch_rows, - const uint8_t* match_bitvector, - const uint32_t* key_ids, bool no_duplicate_keys, - arrow::util::TempVectorStack* temp_stack, - int* num_passing_ids, - uint16_t* passing_batch_row_ids) const { - if (filter_ == literal(true)) { - CollectPassingBatchIds(1, hardware_flags_, batch_start_row, num_batch_rows, - match_bitvector, num_passing_ids, passing_batch_row_ids); - return Status::OK(); - } - - *num_passing_ids = 0; - if (filter_.IsNullLiteral() || filter_ == literal(false)) { - return Status::OK(); - } - - if (num_build_keys_referred_ == 0 && num_build_payloads_referred_ == 0) { - // If filter refers no column in the right table, then we can directly filter on the - // left rows without inner matching and materializing the right rows. - // - CollectPassingBatchIds(1, hardware_flags_, batch_start_row, num_batch_rows, - match_bitvector, num_passing_ids, passing_batch_row_ids); - return FilterOneBatch(keypayload_batch, *num_passing_ids, passing_batch_row_ids, - /*key_ids_maybe_null=*/NULLPTR, - /*payload_ids_maybe_null=*/NULLPTR, - /*output_key_ids=*/false, - /*output_payload_ids=*/false, temp_stack, num_passing_ids); - } - - auto match_batch_row_ids_buf = - arrow::util::TempVectorHolder(temp_stack, minibatch_size_); - auto match_key_ids_buf = - arrow::util::TempVectorHolder(temp_stack, minibatch_size_); - auto match_payload_ids_buf = - arrow::util::TempVectorHolder(temp_stack, minibatch_size_); - - // Inner matching is necessary for non-trivial filter. Only until evaluating filter for - // all matches of the same row can we be sure that it's not passing (it could pass - // earlier though). - // - JoinMatchIterator match_iterator; - match_iterator.SetLookupResult(num_batch_rows, batch_start_row, match_bitvector, - key_ids, no_duplicate_keys, key_to_payload_); - int num_matches_next = 0; - // Used to not only collect distinct row ids, but also skip unecessary matches in the - // next batch. - // - int row_id_last = JoinMatchIterator::kInvalidRowId; - while (match_iterator.GetNextBatch(minibatch_size_, &num_matches_next, - match_batch_row_ids_buf.mutable_data(), - match_key_ids_buf.mutable_data(), - match_payload_ids_buf.mutable_data(), row_id_last)) { - int num_passing = 0; - RETURN_NOT_OK(FilterOneBatch( - keypayload_batch, num_matches_next, match_batch_row_ids_buf.mutable_data(), - match_key_ids_buf.mutable_data(), match_payload_ids_buf.mutable_data(), - /*output_key_ids=*/false, - /*output_payload_ids=*/false, temp_stack, &num_passing)); - // There may be multiple passing of a row in batch. Collect distinct row ids. - // - for (int ipassing = 0; ipassing < num_passing; ++ipassing) { - if (match_batch_row_ids_buf.mutable_data()[ipassing] == row_id_last) { - continue; - } - row_id_last = passing_batch_row_ids[*num_passing_ids] = - match_batch_row_ids_buf.mutable_data()[ipassing]; - ++(*num_passing_ids); - } - } - - return Status::OK(); -} - -Status JoinResidualFilter::FilterLeftAnti(const ExecBatch& keypayload_batch, - int batch_start_row, int num_batch_rows, - const uint8_t* match_bitvector, - const uint32_t* key_ids, bool no_duplicate_keys, - arrow::util::TempVectorStack* temp_stack, - int* num_passing_ids, - uint16_t* passing_batch_row_ids) const { - if (filter_ == literal(true)) { - CollectPassingBatchIds(0, hardware_flags_, batch_start_row, num_batch_rows, - match_bitvector, num_passing_ids, passing_batch_row_ids); - return Status::OK(); - } - - // Do FilterLeftSemi first. - // - *num_passing_ids = 0; - int num_semi_passing_ids = 0; - auto semi_passing_batch_row_ids = - arrow::util::TempVectorHolder(temp_stack, num_batch_rows); - RETURN_NOT_OK(FilterLeftSemi(keypayload_batch, batch_start_row, num_batch_rows, - match_bitvector, key_ids, no_duplicate_keys, temp_stack, - &num_semi_passing_ids, - semi_passing_batch_row_ids.mutable_data())); - - // Then collect non-passing row ids of FilterLeftSemi. - // - int isemi = 0; - for (int irow = batch_start_row; irow < batch_start_row + num_batch_rows; ++irow) { - while (isemi < num_semi_passing_ids && - semi_passing_batch_row_ids.mutable_data()[isemi] < irow) { - ++isemi; - } - if (isemi == num_semi_passing_ids || - semi_passing_batch_row_ids.mutable_data()[isemi] != irow) { - passing_batch_row_ids[*num_passing_ids] = static_cast(irow); - ++(*num_passing_ids); - } - } - - return Status::OK(); -} - -Status JoinResidualFilter::FilterRightSemiAnti( - int64_t thread_id, const ExecBatch& keypayload_batch, int batch_start_row, - int num_batch_rows, const uint8_t* match_bitvector, const uint32_t* key_ids, - bool no_duplicate_keys, arrow::util::TempVectorStack* temp_stack) const { - if (filter_.IsNullLiteral() || filter_ == literal(false)) { - return Status::OK(); - } - - int num_matching_ids = 0; - if (filter_ == literal(true)) { - auto match_relative_batch_ids_buf = - arrow::util::TempVectorHolder(temp_stack, num_batch_rows); - auto match_key_ids_buf = - arrow::util::TempVectorHolder(temp_stack, num_batch_rows); - - arrow::util::bit_util::bits_to_indexes(1, hardware_flags_, num_batch_rows, - match_bitvector, &num_matching_ids, - match_relative_batch_ids_buf.mutable_data()); - // Collect key ids of passing rows. - // - for (int i = 0; i < num_matching_ids; ++i) { - uint16_t id = match_relative_batch_ids_buf.mutable_data()[i]; - match_key_ids_buf.mutable_data()[i] = key_ids[id]; - } - - hash_table_->UpdateHasMatchForKeys(thread_id, num_matching_ids, - match_key_ids_buf.mutable_data()); - return Status::OK(); - } - - auto match_batch_row_ids_buf = - arrow::util::TempVectorHolder(temp_stack, minibatch_size_); - auto match_key_ids_buf = - arrow::util::TempVectorHolder(temp_stack, minibatch_size_); - auto match_payload_ids_buf = - arrow::util::TempVectorHolder(temp_stack, minibatch_size_); - - // Inner matching is necessary for non-trivial filter. Because even for the same row - // with same matching key, the filter results could vary for different payloads. - // - JoinMatchIterator match_iterator; - match_iterator.SetLookupResult(num_batch_rows, batch_start_row, match_bitvector, - key_ids, no_duplicate_keys, key_to_payload_); - while (match_iterator.GetNextBatch( - minibatch_size_, &num_matching_ids, match_batch_row_ids_buf.mutable_data(), - match_key_ids_buf.mutable_data(), match_payload_ids_buf.mutable_data())) { - int num_filtered = 0; - RETURN_NOT_OK(FilterOneBatch( - keypayload_batch, num_matching_ids, match_batch_row_ids_buf.mutable_data(), - match_key_ids_buf.mutable_data(), match_payload_ids_buf.mutable_data(), - /*output_key_ids=*/false, - /*output_payload_ids=*/true, temp_stack, &num_filtered)); - hash_table_->UpdateHasMatchForPayloads(thread_id, num_filtered, - match_payload_ids_buf.mutable_data()); - } - - return Status::OK(); -} - -Status JoinResidualFilter::FilterInner( - const ExecBatch& keypayload_batch, int num_batch_rows, uint16_t* batch_row_ids, - uint32_t* key_ids, uint32_t* payload_ids_maybe_null, bool output_payload_ids, - arrow::util::TempVectorStack* temp_stack, int* num_passing_rows) const { - if (filter_ == literal(true)) { - *num_passing_rows = num_batch_rows; - return Status::OK(); - } - - *num_passing_rows = 0; - if (filter_.IsNullLiteral() || filter_ == literal(false)) { - return Status::OK(); - } - - return FilterOneBatch( - keypayload_batch, num_batch_rows, batch_row_ids, key_ids, payload_ids_maybe_null, - /*output_key_ids=*/true, output_payload_ids, temp_stack, num_passing_rows); -} - -Status JoinResidualFilter::FilterOneBatch(const ExecBatch& keypayload_batch, - int num_batch_rows, uint16_t* batch_row_ids, - uint32_t* key_ids_maybe_null, - uint32_t* payload_ids_maybe_null, - bool output_key_ids, bool output_payload_ids, - arrow::util::TempVectorStack* temp_stack, - int* num_passing_rows) const { - // Caller must do shortcuts for trivial filter. - ARROW_DCHECK(!filter_.IsNullLiteral() && filter_ != literal(true) && - filter_ != literal(false)); - ARROW_DCHECK(!output_key_ids || key_ids_maybe_null); - ARROW_DCHECK(!output_payload_ids || payload_ids_maybe_null); - - *num_passing_rows = 0; - - if (num_batch_rows == 0) { - return Status::OK(); - } - - ARROW_ASSIGN_OR_RAISE(Datum mask, - EvalFilter(keypayload_batch, num_batch_rows, batch_row_ids, - key_ids_maybe_null, payload_ids_maybe_null)); - if (mask.is_scalar()) { - const auto& mask_scalar = mask.scalar_as(); - if (mask_scalar.is_valid && mask_scalar.value) { - *num_passing_rows = num_batch_rows; - } - return Status::OK(); - } - - ARROW_DCHECK_EQ(mask.array()->offset, 0); - ARROW_DCHECK_EQ(mask.array()->length, static_cast(num_batch_rows)); - const uint8_t* validity = - mask.array()->buffers[0] ? mask.array()->buffers[0]->data() : nullptr; - const uint8_t* comparisons = mask.array()->buffers[1]->data(); - for (int irow = 0; irow < num_batch_rows; ++irow) { - bool is_valid = !validity || bit_util::GetBit(validity, irow); - bool is_cmp_true = bit_util::GetBit(comparisons, irow); - if (is_valid && is_cmp_true) { - batch_row_ids[*num_passing_rows] = batch_row_ids[irow]; - if (output_key_ids) { - key_ids_maybe_null[*num_passing_rows] = key_ids_maybe_null[irow]; - } - if (output_payload_ids) { - payload_ids_maybe_null[*num_passing_rows] = payload_ids_maybe_null[irow]; - } - ++(*num_passing_rows); - } - } - - return Status::OK(); -} - -Result JoinResidualFilter::EvalFilter( - const ExecBatch& keypayload_batch, int num_batch_rows, const uint16_t* batch_row_ids, - const uint32_t* key_ids_maybe_null, const uint32_t* payload_ids_maybe_null) const { - ARROW_DCHECK(!filter_.IsNullLiteral() && filter_ != literal(true) && - filter_ != literal(false)); - - ARROW_ASSIGN_OR_RAISE( - ExecBatch input, - MaterializeFilterInput(keypayload_batch, num_batch_rows, batch_row_ids, - key_ids_maybe_null, payload_ids_maybe_null)); - return ExecuteScalarExpression(filter_, input, ctx_->exec_context()); -} - -Result JoinResidualFilter::MaterializeFilterInput( - const ExecBatch& keypayload_batch, int num_batch_rows, const uint16_t* batch_row_ids, - const uint32_t* key_ids_maybe_null, const uint32_t* payload_ids_maybe_null) const { - ExecBatch out; - out.length = num_batch_rows; - out.values.resize(probe_filter_to_key_and_payload_.size() + num_build_keys_referred_ + - num_build_payloads_referred_); - - if (probe_filter_to_key_and_payload_.size() > 0) { - ExecBatchBuilder probe_batch_builder; - RETURN_NOT_OK(probe_batch_builder.AppendSelected( - pool_, keypayload_batch, num_batch_rows, batch_row_ids, - static_cast(probe_filter_to_key_and_payload_.size()), - probe_filter_to_key_and_payload_.data())); - ExecBatch probe_batch = probe_batch_builder.Flush(); - ARROW_DCHECK(probe_batch.values.size() == probe_filter_to_key_and_payload_.size()); - for (size_t i = 0; i < probe_batch.values.size(); ++i) { - out.values[i] = std::move(probe_batch.values[i]); - } - } - - if (num_build_keys_referred_ > 0 || num_build_payloads_referred_ > 0) { - ARROW_DCHECK(num_build_keys_referred_ == 0 || key_ids_maybe_null); - ARROW_DCHECK(num_build_payloads_referred_ == 0 || payload_ids_maybe_null); - - int num_build_cols = build_schemas_->num_cols(HashJoinProjection::FILTER); - auto to_key = - build_schemas_->map(HashJoinProjection::FILTER, HashJoinProjection::KEY); - auto to_payload = - build_schemas_->map(HashJoinProjection::FILTER, HashJoinProjection::PAYLOAD); - for (int i = 0; i < num_build_cols; ++i) { - ResizableArrayData column_data; - column_data.Init(build_schemas_->data_type(HashJoinProjection::FILTER, i), pool_, - bit_util::Log2(num_batch_rows)); - if (auto idx = to_key.get(i); idx != SchemaProjectionMap::kMissingField) { - RETURN_NOT_OK(build_keys_->DecodeSelected(&column_data, idx, num_batch_rows, - key_ids_maybe_null, pool_)); - } else if (idx = to_payload.get(i); idx != SchemaProjectionMap::kMissingField) { - RETURN_NOT_OK(build_payloads_->DecodeSelected(&column_data, idx, num_batch_rows, - payload_ids_maybe_null, pool_)); - } else { - ARROW_DCHECK(false); - } - out.values[probe_filter_to_key_and_payload_.size() + i] = column_data.array_data(); - } - } - - return out; -} - void JoinProbeProcessor::Init(int num_key_columns, JoinType join_type, SwissTableForJoin* hash_table, - JoinResidualFilter* residual_filter, std::vector materialize, const std::vector* cmp, OutputBatchFn output_batch_fn) { num_key_columns_ = num_key_columns; join_type_ = join_type; hash_table_ = hash_table; - residual_filter_ = residual_filter; materialize_.resize(materialize.size()); for (size_t i = 0; i < materialize.size(); ++i) { materialize_[i] = materialize[i]; @@ -2287,7 +1875,6 @@ Status JoinProbeProcessor::OnNextBatch(int64_t thread_id, const ExecBatch& keypayload_batch, arrow::util::TempVectorStack* temp_stack, std::vector* temp_column_arrays) { - bool no_duplicate_keys = (hash_table_->key_to_payload() == nullptr); const SwissTable* swiss_table = hash_table_->keys()->swiss_table(); int64_t hardware_flags = swiss_table->hardware_flags(); int minibatch_size = swiss_table->minibatch_size(); @@ -2313,8 +1900,6 @@ Status JoinProbeProcessor::OnNextBatch(int64_t thread_id, arrow::util::TempVectorHolder(temp_stack, minibatch_size); auto materialize_payload_ids_buf = arrow::util::TempVectorHolder(temp_stack, minibatch_size); - auto filter_bitvector_buf = arrow::util::TempVectorHolder( - temp_stack, static_cast(bit_util::BytesForBits(minibatch_size))); for (int minibatch_start = 0; minibatch_start < num_rows;) { uint32_t minibatch_size_next = std::min(minibatch_size, num_rows - minibatch_start); @@ -2338,29 +1923,33 @@ Status JoinProbeProcessor::OnNextBatch(int64_t thread_id, if (join_type_ == JoinType::LEFT_SEMI || join_type_ == JoinType::LEFT_ANTI || join_type_ == JoinType::RIGHT_SEMI || join_type_ == JoinType::RIGHT_ANTI) { int num_passing_ids = 0; - if (join_type_ == JoinType::LEFT_SEMI) { - RETURN_NOT_OK(residual_filter_->FilterLeftSemi( - keypayload_batch, minibatch_start, minibatch_size_next, - match_bitvector_buf.mutable_data(), key_ids_buf.mutable_data(), - no_duplicate_keys, temp_stack, &num_passing_ids, - materialize_batch_ids_buf.mutable_data())); - } else if (join_type_ == JoinType::LEFT_ANTI) { - RETURN_NOT_OK(residual_filter_->FilterLeftAnti( - keypayload_batch, minibatch_start, minibatch_size_next, - match_bitvector_buf.mutable_data(), key_ids_buf.mutable_data(), - no_duplicate_keys, temp_stack, &num_passing_ids, - materialize_batch_ids_buf.mutable_data())); - } else { - RETURN_NOT_OK(residual_filter_->FilterRightSemiAnti( - thread_id, keypayload_batch, minibatch_start, minibatch_size_next, - match_bitvector_buf.mutable_data(), key_ids_buf.mutable_data(), - no_duplicate_keys, temp_stack)); - } + arrow::util::bit_util::bits_to_indexes( + (join_type_ == JoinType::LEFT_ANTI) ? 0 : 1, hardware_flags, + minibatch_size_next, match_bitvector_buf.mutable_data(), &num_passing_ids, + materialize_batch_ids_buf.mutable_data()); - if (join_type_ == JoinType::LEFT_SEMI || join_type_ == JoinType::LEFT_ANTI) { + // For right-semi, right-anti joins: update has-match flags for the rows + // in hash table. + // + if (join_type_ == JoinType::RIGHT_SEMI || join_type_ == JoinType::RIGHT_ANTI) { + for (int i = 0; i < num_passing_ids; ++i) { + uint16_t id = materialize_batch_ids_buf.mutable_data()[i]; + key_ids_buf.mutable_data()[i] = key_ids_buf.mutable_data()[id]; + } + hash_table_->UpdateHasMatchForKeys(thread_id, num_passing_ids, + key_ids_buf.mutable_data()); + } else { // For left-semi, left-anti joins: call materialize using match - // row ids. + // bit-vector. // + + // Add base batch row index. + // + for (int i = 0; i < num_passing_ids; ++i) { + materialize_batch_ids_buf.mutable_data()[i] += + static_cast(minibatch_start); + } + RETURN_NOT_OK(materialize_[thread_id]->AppendProbeOnly( keypayload_batch, num_passing_ids, materialize_batch_ids_buf.mutable_data(), [&](ExecBatch batch) { @@ -2372,46 +1961,30 @@ Status JoinProbeProcessor::OnNextBatch(int64_t thread_id, // Since every hash table lookup for an input row might have multiple // matches we use a helper class that implements enumerating all of them. // + bool no_duplicate_keys = (hash_table_->key_to_payload() == nullptr); + bool no_payload_columns = (hash_table_->payloads() == nullptr); JoinMatchIterator match_iterator; match_iterator.SetLookupResult( minibatch_size_next, minibatch_start, match_bitvector_buf.mutable_data(), key_ids_buf.mutable_data(), no_duplicate_keys, hash_table_->key_to_payload()); int num_matches_next; - bool use_filter_bitvector = residual_filter_->NeedFilterBitVector(join_type_); - if (use_filter_bitvector) { - residual_filter_->InitFilterBitVector(minibatch_size_next, - filter_bitvector_buf.mutable_data()); - } while (match_iterator.GetNextBatch(minibatch_size, &num_matches_next, materialize_batch_ids_buf.mutable_data(), materialize_key_ids_buf.mutable_data(), materialize_payload_ids_buf.mutable_data())) { - RETURN_NOT_OK(residual_filter_->FilterInner( - keypayload_batch, num_matches_next, materialize_batch_ids_buf.mutable_data(), - materialize_key_ids_buf.mutable_data(), - materialize_payload_ids_buf.mutable_data(), !no_duplicate_keys, temp_stack, - &num_matches_next)); - const uint16_t* materialize_batch_ids = materialize_batch_ids_buf.mutable_data(); const uint32_t* materialize_key_ids = materialize_key_ids_buf.mutable_data(); const uint32_t* materialize_payload_ids = - no_duplicate_keys ? materialize_key_ids_buf.mutable_data() - : materialize_payload_ids_buf.mutable_data(); - - // For filtered result, update filter bit-vector. - // - if (use_filter_bitvector) { - residual_filter_->UpdateFilterBitVector(minibatch_start, num_matches_next, - materialize_batch_ids, - filter_bitvector_buf.mutable_data()); - } + no_duplicate_keys || no_payload_columns + ? materialize_key_ids_buf.mutable_data() + : materialize_payload_ids_buf.mutable_data(); // For right-outer, full-outer joins we need to update has-match flags // for the rows in hash table. // if (join_type_ == JoinType::RIGHT_OUTER || join_type_ == JoinType::FULL_OUTER) { - hash_table_->UpdateHasMatchForPayloads(thread_id, num_matches_next, - materialize_payload_ids); + hash_table_->UpdateHasMatchForKeys(thread_id, num_matches_next, + materialize_key_ids); } // Call materialize for resulting id tuples pointing to matching pairs @@ -2431,11 +2004,17 @@ Status JoinProbeProcessor::OnNextBatch(int64_t thread_id, // if (join_type_ == JoinType::LEFT_OUTER || join_type_ == JoinType::FULL_OUTER) { int num_passing_ids = 0; - CollectPassingBatchIds(0, hardware_flags, minibatch_start, minibatch_size_next, - use_filter_bitvector ? filter_bitvector_buf.mutable_data() - : match_bitvector_buf.mutable_data(), - &num_passing_ids, - materialize_batch_ids_buf.mutable_data()); + arrow::util::bit_util::bits_to_indexes( + /*bit_to_search=*/0, hardware_flags, minibatch_size_next, + match_bitvector_buf.mutable_data(), &num_passing_ids, + materialize_batch_ids_buf.mutable_data()); + + // Add base batch row index. + // + for (int i = 0; i < num_passing_ids; ++i) { + materialize_batch_ids_buf.mutable_data()[i] += + static_cast(minibatch_start); + } RETURN_NOT_OK(materialize_[thread_id]->AppendProbeOnly( keypayload_batch, num_passing_ids, materialize_batch_ids_buf.mutable_data(), @@ -2466,8 +2045,6 @@ Status JoinProbeProcessor::OnFinished() { class SwissJoin : public HashJoinImpl { public: - static constexpr auto kTempStackUsage = 64 * arrow::util::MiniBatch::kMiniBatchLength; - Status Init(QueryContext* ctx, JoinType join_type, size_t num_threads, const HashJoinProjectionMaps* proj_map_left, const HashJoinProjectionMaps* proj_map_right, @@ -2511,7 +2088,6 @@ class SwissJoin : public HashJoinImpl { local_states_.resize(num_threads_); for (int i = 0; i < num_threads_; ++i) { - RETURN_NOT_OK(local_states_[i].stack.Init(pool_, kTempStackUsage)); local_states_[i].hash_table_ready = false; local_states_[i].num_output_batches = 0; local_states_[i].materialize.Init(pool_, proj_map_left, proj_map_right); @@ -2523,12 +2099,8 @@ class SwissJoin : public HashJoinImpl { materialize[i] = &local_states_[i].materialize; } - residual_filter_.Init(std::move(filter), ctx_, pool_, hardware_flags_, proj_map_left, - proj_map_right, &hash_table_); - probe_processor_.Init(proj_map_left->num_cols(HashJoinProjection::KEY), join_type_, - &hash_table_, &residual_filter_, materialize, &key_cmp_, - output_batch_callback_); + &hash_table_, materialize, &key_cmp_, output_batch_callback_); InitTaskGroups(); @@ -2565,7 +2137,8 @@ class SwissJoin : public HashJoinImpl { ExecBatch keypayload_batch; ARROW_ASSIGN_OR_RAISE(keypayload_batch, KeyPayloadFromInput(/*side=*/0, &batch)); - arrow::util::TempVectorStack* temp_stack = &local_states_[thread_index].stack; + ARROW_ASSIGN_OR_RAISE(arrow::util::TempVectorStack * temp_stack, + ctx_->GetTempStack(thread_index)); return CancelIfNotOK( probe_processor_.OnNextBatch(thread_index, keypayload_batch, temp_stack, @@ -2607,11 +2180,9 @@ class SwissJoin : public HashJoinImpl { // const HashJoinProjectionMaps* schema = schema_[1]; bool reject_duplicate_keys = - (join_type_ == JoinType::LEFT_SEMI || join_type_ == JoinType::LEFT_ANTI) && - residual_filter_.NumBuildPayloadsReferred() == 0; + join_type_ == JoinType::LEFT_SEMI || join_type_ == JoinType::LEFT_ANTI; bool no_payload = - reject_duplicate_keys || (schema->num_cols(HashJoinProjection::PAYLOAD) == 0 && - residual_filter_.NumBuildPayloadsReferred() == 0); + reject_duplicate_keys || schema->num_cols(HashJoinProjection::PAYLOAD) == 0; std::vector key_types; for (int i = 0; i < schema->num_cols(HashJoinProjection::KEY); ++i) { @@ -2677,7 +2248,8 @@ class SwissJoin : public HashJoinImpl { input_batch.values[schema->num_cols(HashJoinProjection::KEY) + icol]; } } - arrow::util::TempVectorStack* temp_stack = &local_states_[thread_id].stack; + ARROW_ASSIGN_OR_RAISE(arrow::util::TempVectorStack * temp_stack, + ctx_->GetTempStack(thread_id)); RETURN_NOT_OK(CancelIfNotOK(hash_table_build_.PushNextBatch( static_cast(thread_id), key_batch, no_payload ? nullptr : &payload_batch, temp_stack))); @@ -2712,7 +2284,8 @@ class SwissJoin : public HashJoinImpl { Status MergeFinished(size_t thread_id) { RETURN_NOT_OK(status()); - arrow::util::TempVectorStack* temp_stack = &local_states_[thread_id].stack; + ARROW_ASSIGN_OR_RAISE(arrow::util::TempVectorStack * temp_stack, + ctx_->GetTempStack(thread_id)); hash_table_build_.FinishPrtnMerge(temp_stack); return CancelIfNotOK(OnBuildHashTableFinished(static_cast(thread_id))); } @@ -2729,8 +2302,6 @@ class SwissJoin : public HashJoinImpl { } hash_table_ready_.store(true); - residual_filter_.OnBuildFinished(); - return build_finished_callback_(thread_id); } @@ -2767,7 +2338,8 @@ class SwissJoin : public HashJoinImpl { std::min((task_id + 1) * kNumRowsPerScanTask, hash_table_.num_rows()); // Get thread index and related temp vector stack // - arrow::util::TempVectorStack* temp_stack = &local_states_[thread_id].stack; + ARROW_ASSIGN_OR_RAISE(arrow::util::TempVectorStack * temp_stack, + ctx_->GetTempStack(thread_id)); // Split into mini-batches // @@ -2792,25 +2364,24 @@ class SwissJoin : public HashJoinImpl { static_cast(mini_batch_start + mini_batch_size_next - 1)); int num_output_rows = 0; for (uint32_t key_id = first_key_id; key_id <= last_key_id; ++key_id) { - uint32_t first_payload_for_key = std::max( - static_cast(mini_batch_start), - hash_table_.key_to_payload() ? hash_table_.key_to_payload()[key_id] : key_id); - uint32_t last_payload_for_key = std::min( - static_cast(mini_batch_start + mini_batch_size_next - 1), - hash_table_.key_to_payload() ? hash_table_.key_to_payload()[key_id + 1] - 1 - : key_id); - uint32_t num_payloads_for_key = last_payload_for_key - first_payload_for_key + 1; - uint32_t num_payloads_match = 0; - for (uint32_t i = 0; i < num_payloads_for_key; ++i) { - uint32_t payload = first_payload_for_key + i; - if (bit_util::GetBit(hash_table_.has_match(), payload) == bit_to_output) { - key_ids_buf.mutable_data()[num_output_rows + num_payloads_match] = key_id; - payload_ids_buf.mutable_data()[num_output_rows + num_payloads_match] = - payload; - num_payloads_match++; + if (bit_util::GetBit(hash_table_.has_match(), key_id) == bit_to_output) { + uint32_t first_payload_for_key = + std::max(static_cast(mini_batch_start), + hash_table_.key_to_payload() ? hash_table_.key_to_payload()[key_id] + : key_id); + uint32_t last_payload_for_key = std::min( + static_cast(mini_batch_start + mini_batch_size_next - 1), + hash_table_.key_to_payload() ? hash_table_.key_to_payload()[key_id + 1] - 1 + : key_id); + uint32_t num_payloads_for_key = + last_payload_for_key - first_payload_for_key + 1; + for (uint32_t i = 0; i < num_payloads_for_key; ++i) { + key_ids_buf.mutable_data()[num_output_rows + i] = key_id; + payload_ids_buf.mutable_data()[num_output_rows + i] = + first_payload_for_key + i; } + num_output_rows += num_payloads_for_key; } - num_output_rows += num_payloads_match; } if (num_output_rows > 0) { @@ -2944,7 +2515,6 @@ class SwissJoin : public HashJoinImpl { FinishedCallback finished_callback_; struct ThreadLocalState { - arrow::util::TempVectorStack stack; JoinResultMaterialize materialize; std::vector temp_column_arrays; int64_t num_output_batches; @@ -2954,7 +2524,6 @@ class SwissJoin : public HashJoinImpl { SwissTableForJoin hash_table_; JoinProbeProcessor probe_processor_; - JoinResidualFilter residual_filter_; SwissTableForJoinBuild hash_table_build_; AccumulationQueue build_side_batches_; @@ -2981,7 +2550,7 @@ class SwissJoin : public HashJoinImpl { Result> HashJoinImpl::MakeSwiss() { std::unique_ptr impl{new SwissJoin()}; - return impl; + return std::move(impl); } } // namespace acero diff --git a/cpp/src/arrow/acero/swiss_join_avx2.cc b/cpp/src/arrow/acero/swiss_join_avx2.cc index e42b0b40445..0888dd89384 100644 --- a/cpp/src/arrow/acero/swiss_join_avx2.cc +++ b/cpp/src/arrow/acero/swiss_join_avx2.cc @@ -23,9 +23,6 @@ namespace arrow { namespace acero { -// TODO(GH-43693): The functions in this file are not wired anywhere. We may consider -// actually utilizing them or removing them. - template int RowArrayAccessor::Visit_avx2(const RowTableImpl& rows, int column_id, int num_rows, const uint32_t* row_ids, @@ -48,78 +45,48 @@ int RowArrayAccessor::Visit_avx2(const RowTableImpl& rows, int column_id, int nu if (!is_fixed_length_column) { int varbinary_column_id = VarbinaryColumnId(rows.metadata(), column_id); const uint8_t* row_ptr_base = rows.data(2); - const RowTableImpl::offset_type* row_offsets = rows.offsets(); - static_assert( - sizeof(RowTableImpl::offset_type) == sizeof(int64_t), - "RowArrayAccessor::Visit_avx2 only supports 64-bit RowTableImpl::offset_type"); + const uint32_t* row_offsets = rows.offsets(); if (varbinary_column_id == 0) { // Case 1: This is the first varbinary column // __m256i field_offset_within_row = _mm256_set1_epi32(rows.metadata().fixed_length); __m256i varbinary_end_array_offset = - _mm256_set1_epi64x(rows.metadata().varbinary_end_array_offset); + _mm256_set1_epi32(rows.metadata().varbinary_end_array_offset); for (int i = 0; i < num_rows / unroll; ++i) { - // Load 8 32-bit row ids. __m256i row_id = _mm256_loadu_si256(reinterpret_cast(row_ids) + i); - // Gather the lower/higher 4 64-bit row offsets based on the lower/higher 4 32-bit - // row ids. - __m256i row_offset_lo = - _mm256_i32gather_epi64(row_offsets, _mm256_castsi256_si128(row_id), - sizeof(RowTableImpl::offset_type)); - __m256i row_offset_hi = - _mm256_i32gather_epi64(row_offsets, _mm256_extracti128_si256(row_id, 1), - sizeof(RowTableImpl::offset_type)); - // Gather the lower/higher 4 32-bit field lengths based on the lower/higher 4 - // 64-bit row offsets. - __m128i field_length_lo = _mm256_i64gather_epi32( - reinterpret_cast(row_ptr_base), - _mm256_add_epi64(row_offset_lo, varbinary_end_array_offset), 1); - __m128i field_length_hi = _mm256_i64gather_epi32( - reinterpret_cast(row_ptr_base), - _mm256_add_epi64(row_offset_hi, varbinary_end_array_offset), 1); - // The final 8 32-bit field lengths, subtracting the field offset within row. + __m256i row_offset = _mm256_i32gather_epi32( + reinterpret_cast(row_offsets), row_id, sizeof(uint32_t)); __m256i field_length = _mm256_sub_epi32( - _mm256_set_m128i(field_length_hi, field_length_lo), field_offset_within_row); + _mm256_i32gather_epi32( + reinterpret_cast(row_ptr_base), + _mm256_add_epi32(row_offset, varbinary_end_array_offset), 1), + field_offset_within_row); process_8_values_fn(i * unroll, row_ptr_base, - _mm256_add_epi64(row_offset_lo, field_offset_within_row), - _mm256_add_epi64(row_offset_hi, field_offset_within_row), + _mm256_add_epi32(row_offset, field_offset_within_row), field_length); } } else { // Case 2: This is second or later varbinary column // __m256i varbinary_end_array_offset = - _mm256_set1_epi64x(rows.metadata().varbinary_end_array_offset + - sizeof(uint32_t) * (varbinary_column_id - 1)); + _mm256_set1_epi32(rows.metadata().varbinary_end_array_offset + + sizeof(uint32_t) * (varbinary_column_id - 1)); auto row_ptr_base_i64 = reinterpret_cast(row_ptr_base); for (int i = 0; i < num_rows / unroll; ++i) { - // Load 8 32-bit row ids. __m256i row_id = _mm256_loadu_si256(reinterpret_cast(row_ids) + i); - // Gather the lower/higher 4 64-bit row offsets based on the lower/higher 4 32-bit - // row ids. - __m256i row_offset_lo = - _mm256_i32gather_epi64(row_offsets, _mm256_castsi256_si128(row_id), - sizeof(RowTableImpl::offset_type)); - // Gather the lower/higher 4 32-bit field lengths based on the lower/higher 4 - // 64-bit row offsets. - __m256i row_offset_hi = - _mm256_i32gather_epi64(row_offsets, _mm256_extracti128_si256(row_id, 1), - sizeof(RowTableImpl::offset_type)); - // Prepare the lower/higher 4 64-bit end array offsets based on the lower/higher 4 - // 64-bit row offsets. - __m256i end_array_offset_lo = - _mm256_add_epi64(row_offset_lo, varbinary_end_array_offset); - __m256i end_array_offset_hi = - _mm256_add_epi64(row_offset_hi, varbinary_end_array_offset); - - __m256i field_offset_within_row_A = - _mm256_i64gather_epi64(row_ptr_base_i64, end_array_offset_lo, 1); - __m256i field_offset_within_row_B = - _mm256_i64gather_epi64(row_ptr_base_i64, end_array_offset_hi, 1); + __m256i row_offset = _mm256_i32gather_epi32( + reinterpret_cast(row_offsets), row_id, sizeof(uint32_t)); + __m256i end_array_offset = + _mm256_add_epi32(row_offset, varbinary_end_array_offset); + + __m256i field_offset_within_row_A = _mm256_i32gather_epi64( + row_ptr_base_i64, _mm256_castsi256_si128(end_array_offset), 1); + __m256i field_offset_within_row_B = _mm256_i32gather_epi64( + row_ptr_base_i64, _mm256_extracti128_si256(end_array_offset, 1), 1); field_offset_within_row_A = _mm256_permutevar8x32_epi32( field_offset_within_row_A, _mm256_setr_epi32(0, 2, 4, 6, 1, 3, 5, 7)); field_offset_within_row_B = _mm256_permutevar8x32_epi32( @@ -143,14 +110,8 @@ int RowArrayAccessor::Visit_avx2(const RowTableImpl& rows, int column_id, int nu 0x4e); // Swapping low and high 128-bits field_length = _mm256_sub_epi32(field_length, field_offset_within_row); - field_offset_within_row_A = - _mm256_add_epi32(field_offset_within_row_A, alignment_padding); - field_offset_within_row_B = - _mm256_add_epi32(field_offset_within_row_B, alignment_padding); - process_8_values_fn(i * unroll, row_ptr_base, - _mm256_add_epi64(row_offset_lo, field_offset_within_row_A), - _mm256_add_epi64(row_offset_hi, field_offset_within_row_B), + _mm256_add_epi32(row_offset, field_offset_within_row), field_length); } } @@ -158,7 +119,7 @@ int RowArrayAccessor::Visit_avx2(const RowTableImpl& rows, int column_id, int nu if (is_fixed_length_column) { __m256i field_offset_within_row = - _mm256_set1_epi64x(rows.metadata().encoded_field_offset( + _mm256_set1_epi32(rows.metadata().encoded_field_offset( rows.metadata().pos_after_encoding(column_id))); __m256i field_length = _mm256_set1_epi32(rows.metadata().column_metadatas[column_id].fixed_length); @@ -169,51 +130,24 @@ int RowArrayAccessor::Visit_avx2(const RowTableImpl& rows, int column_id, int nu // const uint8_t* row_ptr_base = rows.data(1); for (int i = 0; i < num_rows / unroll; ++i) { - // Load 8 32-bit row ids. __m256i row_id = _mm256_loadu_si256(reinterpret_cast(row_ids) + i); - // Widen the 32-bit row ids to 64-bit and store the lower/higher 4 of them into 2 - // 256-bit registers. - __m256i row_id_lo = _mm256_cvtepi32_epi64(_mm256_castsi256_si128(row_id)); - __m256i row_id_hi = _mm256_cvtepi32_epi64(_mm256_extracti128_si256(row_id, 1)); - // Calculate the lower/higher 4 64-bit row offsets based on the lower/higher 4 - // 64-bit row ids and the fixed field length. - __m256i row_offset_lo = _mm256_mul_epi32(row_id_lo, field_length); - __m256i row_offset_hi = _mm256_mul_epi32(row_id_hi, field_length); - // Calculate the lower/higher 4 64-bit field offsets based on the lower/higher 4 - // 64-bit row offsets and field offset within row. - __m256i field_offset_lo = - _mm256_add_epi64(row_offset_lo, field_offset_within_row); - __m256i field_offset_hi = - _mm256_add_epi64(row_offset_hi, field_offset_within_row); - process_8_values_fn(i * unroll, row_ptr_base, field_offset_lo, field_offset_hi, - field_length); + __m256i row_offset = _mm256_mullo_epi32(row_id, field_length); + __m256i field_offset = _mm256_add_epi32(row_offset, field_offset_within_row); + process_8_values_fn(i * unroll, row_ptr_base, field_offset, field_length); } } else { // Case 4: This is a fixed length column in varying length row // const uint8_t* row_ptr_base = rows.data(2); - const RowTableImpl::offset_type* row_offsets = rows.offsets(); + const uint32_t* row_offsets = rows.offsets(); for (int i = 0; i < num_rows / unroll; ++i) { - // Load 8 32-bit row ids. __m256i row_id = _mm256_loadu_si256(reinterpret_cast(row_ids) + i); - // Gather the lower/higher 4 64-bit row offsets based on the lower/higher 4 32-bit - // row ids. - __m256i row_offset_lo = - _mm256_i32gather_epi64(row_offsets, _mm256_castsi256_si128(row_id), - sizeof(RowTableImpl::offset_type)); - __m256i row_offset_hi = - _mm256_i32gather_epi64(row_offsets, _mm256_extracti128_si256(row_id, 1), - sizeof(RowTableImpl::offset_type)); - // Calculate the lower/higher 4 64-bit field offsets based on the lower/higher 4 - // 64-bit row offsets and field offset within row. - __m256i field_offset_lo = - _mm256_add_epi64(row_offset_lo, field_offset_within_row); - __m256i field_offset_hi = - _mm256_add_epi64(row_offset_hi, field_offset_within_row); - process_8_values_fn(i * unroll, row_ptr_base, field_offset_lo, field_offset_hi, - field_length); + __m256i row_offset = _mm256_i32gather_epi32( + reinterpret_cast(row_offsets), row_id, sizeof(uint32_t)); + __m256i field_offset = _mm256_add_epi32(row_offset, field_offset_within_row); + process_8_values_fn(i * unroll, row_ptr_base, field_offset, field_length); } } } diff --git a/cpp/src/arrow/acero/swiss_join_internal.h b/cpp/src/arrow/acero/swiss_join_internal.h index 4d749c1c529..6403b7a655e 100644 --- a/cpp/src/arrow/acero/swiss_join_internal.h +++ b/cpp/src/arrow/acero/swiss_join_internal.h @@ -22,10 +22,10 @@ #include "arrow/acero/partition_util.h" #include "arrow/acero/schema_util.h" #include "arrow/acero/task_util.h" -#include "arrow/compute/key_map_internal.h" -#include "arrow/compute/light_array_internal.h" +#include "arrow/compute/kernels/row_encoder_internal.h" +#include "arrow/compute/key_map.h" +#include "arrow/compute/light_array.h" #include "arrow/compute/row/encode_internal.h" -#include "arrow/compute/row/row_encoder_internal.h" namespace arrow { @@ -367,13 +367,7 @@ class SwissTableForJoin { friend class SwissTableForJoinBuild; public: - // Update all payloads corresponding to the given keys as having a match. - // void UpdateHasMatchForKeys(int64_t thread_id, int num_rows, const uint32_t* key_ids); - // Update the given payloads as having a match. - // - void UpdateHasMatchForPayloads(int64_t thread_id, int num_rows, - const uint32_t* payload_ids); void MergeHasMatch(); const SwissTableWithKeys* keys() const { return &map_; } @@ -391,6 +385,10 @@ class SwissTableForJoin { } uint32_t payload_id_to_key_id(uint32_t payload_id) const; + // Input payload ids must form an increasing sequence. + // + void payload_ids_to_key_ids(int num_rows, const uint32_t* payload_ids, + uint32_t* key_ids) const; private: uint8_t* local_has_match(int64_t thread_id); @@ -399,10 +397,8 @@ class SwissTableForJoin { int dop_; struct ThreadLocalState { - // Bit-vector for keeping track of whether each payload in the hash table had a match. std::vector has_match; }; - // Bit-vector for keeping track of whether each payload in the hash table had a match. std::vector local_states_; std::vector has_match_; @@ -718,20 +714,8 @@ class JoinMatchIterator { void SetLookupResult(int num_batch_rows, int start_batch_row, const uint8_t* batch_has_match, const uint32_t* key_ids, bool no_duplicate_keys, const uint32_t* key_to_payload); - // Get the next batch of matching rows by outputting the batch row ids, key ids and - // payload ids. If the row_id_to_skip is not kInvalidRowId, then the row with that id - // will be skipped. This is useful for left-anti and left-semi joins, where we can - // safely skip the subsequent matchings of the row that already has a match in the - // previous batch. - // bool GetNextBatch(int num_rows_max, int* out_num_rows, uint16_t* batch_row_ids, - uint32_t* key_ids, uint32_t* payload_ids, - int row_id_to_skip = kInvalidRowId); - - // The row id that will never exist in an ExecBatch. Used to indicate that there is no - // row to skip. - // - static constexpr uint32_t kInvalidRowId = std::numeric_limits::max() + 1; + uint32_t* key_ids, uint32_t* payload_ids); private: int num_batch_rows_; @@ -752,135 +736,6 @@ class JoinMatchIterator { int current_match_for_row_; }; -// Implement the residual filter support used when processing the probe side exec batches. -// There are four filtering patterns, each with a corresponding public FilterXXX method: -// - LeftSemi and LeftAnti, each for its co-naming join type, opposite to each other. -// - RightSemiAnti for both right-semi and right-anti joins: they have the same filtering -// logic and differ only in the scanning phase. -// - Inner for inner joins and the inner part of outer joins: caller should take care of -// filtering the outer part. -// All the public Filter* methods have zero-cost shortcut for trivial filter. -// -class JoinResidualFilter { - public: - void Init(Expression filter, QueryContext* ctx, MemoryPool* pool, - int64_t hardware_flags, const HashJoinProjectionMaps* probe_schemas, - const HashJoinProjectionMaps* build_schemas, SwissTableForJoin* hash_table); - - void OnBuildFinished(); - - int NumBuildKeysReferred() const { return num_build_keys_referred_; } - int NumBuildPayloadsReferred() const { return num_build_payloads_referred_; } - - // Left-outer and full-outer joins can result in a different bit-vector than the one of - // probing the hash table if the residual filter is not a literal true. If so, caller - // should setup a bit-vector for filtering properly and call `UpdateFilterBitVector` - // accordingly. - // - bool NeedFilterBitVector(JoinType join_type) const { - return (join_type == JoinType::LEFT_OUTER || join_type == JoinType::FULL_OUTER) && - filter_ != literal(true); - } - - // Init the bit-vector for filtering. Caller should make sure the bit-vector has enough - // size for a particular probe side batch. - // - void InitFilterBitVector(int num_batch_rows, uint8_t* filter_bitvector); - - // Update the bit-vector for filtering according to the given batch row ids. - // - void UpdateFilterBitVector(int batch_start_row, int num_batch_rows, - const uint16_t* batch_row_ids, uint8_t* filter_bitvector); - - // Left row is passing if filter evaluates true. Output all the passing row ids in - // the input batch. Like the left-semi join semantic, each passing row is output only - // once. - // Zero-overhead shortcut guarantee for trivial filter. - // - Status FilterLeftSemi(const ExecBatch& keypayload_batch, int batch_start_row, - int num_batch_rows, const uint8_t* match_bitvector, - const uint32_t* key_ids, bool no_duplicate_keys, - arrow::util::TempVectorStack* temp_stack, int* num_passing_ids, - uint16_t* passing_batch_row_ids) const; - - // Logically the opposite of FilterLeftSemi. Output all the passing row ids in the input - // batch. Like the left-anti join semantic, each passing row is output only once. - // Zero-overhead shortcut guarantee for trivial filter. - // - Status FilterLeftAnti(const ExecBatch& keypayload_batch, int batch_start_row, - int num_batch_rows, const uint8_t* match_bitvector, - const uint32_t* key_ids, bool no_duplicate_keys, - arrow::util::TempVectorStack* temp_stack, int* num_passing_ids, - uint16_t* passing_batch_row_ids) const; - - // Right row is passing if filter evaluates true. Mark a match for all the passing - // payload ids in the hash table. This applies for both right-semi and right-anti joins: - // they differ in scanning phase. - // Zero-overhead shortcut guarantee for trivial filter. - // - Status FilterRightSemiAnti(int64_t thread_id, const ExecBatch& keypayload_batch, - int batch_start_row, int num_batch_rows, - const uint8_t* match_bitvector, const uint32_t* key_ids, - bool no_duplicate_keys, - arrow::util::TempVectorStack* temp_stack) const; - - // For a given batch of an inner match (an inner-join or the inner part of an - // outer-join), row is passing if filter evaluates true. Does not do any outer filtering - // because this method is usually called within a inner match loop, which doesn't have - // the full scope of outer join. This requires caller to handle the outer part properly. - // All batch_row_ids, key_ids and payload_ids_maybe_null are input and output, this is - // for efficient shortcut. - // Zero-overhead shortcut guarantee for trivial filter. - // - Status FilterInner(const ExecBatch& keypayload_batch, int num_batch_rows, - uint16_t* batch_row_ids, uint32_t* key_ids, - uint32_t* payload_ids_maybe_null, bool output_payload_ids, - arrow::util::TempVectorStack* temp_stack, - int* num_passing_rows) const; - - private: - // Evaluates the filter for a given batch of matching rows, and outputs the passing - // rows. Always introduces overhead of materialization and evaluation, so caller must do - // shortcut properly for trivial filters. - // - Status FilterOneBatch(const ExecBatch& keypayload_batch, int num_batch_rows, - uint16_t* batch_row_ids, uint32_t* key_ids_maybe_null, - uint32_t* payload_ids_maybe_null, bool output_key_ids, - bool output_payload_ids, arrow::util::TempVectorStack* temp_stack, - int* num_passing_rows) const; - - Result EvalFilter(const ExecBatch& keypayload_batch, int num_batch_rows, - const uint16_t* batch_row_ids, - const uint32_t* key_ids_maybe_null, - const uint32_t* payload_ids_maybe_null) const; - - Result MaterializeFilterInput(const ExecBatch& keypayload_batch, - int num_batch_rows, - const uint16_t* batch_row_ids, - const uint32_t* key_ids_maybe_null, - const uint32_t* payload_ids_maybe_null) const; - - private: - Expression filter_; - - QueryContext* ctx_; - MemoryPool* pool_; - int64_t hardware_flags_; - - const HashJoinProjectionMaps* probe_schemas_; - const HashJoinProjectionMaps* build_schemas_; - - SwissTableForJoin* hash_table_; - std::vector probe_filter_to_key_and_payload_; - int num_build_keys_referred_ = 0; - int num_build_payloads_referred_ = 0; - - int minibatch_size_; - const RowArray* build_keys_; - const RowArray* build_payloads_; - const uint32_t* key_to_payload_; -}; - // Implements entire processing of a probe side exec batch, // provided the join hash table is already built and available. // @@ -889,7 +744,6 @@ class JoinProbeProcessor { using OutputBatchFn = std::function; void Init(int num_key_columns, JoinType join_type, SwissTableForJoin* hash_table, - JoinResidualFilter* residual_filter, std::vector materialize, const std::vector* cmp, OutputBatchFn output_batch_fn); Status OnNextBatch(int64_t thread_id, const ExecBatch& keypayload_batch, @@ -906,7 +760,6 @@ class JoinProbeProcessor { JoinType join_type_; SwissTableForJoin* hash_table_; - JoinResidualFilter* residual_filter_; // One element per thread // std::vector materialize_; diff --git a/cpp/src/arrow/acero/task_util.cc b/cpp/src/arrow/acero/task_util.cc index 85378eaeeb2..4d8e9ecf765 100644 --- a/cpp/src/arrow/acero/task_util.cc +++ b/cpp/src/arrow/acero/task_util.cc @@ -424,7 +424,7 @@ void TaskSchedulerImpl::Abort(AbortContinuationImpl impl) { std::unique_ptr TaskScheduler::Make() { std::unique_ptr impl{new TaskSchedulerImpl()}; - return impl; + return std::move(impl); } } // namespace acero diff --git a/cpp/src/arrow/acero/tpch_node.cc b/cpp/src/arrow/acero/tpch_node.cc index 137b62ad38a..9797a082b49 100644 --- a/cpp/src/arrow/acero/tpch_node.cc +++ b/cpp/src/arrow/acero/tpch_node.cc @@ -336,7 +336,7 @@ Result TpchPseudotext::GenerateComments(size_t num_comments, size_t min_l } ArrayData ad(utf8(), num_comments, {nullptr, std::move(offset_buffer), std::move(comment_buffer)}); - return ad; + return std::move(ad); } bool TpchPseudotext::GenerateWord(int64_t& offset, random::pcg32_fast& rng, char* arr, @@ -611,7 +611,7 @@ Result RandomVString(random::pcg32_fast& rng, int64_t num_rows, int32_t m for (int32_t i = 0; i < offsets[num_rows]; i++) str[i] = alpha_numerics[char_dist(rng)]; ArrayData ad(utf8(), num_rows, {nullptr, std::move(offset_buff), std::move(str_buff)}); - return ad; + return std::move(ad); } void GeneratePhoneNumber(char* out, random::pcg32_fast& rng, int32_t country) { @@ -677,7 +677,7 @@ class PartAndPartSupplierGenerator { if (!part_output_queue_.empty()) { ExecBatch batch = std::move(part_output_queue_.front()); part_output_queue_.pop(); - return batch; + return std::move(batch); } else if (part_rows_generated_ == part_rows_to_generate_) { return std::nullopt; } else { @@ -732,7 +732,7 @@ class PartAndPartSupplierGenerator { if (!partsupp_output_queue_.empty()) { ExecBatch result = std::move(partsupp_output_queue_.front()); partsupp_output_queue_.pop(); - return result; + return std::move(result); } } { @@ -1337,7 +1337,7 @@ class OrdersAndLineItemGenerator { if (!orders_output_queue_.empty()) { ExecBatch batch = std::move(orders_output_queue_.front()); orders_output_queue_.pop(); - return batch; + return std::move(batch); } else if (orders_rows_generated_ == orders_rows_to_generate_) { return std::nullopt; } else { @@ -1401,12 +1401,12 @@ class OrdersAndLineItemGenerator { if (from_queue) { ARROW_DCHECK(queued.length <= batch_size_); tld.first_batch_offset = queued.length; - if (queued.length == batch_size_) return queued; + if (queued.length == batch_size_) return std::move(queued); } { std::lock_guard lock(orders_output_queue_mutex_); if (orders_rows_generated_ == orders_rows_to_generate_) { - if (from_queue) return queued; + if (from_queue) return std::move(queued); return std::nullopt; } diff --git a/cpp/src/arrow/acero/tpch_node_test.cc b/cpp/src/arrow/acero/tpch_node_test.cc index 17fb43452bc..076bcf634a6 100644 --- a/cpp/src/arrow/acero/tpch_node_test.cc +++ b/cpp/src/arrow/acero/tpch_node_test.cc @@ -27,8 +27,8 @@ #include "arrow/acero/test_util_internal.h" #include "arrow/acero/tpch_node.h" #include "arrow/acero/util.h" +#include "arrow/compute/kernels/row_encoder_internal.h" #include "arrow/compute/kernels/test_util.h" -#include "arrow/compute/row/row_encoder_internal.h" #include "arrow/testing/gtest_util.h" #include "arrow/testing/matchers.h" #include "arrow/testing/random.h" diff --git a/cpp/src/arrow/acero/unmaterialized_table_internal.h b/cpp/src/arrow/acero/unmaterialized_table.h similarity index 100% rename from cpp/src/arrow/acero/unmaterialized_table_internal.h rename to cpp/src/arrow/acero/unmaterialized_table.h diff --git a/cpp/src/arrow/acero/util.h b/cpp/src/arrow/acero/util.h index ee46e852742..0eb9f4c87e1 100644 --- a/cpp/src/arrow/acero/util.h +++ b/cpp/src/arrow/acero/util.h @@ -65,7 +65,7 @@ class ARROW_ACERO_EXPORT AtomicCounter { // return true if the counter is complete bool Increment() { - ARROW_DCHECK_NE(count_.load(), total_.load()); + DCHECK_NE(count_.load(), total_.load()); int count = count_.fetch_add(1) + 1; if (count != total_.load()) return false; return DoneOnce(); diff --git a/cpp/src/arrow/adapters/orc/CMakeLists.txt b/cpp/src/arrow/adapters/orc/CMakeLists.txt index 14fb8e681d1..4d66151cd38 100644 --- a/cpp/src/arrow/adapters/orc/CMakeLists.txt +++ b/cpp/src/arrow/adapters/orc/CMakeLists.txt @@ -35,7 +35,6 @@ add_arrow_test(adapter_test PREFIX "arrow-orc" STATIC_LINK_LIBS - orc::orc ${ARROW_ORC_STATIC_LINK_LIBS}) set_source_files_properties(adapter_test.cc PROPERTIES SKIP_PRECOMPILE_HEADERS ON diff --git a/cpp/src/arrow/adapters/orc/adapter.cc b/cpp/src/arrow/adapters/orc/adapter.cc index 25759f84713..31fba1a9bd5 100644 --- a/cpp/src/arrow/adapters/orc/adapter.cc +++ b/cpp/src/arrow/adapters/orc/adapter.cc @@ -18,17 +18,17 @@ #include "arrow/adapters/orc/adapter.h" #include +#include +#include #include #include #include #include +#include #include -#ifdef ARROW_ORC_NEED_TIME_ZONE_DATABASE_CHECK -#include -#endif - #include "arrow/adapters/orc/util.h" +#include "arrow/buffer.h" #include "arrow/builder.h" #include "arrow/io/interfaces.h" #include "arrow/memory_pool.h" @@ -37,11 +37,14 @@ #include "arrow/table.h" #include "arrow/table_builder.h" #include "arrow/type.h" +#include "arrow/type_traits.h" #include "arrow/util/bit_util.h" #include "arrow/util/checked_cast.h" #include "arrow/util/decimal.h" #include "arrow/util/key_value_metadata.h" #include "arrow/util/macros.h" +#include "arrow/util/range.h" +#include "arrow/util/visibility.h" #include "orc/Exceptions.hh" // alias to not interfere with nested orc namespace @@ -77,12 +80,6 @@ namespace liborc = orc; } \ catch (const liborc::NotImplementedYet& e) { \ return Status::NotImplemented(e.what()); \ - } \ - catch (const std::exception& e) { \ - return Status::UnknownError(e.what()); \ - } \ - catch (...) { \ - return Status::UnknownError("ORC error"); \ } #define ORC_CATCH_NOT_OK(_s) \ @@ -176,7 +173,7 @@ class OrcStripeReader : public RecordBatchReader { int64_t batch_size_; }; -liborc::RowReaderOptions DefaultRowReaderOptions() { +liborc::RowReaderOptions default_row_reader_options() { liborc::RowReaderOptions options; // Orc timestamp type is error-prone since it serializes values in the writer timezone // and reads them back in the reader timezone. To avoid this, both the Apache Orc C++ @@ -186,23 +183,6 @@ liborc::RowReaderOptions DefaultRowReaderOptions() { return options; } -#ifdef ARROW_ORC_NEED_TIME_ZONE_DATABASE_CHECK -// Proactively check timezone database availability for ORC versions older than 2.0.0 -Status CheckTimeZoneDatabaseAvailability() { - auto tz_dir = std::getenv("TZDIR"); - bool is_tzdb_avaiable = tz_dir != nullptr - ? std::filesystem::exists(tz_dir) - : std::filesystem::exists("/usr/share/zoneinfo"); - if (!is_tzdb_avaiable) { - return Status::Invalid( - "IANA time zone database is unavailable but required by ORC." - " Please install it to /usr/share/zoneinfo or set TZDIR env to the installed" - " directory"); - } - return Status::OK(); -} -#endif - } // namespace class ORCFileReader::Impl { @@ -352,25 +332,25 @@ class ORCFileReader::Impl { } Result> Read() { - liborc::RowReaderOptions opts = DefaultRowReaderOptions(); + liborc::RowReaderOptions opts = default_row_reader_options(); ARROW_ASSIGN_OR_RAISE(auto schema, ReadSchema()); return ReadTable(opts, schema); } Result> Read(const std::shared_ptr& schema) { - liborc::RowReaderOptions opts = DefaultRowReaderOptions(); + liborc::RowReaderOptions opts = default_row_reader_options(); return ReadTable(opts, schema); } Result> Read(const std::vector& include_indices) { - liborc::RowReaderOptions opts = DefaultRowReaderOptions(); + liborc::RowReaderOptions opts = default_row_reader_options(); RETURN_NOT_OK(SelectIndices(&opts, include_indices)); ARROW_ASSIGN_OR_RAISE(auto schema, ReadSchema(opts)); return ReadTable(opts, schema); } Result> Read(const std::vector& include_names) { - liborc::RowReaderOptions opts = DefaultRowReaderOptions(); + liborc::RowReaderOptions opts = default_row_reader_options(); RETURN_NOT_OK(SelectNames(&opts, include_names)); ARROW_ASSIGN_OR_RAISE(auto schema, ReadSchema(opts)); return ReadTable(opts, schema); @@ -378,13 +358,13 @@ class ORCFileReader::Impl { Result> Read(const std::shared_ptr& schema, const std::vector& include_indices) { - liborc::RowReaderOptions opts = DefaultRowReaderOptions(); + liborc::RowReaderOptions opts = default_row_reader_options(); RETURN_NOT_OK(SelectIndices(&opts, include_indices)); return ReadTable(opts, schema); } Result> ReadStripe(int64_t stripe) { - liborc::RowReaderOptions opts = DefaultRowReaderOptions(); + liborc::RowReaderOptions opts = default_row_reader_options(); RETURN_NOT_OK(SelectStripe(&opts, stripe)); ARROW_ASSIGN_OR_RAISE(auto schema, ReadSchema(opts)); return ReadBatch(opts, schema, stripes_[static_cast(stripe)].num_rows); @@ -392,7 +372,7 @@ class ORCFileReader::Impl { Result> ReadStripe( int64_t stripe, const std::vector& include_indices) { - liborc::RowReaderOptions opts = DefaultRowReaderOptions(); + liborc::RowReaderOptions opts = default_row_reader_options(); RETURN_NOT_OK(SelectIndices(&opts, include_indices)); RETURN_NOT_OK(SelectStripe(&opts, stripe)); ARROW_ASSIGN_OR_RAISE(auto schema, ReadSchema(opts)); @@ -401,7 +381,7 @@ class ORCFileReader::Impl { Result> ReadStripe( int64_t stripe, const std::vector& include_names) { - liborc::RowReaderOptions opts = DefaultRowReaderOptions(); + liborc::RowReaderOptions opts = default_row_reader_options(); RETURN_NOT_OK(SelectNames(&opts, include_names)); RETURN_NOT_OK(SelectStripe(&opts, stripe)); ARROW_ASSIGN_OR_RAISE(auto schema, ReadSchema(opts)); @@ -507,11 +487,11 @@ class ORCFileReader::Impl { return nullptr; } - liborc::RowReaderOptions opts = DefaultRowReaderOptions(); + liborc::RowReaderOptions opts = default_row_reader_options(); if (!include_indices.empty()) { RETURN_NOT_OK(SelectIndices(&opts, include_indices)); } - StripeInformation stripe_info{0, 0, 0, 0}; + StripeInformation stripe_info({0, 0, 0, 0}); RETURN_NOT_OK(SelectStripeWithRowNumber(&opts, current_row_, &stripe_info)); ARROW_ASSIGN_OR_RAISE(auto schema, ReadSchema(opts)); std::unique_ptr row_reader; @@ -528,7 +508,7 @@ class ORCFileReader::Impl { Result> GetRecordBatchReader( int64_t batch_size, const std::vector& include_names) { - liborc::RowReaderOptions opts = DefaultRowReaderOptions(); + liborc::RowReaderOptions opts = default_row_reader_options(); if (!include_names.empty()) { RETURN_NOT_OK(SelectNames(&opts, include_names)); } @@ -561,12 +541,9 @@ ORCFileReader::~ORCFileReader() {} Result> ORCFileReader::Open( const std::shared_ptr& file, MemoryPool* pool) { -#ifdef ARROW_ORC_NEED_TIME_ZONE_DATABASE_CHECK - RETURN_NOT_OK(CheckTimeZoneDatabaseAvailability()); -#endif auto result = std::unique_ptr(new ORCFileReader()); RETURN_NOT_OK(result->impl_->Open(file, pool)); - return result; + return std::move(result); } Result> ORCFileReader::ReadMetadata() { @@ -802,7 +779,7 @@ class ORCFileWriter::Impl { &(arrow_index_offset[i]), (root->fields)[i])); } root->numElements = (root->fields)[0]->numElements; - ORC_CATCH_NOT_OK(writer_->add(*batch)); + writer_->add(*batch); batch->clear(); num_rows -= batch_size; } @@ -830,14 +807,11 @@ ORCFileWriter::ORCFileWriter() { impl_.reset(new ORCFileWriter::Impl()); } Result> ORCFileWriter::Open( io::OutputStream* output_stream, const WriteOptions& writer_options) { -#ifdef ARROW_ORC_NEED_TIME_ZONE_DATABASE_CHECK - RETURN_NOT_OK(CheckTimeZoneDatabaseAvailability()); -#endif std::unique_ptr result = std::unique_ptr(new ORCFileWriter()); Status status = result->impl_->Open(output_stream, writer_options); RETURN_NOT_OK(status); - return result; + return std::move(result); } Status ORCFileWriter::Write(const Table& table) { return impl_->Write(table); } diff --git a/cpp/src/arrow/adapters/orc/adapter_test.cc b/cpp/src/arrow/adapters/orc/adapter_test.cc index b9d6c53215b..73ecde6b9b5 100644 --- a/cpp/src/arrow/adapters/orc/adapter_test.cc +++ b/cpp/src/arrow/adapters/orc/adapter_test.cc @@ -33,10 +33,8 @@ #include "arrow/status.h" #include "arrow/table.h" #include "arrow/testing/gtest_util.h" -#include "arrow/testing/matchers.h" #include "arrow/testing/random.h" #include "arrow/type.h" -#include "arrow/util/io_util.h" #include "arrow/util/key_value_metadata.h" namespace liborc = orc; @@ -638,23 +636,6 @@ TEST(TestAdapterReadWrite, FieldAttributesRoundTrip) { AssertSchemaEqual(schema, read_schema, /*check_metadata=*/true); } -TEST(TestAdapterReadWrite, ThrowWhenTZDBUnavaiable) { - if (adapters::orc::GetOrcMajorVersion() >= 2) { - GTEST_SKIP() << "Only ORC pre-2.0.0 versions have the time zone database check"; - } - - EnvVarGuard tzdir_guard("TZDIR", "/wrong/path"); - const char* expect_str = "IANA time zone database is unavailable but required by ORC"; - EXPECT_OK_AND_ASSIGN(auto out_stream, io::BufferOutputStream::Create(1024)); - EXPECT_THAT( - adapters::orc::ORCFileWriter::Open(out_stream.get(), adapters::orc::WriteOptions()), - Raises(StatusCode::Invalid, testing::HasSubstr(expect_str))); - EXPECT_OK_AND_ASSIGN(auto buffer, out_stream->Finish()); - EXPECT_THAT(adapters::orc::ORCFileReader::Open( - std::make_shared(buffer), default_memory_pool()), - Raises(StatusCode::Invalid, testing::HasSubstr(expect_str))); -} - // Trivial class TestORCWriterTrivialNoWrite : public ::testing::Test {}; diff --git a/cpp/src/arrow/adapters/orc/util.cc b/cpp/src/arrow/adapters/orc/util.cc index 5bfe257ac7b..f4bdbae6a7b 100644 --- a/cpp/src/arrow/adapters/orc/util.cc +++ b/cpp/src/arrow/adapters/orc/util.cc @@ -37,7 +37,6 @@ #include "orc/MemoryPool.hh" #include "orc/OrcFile.hh" -#include "orc/orc-config.hh" // alias to not interfere with nested orc namespace namespace liborc = orc; @@ -1026,7 +1025,7 @@ Result> GetOrcType(const DataType& type) { SetAttributes(*it, orc_subtype.get()); out_type->addStructField(field_name, std::move(orc_subtype)); } - return out_type; + return std::move(out_type); } case Type::type::MAP: { const auto& key_field = checked_cast(type).key_field(); @@ -1048,7 +1047,7 @@ Result> GetOrcType(const DataType& type) { SetAttributes(arrow_field, orc_subtype.get()); out_type->addUnionChild(std::move(orc_subtype)); } - return out_type; + return std::move(out_type); } default: { return Status::NotImplemented("Unknown or unsupported Arrow type: ", @@ -1195,7 +1194,7 @@ Result> GetOrcType(const Schema& schema) { SetAttributes(field, orc_subtype.get()); out_type->addStructField(field->name(), std::move(orc_subtype)); } - return out_type; + return std::move(out_type); } Result> GetFieldMetadata( @@ -1221,13 +1220,6 @@ Result> GetArrowField(const std::string& name, return field(name, std::move(arrow_type), nullable, std::move(metadata)); } -int GetOrcMajorVersion() { - std::stringstream orc_version(ORC_VERSION); - std::string major_version; - std::getline(orc_version, major_version, '.'); - return std::stoi(major_version); -} - } // namespace orc } // namespace adapters } // namespace arrow diff --git a/cpp/src/arrow/adapters/orc/util.h b/cpp/src/arrow/adapters/orc/util.h index a18b11dda01..00af9f4b76e 100644 --- a/cpp/src/arrow/adapters/orc/util.h +++ b/cpp/src/arrow/adapters/orc/util.h @@ -60,9 +60,6 @@ ARROW_EXPORT Status WriteBatch(const ChunkedArray& chunked_array, int64_t length int* arrow_chunk_offset, int64_t* arrow_index_offset, liborc::ColumnVectorBatch* column_vector_batch); -/// \brief Get the major version provided by the official ORC C++ library. -ARROW_EXPORT int GetOrcMajorVersion(); - } // namespace orc } // namespace adapters } // namespace arrow diff --git a/cpp/src/arrow/array/array_base.h b/cpp/src/arrow/array/array_base.h index 716ae072206..6411aebf804 100644 --- a/cpp/src/arrow/array/array_base.h +++ b/cpp/src/arrow/array/array_base.h @@ -224,14 +224,6 @@ class ARROW_EXPORT Array { /// \return Status Status ValidateFull() const; - /// \brief Return the device_type that this array's data is allocated on - /// - /// This just delegates to calling device_type on the underlying ArrayData - /// object which backs this Array. - /// - /// \return DeviceAllocationType - DeviceAllocationType device_type() const { return data_->device_type(); } - protected: Array() = default; ARROW_DEFAULT_MOVE_AND_ASSIGN(Array); diff --git a/cpp/src/arrow/array/array_dict_test.cc b/cpp/src/arrow/array/array_dict_test.cc index 22d6d1fc5ae..4ae9e3d6dcb 100644 --- a/cpp/src/arrow/array/array_dict_test.cc +++ b/cpp/src/arrow/array/array_dict_test.cc @@ -1129,7 +1129,7 @@ TEST(TestDictionary, Validate) { arr = std::make_shared(dict_type, indices, MakeArray(invalid_data)); ASSERT_RAISES(Invalid, arr->ValidateFull()); -#if !defined(__APPLE__) && !defined(ARROW_VALGRIND) && !defined(__EMSCRIPTEN__) +#if !defined(__APPLE__) && !defined(ARROW_VALGRIND) // GH-35712: ASSERT_DEATH would make testing slow on macOS. ASSERT_DEATH( { diff --git a/cpp/src/arrow/array/array_list_test.cc b/cpp/src/arrow/array/array_list_test.cc index 3d18d5f967b..b08fa991686 100644 --- a/cpp/src/arrow/array/array_list_test.cc +++ b/cpp/src/arrow/array/array_list_test.cc @@ -735,7 +735,7 @@ class TestListArray : public ::testing::Test { ArrayFromJSON(type, "[[1, 2], [3], [4], null, [5], [], [6]]")); auto sliced_list_array = std::dynamic_pointer_cast(list_array->Slice(3, 4)); - ASSERT_OK_AND_ASSIGN(auto flattened, sliced_list_array->Flatten()); + ASSERT_OK_AND_ASSIGN(auto flattened, list_array->Flatten()); ASSERT_OK(flattened->ValidateFull()); // Note the difference between values() and Flatten(). EXPECT_TRUE(flattened->Equals(ArrayFromJSON(int32(), "[5, 6]"))); @@ -763,52 +763,6 @@ class TestListArray : public ::testing::Test { << flattened->ToString(); } - void TestFlattenRecursively() { - auto inner_type = std::make_shared(int32()); - auto type = std::make_shared(inner_type); - - // List types with two nested level: list> - auto nested_list_array = std::dynamic_pointer_cast(ArrayFromJSON(type, R"([ - [[0, 1, 2], null, [3, null]], - [null], - [[2, 9], [4], [], [6, 5]] - ])")); - ASSERT_OK_AND_ASSIGN(auto flattened, nested_list_array->FlattenRecursively()); - ASSERT_OK(flattened->ValidateFull()); - ASSERT_EQ(10, flattened->length()); - ASSERT_TRUE( - flattened->Equals(ArrayFromJSON(int32(), "[0, 1, 2, 3, null, 2, 9, 4, 6, 5]"))); - - // Empty nested list should flatten until non-list type is reached - nested_list_array = - std::dynamic_pointer_cast(ArrayFromJSON(type, R"([null])")); - ASSERT_OK_AND_ASSIGN(flattened, nested_list_array->FlattenRecursively()); - ASSERT_TRUE(flattened->type()->Equals(int32())); - - // List types with three nested level: list>> - type = std::make_shared(std::make_shared(fixed_size_list(int32(), 2))); - nested_list_array = std::dynamic_pointer_cast(ArrayFromJSON(type, R"([ - [ - [[null, 0]], - [[3, 7], null] - ], - [ - [[4, null], [5, 8]], - [[8, null]], - null - ], - [ - null - ] - ])")); - ASSERT_OK_AND_ASSIGN(flattened, nested_list_array->FlattenRecursively()); - ASSERT_OK(flattened->ValidateFull()); - ASSERT_EQ(10, flattened->length()); - ASSERT_EQ(3, flattened->null_count()); - ASSERT_TRUE(flattened->Equals( - ArrayFromJSON(int32(), "[null, 0, 3, 7, 4, null, 5, 8, 8, null]"))); - } - Status ValidateOffsetsAndSizes(int64_t length, std::vector offsets, std::vector sizes, std::shared_ptr values, int64_t offset = 0) { @@ -971,12 +925,10 @@ TYPED_TEST(TestListArray, BuilderPreserveFieldName) { TYPED_TEST(TestListArray, FlattenSimple) { this->TestFlattenSimple(); } TYPED_TEST(TestListArray, FlattenNulls) { this->TestFlattenNulls(); } TYPED_TEST(TestListArray, FlattenAllEmpty) { this->TestFlattenAllEmpty(); } -TYPED_TEST(TestListArray, FlattenSliced) { this->TestFlattenSliced(); } TYPED_TEST(TestListArray, FlattenZeroLength) { this->TestFlattenZeroLength(); } TYPED_TEST(TestListArray, TestFlattenNonEmptyBackingNulls) { this->TestFlattenNonEmptyBackingNulls(); } -TYPED_TEST(TestListArray, FlattenRecursively) { this->TestFlattenRecursively(); } TYPED_TEST(TestListArray, ValidateDimensions) { this->TestValidateDimensions(); } @@ -1287,7 +1239,7 @@ TEST_F(TestMapArray, ValidateErrorNullKey) { } TEST_F(TestMapArray, FromArrays) { - std::shared_ptr offsets1, offsets2, offsets3, offsets4, offsets5, keys, items; + std::shared_ptr offsets1, offsets2, offsets3, offsets4, keys, items; std::vector offsets_is_valid3 = {true, false, true, true}; std::vector offsets_is_valid4 = {true, true, false, true}; @@ -1342,20 +1294,6 @@ TEST_F(TestMapArray, FromArrays) { // Zero-length offsets ASSERT_RAISES(Invalid, MapArray::FromArrays(offsets1->Slice(0, 0), keys, items, pool_)); - // Offseted offsets - ASSERT_OK_AND_ASSIGN(auto map5, - MapArray::FromArrays(offsets1->Slice(1), keys, items, pool_)); - ASSERT_OK(map5->Validate()); - - AssertArraysEqual(*expected1.Slice(1), *map5); - - std::vector offset5_values = {2, 2, 6}; - ArrayFromVector(offset5_values, &offsets5); - ASSERT_OK_AND_ASSIGN(auto map6, MapArray::FromArrays(offsets5, keys, items, pool_)); - ASSERT_OK(map6->Validate()); - - AssertArraysEqual(*map5, *map6); - // Offsets not the right type ASSERT_RAISES(TypeError, MapArray::FromArrays(keys, offsets1, items, pool_)); @@ -1368,35 +1306,6 @@ TEST_F(TestMapArray, FromArrays) { ASSERT_EQ(keys_with_null->length(), tmp_items->length()); ASSERT_RAISES(Invalid, MapArray::FromArrays(offsets1, keys_with_null, tmp_items, pool_)); - - // With null_bitmap and null_count=1 - auto null_bitmap_1 = ArrayFromJSON(boolean(), "[1, 0, 1]")->data()->buffers[1]; - ASSERT_OK_AND_ASSIGN(auto map7, - MapArray::FromArrays(offsets1, keys, items, pool_, null_bitmap_1)); - ASSERT_OK(map7->Validate()); - MapArray expected7(map_type, length, offsets1->data()->buffers[1], keys, items, - null_bitmap_1, 1); - ASSERT_EQ(map7->null_count(), 1); - AssertArraysEqual(expected7, *map7); - - // With null_bitmap and null_count=2 - auto null_bitmap_2 = ArrayFromJSON(boolean(), "[0, 1, 0]")->data()->buffers[1]; - ASSERT_OK_AND_ASSIGN(auto map8, - MapArray::FromArrays(offsets1, keys, items, pool_, null_bitmap_2)); - ASSERT_OK(map8->Validate()); - MapArray expected8(map_type, length, offsets1->data()->buffers[1], keys, items, - null_bitmap_2, 2); - ASSERT_EQ(map8->null_count(), 2); - AssertArraysEqual(expected8, *map8); - - // Null bitmap and offset with null - ASSERT_RAISES(Invalid, MapArray::FromArrays(offsets3, keys, items, pool_, - offsets3->data()->buffers[0])); - - // Null bitmap and offset with offset - ASSERT_RAISES(NotImplemented, - MapArray::FromArrays(offsets1->Slice(2), keys, items, pool_, - offsets3->data()->buffers[0])); } TEST_F(TestMapArray, FromArraysEquality) { @@ -1805,23 +1714,4 @@ TEST_F(TestFixedSizeListArray, Flatten) { } } -TEST_F(TestFixedSizeListArray, FlattenRecursively) { - // Nested fixed-size list-array: fixed_size_list(fixed_size_list(int32, 2), 2) - auto inner_type = fixed_size_list(value_type_, 2); - type_ = fixed_size_list(inner_type, 2); - - auto values = std::dynamic_pointer_cast(ArrayFromJSON(type_, R"([ - [[0, 1], [null, 3]], - [[7, null], [2, 5]], - [null, null] - ])")); - ASSERT_OK(values->ValidateFull()); - ASSERT_OK_AND_ASSIGN(auto flattened, values->FlattenRecursively()); - ASSERT_OK(flattened->ValidateFull()); - ASSERT_EQ(8, flattened->length()); - ASSERT_EQ(2, flattened->null_count()); - AssertArraysEqual(*flattened, - *ArrayFromJSON(value_type_, "[0, 1, null, 3, 7, null, 2, 5]")); -} - } // namespace arrow diff --git a/cpp/src/arrow/array/array_nested.cc b/cpp/src/arrow/array/array_nested.cc index 47c0fd35829..958c2e25380 100644 --- a/cpp/src/arrow/array/array_nested.cc +++ b/cpp/src/arrow/array/array_nested.cc @@ -42,7 +42,6 @@ #include "arrow/util/checked_cast.h" #include "arrow/util/list_util.h" #include "arrow/util/logging.h" -#include "arrow/util/unreachable.h" namespace arrow { @@ -115,7 +114,7 @@ Result::ArrayType>> ListArrayFromArray return Status::TypeError("List offsets must be ", OffsetArrowType::type_name()); } - if (null_bitmap != nullptr && offsets.data()->MayHaveNulls()) { + if (null_bitmap != nullptr && offsets.null_count() > 0) { return Status::Invalid( "Ambiguous to specify both validity map and offsets with nulls"); } @@ -470,49 +469,6 @@ inline void SetListData(VarLengthListLikeArray* self, self->values_ = MakeArray(self->data_->child_data[0]); } -Result> FlattenLogicalListRecursively(const Array& in_array, - MemoryPool* memory_pool) { - std::shared_ptr array = in_array.Slice(0, in_array.length()); - for (auto kind = array->type_id(); is_list(kind) || is_list_view(kind); - kind = array->type_id()) { - switch (kind) { - case Type::LIST: { - ARROW_ASSIGN_OR_RAISE( - array, (checked_cast(array.get())->Flatten(memory_pool))); - break; - } - case Type::LARGE_LIST: { - ARROW_ASSIGN_OR_RAISE( - array, - (checked_cast(array.get())->Flatten(memory_pool))); - break; - } - case Type::LIST_VIEW: { - ARROW_ASSIGN_OR_RAISE( - array, - (checked_cast(array.get())->Flatten(memory_pool))); - break; - } - case Type::LARGE_LIST_VIEW: { - ARROW_ASSIGN_OR_RAISE( - array, - (checked_cast(array.get())->Flatten(memory_pool))); - break; - } - case Type::FIXED_SIZE_LIST: { - ARROW_ASSIGN_OR_RAISE( - array, - (checked_cast(array.get())->Flatten(memory_pool))); - break; - } - default: - Unreachable("unexpected non-list type"); - break; - } - } - return array; -} - } // namespace internal // ---------------------------------------------------------------------- @@ -790,7 +746,7 @@ MapArray::MapArray(const std::shared_ptr& type, int64_t length, const std::shared_ptr& items, int64_t null_count, int64_t offset) { auto pair_data = ArrayData::Make(type->fields()[0]->type(), keys->data()->length, - {nullptr}, {keys->data(), items->data()}, 0); + {nullptr}, {keys->data(), items->data()}, 0, offset); auto map_data = ArrayData::Make(type, length, std::move(buffers), {pair_data}, null_count, offset); SetData(map_data); @@ -807,7 +763,7 @@ MapArray::MapArray(const std::shared_ptr& type, int64_t length, Result> MapArray::FromArraysInternal( std::shared_ptr type, const std::shared_ptr& offsets, const std::shared_ptr& keys, const std::shared_ptr& items, - MemoryPool* pool, std::shared_ptr null_bitmap) { + MemoryPool* pool) { using offset_type = typename MapType::offset_type; using OffsetArrowType = typename CTypeTraits::ArrowType; @@ -827,16 +783,7 @@ Result> MapArray::FromArraysInternal( return Status::Invalid("Map key and item arrays must be equal length"); } - if (null_bitmap != nullptr && offsets->data()->MayHaveNulls()) { - return Status::Invalid( - "Ambiguous to specify both validity map and offsets with nulls"); - } - - if (null_bitmap != nullptr && offsets->offset() != 0) { - return Status::NotImplemented("Null bitmap with offsets slice not supported."); - } - - if (offsets->data()->MayHaveNulls()) { + if (offsets->null_count() > 0) { ARROW_ASSIGN_OR_RAISE(auto buffers, CleanListOffsets(NULLPTR, *offsets, pool)); return std::make_shared(type, offsets->length() - 1, std::move(buffers), @@ -845,34 +792,24 @@ Result> MapArray::FromArraysInternal( using OffsetArrayType = typename TypeTraits::ArrayType; const auto& typed_offsets = checked_cast(*offsets); - - BufferVector buffers; - buffers.resize(2); - int64_t null_count = 0; - if (null_bitmap) { - buffers[0] = std::move(null_bitmap); - null_count = kUnknownNullCount; - } - buffers[1] = typed_offsets.values(); + auto buffers = BufferVector({nullptr, typed_offsets.values()}); return std::make_shared(type, offsets->length() - 1, std::move(buffers), keys, - items, /*null_count=*/null_count, offsets->offset()); + items, /*null_count=*/0, offsets->offset()); } Result> MapArray::FromArrays(const std::shared_ptr& offsets, const std::shared_ptr& keys, const std::shared_ptr& items, - MemoryPool* pool, - std::shared_ptr null_bitmap) { + MemoryPool* pool) { return FromArraysInternal(std::make_shared(keys->type(), items->type()), - offsets, keys, items, pool, std::move(null_bitmap)); + offsets, keys, items, pool); } Result> MapArray::FromArrays(std::shared_ptr type, const std::shared_ptr& offsets, const std::shared_ptr& keys, const std::shared_ptr& items, - MemoryPool* pool, - std::shared_ptr null_bitmap) { + MemoryPool* pool) { if (type->id() != Type::MAP) { return Status::TypeError("Expected map type, got ", type->ToString()); } @@ -883,8 +820,7 @@ Result> MapArray::FromArrays(std::shared_ptr ty if (!map_type.item_type()->Equals(items->type())) { return Status::TypeError("Mismatching map items type"); } - return FromArraysInternal(std::move(type), offsets, keys, items, pool, - std::move(null_bitmap)); + return FromArraysInternal(std::move(type), offsets, keys, items, pool); } Status MapArray::ValidateChildData( @@ -896,13 +832,13 @@ Status MapArray::ValidateChildData( if (pair_data->type->id() != Type::STRUCT) { return Status::Invalid("Map array child array should have struct type"); } - if (pair_data->MayHaveNulls()) { + if (pair_data->null_count != 0) { return Status::Invalid("Map array child array should have no nulls"); } if (pair_data->child_data.size() != 2) { return Status::Invalid("Map array child array should have two fields"); } - if (pair_data->child_data[0]->MayHaveNulls()) { + if (pair_data->child_data[0]->null_count != 0) { return Status::Invalid("Map array keys array should have no nulls"); } return Status::OK(); @@ -1197,7 +1133,7 @@ void SparseUnionArray::SetData(std::shared_ptr data) { } void DenseUnionArray::SetData(const std::shared_ptr& data) { - this->UnionArray::SetData(data); + this->UnionArray::SetData(std::move(data)); ARROW_CHECK_EQ(data_->type->id(), Type::DENSE_UNION); ARROW_CHECK_EQ(data_->buffers.size(), 3); diff --git a/cpp/src/arrow/array/array_nested.h b/cpp/src/arrow/array/array_nested.h index a6d4977839e..768a630e0af 100644 --- a/cpp/src/arrow/array/array_nested.h +++ b/cpp/src/arrow/array/array_nested.h @@ -58,20 +58,6 @@ void SetListData(VarLengthListLikeArray* self, const std::shared_ptr& data, Type::type expected_type_id = TYPE::type_id); -/// \brief A version of Flatten that keeps recursively flattening until an array of -/// non-list values is reached. -/// -/// Array types considered to be lists by this function: -/// - list -/// - large_list -/// - list_view -/// - large_list_view -/// - fixed_size_list -/// -/// \see ListArray::Flatten -ARROW_EXPORT Result> FlattenLogicalListRecursively( - const Array& in_array, MemoryPool* memory_pool); - } // namespace internal /// Base class for variable-sized list and list-view arrays, regardless of offset size. @@ -117,15 +103,6 @@ class VarLengthListLikeArray : public Array { return values_->Slice(value_offset(i), value_length(i)); } - /// \brief Flatten all level recursively until reach a non-list type, and return - /// a non-list type Array. - /// - /// \see internal::FlattenLogicalListRecursively - Result> FlattenRecursively( - MemoryPool* memory_pool = default_memory_pool()) const { - return internal::FlattenLogicalListRecursively(*this, memory_pool); - } - protected: friend void internal::SetListData(VarLengthListLikeArray* self, const std::shared_ptr& data, @@ -532,18 +509,15 @@ class ARROW_EXPORT MapArray : public ListArray { /// \param[in] keys Array containing key values /// \param[in] items Array containing item values /// \param[in] pool MemoryPool in case new offsets array needs to be - /// \param[in] null_bitmap Optional validity bitmap /// allocated because of null values static Result> FromArrays( const std::shared_ptr& offsets, const std::shared_ptr& keys, - const std::shared_ptr& items, MemoryPool* pool = default_memory_pool(), - std::shared_ptr null_bitmap = NULLPTR); + const std::shared_ptr& items, MemoryPool* pool = default_memory_pool()); static Result> FromArrays( std::shared_ptr type, const std::shared_ptr& offsets, const std::shared_ptr& keys, const std::shared_ptr& items, - MemoryPool* pool = default_memory_pool(), - std::shared_ptr null_bitmap = NULLPTR); + MemoryPool* pool = default_memory_pool()); const MapType* map_type() const { return map_type_; } @@ -563,7 +537,7 @@ class ARROW_EXPORT MapArray : public ListArray { static Result> FromArraysInternal( std::shared_ptr type, const std::shared_ptr& offsets, const std::shared_ptr& keys, const std::shared_ptr& items, - MemoryPool* pool, std::shared_ptr null_bitmap = NULLPTR); + MemoryPool* pool); private: const MapType* map_type_; @@ -621,15 +595,6 @@ class ARROW_EXPORT FixedSizeListArray : public Array { Result> Flatten( MemoryPool* memory_pool = default_memory_pool()) const; - /// \brief Flatten all level recursively until reach a non-list type, and return - /// a non-list type Array. - /// - /// \see internal::FlattenLogicalListRecursively - Result> FlattenRecursively( - MemoryPool* memory_pool = default_memory_pool()) const { - return internal::FlattenLogicalListRecursively(*this, memory_pool); - } - /// \brief Construct FixedSizeListArray from child value array and value_length /// /// \param[in] values Array containing list values diff --git a/cpp/src/arrow/array/array_primitive.cc b/cpp/src/arrow/array/array_primitive.cc index da3810aa392..7c4a14d9340 100644 --- a/cpp/src/arrow/array/array_primitive.cc +++ b/cpp/src/arrow/array/array_primitive.cc @@ -56,7 +56,7 @@ int64_t BooleanArray::false_count() const { } int64_t BooleanArray::true_count() const { - if (data_->MayHaveNulls()) { + if (data_->null_count.load() != 0) { DCHECK(data_->buffers[0]); return internal::CountAndSetBits(data_->buffers[0]->data(), data_->offset, data_->buffers[1]->data(), data_->offset, diff --git a/cpp/src/arrow/array/array_test.cc b/cpp/src/arrow/array/array_test.cc index 32806d9d2ed..21ac1a09f56 100644 --- a/cpp/src/arrow/array/array_test.cc +++ b/cpp/src/arrow/array/array_test.cc @@ -22,7 +22,6 @@ #include #include #include -#include #include #include #include @@ -478,7 +477,6 @@ TEST_F(TestArray, TestMakeArrayOfNull) { ASSERT_EQ(array->type(), type); ASSERT_OK(array->ValidateFull()); ASSERT_EQ(array->length(), length); - ASSERT_EQ(array->device_type(), DeviceAllocationType::kCPU); if (is_union(type->id())) { ASSERT_EQ(array->null_count(), 0); ASSERT_EQ(array->ComputeLogicalNullCount(), length); @@ -605,11 +603,11 @@ void AssertAppendScalar(MemoryPool* pool, const std::shared_ptr& scalar) ASSERT_EQ(out->length(), 9); auto out_type_id = out->type()->id(); - const bool can_check_nulls = internal::may_have_validity_bitmap(out_type_id); + const bool has_validity = internal::HasValidityBitmap(out_type_id); // For a dictionary builder, the output dictionary won't necessarily be the same const bool can_check_values = !is_dictionary(out_type_id); - if (can_check_nulls) { + if (has_validity) { ASSERT_EQ(out->null_count(), 4); } else { ASSERT_EQ(out->null_count(), 0); @@ -720,7 +718,6 @@ TEST_F(TestArray, TestMakeArrayFromScalar) { ASSERT_OK(array->ValidateFull()); ASSERT_EQ(array->length(), length); ASSERT_EQ(array->null_count(), 0); - ASSERT_EQ(array->device_type(), DeviceAllocationType::kCPU); // test case for ARROW-13321 for (int64_t i : {int64_t{0}, length / 2, length - 1}) { @@ -746,7 +743,6 @@ TEST_F(TestArray, TestMakeArrayFromScalarSliced) { auto sliced = array->Slice(1, 4); ASSERT_EQ(sliced->length(), 4); ASSERT_EQ(sliced->null_count(), 0); - ASSERT_EQ(array->device_type(), DeviceAllocationType::kCPU); ARROW_EXPECT_OK(sliced->ValidateFull()); } } @@ -761,7 +757,6 @@ TEST_F(TestArray, TestMakeArrayFromDictionaryScalar) { ASSERT_OK(array->ValidateFull()); ASSERT_EQ(array->length(), 4); ASSERT_EQ(array->null_count(), 0); - ASSERT_EQ(array->device_type(), DeviceAllocationType::kCPU); for (int i = 0; i < 4; i++) { ASSERT_OK_AND_ASSIGN(auto item, array->GetScalar(i)); @@ -801,7 +796,6 @@ TEST_F(TestArray, TestMakeEmptyArray) { ASSERT_OK_AND_ASSIGN(auto array, MakeEmptyArray(type)); ASSERT_OK(array->ValidateFull()); ASSERT_EQ(array->length(), 0); - CheckSpanRoundTrip(*array); } } @@ -829,44 +823,6 @@ TEST_F(TestArray, TestFillFromScalar) { } } -// GH-40069: Data-race when concurrent calling ArraySpan::FillFromScalar of the same -// scalar instance. -TEST_F(TestArray, TestConcurrentFillFromScalar) { -#ifndef ARROW_ENABLE_THREADING - GTEST_SKIP() << "Test requires threading support"; -#endif - for (auto type : TestArrayUtilitiesAgainstTheseTypes()) { - ARROW_SCOPED_TRACE("type = ", type->ToString()); - for (auto seed : {0u, 0xdeadbeef, 42u}) { - ARROW_SCOPED_TRACE("seed = ", seed); - - Field field("", type, /*nullable=*/true, - key_value_metadata({{"extension_allow_random_storage", "true"}})); - auto array = random::GenerateArray(field, 1, seed); - - ASSERT_OK_AND_ASSIGN(auto scalar, array->GetScalar(0)); - - // Lambda to create fill an ArraySpan with the scalar and use the ArraySpan a bit. - auto array_span_from_scalar = [&]() { - ArraySpan span(*scalar); - auto roundtripped_array = span.ToArray(); - ASSERT_OK(roundtripped_array->ValidateFull()); - - AssertArraysEqual(*array, *roundtripped_array); - ASSERT_OK_AND_ASSIGN(auto roundtripped_scalar, roundtripped_array->GetScalar(0)); - AssertScalarsEqual(*scalar, *roundtripped_scalar); - }; - - // Two concurrent calls to the lambda are just enough for TSAN to detect a race - // condition. - auto fut1 = std::async(std::launch::async, array_span_from_scalar); - auto fut2 = std::async(std::launch::async, array_span_from_scalar); - fut1.get(); - fut2.get(); - } - } -} - TEST_F(TestArray, ExtensionSpanRoundTrip) { // Other types are checked in MakeEmptyArray but MakeEmptyArray doesn't // work for extension types so we check that here @@ -899,8 +855,7 @@ TEST_F(TestArray, TestAppendArraySlice) { span.SetMembers(*nulls->data()); ASSERT_OK(builder->AppendArraySlice(span, 0, 4)); ASSERT_EQ(12, builder->length()); - const bool has_validity_bitmap = - internal::may_have_validity_bitmap(scalar->type->id()); + const bool has_validity_bitmap = internal::HasValidityBitmap(scalar->type->id()); if (has_validity_bitmap) { ASSERT_EQ(4, builder->null_count()); } @@ -1352,13 +1307,6 @@ TEST(TestBooleanArray, TrueCountFalseCount) { CheckArray(checked_cast(*arr)); CheckArray(checked_cast(*arr->Slice(5))); CheckArray(checked_cast(*arr->Slice(0, 0))); - - // GH-41016 true_count() with array without validity buffer with null_count of -1 - auto arr_unknown_null_count = ArrayFromJSON(boolean(), "[true, false, true]"); - arr_unknown_null_count->data()->null_count = kUnknownNullCount; - ASSERT_EQ(arr_unknown_null_count->data()->null_count.load(), -1); - ASSERT_EQ(arr_unknown_null_count->null_bitmap(), nullptr); - ASSERT_EQ(checked_pointer_cast(arr_unknown_null_count)->true_count(), 2); } TEST(TestPrimitiveAdHoc, TestType) { diff --git a/cpp/src/arrow/array/builder_base.h b/cpp/src/arrow/array/builder_base.h index ecd2136f5d2..11036797e01 100644 --- a/cpp/src/arrow/array/builder_base.h +++ b/cpp/src/arrow/array/builder_base.h @@ -175,9 +175,8 @@ class ARROW_EXPORT ArrayBuilder { /// \brief Append a range of values from an array. /// /// The given array must be the same type as the builder. - virtual Status AppendArraySlice(const ArraySpan& ARROW_ARG_UNUSED(array), - int64_t ARROW_ARG_UNUSED(offset), - int64_t ARROW_ARG_UNUSED(length)) { + virtual Status AppendArraySlice(const ArraySpan& array, int64_t offset, + int64_t length) { return Status::NotImplemented("AppendArraySlice for builder for ", *type()); } @@ -332,7 +331,7 @@ inline Result> MakeBuilder( const std::shared_ptr& type, MemoryPool* pool = default_memory_pool()) { std::unique_ptr out; ARROW_RETURN_NOT_OK(MakeBuilder(pool, type, &out)); - return out; + return std::move(out); } /// \brief Construct an empty ArrayBuilder corresponding to the data @@ -346,7 +345,7 @@ inline Result> MakeBuilderExactIndex( const std::shared_ptr& type, MemoryPool* pool = default_memory_pool()) { std::unique_ptr out; ARROW_RETURN_NOT_OK(MakeBuilderExactIndex(pool, type, &out)); - return out; + return std::move(out); } /// \brief Construct an empty DictionaryBuilder initialized optionally @@ -365,7 +364,7 @@ inline Result> MakeDictionaryBuilder( MemoryPool* pool = default_memory_pool()) { std::unique_ptr out; ARROW_RETURN_NOT_OK(MakeDictionaryBuilder(pool, type, dictionary, &out)); - return out; + return std::move(out); } } // namespace arrow diff --git a/cpp/src/arrow/array/builder_binary.h b/cpp/src/arrow/array/builder_binary.h index 442e4a26320..d825f7d3252 100644 --- a/cpp/src/arrow/array/builder_binary.h +++ b/cpp/src/arrow/array/builder_binary.h @@ -500,9 +500,9 @@ class ARROW_EXPORT StringHeapBuilder { ARROW_RETURN_NOT_OK(Reserve(length)); } - auto v = util::ToNonInlineBinaryView(value, static_cast(length), - static_cast(blocks_.size() - 1), - current_offset_); + auto v = + util::ToBinaryView(value, static_cast(length), + static_cast(blocks_.size() - 1), current_offset_); memcpy(current_out_buffer_, value, static_cast(length)); current_out_buffer_ += length; diff --git a/cpp/src/arrow/array/builder_nested.h b/cpp/src/arrow/array/builder_nested.h index 1851ef91222..429aa5c0488 100644 --- a/cpp/src/arrow/array/builder_nested.h +++ b/cpp/src/arrow/array/builder_nested.h @@ -181,11 +181,13 @@ class ARROW_EXPORT VarLengthListLikeBuilder : public ArrayBuilder { if constexpr (is_list_view(TYPE::type_id)) { sizes = array.GetValues(2); } - static_assert(internal::may_have_validity_bitmap(TYPE::type_id)); - const uint8_t* validity = array.MayHaveNulls() ? array.buffers[0].data : NULLPTR; + const bool all_valid = !array.MayHaveLogicalNulls(); + const uint8_t* validity = array.HasValidityBitmap() ? array.buffers[0].data : NULLPTR; ARROW_RETURN_NOT_OK(Reserve(length)); for (int64_t row = offset; row < offset + length; row++) { - const bool is_valid = !validity || bit_util::GetBit(validity, array.offset + row); + const bool is_valid = + all_valid || (validity && bit_util::GetBit(validity, array.offset + row)) || + array.IsValid(row); int64_t size = 0; if (is_valid) { if constexpr (is_list_view(TYPE::type_id)) { @@ -248,7 +250,7 @@ class ARROW_EXPORT VarLengthListLikeBuilder : public ArrayBuilder { /// \brief Append dimensions for a single list slot. /// /// ListViewBuilder overrides this to also append the size. - virtual void UnsafeAppendDimensions(int64_t offset, int64_t ARROW_ARG_UNUSED(size)) { + virtual void UnsafeAppendDimensions(int64_t offset, int64_t size) { offsets_builder_.UnsafeAppend(static_cast(offset)); } @@ -567,11 +569,13 @@ class ARROW_EXPORT MapBuilder : public ArrayBuilder { Status AppendArraySlice(const ArraySpan& array, int64_t offset, int64_t length) override { - const auto* offsets = array.GetValues(1); - static_assert(internal::may_have_validity_bitmap(MapType::type_id)); - const uint8_t* validity = array.MayHaveNulls() ? array.buffers[0].data : NULLPTR; + const int32_t* offsets = array.GetValues(1); + const bool all_valid = !array.MayHaveLogicalNulls(); + const uint8_t* validity = array.HasValidityBitmap() ? array.buffers[0].data : NULLPTR; for (int64_t row = offset; row < offset + length; row++) { - const bool is_valid = !validity || bit_util::GetBit(validity, array.offset + row); + const bool is_valid = + all_valid || (validity && bit_util::GetBit(validity, array.offset + row)) || + array.IsValid(row); if (is_valid) { ARROW_RETURN_NOT_OK(Append()); const int64_t slot_length = offsets[row + 1] - offsets[row]; @@ -642,8 +646,6 @@ class ARROW_EXPORT MapBuilder : public ArrayBuilder { /// \brief Builder class for fixed-length list array value types class ARROW_EXPORT FixedSizeListBuilder : public ArrayBuilder { public: - using TypeClass = FixedSizeListType; - /// Use this constructor to define the built array's type explicitly. If value_builder /// has indeterminate type, this builder will also. FixedSizeListBuilder(MemoryPool* pool, diff --git a/cpp/src/arrow/array/builder_primitive.h b/cpp/src/arrow/array/builder_primitive.h index de7af1b46bd..29e01d55ede 100644 --- a/cpp/src/arrow/array/builder_primitive.h +++ b/cpp/src/arrow/array/builder_primitive.h @@ -32,10 +32,9 @@ namespace arrow { class ARROW_EXPORT NullBuilder : public ArrayBuilder { public: explicit NullBuilder(MemoryPool* pool = default_memory_pool(), - int64_t ARROW_ARG_UNUSED(alignment) = kDefaultBufferAlignment) + int64_t alignment = kDefaultBufferAlignment) : ArrayBuilder(pool) {} - - explicit NullBuilder(const std::shared_ptr& ARROW_ARG_UNUSED(type), + explicit NullBuilder(const std::shared_ptr& type, MemoryPool* pool = default_memory_pool(), int64_t alignment = kDefaultBufferAlignment) : NullBuilder(pool, alignment) {} diff --git a/cpp/src/arrow/array/builder_run_end.cc b/cpp/src/arrow/array/builder_run_end.cc index ed384123d8b..cff8d729523 100644 --- a/cpp/src/arrow/array/builder_run_end.cc +++ b/cpp/src/arrow/array/builder_run_end.cc @@ -162,7 +162,8 @@ Status RunCompressorBuilder::FinishInternal(std::shared_ptr* out) { RunEndEncodedBuilder::ValueRunBuilder::ValueRunBuilder( MemoryPool* pool, const std::shared_ptr& value_builder, const std::shared_ptr& value_type, RunEndEncodedBuilder& ree_builder) - : RunCompressorBuilder(pool, value_builder, value_type), ree_builder_(ree_builder) {} + : RunCompressorBuilder(pool, std::move(value_builder), std::move(value_type)), + ree_builder_(ree_builder) {} RunEndEncodedBuilder::RunEndEncodedBuilder( MemoryPool* pool, const std::shared_ptr& run_end_builder, diff --git a/cpp/src/arrow/array/concatenate.cc b/cpp/src/arrow/array/concatenate.cc index b4638dd6593..ff9ed66d114 100644 --- a/cpp/src/arrow/array/concatenate.cc +++ b/cpp/src/arrow/array/concatenate.cc @@ -75,31 +75,6 @@ struct Bitmap { bool AllSet() const { return data == nullptr; } }; -enum class OffsetBufferOpOutcome { - kOk, - kOffsetOverflow, -}; - -Status OffsetOverflowStatus() { - return Status::Invalid("offset overflow while concatenating arrays"); -} - -#define RETURN_IF_NOT_OK_OUTCOME(outcome) \ - switch (outcome) { \ - case OffsetBufferOpOutcome::kOk: \ - break; \ - case OffsetBufferOpOutcome::kOffsetOverflow: \ - return OffsetOverflowStatus(); \ - } - -struct ErrorHints { - /// \brief Suggested cast to avoid overflow during concatenation. - /// - /// If the concatenation of offsets overflows, this field might be set to the - /// a type that uses larger offsets (e.g. large_utf8, large_list). - std::shared_ptr suggested_cast; -}; - // Allocate a buffer and concatenate bitmaps into it. Status ConcatenateBitmaps(const std::vector& bitmaps, MemoryPool* pool, std::shared_ptr* out) { @@ -137,16 +112,15 @@ int64_t SumBufferSizesInBytes(const BufferVector& buffers) { // Write offsets in src into dst, adjusting them such that first_offset // will be the first offset written. template -Result PutOffsets(const Buffer& src, Offset first_offset, - Offset* dst, Range* values_range); +Status PutOffsets(const Buffer& src, Offset first_offset, Offset* dst, + Range* values_range); // Concatenate buffers holding offsets into a single buffer of offsets, // also computing the ranges of values spanned by each buffer of offsets. template -Result ConcatenateOffsets(const BufferVector& buffers, - MemoryPool* pool, - std::shared_ptr* out, - std::vector* values_ranges) { +Status ConcatenateOffsets(const BufferVector& buffers, MemoryPool* pool, + std::shared_ptr* out, + std::vector* values_ranges) { values_ranges->resize(buffers.size()); // allocate output buffer @@ -159,30 +133,26 @@ Result ConcatenateOffsets(const BufferVector& buffers, for (size_t i = 0; i < buffers.size(); ++i) { // the first offset from buffers[i] will be adjusted to values_length // (the cumulative length of values spanned by offsets in previous buffers) - ARROW_ASSIGN_OR_RAISE(auto outcome, PutOffsets(*buffers[i], values_length, - out_data + elements_length, - &(*values_ranges)[i])); - if (ARROW_PREDICT_FALSE(outcome != OffsetBufferOpOutcome::kOk)) { - return outcome; - } + RETURN_NOT_OK(PutOffsets(*buffers[i], values_length, + out_data + elements_length, &(*values_ranges)[i])); elements_length += buffers[i]->size() / sizeof(Offset); values_length += static_cast((*values_ranges)[i].length); } // the final element in out_data is the length of all values spanned by the offsets out_data[out_size_in_bytes / sizeof(Offset)] = values_length; - return OffsetBufferOpOutcome::kOk; + return Status::OK(); } template -Result PutOffsets(const Buffer& src, Offset first_offset, - Offset* dst, Range* values_range) { +Status PutOffsets(const Buffer& src, Offset first_offset, Offset* dst, + Range* values_range) { if (src.size() == 0) { // It's allowed to have an empty offsets buffer for a 0-length array // (see Array::Validate) values_range->offset = 0; values_range->length = 0; - return OffsetBufferOpOutcome::kOk; + return Status::OK(); } // Get the range of offsets to transfer from src @@ -192,9 +162,8 @@ Result PutOffsets(const Buffer& src, Offset first_offset, // Compute the range of values which is spanned by this range of offsets values_range->offset = src_begin[0]; values_range->length = *src_end - values_range->offset; - if (ARROW_PREDICT_FALSE(first_offset > - std::numeric_limits::max() - values_range->length)) { - return OffsetBufferOpOutcome::kOffsetOverflow; + if (first_offset > std::numeric_limits::max() - values_range->length) { + return Status::Invalid("offset overflow while concatenating arrays"); } // Write offsets into dst, ensuring that the first offset written is @@ -206,14 +175,12 @@ Result PutOffsets(const Buffer& src, Offset first_offset, std::transform(src_begin, src_end, dst, [displacement](Offset offset) { return SafeSignedAdd(offset, displacement); }); - return OffsetBufferOpOutcome::kOk; + return Status::OK(); } template -Result PutListViewOffsets(const ArrayData& input, - offset_type* sizes, const Buffer& src, - offset_type displacement, - offset_type* dst); +Status PutListViewOffsets(const ArrayData& input, offset_type* sizes, const Buffer& src, + offset_type displacement, offset_type* dst); // Concatenate buffers holding list-view offsets into a single buffer of offsets // @@ -231,10 +198,10 @@ Result PutListViewOffsets(const ArrayData& input, // \param[in] in The child arrays // \param[in,out] sizes The concatenated sizes buffer template -Result ConcatenateListViewOffsets( - const ArrayDataVector& in, offset_type* sizes, const BufferVector& offset_buffers, - const std::vector& value_ranges, MemoryPool* pool, - std::shared_ptr* out) { +Status ConcatenateListViewOffsets(const ArrayDataVector& in, offset_type* sizes, + const BufferVector& offset_buffers, + const std::vector& value_ranges, + MemoryPool* pool, std::shared_ptr* out) { DCHECK_EQ(offset_buffers.size(), value_ranges.size()); // Allocate resulting offsets buffer and initialize it with zeros @@ -249,32 +216,26 @@ Result ConcatenateListViewOffsets( for (size_t i = 0; i < offset_buffers.size(); ++i) { const auto displacement = static_cast(num_child_values - value_ranges[i].offset); - ARROW_ASSIGN_OR_RAISE(auto outcome, - PutListViewOffsets(*in[i], /*sizes=*/sizes + elements_length, - /*src=*/*offset_buffers[i], displacement, - /*dst=*/out_offsets + elements_length)); - if (ARROW_PREDICT_FALSE(outcome != OffsetBufferOpOutcome::kOk)) { - return outcome; - } + RETURN_NOT_OK(PutListViewOffsets(*in[i], /*sizes=*/sizes + elements_length, + /*src=*/*offset_buffers[i], displacement, + /*dst=*/out_offsets + elements_length)); elements_length += offset_buffers[i]->size() / sizeof(offset_type); num_child_values += value_ranges[i].length; if (num_child_values > std::numeric_limits::max()) { - return OffsetBufferOpOutcome::kOffsetOverflow; + return Status::Invalid("offset overflow while concatenating arrays"); } } DCHECK_EQ(elements_length, static_cast(out_size_in_bytes / sizeof(offset_type))); - return OffsetBufferOpOutcome::kOk; + return Status::OK(); } template -Result PutListViewOffsets(const ArrayData& input, - offset_type* sizes, const Buffer& src, - offset_type displacement, - offset_type* dst) { +Status PutListViewOffsets(const ArrayData& input, offset_type* sizes, const Buffer& src, + offset_type displacement, offset_type* dst) { if (src.size() == 0) { - return OffsetBufferOpOutcome::kOk; + return Status::OK(); } const auto& validity_buffer = input.buffers[0]; if (validity_buffer) { @@ -330,7 +291,7 @@ Result PutListViewOffsets(const ArrayData& input, } } } - return OffsetBufferOpOutcome::kOk; + return Status::OK(); } class ConcatenateImpl { @@ -355,17 +316,11 @@ class ConcatenateImpl { } } - Status Concatenate(std::shared_ptr* out, ErrorHints* out_hints) && { - if (out_->null_count != 0 && internal::may_have_validity_bitmap(out_->type->id())) { + Status Concatenate(std::shared_ptr* out) && { + if (out_->null_count != 0 && internal::HasValidityBitmap(out_->type->id())) { RETURN_NOT_OK(ConcatenateBitmaps(Bitmaps(0), pool_, &out_->buffers[0])); } - auto status = VisitTypeInline(*out_->type, this); - if (!status.ok()) { - if (out_hints) { - out_hints->suggested_cast = std::move(suggested_cast_); - } - return status; - } + RETURN_NOT_OK(VisitTypeInline(*out_->type, this)); *out = std::move(out_); return Status::OK(); } @@ -382,29 +337,11 @@ class ConcatenateImpl { return ConcatenateBuffers(buffers, pool_).Value(&out_->buffers[1]); } - Status Visit(const BinaryType& input_type) { + Status Visit(const BinaryType&) { std::vector value_ranges; ARROW_ASSIGN_OR_RAISE(auto index_buffers, Buffers(1, sizeof(int32_t))); - ARROW_ASSIGN_OR_RAISE( - auto outcome, ConcatenateOffsets(index_buffers, pool_, &out_->buffers[1], - &value_ranges)); - switch (outcome) { - case OffsetBufferOpOutcome::kOk: - break; - case OffsetBufferOpOutcome::kOffsetOverflow: - switch (input_type.id()) { - case Type::BINARY: - suggested_cast_ = large_binary(); - break; - case Type::STRING: - suggested_cast_ = large_utf8(); - break; - default: - DCHECK(false) << "unexpected type id from BinaryType: " << input_type; - break; - } - return OffsetOverflowStatus(); - } + RETURN_NOT_OK(ConcatenateOffsets(index_buffers, pool_, &out_->buffers[1], + &value_ranges)); ARROW_ASSIGN_OR_RAISE(auto value_buffers, Buffers(2, value_ranges)); return ConcatenateBuffers(value_buffers, pool_).Value(&out_->buffers[2]); } @@ -412,10 +349,8 @@ class ConcatenateImpl { Status Visit(const LargeBinaryType&) { std::vector value_ranges; ARROW_ASSIGN_OR_RAISE(auto index_buffers, Buffers(1, sizeof(int64_t))); - ARROW_ASSIGN_OR_RAISE( - auto outcome, ConcatenateOffsets(index_buffers, pool_, &out_->buffers[1], - &value_ranges)); - RETURN_IF_NOT_OK_OUTCOME(outcome); + RETURN_NOT_OK(ConcatenateOffsets(index_buffers, pool_, &out_->buffers[1], + &value_ranges)); ARROW_ASSIGN_OR_RAISE(auto value_buffers, Buffers(2, value_ranges)); return ConcatenateBuffers(value_buffers, pool_).Value(&out_->buffers[2]); } @@ -459,44 +394,22 @@ class ConcatenateImpl { return Status::OK(); } - Status Visit(const ListType& input_type) { + Status Visit(const ListType&) { std::vector value_ranges; ARROW_ASSIGN_OR_RAISE(auto index_buffers, Buffers(1, sizeof(int32_t))); - ARROW_ASSIGN_OR_RAISE(auto offsets_outcome, - ConcatenateOffsets(index_buffers, pool_, - &out_->buffers[1], &value_ranges)); - switch (offsets_outcome) { - case OffsetBufferOpOutcome::kOk: - break; - case OffsetBufferOpOutcome::kOffsetOverflow: - suggested_cast_ = large_list(input_type.value_type()); - return OffsetOverflowStatus(); - } + RETURN_NOT_OK(ConcatenateOffsets(index_buffers, pool_, &out_->buffers[1], + &value_ranges)); ARROW_ASSIGN_OR_RAISE(auto child_data, ChildData(0, value_ranges)); - ErrorHints child_error_hints; - auto status = ConcatenateImpl(child_data, pool_) - .Concatenate(&out_->child_data[0], &child_error_hints); - if (!status.ok() && child_error_hints.suggested_cast) { - suggested_cast_ = list(std::move(child_error_hints.suggested_cast)); - } - return status; + return ConcatenateImpl(child_data, pool_).Concatenate(&out_->child_data[0]); } Status Visit(const LargeListType&) { std::vector value_ranges; ARROW_ASSIGN_OR_RAISE(auto index_buffers, Buffers(1, sizeof(int64_t))); - ARROW_ASSIGN_OR_RAISE( - auto outcome, ConcatenateOffsets(index_buffers, pool_, &out_->buffers[1], - &value_ranges)); - RETURN_IF_NOT_OK_OUTCOME(outcome); + RETURN_NOT_OK(ConcatenateOffsets(index_buffers, pool_, &out_->buffers[1], + &value_ranges)); ARROW_ASSIGN_OR_RAISE(auto child_data, ChildData(0, value_ranges)); - ErrorHints child_error_hints; - auto status = ConcatenateImpl(child_data, pool_) - .Concatenate(&out_->child_data[0], &child_error_hints); - if (!status.ok() && child_error_hints.suggested_cast) { - suggested_cast_ = large_list(std::move(child_error_hints.suggested_cast)); - } - return status; + return ConcatenateImpl(child_data, pool_).Concatenate(&out_->child_data[0]); } template @@ -517,17 +430,8 @@ class ConcatenateImpl { } // Concatenate the values - ErrorHints child_error_hints; ARROW_ASSIGN_OR_RAISE(ArrayDataVector value_data, ChildData(0, value_ranges)); - auto values_status = ConcatenateImpl(value_data, pool_) - .Concatenate(&out_->child_data[0], &child_error_hints); - if (!values_status.ok()) { - if (child_error_hints.suggested_cast) { - suggested_cast_ = std::make_shared>( - std::move(child_error_hints.suggested_cast)); - } - return values_status; - } + RETURN_NOT_OK(ConcatenateImpl(value_data, pool_).Concatenate(&out_->child_data[0])); out_->child_data[0]->type = type.value_type(); // Concatenate the sizes first @@ -536,39 +440,22 @@ class ConcatenateImpl { // Concatenate the offsets ARROW_ASSIGN_OR_RAISE(auto offset_buffers, Buffers(1, sizeof(offset_type))); - ARROW_ASSIGN_OR_RAISE( - auto outcome, ConcatenateListViewOffsets( - in_, /*sizes=*/out_->buffers[2]->mutable_data_as(), - offset_buffers, value_ranges, pool_, &out_->buffers[1])); - switch (outcome) { - case OffsetBufferOpOutcome::kOk: - break; - case OffsetBufferOpOutcome::kOffsetOverflow: - if constexpr (T::type_id == Type::LIST_VIEW) { - suggested_cast_ = large_list_view(type.value_type()); - } - return OffsetOverflowStatus(); - } + RETURN_NOT_OK(ConcatenateListViewOffsets( + in_, /*sizes=*/out_->buffers[2]->mutable_data_as(), offset_buffers, + value_ranges, pool_, &out_->buffers[1])); + return Status::OK(); } - Status Visit(const FixedSizeListType& fsl_type) { - ARROW_ASSIGN_OR_RAISE(auto child_data, ChildData(0, fsl_type.list_size())); - ErrorHints hints; - auto status = - ConcatenateImpl(child_data, pool_).Concatenate(&out_->child_data[0], &hints); - if (!status.ok() && hints.suggested_cast) { - suggested_cast_ = - fixed_size_list(std::move(hints.suggested_cast), fsl_type.list_size()); - } - return status; + Status Visit(const FixedSizeListType& fixed_size_list) { + ARROW_ASSIGN_OR_RAISE(auto child_data, ChildData(0, fixed_size_list.list_size())); + return ConcatenateImpl(child_data, pool_).Concatenate(&out_->child_data[0]); } Status Visit(const StructType& s) { for (int i = 0; i < s.num_fields(); ++i) { ARROW_ASSIGN_OR_RAISE(auto child_data, ChildData(i)); - RETURN_NOT_OK(ConcatenateImpl(child_data, pool_) - .Concatenate(&out_->child_data[i], /*hints=*/nullptr)); + RETURN_NOT_OK(ConcatenateImpl(child_data, pool_).Concatenate(&out_->child_data[i])); } return Status::OK(); } @@ -635,8 +522,7 @@ class ConcatenateImpl { } out_data += data->length * index_width; } - // R build with openSUSE155 requires an explicit shared_ptr construction - return std::shared_ptr(std::move(out)); + return std::move(out); } Status Visit(const DictionaryType& d) { @@ -683,8 +569,8 @@ class ConcatenateImpl { case UnionMode::SPARSE: { for (int i = 0; i < u.num_fields(); i++) { ARROW_ASSIGN_OR_RAISE(auto child_data, ChildData(i)); - RETURN_NOT_OK(ConcatenateImpl(child_data, pool_) - .Concatenate(&out_->child_data[i], /*hints=*/nullptr)); + RETURN_NOT_OK( + ConcatenateImpl(child_data, pool_).Concatenate(&out_->child_data[i])); } break; } @@ -694,8 +580,8 @@ class ConcatenateImpl { for (size_t j = 0; j < in_.size(); j++) { child_data[j] = in_[j]->child_data[i]; } - RETURN_NOT_OK(ConcatenateImpl(child_data, pool_) - .Concatenate(&out_->child_data[i], /*hints=*/nullptr)); + RETURN_NOT_OK( + ConcatenateImpl(child_data, pool_).Concatenate(&out_->child_data[i])); } break; } @@ -779,8 +665,7 @@ class ConcatenateImpl { storage_data[i]->type = e.storage_type(); } std::shared_ptr out_storage; - RETURN_NOT_OK(ConcatenateImpl(storage_data, pool_) - .Concatenate(&out_storage, /*hints=*/nullptr)); + RETURN_NOT_OK(ConcatenateImpl(storage_data, pool_).Concatenate(&out_storage)); out_storage->type = in_[0]->type; out_ = std::move(out_storage); return Status::OK(); @@ -911,18 +796,11 @@ class ConcatenateImpl { const ArrayDataVector& in_; MemoryPool* pool_; std::shared_ptr out_; - std::shared_ptr suggested_cast_; }; } // namespace -namespace internal { - -Result> Concatenate( - const ArrayVector& arrays, MemoryPool* pool, - std::shared_ptr* out_suggested_cast) { - DCHECK(out_suggested_cast); - *out_suggested_cast = nullptr; +Result> Concatenate(const ArrayVector& arrays, MemoryPool* pool) { if (arrays.size() == 0) { return Status::Invalid("Must pass at least one array"); } @@ -939,31 +817,8 @@ Result> Concatenate( } std::shared_ptr out_data; - ErrorHints hints; - auto status = ConcatenateImpl(data, pool).Concatenate(&out_data, &hints); - if (!status.ok()) { - if (hints.suggested_cast) { - DCHECK(status.IsInvalid()); - *out_suggested_cast = std::move(hints.suggested_cast); - } - return status; - } + RETURN_NOT_OK(ConcatenateImpl(data, pool).Concatenate(&out_data)); return MakeArray(std::move(out_data)); } -} // namespace internal - -Result> Concatenate(const ArrayVector& arrays, MemoryPool* pool) { - std::shared_ptr suggested_cast; - auto result = internal::Concatenate(arrays, pool, &suggested_cast); - if (!result.ok() && suggested_cast && arrays.size() > 0) { - DCHECK(result.status().IsInvalid()); - return Status::Invalid(result.status().message(), ", consider casting input from `", - *arrays[0]->type(), "` to `", *suggested_cast, "` first."); - } - return result; -} - -#undef RETURN_IF_NOT_OK_OUTCOME - } // namespace arrow diff --git a/cpp/src/arrow/array/concatenate.h b/cpp/src/arrow/array/concatenate.h index aada5624d63..e7597aad812 100644 --- a/cpp/src/arrow/array/concatenate.h +++ b/cpp/src/arrow/array/concatenate.h @@ -24,22 +24,6 @@ #include "arrow/util/visibility.h" namespace arrow { -namespace internal { - -/// \brief Concatenate arrays -/// -/// \param[in] arrays a vector of arrays to be concatenated -/// \param[in] pool memory to store the result will be allocated from this memory pool -/// \param[out] out_suggested_cast if a non-OK Result is returned, the function might set -/// out_suggested_cast to a cast suggestion that would allow concatenating the arrays -/// without overflow of offsets (e.g. string to large_string) -/// -/// \return the concatenated array -ARROW_EXPORT -Result> Concatenate(const ArrayVector& arrays, MemoryPool* pool, - std::shared_ptr* out_suggested_cast); - -} // namespace internal /// \brief Concatenate arrays /// diff --git a/cpp/src/arrow/array/concatenate_test.cc b/cpp/src/arrow/array/concatenate_test.cc index aea53115752..af595e897f9 100644 --- a/cpp/src/arrow/array/concatenate_test.cc +++ b/cpp/src/arrow/array/concatenate_test.cc @@ -29,7 +29,6 @@ #include #include -#include #include #include "arrow/array.h" @@ -43,7 +42,6 @@ #include "arrow/testing/util.h" #include "arrow/type.h" #include "arrow/util/list_util.h" -#include "arrow/util/unreachable.h" namespace arrow { @@ -663,103 +661,14 @@ TEST_F(ConcatenateTest, ExtensionType) { }); } -std::shared_ptr LargeVersionOfType(const std::shared_ptr& type) { - switch (type->id()) { - case Type::BINARY: - return large_binary(); - case Type::STRING: - return large_utf8(); - case Type::LIST: - return large_list(static_cast(*type).value_type()); - case Type::LIST_VIEW: - return large_list_view(static_cast(*type).value_type()); - case Type::LARGE_BINARY: - case Type::LARGE_STRING: - case Type::LARGE_LIST: - case Type::LARGE_LIST_VIEW: - return type; - default: - Unreachable(); - } -} - -std::shared_ptr fixed_size_list_of_1(std::shared_ptr type) { - return fixed_size_list(std::move(type), 1); -} - TEST_F(ConcatenateTest, OffsetOverflow) { - using TypeFactory = std::shared_ptr (*)(std::shared_ptr); - static const std::vector kNestedTypeFactories = { - list, large_list, list_view, large_list_view, fixed_size_list_of_1, - }; - - auto* pool = default_memory_pool(); - std::shared_ptr suggested_cast; - for (auto& ty : {binary(), utf8()}) { - auto large_ty = LargeVersionOfType(ty); - - auto fake_long = ArrayFromJSON(ty, "[\"\"]"); - fake_long->data()->GetMutableValues(1)[1] = - std::numeric_limits::max(); - // XXX: since the data fake_long claims to own isn't there, this would - // segfault if Concatenate didn't detect overflow and raise an error. - auto concatenate_status = Concatenate({fake_long, fake_long}); - EXPECT_RAISES_WITH_MESSAGE_THAT( - Invalid, - ::testing::StrEq("Invalid: offset overflow while concatenating arrays, " - "consider casting input from `" + - ty->ToString() + "` to `large_" + ty->ToString() + "` first."), - concatenate_status); - - concatenate_status = - internal::Concatenate({fake_long, fake_long}, pool, &suggested_cast); - // Message is doesn't contain the suggested cast type when the caller - // asks for it by passing the output parameter. - EXPECT_RAISES_WITH_MESSAGE_THAT( - Invalid, ::testing::StrEq("Invalid: offset overflow while concatenating arrays"), - concatenate_status); - ASSERT_TRUE(large_ty->Equals(*suggested_cast)); - - // Check that the suggested cast is correct when concatenation - // fails due to the child array being too large. - for (auto factory : kNestedTypeFactories) { - auto nested_ty = factory(ty); - auto expected_suggestion = factory(large_ty); - auto fake_long_list = ArrayFromJSON(nested_ty, "[[\"\"]]"); - fake_long_list->data()->child_data[0] = fake_long->data(); - - ASSERT_RAISES(Invalid, internal::Concatenate({fake_long_list, fake_long_list}, pool, - &suggested_cast) - .status()); - ASSERT_TRUE(suggested_cast->Equals(*expected_suggestion)); - } - } - - auto list_ty = list(utf8()); - auto fake_long_list = ArrayFromJSON(list_ty, "[[\"Hello\"]]"); - fake_long_list->data()->GetMutableValues(1)[1] = + auto fake_long = ArrayFromJSON(utf8(), "[\"\"]"); + fake_long->data()->GetMutableValues(1)[1] = std::numeric_limits::max(); - ASSERT_RAISES(Invalid, internal::Concatenate({fake_long_list, fake_long_list}, pool, - &suggested_cast) - .status()); - ASSERT_TRUE(suggested_cast->Equals(LargeVersionOfType(list_ty))); - - auto list_view_ty = list_view(null()); - auto fake_long_list_view = ArrayFromJSON(list_view_ty, "[[], []]"); - { - constexpr int kInt32Max = std::numeric_limits::max(); - auto* values = fake_long_list_view->data()->child_data[0].get(); - auto* mutable_offsets = fake_long_list_view->data()->GetMutableValues(1); - auto* mutable_sizes = fake_long_list_view->data()->GetMutableValues(2); - values->length = 2 * static_cast(kInt32Max); - mutable_offsets[1] = kInt32Max; - mutable_offsets[0] = kInt32Max; - mutable_sizes[0] = kInt32Max; - } - ASSERT_RAISES(Invalid, internal::Concatenate({fake_long_list_view, fake_long_list_view}, - pool, &suggested_cast) - .status()); - ASSERT_TRUE(suggested_cast->Equals(LargeVersionOfType(list_view_ty))); + std::shared_ptr concatenated; + // XX since the data fake_long claims to own isn't there, this will segfault if + // Concatenate doesn't detect overflow and raise an error. + ASSERT_RAISES(Invalid, Concatenate({fake_long, fake_long}).status()); } TEST_F(ConcatenateTest, DictionaryConcatenateWithEmptyUint16) { diff --git a/cpp/src/arrow/array/data.cc b/cpp/src/arrow/array/data.cc index 83eeb56c496..80c411dfa6a 100644 --- a/cpp/src/arrow/array/data.cc +++ b/cpp/src/arrow/array/data.cc @@ -53,7 +53,7 @@ static inline void AdjustNonNullable(Type::type type_id, int64_t length, if (type_id == Type::NA) { *null_count = length; (*buffers)[0] = nullptr; - } else if (internal::may_have_validity_bitmap(type_id)) { + } else if (internal::HasValidityBitmap(type_id)) { if (*null_count == 0) { // In case there are no nulls, don't keep an allocated null bitmap around (*buffers)[0] = nullptr; @@ -224,54 +224,6 @@ int64_t ArrayData::ComputeLogicalNullCount() const { return ArraySpan(*this).ComputeLogicalNullCount(); } -DeviceAllocationType ArrayData::device_type() const { - // we're using 0 as a sentinel value for NOT YET ASSIGNED - // there is explicitly no constant DeviceAllocationType to represent - // the "UNASSIGNED" case as it is invalid for data to not have an - // assigned device type. If it's still 0 at the end, then we return - // CPU as the allocation device type - int type = 0; - for (const auto& buf : buffers) { - if (!buf) continue; -#ifdef NDEBUG - return buf->device_type(); -#else - if (type == 0) { - type = static_cast(buf->device_type()); - } else { - DCHECK_EQ(type, static_cast(buf->device_type())); - } -#endif - } - - for (const auto& child : child_data) { - if (!child) continue; -#ifdef NDEBUG - return child->device_type(); -#else - if (type == 0) { - type = static_cast(child->device_type()); - } else { - DCHECK_EQ(type, static_cast(child->device_type())); - } -#endif - } - - if (dictionary) { -#ifdef NDEBUG - return dictionary->device_type(); -#else - if (type == 0) { - type = static_cast(dictionary->device_type()); - } else { - DCHECK_EQ(type, static_cast(dictionary->device_type())); - } -#endif - } - - return type == 0 ? DeviceAllocationType::kCPU : static_cast(type); -} - // ---------------------------------------------------------------------- // Methods for ArraySpan @@ -331,15 +283,25 @@ void ArraySpan::SetMembers(const ArrayData& data) { namespace { -BufferSpan OffsetsForScalar(uint8_t* scratch_space, int64_t offset_width) { - return {scratch_space, offset_width * 2}; +template +BufferSpan OffsetsForScalar(uint8_t* scratch_space, offset_type value_size) { + auto* offsets = reinterpret_cast(scratch_space); + offsets[0] = 0; + offsets[1] = static_cast(value_size); + static_assert(2 * sizeof(offset_type) <= 16); + return {scratch_space, sizeof(offset_type) * 2}; } +template std::pair OffsetsAndSizesForScalar(uint8_t* scratch_space, - int64_t offset_width) { + offset_type value_size) { auto* offsets = scratch_space; - auto* sizes = scratch_space + offset_width; - return {BufferSpan{offsets, offset_width}, BufferSpan{sizes, offset_width}}; + auto* sizes = scratch_space + sizeof(offset_type); + reinterpret_cast(offsets)[0] = 0; + reinterpret_cast(sizes)[0] = value_size; + static_assert(2 * sizeof(offset_type) <= 16); + return {BufferSpan{offsets, sizeof(offset_type)}, + BufferSpan{sizes, sizeof(offset_type)}}; } int GetNumBuffers(const DataType& type) { @@ -383,7 +345,7 @@ void FillZeroLengthArray(const DataType* type, ArraySpan* span) { span->buffers[i].size = 0; } - if (!may_have_validity_bitmap(type->id())) { + if (!HasValidityBitmap(type->id())) { span->buffers[0] = {}; } @@ -418,7 +380,7 @@ void ArraySpan::FillFromScalar(const Scalar& value) { if (type_id == Type::NA) { this->null_count = 1; - } else if (!internal::may_have_validity_bitmap(type_id)) { + } else if (!internal::HasValidityBitmap(type_id)) { this->null_count = 0; } else { // Populate null count and validity bitmap @@ -453,23 +415,26 @@ void ArraySpan::FillFromScalar(const Scalar& value) { data_size = scalar.value->size(); } if (is_binary_like(type_id)) { - const auto& binary_scalar = checked_cast(value); - this->buffers[1] = OffsetsForScalar(binary_scalar.scratch_space_, sizeof(int32_t)); + this->buffers[1] = + OffsetsForScalar(scalar.scratch_space_, static_cast(data_size)); } else { // is_large_binary_like - const auto& large_binary_scalar = checked_cast(value); - this->buffers[1] = - OffsetsForScalar(large_binary_scalar.scratch_space_, sizeof(int64_t)); + this->buffers[1] = OffsetsForScalar(scalar.scratch_space_, data_size); } this->buffers[2].data = const_cast(data_buffer); this->buffers[2].size = data_size; } else if (type_id == Type::BINARY_VIEW || type_id == Type::STRING_VIEW) { - const auto& scalar = checked_cast(value); + const auto& scalar = checked_cast(value); this->buffers[1].size = BinaryViewType::kSize; this->buffers[1].data = scalar.scratch_space_; + static_assert(sizeof(BinaryViewType::c_type) <= sizeof(scalar.scratch_space_)); + auto* view = new (&scalar.scratch_space_) BinaryViewType::c_type; if (scalar.is_valid) { + *view = util::ToBinaryView(std::string_view{*scalar.value}, 0, 0); this->buffers[2] = internal::PackVariadicBuffers({&scalar.value, 1}); + } else { + *view = {}; } } else if (type_id == Type::FIXED_SIZE_BINARY) { const auto& scalar = checked_cast(value); @@ -478,10 +443,12 @@ void ArraySpan::FillFromScalar(const Scalar& value) { } else if (is_var_length_list_like(type_id) || type_id == Type::FIXED_SIZE_LIST) { const auto& scalar = checked_cast(value); + int64_t value_length = 0; this->child_data.resize(1); if (scalar.value != nullptr) { // When the scalar is null, scalar.value can also be null this->child_data[0].SetMembers(*scalar.value->data()); + value_length = scalar.value->length(); } else { // Even when the value is null, we still must populate the // child_data to yield a valid array. Tedious @@ -489,25 +456,17 @@ void ArraySpan::FillFromScalar(const Scalar& value) { &this->child_data[0]); } - if (type_id == Type::LIST) { - const auto& list_scalar = checked_cast(value); - this->buffers[1] = OffsetsForScalar(list_scalar.scratch_space_, sizeof(int32_t)); - } else if (type_id == Type::MAP) { - const auto& map_scalar = checked_cast(value); - this->buffers[1] = OffsetsForScalar(map_scalar.scratch_space_, sizeof(int32_t)); - } else if (type_id == Type::LARGE_LIST) { - const auto& large_list_scalar = checked_cast(value); + if (type_id == Type::LIST || type_id == Type::MAP) { this->buffers[1] = - OffsetsForScalar(large_list_scalar.scratch_space_, sizeof(int64_t)); + OffsetsForScalar(scalar.scratch_space_, static_cast(value_length)); + } else if (type_id == Type::LARGE_LIST) { + this->buffers[1] = OffsetsForScalar(scalar.scratch_space_, value_length); } else if (type_id == Type::LIST_VIEW) { - const auto& list_view_scalar = checked_cast(value); - std::tie(this->buffers[1], this->buffers[2]) = - OffsetsAndSizesForScalar(list_view_scalar.scratch_space_, sizeof(int32_t)); - } else if (type_id == Type::LARGE_LIST_VIEW) { - const auto& large_list_view_scalar = - checked_cast(value); std::tie(this->buffers[1], this->buffers[2]) = OffsetsAndSizesForScalar( - large_list_view_scalar.scratch_space_, sizeof(int64_t)); + scalar.scratch_space_, static_cast(value_length)); + } else if (type_id == Type::LARGE_LIST_VIEW) { + std::tie(this->buffers[1], this->buffers[2]) = + OffsetsAndSizesForScalar(scalar.scratch_space_, value_length); } else { DCHECK_EQ(type_id, Type::FIXED_SIZE_LIST); // FIXED_SIZE_LIST: does not have a second buffer @@ -521,19 +480,27 @@ void ArraySpan::FillFromScalar(const Scalar& value) { this->child_data[i].FillFromScalar(*scalar.value[i]); } } else if (is_union(type_id)) { + // Dense union needs scratch space to store both offsets and a type code + struct UnionScratchSpace { + alignas(int64_t) int8_t type_code; + alignas(int64_t) uint8_t offsets[sizeof(int32_t) * 2]; + }; + static_assert(sizeof(UnionScratchSpace) <= sizeof(UnionScalar::scratch_space_)); + auto* union_scratch_space = reinterpret_cast( + &checked_cast(value).scratch_space_); + // First buffer is kept null since unions have no validity vector this->buffers[0] = {}; + union_scratch_space->type_code = checked_cast(value).type_code; + this->buffers[1].data = reinterpret_cast(&union_scratch_space->type_code); + this->buffers[1].size = 1; + this->child_data.resize(this->type->num_fields()); if (type_id == Type::DENSE_UNION) { const auto& scalar = checked_cast(value); - auto* union_scratch_space = - reinterpret_cast(&scalar.scratch_space_); - - this->buffers[1].data = reinterpret_cast(&union_scratch_space->type_code); - this->buffers[1].size = 1; - - this->buffers[2] = OffsetsForScalar(union_scratch_space->offsets, sizeof(int32_t)); + this->buffers[2] = + OffsetsForScalar(union_scratch_space->offsets, static_cast(1)); // We can't "see" the other arrays in the union, but we put the "active" // union array in the right place and fill zero-length arrays for the // others @@ -550,12 +517,6 @@ void ArraySpan::FillFromScalar(const Scalar& value) { } } else { const auto& scalar = checked_cast(value); - auto* union_scratch_space = - reinterpret_cast(&scalar.scratch_space_); - - this->buffers[1].data = reinterpret_cast(&union_scratch_space->type_code); - this->buffers[1].size = 1; - // Sparse union scalars have a full complement of child values even // though only one of them is relevant, so we just fill them in here for (int i = 0; i < static_cast(this->child_data.size()); ++i) { @@ -580,6 +541,7 @@ void ArraySpan::FillFromScalar(const Scalar& value) { e.null_count = 0; e.buffers[1].data = scalar.scratch_space_; e.buffers[1].size = sizeof(run_end); + reinterpret_cast(scalar.scratch_space_)[0] = run_end; }; switch (scalar.run_end_type()->id()) { diff --git a/cpp/src/arrow/array/data.h b/cpp/src/arrow/array/data.h index e0508fe6980..d8a6663cec5 100644 --- a/cpp/src/arrow/array/data.h +++ b/cpp/src/arrow/array/data.h @@ -46,7 +46,6 @@ ARROW_EXPORT bool IsNullRunEndEncoded(const ArrayData& data, int64_t i); ARROW_EXPORT bool UnionMayHaveLogicalNulls(const ArrayData& data); ARROW_EXPORT bool RunEndEncodedMayHaveLogicalNulls(const ArrayData& data); ARROW_EXPORT bool DictionaryMayHaveLogicalNulls(const ArrayData& data); - } // namespace internal // When slicing, we do not know the null count of the sliced range without @@ -101,11 +100,6 @@ struct ARROW_EXPORT ArrayData { int64_t null_count = kUnknownNullCount, int64_t offset = 0) : ArrayData(std::move(type), length, null_count, offset) { this->buffers = std::move(buffers); -#ifndef NDEBUG - // in debug mode, call the `device_type` function to trigger - // the DCHECKs that validate all the buffers are on the same device - ARROW_UNUSED(this->device_type()); -#endif } ArrayData(std::shared_ptr type, int64_t length, @@ -115,12 +109,6 @@ struct ARROW_EXPORT ArrayData { : ArrayData(std::move(type), length, null_count, offset) { this->buffers = std::move(buffers); this->child_data = std::move(child_data); -#ifndef NDEBUG - // in debug mode, call the `device_type` function to trigger - // the DCHECKs that validate all the buffers (including children) - // are on the same device - ARROW_UNUSED(this->device_type()); -#endif } static std::shared_ptr Make(std::shared_ptr type, int64_t length, @@ -369,16 +357,6 @@ struct ARROW_EXPORT ArrayData { /// \see GetNullCount int64_t ComputeLogicalNullCount() const; - /// \brief Return the device_type of the underlying buffers and children - /// - /// If there are no buffers in this ArrayData object, it just returns - /// DeviceAllocationType::kCPU as a default. We also assume that all buffers - /// should be allocated on the same device type and perform DCHECKs to confirm - /// this in debug mode. - /// - /// \return DeviceAllocationType - DeviceAllocationType device_type() const; - std::shared_ptr type; int64_t length = 0; mutable std::atomic null_count{0}; diff --git a/cpp/src/arrow/array/statistics.cc b/cpp/src/arrow/array/statistics.cc deleted file mode 100644 index b661c9fbaff..00000000000 --- a/cpp/src/arrow/array/statistics.cc +++ /dev/null @@ -1,21 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -// This empty .cc file is for embedding not inlined symbols in -// arrow::ArrayStatistics into libarrow. - -#include "arrow/array/statistics.h" diff --git a/cpp/src/arrow/array/statistics.h b/cpp/src/arrow/array/statistics.h deleted file mode 100644 index 523f877bbe4..00000000000 --- a/cpp/src/arrow/array/statistics.h +++ /dev/null @@ -1,69 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -#pragma once - -#include -#include -#include -#include - -#include "arrow/util/visibility.h" - -namespace arrow { - -/// \brief Statistics for an Array -/// -/// Apache Arrow format doesn't have statistics but data source such -/// as Apache Parquet may have statistics. Statistics associated with -/// data source can be read unified API via this class. -struct ARROW_EXPORT ArrayStatistics { - using ValueType = std::variant; - - /// \brief The number of null values, may not be set - std::optional null_count = std::nullopt; - - /// \brief The number of distinct values, may not be set - std::optional distinct_count = std::nullopt; - - /// \brief The minimum value, may not be set - std::optional min = std::nullopt; - - /// \brief Whether the minimum value is exact or not - bool is_min_exact = false; - - /// \brief The maximum value, may not be set - std::optional max = std::nullopt; - - /// \brief Whether the maximum value is exact or not - bool is_max_exact = false; - - /// \brief Check two statistics for equality - bool Equals(const ArrayStatistics& other) const { - return null_count == other.null_count && distinct_count == other.distinct_count && - min == other.min && is_min_exact == other.is_min_exact && max == other.max && - is_max_exact == other.is_max_exact; - } - - /// \brief Check two statistics for equality - bool operator==(const ArrayStatistics& other) const { return Equals(other); } - - /// \brief Check two statistics for not equality - bool operator!=(const ArrayStatistics& other) const { return !Equals(other); } -}; - -} // namespace arrow diff --git a/cpp/src/arrow/array/statistics_test.cc b/cpp/src/arrow/array/statistics_test.cc deleted file mode 100644 index cf15a5d3829..00000000000 --- a/cpp/src/arrow/array/statistics_test.cc +++ /dev/null @@ -1,101 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -#include - -#include "arrow/array/statistics.h" - -namespace arrow { - -TEST(ArrayStatisticsTest, TestNullCount) { - ArrayStatistics statistics; - ASSERT_FALSE(statistics.null_count.has_value()); - statistics.null_count = 29; - ASSERT_TRUE(statistics.null_count.has_value()); - ASSERT_EQ(29, statistics.null_count.value()); -} - -TEST(ArrayStatisticsTest, TestDistinctCount) { - ArrayStatistics statistics; - ASSERT_FALSE(statistics.distinct_count.has_value()); - statistics.distinct_count = 29; - ASSERT_TRUE(statistics.distinct_count.has_value()); - ASSERT_EQ(29, statistics.distinct_count.value()); -} - -TEST(ArrayStatisticsTest, TestMin) { - ArrayStatistics statistics; - ASSERT_FALSE(statistics.min.has_value()); - ASSERT_FALSE(statistics.is_min_exact); - statistics.min = static_cast(29); - statistics.is_min_exact = true; - ASSERT_TRUE(statistics.min.has_value()); - ASSERT_TRUE(std::holds_alternative(statistics.min.value())); - ASSERT_EQ(29, std::get(statistics.min.value())); - ASSERT_TRUE(statistics.is_min_exact); -} - -TEST(ArrayStatisticsTest, TestMax) { - ArrayStatistics statistics; - ASSERT_FALSE(statistics.max.has_value()); - ASSERT_FALSE(statistics.is_max_exact); - statistics.max = std::string("hello"); - statistics.is_max_exact = false; - ASSERT_TRUE(statistics.max.has_value()); - ASSERT_TRUE(std::holds_alternative(statistics.max.value())); - ASSERT_EQ("hello", std::get(statistics.max.value())); - ASSERT_FALSE(statistics.is_max_exact); -} - -TEST(ArrayStatisticsTest, TestEquality) { - ArrayStatistics statistics1; - ArrayStatistics statistics2; - - ASSERT_EQ(statistics1, statistics2); - - statistics1.null_count = 29; - ASSERT_NE(statistics1, statistics2); - statistics2.null_count = 29; - ASSERT_EQ(statistics1, statistics2); - - statistics1.distinct_count = 2929; - ASSERT_NE(statistics1, statistics2); - statistics2.distinct_count = 2929; - ASSERT_EQ(statistics1, statistics2); - - statistics1.min = std::string("world"); - ASSERT_NE(statistics1, statistics2); - statistics2.min = std::string("world"); - ASSERT_EQ(statistics1, statistics2); - - statistics1.is_min_exact = true; - ASSERT_NE(statistics1, statistics2); - statistics2.is_min_exact = true; - ASSERT_EQ(statistics1, statistics2); - - statistics1.max = static_cast(-29); - ASSERT_NE(statistics1, statistics2); - statistics2.max = static_cast(-29); - ASSERT_EQ(statistics1, statistics2); - - statistics1.is_max_exact = true; - ASSERT_NE(statistics1, statistics2); - statistics2.is_max_exact = true; - ASSERT_EQ(statistics1, statistics2); -} - -} // namespace arrow diff --git a/cpp/src/arrow/array/util.cc b/cpp/src/arrow/array/util.cc index b56ea25f9e4..86e2ffcae4d 100644 --- a/cpp/src/arrow/array/util.cc +++ b/cpp/src/arrow/array/util.cc @@ -95,7 +95,7 @@ class ArrayDataEndianSwapper { Status SwapType(const DataType& type) { RETURN_NOT_OK(VisitTypeInline(type, this)); RETURN_NOT_OK(SwapChildren(type.fields())); - if (internal::may_have_validity_bitmap(type.id())) { + if (internal::HasValidityBitmap(type.id())) { // Copy null bitmap out_->buffers[0] = data_->buffers[0]; } @@ -125,8 +125,7 @@ class ArrayDataEndianSwapper { for (int64_t i = 0; i < length; i++) { out_data[i] = bit_util::ByteSwap(in_data[i]); } - // R build with openSUSE155 requires an explicit shared_ptr construction - return std::shared_ptr(std::move(out_buffer)); + return std::move(out_buffer); } template @@ -549,7 +548,7 @@ class NullArrayFactory { } Status Visit(const StructType& type) { - for (int i = 0; i < type.num_fields(); ++i) { + for (int i = 0; i < type_->num_fields(); ++i) { ARROW_ASSIGN_OR_RAISE(out_->child_data[i], CreateChild(type, i, length_)); } return Status::OK(); diff --git a/cpp/src/arrow/array/util.h b/cpp/src/arrow/array/util.h index fd8e75ddb86..9f34af0525d 100644 --- a/cpp/src/arrow/array/util.h +++ b/cpp/src/arrow/array/util.h @@ -31,10 +31,6 @@ namespace arrow { -/// \defgroup array-factories Array factory functions -/// -/// @{ - /// \brief Create a strongly-typed Array instance from generic ArrayData /// \param[in] data the array contents /// \return the resulting Array instance @@ -69,8 +65,6 @@ ARROW_EXPORT Result> MakeEmptyArray(std::shared_ptr type, MemoryPool* pool = default_memory_pool()); -/// @} - namespace internal { /// \brief Swap endian of each element in a generic ArrayData diff --git a/cpp/src/arrow/array/validate.cc b/cpp/src/arrow/array/validate.cc index 0d940d3bc86..8dd3eb3f90c 100644 --- a/cpp/src/arrow/array/validate.cc +++ b/cpp/src/arrow/array/validate.cc @@ -550,7 +550,7 @@ struct ValidateArrayImpl { if (full_validation) { if (data.null_count != kUnknownNullCount) { int64_t actual_null_count; - if (may_have_validity_bitmap(data.type->id()) && data.buffers[0]) { + if (HasValidityBitmap(data.type->id()) && data.buffers[0]) { // Do not call GetNullCount() as it would also set the `null_count` member actual_null_count = data.length - CountSetBits(data.buffers[0]->data(), data.offset, data.length); diff --git a/cpp/src/arrow/buffer.cc b/cpp/src/arrow/buffer.cc index 0eb22a9d155..1bd789b7caf 100644 --- a/cpp/src/arrow/buffer.cc +++ b/cpp/src/arrow/buffer.cc @@ -41,8 +41,7 @@ Result> Buffer::CopySlice(const int64_t start, ARROW_ASSIGN_OR_RAISE(auto new_buffer, AllocateResizableBuffer(nbytes, pool)); std::memcpy(new_buffer->mutable_data(), data() + start, static_cast(nbytes)); - // R build with openSUSE155 requires an explicit shared_ptr construction - return std::shared_ptr(std::move(new_buffer)); + return std::move(new_buffer); } Buffer::Buffer() : Buffer(memory_pool::internal::kZeroSizeArea, 0) {} @@ -186,8 +185,7 @@ Result> AllocateBitmap(int64_t length, MemoryPool* pool) if (buf->size() > 0) { buf->mutable_data()[buf->size() - 1] = 0; } - // R build with openSUSE155 requires an explicit shared_ptr construction - return std::shared_ptr(std::move(buf)); + return std::move(buf); } Result> AllocateEmptyBitmap(int64_t length, MemoryPool* pool) { @@ -199,8 +197,7 @@ Result> AllocateEmptyBitmap(int64_t length, int64_t alig ARROW_ASSIGN_OR_RAISE(auto buf, AllocateBuffer(bit_util::BytesForBits(length), alignment, pool)); memset(buf->mutable_data(), 0, static_cast(buf->size())); - // R build with openSUSE155 requires an explicit shared_ptr construction - return std::shared_ptr(std::move(buf)); + return std::move(buf); } Status AllocateEmptyBitmap(int64_t length, std::shared_ptr* out) { @@ -222,8 +219,7 @@ Result> ConcatenateBuffers( out_data += buffer->size(); } } - // R build with openSUSE155 requires an explicit shared_ptr construction - return std::shared_ptr(std::move(out)); + return std::move(out); } } // namespace arrow diff --git a/cpp/src/arrow/buffer.h b/cpp/src/arrow/buffer.h index fbf4a22e350..258a9faac73 100644 --- a/cpp/src/arrow/buffer.h +++ b/cpp/src/arrow/buffer.h @@ -269,7 +269,7 @@ class ARROW_EXPORT Buffer { /// \brief Return the buffer's mutable data as a span template - util::span mutable_span_as() { + util::span mutable_span_as() const { return util::span(mutable_data_as(), static_cast(size() / sizeof(T))); } diff --git a/cpp/src/arrow/buffer_test.cc b/cpp/src/arrow/buffer_test.cc index 06ed0bfba04..13f6ea63b5e 100644 --- a/cpp/src/arrow/buffer_test.cc +++ b/cpp/src/arrow/buffer_test.cc @@ -1023,17 +1023,4 @@ TEST(TestBufferConcatenation, EmptyBuffer) { AssertMyBufferEqual(*result, contents); } -TEST(TestDeviceRegistry, Basics) { - // Test the error cases for the device registry - - // CPU is already registered - ASSERT_RAISES(KeyError, - RegisterDeviceMapper(DeviceAllocationType::kCPU, [](int64_t device_id) { - return default_cpu_memory_manager(); - })); - - // VPI is not registered - ASSERT_RAISES(KeyError, GetDeviceMapper(DeviceAllocationType::kVPI)); -} - } // namespace arrow diff --git a/cpp/src/arrow/builder_benchmark.cc b/cpp/src/arrow/builder_benchmark.cc index 8ec7373a1de..84f27d20ee0 100644 --- a/cpp/src/arrow/builder_benchmark.cc +++ b/cpp/src/arrow/builder_benchmark.cc @@ -150,44 +150,6 @@ static void BuildBinaryArray(benchmark::State& state) { // NOLINT non-const ref state.SetItemsProcessed(state.iterations() * kItemsProcessed); } -static void BuildInlineBinaryViewArray( - benchmark::State& state) { // NOLINT non-const reference - std::string_view kBinaryStrings[] = {"1", "12345678", "12345", "123456789", - "12", "", " "}; - - for (auto _ : state) { - BinaryViewBuilder builder(memory_tracker.memory_pool()); - - for (int64_t i = 0; i < kRounds * kNumberOfElements; i++) { - ABORT_NOT_OK(builder.Append(kBinaryStrings[i % 7])); - } - - std::shared_ptr out; - ABORT_NOT_OK(builder.Finish(&out)); - } - - state.SetBytesProcessed(state.iterations() * kBytesProcessed); - state.SetItemsProcessed(state.iterations() * kItemsProcessed); -} - -static void BuildNonInlineBinaryViewArray( - benchmark::State& state) { // NOLINT non-const reference - const char* kLargeBinaryString = "12345678901234567890123456789012345678901234567890"; - for (auto _ : state) { - BinaryViewBuilder builder(memory_tracker.memory_pool()); - - for (int64_t i = 0; i < kRounds * kNumberOfElements; i++) { - ABORT_NOT_OK(builder.Append(kLargeBinaryString)); - } - - std::shared_ptr out; - ABORT_NOT_OK(builder.Finish(&out)); - } - - state.SetBytesProcessed(state.iterations() * kBytesProcessed); - state.SetItemsProcessed(state.iterations() * kItemsProcessed); -} - static void BuildChunkedBinaryArray( benchmark::State& state) { // NOLINT non-const reference // 1MB chunks @@ -496,8 +458,6 @@ BENCHMARK(BuildBinaryArray); BENCHMARK(BuildChunkedBinaryArray); BENCHMARK(BuildFixedSizeBinaryArray); BENCHMARK(BuildDecimalArray); -BENCHMARK(BuildInlineBinaryViewArray); -BENCHMARK(BuildNonInlineBinaryViewArray); BENCHMARK(BuildInt64DictionaryArrayRandom); BENCHMARK(BuildInt64DictionaryArraySequential); diff --git a/cpp/src/arrow/c/bridge.cc b/cpp/src/arrow/c/bridge.cc index eba575f4cf3..022fce72f59 100644 --- a/cpp/src/arrow/c/bridge.cc +++ b/cpp/src/arrow/c/bridge.cc @@ -528,7 +528,7 @@ namespace { struct ExportedArrayPrivateData : PoolAllocationMixin { // The buffers are owned by the ArrayData member SmallVector buffers_; - struct ArrowArray dictionary_ {}; + struct ArrowArray dictionary_; SmallVector children_; SmallVector child_pointers_; @@ -565,9 +565,6 @@ void ReleaseExportedArray(struct ArrowArray* array) { } struct ArrayExporter { - explicit ArrayExporter(bool device_interface = false) - : device_interface_(device_interface) {} - Status Export(const std::shared_ptr& data) { // Force computing null count. // This is because ARROW-9037 is in version 0.17 and 0.17.1, and they are @@ -576,7 +573,7 @@ struct ArrayExporter { // Store buffer pointers size_t n_buffers = data->buffers.size(); auto buffers_begin = data->buffers.begin(); - if (n_buffers > 0 && !internal::may_have_validity_bitmap(data->type->id())) { + if (n_buffers > 0 && !internal::HasValidityBitmap(data->type->id())) { --n_buffers; ++buffers_begin; } @@ -589,12 +586,8 @@ struct ArrayExporter { export_.buffers_.resize(n_buffers); std::transform(buffers_begin, data->buffers.end(), export_.buffers_.begin(), - [this](const std::shared_ptr& buffer) -> const void* { - return buffer - ? (device_interface_ - ? reinterpret_cast(buffer->address()) - : buffer->data()) - : nullptr; + [](const std::shared_ptr& buffer) -> const void* { + return buffer ? buffer->data() : nullptr; }); if (need_variadic_buffer_sizes) { @@ -609,16 +602,15 @@ struct ArrayExporter { // Export dictionary if (data->dictionary != nullptr) { - dict_exporter_ = std::make_unique(device_interface_); + dict_exporter_ = std::make_unique(); RETURN_NOT_OK(dict_exporter_->Export(data->dictionary)); } // Export children export_.children_.resize(data->child_data.size()); - child_exporters_.reserve(data->child_data.size()); - for (const auto& child : data->child_data) { - child_exporters_.emplace_back(ArrayExporter{device_interface_}); - RETURN_NOT_OK(child_exporters_.back().Export(child)); + child_exporters_.resize(data->child_data.size()); + for (size_t i = 0; i < data->child_data.size(); ++i) { + RETURN_NOT_OK(child_exporters_[i].Export(data->child_data[i])); } // Store owning pointer to ArrayData @@ -670,7 +662,6 @@ struct ArrayExporter { ExportedArrayPrivateData export_; std::unique_ptr dict_exporter_; std::vector child_exporters_; - bool device_interface_ = false; }; } // namespace @@ -765,7 +756,7 @@ Status ExportDeviceArray(const Array& array, std::shared_ptr } out->device_id = device_info.second; - ArrayExporter exporter(/*device_interface*/ true); + ArrayExporter exporter; RETURN_NOT_OK(exporter.Export(array.data())); exporter.Finish(&out->array); @@ -803,7 +794,7 @@ Status ExportDeviceRecordBatch(const RecordBatch& batch, } out->device_id = device_info.second; - ArrayExporter exporter(/*device_interface*/ true); + ArrayExporter exporter; RETURN_NOT_OK(exporter.Export(array->data())); exporter.Finish(&out->array); @@ -1059,14 +1050,8 @@ struct SchemaImporter { ARROW_ASSIGN_OR_RAISE( type_, registered_ext_type->Deserialize(std::move(type_), metadata_.extension_serialized)); - // If metadata is present, delete both metadata keys (otherwise, just remove - // the extension name key) - if (metadata_.extension_serialized_index >= 0) { - RETURN_NOT_OK(metadata_.metadata->DeleteMany( - {metadata_.extension_name_index, metadata_.extension_serialized_index})); - } else { - RETURN_NOT_OK(metadata_.metadata->Delete(metadata_.extension_name_index)); - } + RETURN_NOT_OK(metadata_.metadata->DeleteMany( + {metadata_.extension_name_index, metadata_.extension_serialized_index})); } } @@ -1454,7 +1439,6 @@ namespace { // The ArrowArray is released on destruction. struct ImportedArrayData { struct ArrowArray array_; - DeviceAllocationType device_type_; std::shared_ptr device_sync_; ImportedArrayData() { @@ -1521,7 +1505,6 @@ struct ArrayImporter { recursion_level_ = 0; import_ = std::make_shared(); c_struct_ = &import_->array_; - import_->device_type_ = device_type_; ArrowArrayMove(src, c_struct_); return DoImport(); } @@ -1549,8 +1532,7 @@ struct ArrayImporter { "cannot be imported as RecordBatch"); } return RecordBatch::Make(std::move(schema), data_->length, - std::move(data_->child_data), import_->device_type_, - import_->device_sync_); + std::move(data_->child_data)); } Status ImportChild(const ArrayImporter* parent, struct ArrowArray* src) { @@ -1877,17 +1859,24 @@ struct ArrayImporter { template Status ImportStringValuesBuffer(int32_t offsets_buffer_id, int32_t buffer_id, int64_t byte_width = 1) { - int64_t buffer_size = 0; - if (c_struct_->length > 0) { - int64_t last_offset_value_offset = - (c_struct_->length + c_struct_->offset) * sizeof(OffsetType); - OffsetType last_offset_value; - RETURN_NOT_OK(MemoryManager::CopyBufferSliceToCPU( - data_->buffers[offsets_buffer_id], last_offset_value_offset, sizeof(OffsetType), - reinterpret_cast(&last_offset_value))); + if (device_type_ == DeviceAllocationType::kCPU) { + auto offsets = data_->GetValues(offsets_buffer_id); // Compute visible size of buffer - buffer_size = byte_width * last_offset_value; - } + int64_t buffer_size = + (c_struct_->length > 0) ? byte_width * offsets[c_struct_->length] : 0; + return ImportBuffer(buffer_id, buffer_size); + } + + // we only need the value of the last offset so let's just copy that + // one value from device to host. + auto single_value_buf = + SliceBuffer(data_->buffers[offsets_buffer_id], + c_struct_->length * sizeof(OffsetType), sizeof(OffsetType)); + ARROW_ASSIGN_OR_RAISE( + auto cpubuf, Buffer::ViewOrCopy(single_value_buf, default_cpu_memory_manager())); + auto offsets = cpubuf->data_as(); + // Compute visible size of buffer + int64_t buffer_size = (c_struct_->length > 0) ? byte_width * offsets[0] : 0; return ImportBuffer(buffer_id, buffer_size); } @@ -1969,13 +1958,6 @@ Result> ImportRecordBatch(struct ArrowArray* array, return ImportRecordBatch(array, *maybe_schema); } -Result> DefaultDeviceMemoryMapper( - ArrowDeviceType device_type, int64_t device_id) { - ARROW_ASSIGN_OR_RAISE(auto mapper, - GetDeviceMapper(static_cast(device_type))); - return mapper(device_id); -} - Result> ImportDeviceArray(struct ArrowDeviceArray* array, std::shared_ptr type, const DeviceMemoryMapper& mapper) { @@ -2043,23 +2025,6 @@ Status ExportStreamNext(const std::shared_ptr& src, int64_t i } } -// the int64_t i input here is unused, but exists simply to allow utilizing the -// overload of this with the version for ChunkedArrays. If we removed the int64_t -// from the signature despite it being unused, we wouldn't be able to leverage the -// overloading in the templated exporters. -Status ExportStreamNext(const std::shared_ptr& src, int64_t i, - struct ArrowDeviceArray* out_array) { - std::shared_ptr batch; - RETURN_NOT_OK(src->ReadNext(&batch)); - if (batch == nullptr) { - // End of stream - ArrowArrayMarkReleased(&out_array->array); - return Status::OK(); - } else { - return ExportDeviceRecordBatch(*batch, batch->GetSyncEvent(), out_array); - } -} - Status ExportStreamNext(const std::shared_ptr& src, int64_t i, struct ArrowArray* out_array) { if (i >= src->num_chunks()) { @@ -2071,27 +2036,8 @@ Status ExportStreamNext(const std::shared_ptr& src, int64_t i, } } -Status ExportStreamNext(const std::shared_ptr& src, int64_t i, - struct ArrowDeviceArray* out_array) { - if (i >= src->num_chunks()) { - // End of stream - ArrowArrayMarkReleased(&out_array->array); - return Status::OK(); - } else { - return ExportDeviceArray(*src->chunk(static_cast(i)), nullptr, out_array); - } -} - -template +template class ExportedArrayStream { - using StreamTraits = - std::conditional_t; - using StreamType = typename StreamTraits::CType; - using ArrayTraits = std::conditional_t; - using ArrayType = typename ArrayTraits::CType; - public: struct PrivateData { explicit PrivateData(std::shared_ptr reader) @@ -2105,13 +2051,13 @@ class ExportedArrayStream { ARROW_DISALLOW_COPY_AND_ASSIGN(PrivateData); }; - explicit ExportedArrayStream(StreamType* stream) : stream_(stream) {} + explicit ExportedArrayStream(struct ArrowArrayStream* stream) : stream_(stream) {} Status GetSchema(struct ArrowSchema* out_schema) { return ExportStreamSchema(reader(), out_schema); } - Status GetNext(ArrayType* out_array) { + Status GetNext(struct ArrowArray* out_array) { return ExportStreamNext(reader(), next_batch_num(), out_array); } @@ -2121,35 +2067,38 @@ class ExportedArrayStream { } void Release() { - if (StreamTraits::IsReleasedFunc(stream_)) { + if (ArrowArrayStreamIsReleased(stream_)) { return; } - DCHECK_NE(private_data(), nullptr); delete private_data(); - StreamTraits::MarkReleased(stream_); + ArrowArrayStreamMarkReleased(stream_); } // C-compatible callbacks - static int StaticGetSchema(StreamType* stream, struct ArrowSchema* out_schema) { + static int StaticGetSchema(struct ArrowArrayStream* stream, + struct ArrowSchema* out_schema) { ExportedArrayStream self{stream}; return self.ToCError(self.GetSchema(out_schema)); } - static int StaticGetNext(StreamType* stream, ArrayType* out_array) { + static int StaticGetNext(struct ArrowArrayStream* stream, + struct ArrowArray* out_array) { ExportedArrayStream self{stream}; return self.ToCError(self.GetNext(out_array)); } - static void StaticRelease(StreamType* stream) { ExportedArrayStream{stream}.Release(); } + static void StaticRelease(struct ArrowArrayStream* stream) { + ExportedArrayStream{stream}.Release(); + } - static const char* StaticGetLastError(StreamType* stream) { + static const char* StaticGetLastError(struct ArrowArrayStream* stream) { return ExportedArrayStream{stream}.GetLastError(); } - static Status Make(std::shared_ptr reader, StreamType* out) { + static Status Make(std::shared_ptr reader, struct ArrowArrayStream* out) { out->get_schema = ExportedArrayStream::StaticGetSchema; out->get_next = ExportedArrayStream::StaticGetNext; out->get_last_error = ExportedArrayStream::StaticGetLastError; @@ -2185,36 +2134,19 @@ class ExportedArrayStream { int64_t next_batch_num() { return private_data()->batch_num_++; } - StreamType* stream_; + struct ArrowArrayStream* stream_; }; } // namespace Status ExportRecordBatchReader(std::shared_ptr reader, struct ArrowArrayStream* out) { - memset(out, 0, sizeof(struct ArrowArrayStream)); - return ExportedArrayStream::Make(std::move(reader), out); + return ExportedArrayStream::Make(std::move(reader), out); } Status ExportChunkedArray(std::shared_ptr chunked_array, struct ArrowArrayStream* out) { - memset(out, 0, sizeof(struct ArrowArrayStream)); - return ExportedArrayStream::Make(std::move(chunked_array), out); -} - -Status ExportDeviceRecordBatchReader(std::shared_ptr reader, - struct ArrowDeviceArrayStream* out) { - memset(out, 0, sizeof(struct ArrowDeviceArrayStream)); - out->device_type = static_cast(reader->device_type()); - return ExportedArrayStream::Make(std::move(reader), out); -} - -Status ExportDeviceChunkedArray(std::shared_ptr chunked_array, - DeviceAllocationType device_type, - struct ArrowDeviceArrayStream* out) { - memset(out, 0, sizeof(struct ArrowDeviceArrayStream)); - out->device_type = static_cast(device_type); - return ExportedArrayStream::Make(std::move(chunked_array), out); + return ExportedArrayStream::Make(std::move(chunked_array), out); } ////////////////////////////////////////////////////////////////////////// @@ -2222,65 +2154,33 @@ Status ExportDeviceChunkedArray(std::shared_ptr chunked_array, namespace { -template class ArrayStreamReader { - protected: - using StreamTraits = - std::conditional_t; - using StreamType = typename StreamTraits::CType; - using ArrayTraits = std::conditional_t; - using ArrayType = typename ArrayTraits::CType; - public: - explicit ArrayStreamReader(StreamType* stream, - const DeviceMemoryMapper mapper = DefaultDeviceMemoryMapper) - : mapper_{std::move(mapper)} { - StreamTraits::MoveFunc(stream, &stream_); - DCHECK(!StreamTraits::IsReleasedFunc(&stream_)); + explicit ArrayStreamReader(struct ArrowArrayStream* stream) { + ArrowArrayStreamMove(stream, &stream_); + DCHECK(!ArrowArrayStreamIsReleased(&stream_)); } ~ArrayStreamReader() { ReleaseStream(); } void ReleaseStream() { - // all our trait release funcs check IsReleased so we don't - // need to repeat it here - StreamTraits::ReleaseFunc(&stream_); - DCHECK(StreamTraits::IsReleasedFunc(&stream_)); + if (!ArrowArrayStreamIsReleased(&stream_)) { + ArrowArrayStreamRelease(&stream_); + } + DCHECK(ArrowArrayStreamIsReleased(&stream_)); } protected: - Status ReadNextArrayInternal(ArrayType* array) { - ArrayTraits::MarkReleased(array); + Status ReadNextArrayInternal(struct ArrowArray* array) { + ArrowArrayMarkReleased(array); Status status = StatusFromCError(stream_.get_next(&stream_, array)); - if (!status.ok()) { - ArrayTraits::ReleaseFunc(array); + if (!status.ok() && !ArrowArrayIsReleased(array)) { + ArrowArrayRelease(array); } return status; } - Result> ImportRecordBatchInternal( - struct ArrowArray* array, std::shared_ptr schema) { - return ImportRecordBatch(array, schema); - } - - Result> ImportRecordBatchInternal( - struct ArrowDeviceArray* array, std::shared_ptr schema) { - return ImportDeviceRecordBatch(array, schema, mapper_); - } - - Result> ImportArrayInternal( - struct ArrowArray* array, std::shared_ptr type) { - return ImportArray(array, type); - } - - Result> ImportArrayInternal( - struct ArrowDeviceArray* array, std::shared_ptr type) { - return ImportDeviceArray(array, type, mapper_); - } - Result> ReadSchema() { struct ArrowSchema c_schema = {}; ARROW_RETURN_NOT_OK( @@ -2298,19 +2198,19 @@ class ArrayStreamReader { } Status CheckNotReleased() { - if (StreamTraits::IsReleasedFunc(&stream_)) { + if (ArrowArrayStreamIsReleased(&stream_)) { return Status::Invalid( "Attempt to read from a stream that has already been closed"); + } else { + return Status::OK(); } - - return Status::OK(); } Status StatusFromCError(int errno_like) const { return StatusFromCError(&stream_, errno_like); } - static Status StatusFromCError(StreamType* stream, int errno_like) { + static Status StatusFromCError(struct ArrowArrayStream* stream, int errno_like) { if (ARROW_PREDICT_TRUE(errno_like == 0)) { return Status::OK(); } @@ -2334,102 +2234,70 @@ class ArrayStreamReader { return {code, last_error ? std::string(last_error) : ""}; } - DeviceAllocationType get_device_type() const { - if constexpr (IsDevice) { - return static_cast(stream_.device_type); - } else { - return DeviceAllocationType::kCPU; - } - } - private: - mutable StreamType stream_; - const DeviceMemoryMapper mapper_; + mutable struct ArrowArrayStream stream_; }; -template -class ArrayStreamBatchReader : public RecordBatchReader, - public ArrayStreamReader { - using StreamTraits = - std::conditional_t; - using StreamType = typename StreamTraits::CType; - using ArrayTraits = std::conditional_t; - using ArrayType = typename ArrayTraits::CType; - +class ArrayStreamBatchReader : public RecordBatchReader, public ArrayStreamReader { public: - explicit ArrayStreamBatchReader( - StreamType* stream, const DeviceMemoryMapper& mapper = DefaultDeviceMemoryMapper) - : ArrayStreamReader(stream, mapper) {} + explicit ArrayStreamBatchReader(struct ArrowArrayStream* stream) + : ArrayStreamReader(stream) {} Status Init() { - ARROW_ASSIGN_OR_RAISE(schema_, this->ReadSchema()); + ARROW_ASSIGN_OR_RAISE(schema_, ReadSchema()); return Status::OK(); } std::shared_ptr schema() const override { return schema_; } Status ReadNext(std::shared_ptr* batch) override { - ARROW_RETURN_NOT_OK(this->CheckNotReleased()); + ARROW_RETURN_NOT_OK(CheckNotReleased()); - ArrayType c_array; - ARROW_RETURN_NOT_OK(this->ReadNextArrayInternal(&c_array)); + struct ArrowArray c_array; + ARROW_RETURN_NOT_OK(ReadNextArrayInternal(&c_array)); - if (ArrayTraits::IsReleasedFunc(&c_array)) { + if (ArrowArrayIsReleased(&c_array)) { // End of stream batch->reset(); return Status::OK(); } else { - return this->ImportRecordBatchInternal(&c_array, schema_).Value(batch); + return ImportRecordBatch(&c_array, schema_).Value(batch); } } Status Close() override { - this->ReleaseStream(); + ReleaseStream(); return Status::OK(); } - DeviceAllocationType device_type() const override { return this->get_device_type(); } - private: std::shared_ptr schema_; }; -template -class ArrayStreamArrayReader : public ArrayStreamReader { - using StreamTraits = - std::conditional_t; - using StreamType = typename StreamTraits::CType; - using ArrayTraits = std::conditional_t; - using ArrayType = typename ArrayTraits::CType; - +class ArrayStreamArrayReader : public ArrayStreamReader { public: - explicit ArrayStreamArrayReader( - StreamType* stream, const DeviceMemoryMapper& mapper = DefaultDeviceMemoryMapper) - : ArrayStreamReader(stream, mapper) {} + explicit ArrayStreamArrayReader(struct ArrowArrayStream* stream) + : ArrayStreamReader(stream) {} Status Init() { - ARROW_ASSIGN_OR_RAISE(field_, this->ReadField()); + ARROW_ASSIGN_OR_RAISE(field_, ReadField()); return Status::OK(); } std::shared_ptr data_type() const { return field_->type(); } Status ReadNext(std::shared_ptr* array) { - ARROW_RETURN_NOT_OK(this->CheckNotReleased()); + ARROW_RETURN_NOT_OK(CheckNotReleased()); - ArrayType c_array; - ARROW_RETURN_NOT_OK(this->ReadNextArrayInternal(&c_array)); + struct ArrowArray c_array; + ARROW_RETURN_NOT_OK(ReadNextArrayInternal(&c_array)); - if (ArrayTraits::IsReleasedFunc(&c_array)) { + if (ArrowArrayIsReleased(&c_array)) { // End of stream array->reset(); return Status::OK(); } else { - return this->ImportArrayInternal(&c_array, field_->type()).Value(array); + return ImportArray(&c_array, field_->type()).Value(array); } } @@ -2437,35 +2305,30 @@ class ArrayStreamArrayReader : public ArrayStreamReader { std::shared_ptr field_; }; -template > -Result> ImportReader( - typename StreamTraits::CType* stream, - const DeviceMemoryMapper& mapper = DefaultDeviceMemoryMapper) { - if (StreamTraits::IsReleasedFunc(stream)) { - return Status::Invalid("Cannot import released Arrow Stream"); +} // namespace + +Result> ImportRecordBatchReader( + struct ArrowArrayStream* stream) { + if (ArrowArrayStreamIsReleased(stream)) { + return Status::Invalid("Cannot import released ArrowArrayStream"); } - auto reader = std::make_shared>(stream, mapper); + auto reader = std::make_shared(stream); ARROW_RETURN_NOT_OK(reader->Init()); return reader; } -template > -Result> ImportChunked( - typename StreamTraits::CType* stream, - const DeviceMemoryMapper& mapper = DefaultDeviceMemoryMapper) { - if (StreamTraits::IsReleasedFunc(stream)) { - return Status::Invalid("Cannot import released Arrow Stream"); +Result> ImportChunkedArray( + struct ArrowArrayStream* stream) { + if (ArrowArrayStreamIsReleased(stream)) { + return Status::Invalid("Cannot import released ArrowArrayStream"); } - auto reader = std::make_shared>(stream, mapper); + auto reader = std::make_shared(stream); ARROW_RETURN_NOT_OK(reader->Init()); - auto data_type = reader->data_type(); + std::shared_ptr data_type = reader->data_type(); + ArrayVector chunks; std::shared_ptr chunk; while (true) { @@ -2481,26 +2344,4 @@ Result> ImportChunked( return ChunkedArray::Make(std::move(chunks), std::move(data_type)); } -} // namespace - -Result> ImportRecordBatchReader( - struct ArrowArrayStream* stream) { - return ImportReader(stream); -} - -Result> ImportDeviceRecordBatchReader( - struct ArrowDeviceArrayStream* stream, const DeviceMemoryMapper& mapper) { - return ImportReader(stream, mapper); -} - -Result> ImportChunkedArray( - struct ArrowArrayStream* stream) { - return ImportChunked(stream); -} - -Result> ImportDeviceChunkedArray( - struct ArrowDeviceArrayStream* stream, const DeviceMemoryMapper& mapper) { - return ImportChunked(stream, mapper); -} - } // namespace arrow diff --git a/cpp/src/arrow/c/bridge.h b/cpp/src/arrow/c/bridge.h index 45367e4f930..e98a42818f6 100644 --- a/cpp/src/arrow/c/bridge.h +++ b/cpp/src/arrow/c/bridge.h @@ -218,10 +218,6 @@ Status ExportDeviceRecordBatch(const RecordBatch& batch, using DeviceMemoryMapper = std::function>(ArrowDeviceType, int64_t)>; -ARROW_EXPORT -Result> DefaultDeviceMemoryMapper( - ArrowDeviceType device_type, int64_t device_id); - /// \brief EXPERIMENTAL: Import C++ device array from the C data interface. /// /// The ArrowArray struct has its contents moved (as per the C data interface @@ -230,13 +226,12 @@ Result> DefaultDeviceMemoryMapper( /// /// \param[in,out] array C data interface struct holding the array data /// \param[in] type type of the imported array -/// \param[in] mapper A function to map device + id to memory manager. If not -/// specified, defaults to map "cpu" to the built-in default memory manager. +/// \param[in] mapper A function to map device + id to memory manager /// \return Imported array object ARROW_EXPORT -Result> ImportDeviceArray( - struct ArrowDeviceArray* array, std::shared_ptr type, - const DeviceMemoryMapper& mapper = DefaultDeviceMemoryMapper); +Result> ImportDeviceArray(struct ArrowDeviceArray* array, + std::shared_ptr type, + const DeviceMemoryMapper& mapper); /// \brief EXPERIMENTAL: Import C++ device array and its type from the C data interface. /// @@ -247,13 +242,12 @@ Result> ImportDeviceArray( /// /// \param[in,out] array C data interface struct holding the array data /// \param[in,out] type C data interface struct holding the array type -/// \param[in] mapper A function to map device + id to memory manager. If not -/// specified, defaults to map "cpu" to the built-in default memory manager. +/// \param[in] mapper A function to map device + id to memory manager /// \return Imported array object ARROW_EXPORT -Result> ImportDeviceArray( - struct ArrowDeviceArray* array, struct ArrowSchema* type, - const DeviceMemoryMapper& mapper = DefaultDeviceMemoryMapper); +Result> ImportDeviceArray(struct ArrowDeviceArray* array, + struct ArrowSchema* type, + const DeviceMemoryMapper& mapper); /// \brief EXPERIMENTAL: Import C++ record batch with buffers on a device from the C data /// interface. @@ -265,13 +259,12 @@ Result> ImportDeviceArray( /// /// \param[in,out] array C data interface struct holding the record batch data /// \param[in] schema schema of the imported record batch -/// \param[in] mapper A function to map device + id to memory manager. If not -/// specified, defaults to map "cpu" to the built-in default memory manager. +/// \param[in] mapper A function to map device + id to memory manager /// \return Imported record batch object ARROW_EXPORT Result> ImportDeviceRecordBatch( struct ArrowDeviceArray* array, std::shared_ptr schema, - const DeviceMemoryMapper& mapper = DefaultDeviceMemoryMapper); + const DeviceMemoryMapper& mapper); /// \brief EXPERIMENTAL: Import C++ record batch with buffers on a device and its schema /// from the C data interface. @@ -285,13 +278,12 @@ Result> ImportDeviceRecordBatch( /// /// \param[in,out] array C data interface struct holding the record batch data /// \param[in,out] schema C data interface struct holding the record batch schema -/// \param[in] mapper A function to map device + id to memory manager. If not -/// specified, defaults to map "cpu" to the built-in default memory manager. +/// \param[in] mapper A function to map device + id to memory manager /// \return Imported record batch object ARROW_EXPORT Result> ImportDeviceRecordBatch( struct ArrowDeviceArray* array, struct ArrowSchema* schema, - const DeviceMemoryMapper& mapper = DefaultDeviceMemoryMapper); + const DeviceMemoryMapper& mapper); /// @} @@ -321,31 +313,6 @@ ARROW_EXPORT Status ExportChunkedArray(std::shared_ptr chunked_array, struct ArrowArrayStream* out); -/// \brief Export C++ RecordBatchReader using the C device stream interface -/// -/// The resulting ArrowDeviceArrayStream struct keeps the record batch reader -/// alive until its release callback is called by the consumer. The device -/// type is determined by calling device_type() on the RecordBatchReader. -/// -/// \param[in] reader RecordBatchReader object to export -/// \param[out] out C struct to export the stream to -ARROW_EXPORT -Status ExportDeviceRecordBatchReader(std::shared_ptr reader, - struct ArrowDeviceArrayStream* out); - -/// \brief Export C++ ChunkedArray using the C device data interface format. -/// -/// The resulting ArrowDeviceArrayStream keeps the chunked array data and buffers -/// alive until its release callback is called by the consumer. -/// -/// \param[in] chunked_array ChunkedArray object to export -/// \param[in] device_type the device type the data is located on -/// \param[out] out C struct to export the stream to -ARROW_EXPORT -Status ExportDeviceChunkedArray(std::shared_ptr chunked_array, - DeviceAllocationType device_type, - struct ArrowDeviceArrayStream* out); - /// \brief Import C++ RecordBatchReader from the C stream interface. /// /// The ArrowArrayStream struct has its contents moved to a private object @@ -368,42 +335,6 @@ Result> ImportRecordBatchReader( ARROW_EXPORT Result> ImportChunkedArray(struct ArrowArrayStream* stream); -/// \brief Import C++ RecordBatchReader from the C device stream interface -/// -/// The ArrowDeviceArrayStream struct has its contents moved to a private object -/// held alive by the resulting record batch reader. -/// -/// \note If there was a required sync event, sync events are accessible by individual -/// buffers of columns. We are not yet bubbling the sync events from the buffers up to -/// the `GetSyncEvent` method of an imported RecordBatch. This will be added in a future -/// update. -/// -/// \param[in,out] stream C device stream interface struct -/// \param[in] mapper mapping from device type and ID to memory manager -/// \return Imported RecordBatchReader object -ARROW_EXPORT -Result> ImportDeviceRecordBatchReader( - struct ArrowDeviceArrayStream* stream, - const DeviceMemoryMapper& mapper = DefaultDeviceMemoryMapper); - -/// \brief Import C++ ChunkedArray from the C device stream interface -/// -/// The ArrowDeviceArrayStream struct has its contents moved to a private object, -/// is consumed in its entirety, and released before returning all chunks as a -/// ChunkedArray. -/// -/// \note Any chunks that require synchronization for their device memory will have -/// the SyncEvent objects available by checking the individual buffers of each chunk. -/// These SyncEvents should be checked before accessing the data in those buffers. -/// -/// \param[in,out] stream C device stream interface struct -/// \param[in] mapper mapping from device type and ID to memory manager -/// \return Imported ChunkedArray object -ARROW_EXPORT -Result> ImportDeviceChunkedArray( - struct ArrowDeviceArrayStream* stream, - const DeviceMemoryMapper& mapper = DefaultDeviceMemoryMapper); - /// @} } // namespace arrow diff --git a/cpp/src/arrow/c/bridge_test.cc b/cpp/src/arrow/c/bridge_test.cc index 09bb524adbd..dba6e4736b6 100644 --- a/cpp/src/arrow/c/bridge_test.cc +++ b/cpp/src/arrow/c/bridge_test.cc @@ -53,15 +53,11 @@ namespace arrow { -using internal::ArrayDeviceExportTraits; -using internal::ArrayDeviceStreamExportTraits; using internal::ArrayExportGuard; using internal::ArrayExportTraits; using internal::ArrayStreamExportGuard; using internal::ArrayStreamExportTraits; using internal::checked_cast; -using internal::DeviceArrayExportGuard; -using internal::DeviceArrayStreamExportGuard; using internal::SchemaExportGuard; using internal::SchemaExportTraits; using internal::Zip; @@ -569,7 +565,7 @@ struct ArrayExportChecker { auto expected_n_buffers = static_cast(expected_data.buffers.size()); auto expected_buffers = expected_data.buffers.data(); - if (!internal::may_have_validity_bitmap(expected_data.type->id())) { + if (!internal::HasValidityBitmap(expected_data.type->id())) { --expected_n_buffers; ++expected_buffers; } @@ -1362,7 +1358,7 @@ class MyMemoryManager : public CPUMemoryManager { if (buf.size() > 0) { memcpy(dest->mutable_data(), buf.data(), static_cast(buf.size())); } - return dest; + return std::move(dest); } }; @@ -4102,23 +4098,6 @@ TEST_F(TestArrayRoundtrip, RegisteredExtension) { TestWithArrayFactory(NestedFactory(ExampleDictExtension)); } -TEST_F(TestArrayRoundtrip, RegisteredExtensionNoMetadata) { - auto ext_type = std::make_shared(); - ExtensionTypeGuard guard(ext_type); - - auto ext_metadata = - KeyValueMetadata::Make({"ARROW:extension:name"}, {ext_type->extension_name()}); - auto ext_field = field("", ext_type->storage_type(), true, std::move(ext_metadata)); - - struct ArrowSchema c_schema {}; - SchemaExportGuard schema_guard(&c_schema); - ASSERT_OK(ExportField(*ext_field, &c_schema)); - - ASSERT_OK_AND_ASSIGN(auto ext_type_roundtrip, ImportType(&c_schema)); - ASSERT_EQ(ext_type_roundtrip->id(), Type::EXTENSION); - AssertTypeEqual(ext_type_roundtrip, ext_type); -} - TEST_F(TestArrayRoundtrip, UnregisteredExtension) { auto StorageExtractor = [](ArrayFactory factory) { return [factory]() -> Result> { @@ -4767,516 +4746,4 @@ TEST_F(TestArrayStreamRoundtrip, ChunkedArrayRoundtripEmpty) { }); } -//////////////////////////////////////////////////////////////////////////// -// Array device stream export tests - -class TestArrayDeviceStreamExport : public BaseArrayStreamTest { - public: - void AssertStreamSchema(struct ArrowDeviceArrayStream* c_stream, - const Schema& expected) { - struct ArrowSchema c_schema; - ASSERT_EQ(0, c_stream->get_schema(c_stream, &c_schema)); - - SchemaExportGuard schema_guard(&c_schema); - ASSERT_FALSE(ArrowSchemaIsReleased(&c_schema)); - ASSERT_OK_AND_ASSIGN(auto schema, ImportSchema(&c_schema)); - AssertSchemaEqual(expected, *schema, /*check_metadata=*/true); - } - - void AssertStreamEnd(struct ArrowDeviceArrayStream* c_stream) { - struct ArrowDeviceArray c_array; - ASSERT_EQ(0, c_stream->get_next(c_stream, &c_array)); - - DeviceArrayExportGuard guard(&c_array); - ASSERT_TRUE(ArrowDeviceArrayIsReleased(&c_array)); - } - - void AssertStreamNext(struct ArrowDeviceArrayStream* c_stream, - const RecordBatch& expected) { - struct ArrowDeviceArray c_array; - ASSERT_EQ(0, c_stream->get_next(c_stream, &c_array)); - - DeviceArrayExportGuard guard(&c_array); - ASSERT_FALSE(ArrowDeviceArrayIsReleased(&c_array)); - - ASSERT_OK_AND_ASSIGN(auto batch, - ImportDeviceRecordBatch(&c_array, expected.schema(), - TestDeviceArrayRoundtrip::DeviceMapper)); - AssertBatchesEqual(expected, *batch); - } - - void AssertStreamNext(struct ArrowDeviceArrayStream* c_stream, const Array& expected) { - struct ArrowDeviceArray c_array; - ASSERT_EQ(0, c_stream->get_next(c_stream, &c_array)); - - DeviceArrayExportGuard guard(&c_array); - ASSERT_FALSE(ArrowDeviceArrayIsReleased(&c_array)); - - ASSERT_OK_AND_ASSIGN(auto array, - ImportDeviceArray(&c_array, expected.type(), - TestDeviceArrayRoundtrip::DeviceMapper)); - AssertArraysEqual(expected, *array); - } - - static Result> ToDeviceData( - const std::shared_ptr& mm, const ArrayData& data) { - arrow::BufferVector buffers; - for (const auto& buf : data.buffers) { - if (buf) { - ARROW_ASSIGN_OR_RAISE(auto dest, mm->CopyBuffer(buf, mm)); - buffers.push_back(dest); - } else { - buffers.push_back(nullptr); - } - } - - arrow::ArrayDataVector children; - for (const auto& child : data.child_data) { - ARROW_ASSIGN_OR_RAISE(auto dest, ToDeviceData(mm, *child)); - children.push_back(dest); - } - - return ArrayData::Make(data.type, data.length, buffers, children, data.null_count, - data.offset); - } - - static Result> ToDevice(const std::shared_ptr& mm, - const ArrayData& data) { - ARROW_ASSIGN_OR_RAISE(auto result, ToDeviceData(mm, data)); - return MakeArray(result); - } -}; - -TEST_F(TestArrayDeviceStreamExport, Empty) { - auto schema = arrow::schema({field("ints", int32())}); - auto batches = MakeBatches(schema, {}); - ASSERT_OK_AND_ASSIGN( - auto reader, - RecordBatchReader::Make(batches, schema, - static_cast(kMyDeviceType))); - - struct ArrowDeviceArrayStream c_stream; - ASSERT_OK(ExportDeviceRecordBatchReader(reader, &c_stream)); - DeviceArrayStreamExportGuard guard(&c_stream); - - ASSERT_FALSE(ArrowDeviceArrayStreamIsReleased(&c_stream)); - ASSERT_EQ(kMyDeviceType, c_stream.device_type); - AssertStreamSchema(&c_stream, *schema); - AssertStreamEnd(&c_stream); - AssertStreamEnd(&c_stream); -} - -TEST_F(TestArrayDeviceStreamExport, Simple) { - std::shared_ptr device = std::make_shared(1); - auto mm = device->default_memory_manager(); - - ASSERT_OK_AND_ASSIGN(auto arr1, - ToDevice(mm, *ArrayFromJSON(int32(), "[1, 2]")->data())); - ASSERT_EQ(device->device_type(), arr1->device_type()); - ASSERT_OK_AND_ASSIGN(auto arr2, - ToDevice(mm, *ArrayFromJSON(int32(), "[4, 5, null]")->data())); - ASSERT_EQ(device->device_type(), arr2->device_type()); - auto schema = arrow::schema({field("ints", int32())}); - auto batches = MakeBatches(schema, {arr1, arr2}); - ASSERT_OK_AND_ASSIGN(auto reader, - RecordBatchReader::Make(batches, schema, device->device_type())); - - struct ArrowDeviceArrayStream c_stream; - - ASSERT_OK(ExportDeviceRecordBatchReader(reader, &c_stream)); - DeviceArrayStreamExportGuard guard(&c_stream); - - ASSERT_FALSE(ArrowDeviceArrayStreamIsReleased(&c_stream)); - AssertStreamSchema(&c_stream, *schema); - ASSERT_EQ(kMyDeviceType, c_stream.device_type); - AssertStreamNext(&c_stream, *batches[0]); - AssertStreamNext(&c_stream, *batches[1]); - AssertStreamEnd(&c_stream); - AssertStreamEnd(&c_stream); -} - -TEST_F(TestArrayDeviceStreamExport, ArrayLifetime) { - std::shared_ptr device = std::make_shared(1); - auto mm = device->default_memory_manager(); - - ASSERT_OK_AND_ASSIGN(auto arr1, - ToDevice(mm, *ArrayFromJSON(int32(), "[1, 2]")->data())); - ASSERT_EQ(device->device_type(), arr1->device_type()); - ASSERT_OK_AND_ASSIGN(auto arr2, - ToDevice(mm, *ArrayFromJSON(int32(), "[4, 5, null]")->data())); - ASSERT_EQ(device->device_type(), arr2->device_type()); - auto schema = arrow::schema({field("ints", int32())}); - auto batches = MakeBatches(schema, {arr1, arr2}); - ASSERT_OK_AND_ASSIGN(auto reader, - RecordBatchReader::Make(batches, schema, device->device_type())); - - struct ArrowDeviceArrayStream c_stream; - struct ArrowSchema c_schema; - struct ArrowDeviceArray c_array0, c_array1; - - ASSERT_OK(ExportDeviceRecordBatchReader(reader, &c_stream)); - { - DeviceArrayStreamExportGuard guard(&c_stream); - ASSERT_FALSE(ArrowDeviceArrayStreamIsReleased(&c_stream)); - ASSERT_EQ(kMyDeviceType, c_stream.device_type); - - ASSERT_EQ(0, c_stream.get_schema(&c_stream, &c_schema)); - ASSERT_EQ(0, c_stream.get_next(&c_stream, &c_array0)); - ASSERT_EQ(0, c_stream.get_next(&c_stream, &c_array1)); - AssertStreamEnd(&c_stream); - } - - DeviceArrayExportGuard guard0(&c_array0), guard1(&c_array1); - - { - SchemaExportGuard schema_guard(&c_schema); - ASSERT_OK_AND_ASSIGN(auto got_schema, ImportSchema(&c_schema)); - AssertSchemaEqual(*schema, *got_schema, /*check_metadata=*/true); - } - - ASSERT_EQ(kMyDeviceType, c_array0.device_type); - ASSERT_EQ(kMyDeviceType, c_array1.device_type); - - ASSERT_GT(pool_->bytes_allocated(), orig_allocated_); - ASSERT_OK_AND_ASSIGN( - auto batch, - ImportDeviceRecordBatch(&c_array1, schema, TestDeviceArrayRoundtrip::DeviceMapper)); - AssertBatchesEqual(*batches[1], *batch); - ASSERT_EQ(device->device_type(), batch->device_type()); - ASSERT_OK_AND_ASSIGN( - batch, - ImportDeviceRecordBatch(&c_array0, schema, TestDeviceArrayRoundtrip::DeviceMapper)); - AssertBatchesEqual(*batches[0], *batch); - ASSERT_EQ(device->device_type(), batch->device_type()); -} - -TEST_F(TestArrayDeviceStreamExport, Errors) { - auto reader = - std::make_shared(Status::Invalid("some example error")); - - struct ArrowDeviceArrayStream c_stream; - - ASSERT_OK(ExportDeviceRecordBatchReader(reader, &c_stream)); - DeviceArrayStreamExportGuard guard(&c_stream); - - struct ArrowSchema c_schema; - ASSERT_EQ(0, c_stream.get_schema(&c_stream, &c_schema)); - ASSERT_FALSE(ArrowSchemaIsReleased(&c_schema)); - { - SchemaExportGuard schema_guard(&c_schema); - ASSERT_OK_AND_ASSIGN(auto schema, ImportSchema(&c_schema)); - AssertSchemaEqual(schema, arrow::schema({}), /*check_metadata=*/true); - } - - struct ArrowDeviceArray c_array; - ASSERT_EQ(EINVAL, c_stream.get_next(&c_stream, &c_array)); -} - -TEST_F(TestArrayDeviceStreamExport, ChunkedArrayExportEmpty) { - ASSERT_OK_AND_ASSIGN(auto chunked_array, ChunkedArray::Make({}, int32())); - - struct ArrowDeviceArrayStream c_stream; - struct ArrowSchema c_schema; - - ASSERT_OK(ExportDeviceChunkedArray( - chunked_array, static_cast(kMyDeviceType), &c_stream)); - DeviceArrayStreamExportGuard guard(&c_stream); - - { - DeviceArrayStreamExportGuard guard(&c_stream); - ASSERT_FALSE(ArrowDeviceArrayStreamIsReleased(&c_stream)); - - ASSERT_EQ(kMyDeviceType, c_stream.device_type); - ASSERT_EQ(0, c_stream.get_schema(&c_stream, &c_schema)); - AssertStreamEnd(&c_stream); - } - - { - SchemaExportGuard schema_guard(&c_schema); - ASSERT_OK_AND_ASSIGN(auto got_type, ImportType(&c_schema)); - AssertTypeEqual(*chunked_array->type(), *got_type); - } -} - -TEST_F(TestArrayDeviceStreamExport, ChunkedArrayExport) { - std::shared_ptr device = std::make_shared(1); - auto mm = device->default_memory_manager(); - - ASSERT_OK_AND_ASSIGN(auto arr1, - ToDevice(mm, *ArrayFromJSON(int32(), "[1, 2]")->data())); - ASSERT_EQ(device->device_type(), arr1->device_type()); - ASSERT_OK_AND_ASSIGN(auto arr2, - ToDevice(mm, *ArrayFromJSON(int32(), "[4, 5, null]")->data())); - ASSERT_EQ(device->device_type(), arr2->device_type()); - - ASSERT_OK_AND_ASSIGN(auto chunked_array, ChunkedArray::Make({arr1, arr2})); - - struct ArrowDeviceArrayStream c_stream; - struct ArrowSchema c_schema; - struct ArrowDeviceArray c_array0, c_array1; - - ASSERT_OK(ExportDeviceChunkedArray(chunked_array, device->device_type(), &c_stream)); - DeviceArrayStreamExportGuard guard(&c_stream); - - { - DeviceArrayStreamExportGuard guard(&c_stream); - ASSERT_FALSE(ArrowDeviceArrayStreamIsReleased(&c_stream)); - ASSERT_EQ(kMyDeviceType, c_stream.device_type); - - ASSERT_EQ(0, c_stream.get_schema(&c_stream, &c_schema)); - ASSERT_EQ(0, c_stream.get_next(&c_stream, &c_array0)); - ASSERT_EQ(0, c_stream.get_next(&c_stream, &c_array1)); - AssertStreamEnd(&c_stream); - } - - DeviceArrayExportGuard guard0(&c_array0), guard1(&c_array1); - - { - SchemaExportGuard schema_guard(&c_schema); - ASSERT_OK_AND_ASSIGN(auto got_type, ImportType(&c_schema)); - AssertTypeEqual(*chunked_array->type(), *got_type); - } - - ASSERT_EQ(kMyDeviceType, c_array0.device_type); - ASSERT_EQ(kMyDeviceType, c_array1.device_type); - - ASSERT_GT(pool_->bytes_allocated(), orig_allocated_); - ASSERT_OK_AND_ASSIGN(auto array, - ImportDeviceArray(&c_array0, chunked_array->type(), - TestDeviceArrayRoundtrip::DeviceMapper)); - ASSERT_EQ(device->device_type(), array->device_type()); - AssertArraysEqual(*chunked_array->chunk(0), *array); - ASSERT_OK_AND_ASSIGN(array, ImportDeviceArray(&c_array1, chunked_array->type(), - TestDeviceArrayRoundtrip::DeviceMapper)); - ASSERT_EQ(device->device_type(), array->device_type()); - AssertArraysEqual(*chunked_array->chunk(1), *array); -} - -//////////////////////////////////////////////////////////////////////////// -// Array device stream roundtrip tests - -class TestArrayDeviceStreamRoundtrip : public BaseArrayStreamTest { - public: - static Result> ToDeviceData( - const std::shared_ptr& mm, const ArrayData& data) { - arrow::BufferVector buffers; - for (const auto& buf : data.buffers) { - if (buf) { - ARROW_ASSIGN_OR_RAISE(auto dest, mm->CopyBuffer(buf, mm)); - buffers.push_back(dest); - } else { - buffers.push_back(nullptr); - } - } - - arrow::ArrayDataVector children; - for (const auto& child : data.child_data) { - ARROW_ASSIGN_OR_RAISE(auto dest, ToDeviceData(mm, *child)); - children.push_back(dest); - } - - return ArrayData::Make(data.type, data.length, buffers, children, data.null_count, - data.offset); - } - - static Result> ToDevice(const std::shared_ptr& mm, - const ArrayData& data) { - ARROW_ASSIGN_OR_RAISE(auto result, ToDeviceData(mm, data)); - return MakeArray(result); - } - - void Roundtrip(std::shared_ptr* reader, - struct ArrowDeviceArrayStream* c_stream) { - ASSERT_OK(ExportDeviceRecordBatchReader(*reader, c_stream)); - ASSERT_FALSE(ArrowDeviceArrayStreamIsReleased(c_stream)); - - ASSERT_OK_AND_ASSIGN( - auto got_reader, - ImportDeviceRecordBatchReader(c_stream, TestDeviceArrayRoundtrip::DeviceMapper)); - *reader = std::move(got_reader); - } - - void Roundtrip( - std::shared_ptr reader, - std::function&)> check_func) { - ArrowDeviceArrayStream c_stream; - - // NOTE: ReleaseCallback<> is not immediately usable with ArrowDeviceArayStream - // because get_next and get_schema need the original private_data. - std::weak_ptr weak_reader(reader); - ASSERT_EQ(weak_reader.use_count(), 1); // Expiration check will fail otherwise - - ASSERT_OK(ExportDeviceRecordBatchReader(std::move(reader), &c_stream)); - ASSERT_FALSE(ArrowDeviceArrayStreamIsReleased(&c_stream)); - - { - ASSERT_OK_AND_ASSIGN(auto new_reader, - ImportDeviceRecordBatchReader( - &c_stream, TestDeviceArrayRoundtrip::DeviceMapper)); - // stream was moved - ASSERT_TRUE(ArrowDeviceArrayStreamIsReleased(&c_stream)); - ASSERT_FALSE(weak_reader.expired()); - - check_func(new_reader); - } - // Stream was released when `new_reader` was destroyed - ASSERT_TRUE(weak_reader.expired()); - } - - void Roundtrip(std::shared_ptr src, - std::function&)> check_func) { - ArrowDeviceArrayStream c_stream; - - // One original copy to compare the result, one copy held by the stream - std::weak_ptr weak_src(src); - int64_t initial_use_count = weak_src.use_count(); - - ASSERT_OK(ExportDeviceChunkedArray( - std::move(src), static_cast(kMyDeviceType), &c_stream)); - ASSERT_FALSE(ArrowDeviceArrayStreamIsReleased(&c_stream)); - ASSERT_EQ(kMyDeviceType, c_stream.device_type); - - { - ASSERT_OK_AND_ASSIGN( - auto dst, - ImportDeviceChunkedArray(&c_stream, TestDeviceArrayRoundtrip::DeviceMapper)); - // Stream was moved, consumed, and released - ASSERT_TRUE(ArrowDeviceArrayStreamIsReleased(&c_stream)); - - // Stream was released by ImportDeviceChunkedArray but original copy remains - ASSERT_EQ(weak_src.use_count(), initial_use_count - 1); - - check_func(dst); - } - } - - void AssertReaderNext(const std::shared_ptr& reader, - const RecordBatch& expected) { - ASSERT_OK_AND_ASSIGN(auto batch, reader->Next()); - ASSERT_NE(batch, nullptr); - ASSERT_EQ(static_cast(kMyDeviceType), batch->device_type()); - AssertBatchesEqual(expected, *batch); - } - - void AssertReaderEnd(const std::shared_ptr& reader) { - ASSERT_OK_AND_ASSIGN(auto batch, reader->Next()); - ASSERT_EQ(batch, nullptr); - } - - void AssertReaderClosed(const std::shared_ptr& reader) { - ASSERT_THAT(reader->Next(), - Raises(StatusCode::Invalid, ::testing::HasSubstr("already been closed"))); - } - - void AssertReaderClose(const std::shared_ptr& reader) { - ASSERT_OK(reader->Close()); - AssertReaderClosed(reader); - } -}; - -TEST_F(TestArrayDeviceStreamRoundtrip, Simple) { - std::shared_ptr device = std::make_shared(1); - auto mm = device->default_memory_manager(); - - ASSERT_OK_AND_ASSIGN(auto arr1, - ToDevice(mm, *ArrayFromJSON(int32(), "[1, 2]")->data())); - ASSERT_EQ(device->device_type(), arr1->device_type()); - ASSERT_OK_AND_ASSIGN(auto arr2, - ToDevice(mm, *ArrayFromJSON(int32(), "[4, 5, null]")->data())); - ASSERT_EQ(device->device_type(), arr2->device_type()); - auto orig_schema = arrow::schema({field("ints", int32())}); - auto batches = MakeBatches(orig_schema, {arr1, arr2}); - ASSERT_OK_AND_ASSIGN( - auto reader, RecordBatchReader::Make(batches, orig_schema, device->device_type())); - - Roundtrip(std::move(reader), [&](const std::shared_ptr& reader) { - AssertSchemaEqual(*orig_schema, *reader->schema(), /*check_metadata=*/true); - AssertReaderNext(reader, *batches[0]); - AssertReaderNext(reader, *batches[1]); - AssertReaderEnd(reader); - AssertReaderEnd(reader); - AssertReaderClose(reader); - }); -} - -TEST_F(TestArrayDeviceStreamRoundtrip, CloseEarly) { - std::shared_ptr device = std::make_shared(1); - auto mm = device->default_memory_manager(); - - ASSERT_OK_AND_ASSIGN(auto arr1, - ToDevice(mm, *ArrayFromJSON(int32(), "[1, 2]")->data())); - ASSERT_EQ(device->device_type(), arr1->device_type()); - ASSERT_OK_AND_ASSIGN(auto arr2, - ToDevice(mm, *ArrayFromJSON(int32(), "[4, 5, null]")->data())); - ASSERT_EQ(device->device_type(), arr2->device_type()); - auto orig_schema = arrow::schema({field("ints", int32())}); - auto batches = MakeBatches(orig_schema, {arr1, arr2}); - ASSERT_OK_AND_ASSIGN( - auto reader, RecordBatchReader::Make(batches, orig_schema, device->device_type())); - - Roundtrip(std::move(reader), [&](const std::shared_ptr& reader) { - AssertReaderNext(reader, *batches[0]); - AssertReaderClose(reader); - }); -} - -TEST_F(TestArrayDeviceStreamRoundtrip, Errors) { - auto reader = std::make_shared( - Status::Invalid("roundtrip error example")); - - Roundtrip(std::move(reader), [&](const std::shared_ptr& reader) { - EXPECT_THAT(reader->Next(), Raises(StatusCode::Invalid, - ::testing::HasSubstr("roundtrip error example"))); - }); -} - -TEST_F(TestArrayDeviceStreamRoundtrip, SchemaError) { - struct ArrowDeviceArrayStream stream = {}; - stream.get_last_error = [](struct ArrowDeviceArrayStream* stream) { - return "Expected error"; - }; - stream.get_schema = [](struct ArrowDeviceArrayStream* stream, - struct ArrowSchema* schema) { return EIO; }; - stream.get_next = [](struct ArrowDeviceArrayStream* stream, - struct ArrowDeviceArray* array) { return EINVAL; }; - stream.release = [](struct ArrowDeviceArrayStream* stream) { - *static_cast(stream->private_data) = true; - std::memset(stream, 0, sizeof(*stream)); - }; - bool released = false; - stream.private_data = &released; - - EXPECT_RAISES_WITH_MESSAGE_THAT(IOError, ::testing::HasSubstr("Expected error"), - ImportDeviceRecordBatchReader(&stream)); - ASSERT_TRUE(released); -} - -TEST_F(TestArrayDeviceStreamRoundtrip, ChunkedArrayRoundtrip) { - std::shared_ptr device = std::make_shared(1); - auto mm = device->default_memory_manager(); - - ASSERT_OK_AND_ASSIGN(auto arr1, - ToDevice(mm, *ArrayFromJSON(int32(), "[1, 2]")->data())); - ASSERT_EQ(device->device_type(), arr1->device_type()); - ASSERT_OK_AND_ASSIGN(auto arr2, - ToDevice(mm, *ArrayFromJSON(int32(), "[4, 5, null]")->data())); - ASSERT_EQ(device->device_type(), arr2->device_type()); - - ASSERT_OK_AND_ASSIGN(auto src, ChunkedArray::Make({arr1, arr2})); - - Roundtrip(src, [&](const std::shared_ptr& dst) { - AssertTypeEqual(*dst->type(), *src->type()); - AssertChunkedEqual(*dst, *src); - }); -} - -TEST_F(TestArrayDeviceStreamRoundtrip, ChunkedArrayRoundtripEmpty) { - ASSERT_OK_AND_ASSIGN(auto src, ChunkedArray::Make({}, int32())); - - Roundtrip(src, [&](const std::shared_ptr& dst) { - AssertTypeEqual(*dst->type(), *src->type()); - AssertChunkedEqual(*dst, *src); - }); -} - } // namespace arrow diff --git a/cpp/src/arrow/c/helpers.h b/cpp/src/arrow/c/helpers.h index 6e4df17f43e..a24f272feac 100644 --- a/cpp/src/arrow/c/helpers.h +++ b/cpp/src/arrow/c/helpers.h @@ -17,7 +17,6 @@ #pragma once -#include #include #include #include @@ -71,17 +70,9 @@ inline int ArrowArrayIsReleased(const struct ArrowArray* array) { return array->release == NULL; } -inline int ArrowDeviceArrayIsReleased(const struct ArrowDeviceArray* array) { - return ArrowArrayIsReleased(&array->array); -} - /// Mark the C array released (for use in release callbacks) inline void ArrowArrayMarkReleased(struct ArrowArray* array) { array->release = NULL; } -inline void ArrowDeviceArrayMarkReleased(struct ArrowDeviceArray* array) { - ArrowArrayMarkReleased(&array->array); -} - /// Move the C array from `src` to `dest` /// /// Note `dest` must *not* point to a valid array already, otherwise there @@ -93,14 +84,6 @@ inline void ArrowArrayMove(struct ArrowArray* src, struct ArrowArray* dest) { ArrowArrayMarkReleased(src); } -inline void ArrowDeviceArrayMove(struct ArrowDeviceArray* src, - struct ArrowDeviceArray* dest) { - assert(dest != src); - assert(!ArrowDeviceArrayIsReleased(src)); - memcpy(dest, src, sizeof(struct ArrowDeviceArray)); - ArrowDeviceArrayMarkReleased(src); -} - /// Release the C array, if necessary, by calling its release callback inline void ArrowArrayRelease(struct ArrowArray* array) { if (!ArrowArrayIsReleased(array)) { @@ -110,32 +93,16 @@ inline void ArrowArrayRelease(struct ArrowArray* array) { } } -inline void ArrowDeviceArrayRelease(struct ArrowDeviceArray* array) { - if (!ArrowDeviceArrayIsReleased(array)) { - array->array.release(&array->array); - ARROW_C_ASSERT(ArrowDeviceArrayIsReleased(array), - "ArrowDeviceArrayRelease did not cleanup release callback"); - } -} - /// Query whether the C array stream is released inline int ArrowArrayStreamIsReleased(const struct ArrowArrayStream* stream) { return stream->release == NULL; } -inline int ArrowDeviceArrayStreamIsReleased(const struct ArrowDeviceArrayStream* stream) { - return stream->release == NULL; -} - /// Mark the C array stream released (for use in release callbacks) inline void ArrowArrayStreamMarkReleased(struct ArrowArrayStream* stream) { stream->release = NULL; } -inline void ArrowDeviceArrayStreamMarkReleased(struct ArrowDeviceArrayStream* stream) { - stream->release = NULL; -} - /// Move the C array stream from `src` to `dest` /// /// Note `dest` must *not* point to a valid stream already, otherwise there @@ -148,14 +115,6 @@ inline void ArrowArrayStreamMove(struct ArrowArrayStream* src, ArrowArrayStreamMarkReleased(src); } -inline void ArrowDeviceArrayStreamMove(struct ArrowDeviceArrayStream* src, - struct ArrowDeviceArrayStream* dest) { - assert(dest != src); - assert(!ArrowDeviceArrayStreamIsReleased(src)); - memcpy(dest, src, sizeof(struct ArrowDeviceArrayStream)); - ArrowDeviceArrayStreamMarkReleased(src); -} - /// Release the C array stream, if necessary, by calling its release callback inline void ArrowArrayStreamRelease(struct ArrowArrayStream* stream) { if (!ArrowArrayStreamIsReleased(stream)) { @@ -165,14 +124,6 @@ inline void ArrowArrayStreamRelease(struct ArrowArrayStream* stream) { } } -inline void ArrowDeviceArrayStreamRelease(struct ArrowDeviceArrayStream* stream) { - if (!ArrowDeviceArrayStreamIsReleased(stream)) { - stream->release(stream); - ARROW_C_ASSERT(ArrowDeviceArrayStreamIsReleased(stream), - "ArrowDeviceArrayStreamRelease did not cleanup release callback"); - } -} - #ifdef __cplusplus } #endif diff --git a/cpp/src/arrow/c/util_internal.h b/cpp/src/arrow/c/util_internal.h index dc0e25710e9..6a33be9b0da 100644 --- a/cpp/src/arrow/c/util_internal.h +++ b/cpp/src/arrow/c/util_internal.h @@ -32,32 +32,12 @@ struct ArrayExportTraits { typedef struct ArrowArray CType; static constexpr auto IsReleasedFunc = &ArrowArrayIsReleased; static constexpr auto ReleaseFunc = &ArrowArrayRelease; - static constexpr auto MoveFunc = &ArrowArrayMove; - static constexpr auto MarkReleased = &ArrowArrayMarkReleased; -}; - -struct ArrayDeviceExportTraits { - typedef struct ArrowDeviceArray CType; - static constexpr auto IsReleasedFunc = &ArrowDeviceArrayIsReleased; - static constexpr auto ReleaseFunc = &ArrowDeviceArrayRelease; - static constexpr auto MoveFunc = &ArrowDeviceArrayMove; - static constexpr auto MarkReleased = &ArrowDeviceArrayMarkReleased; }; struct ArrayStreamExportTraits { typedef struct ArrowArrayStream CType; static constexpr auto IsReleasedFunc = &ArrowArrayStreamIsReleased; static constexpr auto ReleaseFunc = &ArrowArrayStreamRelease; - static constexpr auto MoveFunc = &ArrowArrayStreamMove; - static constexpr auto MarkReleased = &ArrowArrayStreamMarkReleased; -}; - -struct ArrayDeviceStreamExportTraits { - typedef struct ArrowDeviceArrayStream CType; - static constexpr auto IsReleasedFunc = &ArrowDeviceArrayStreamIsReleased; - static constexpr auto ReleaseFunc = &ArrowDeviceArrayStreamRelease; - static constexpr auto MoveFunc = &ArrowDeviceArrayStreamMove; - static constexpr auto MarkReleased = &ArrowDeviceArrayStreamMarkReleased; }; // A RAII-style object to release a C Array / Schema struct at block scope exit. @@ -99,9 +79,7 @@ class ExportGuard { using SchemaExportGuard = ExportGuard; using ArrayExportGuard = ExportGuard; -using DeviceArrayExportGuard = ExportGuard; using ArrayStreamExportGuard = ExportGuard; -using DeviceArrayStreamExportGuard = ExportGuard; } // namespace internal } // namespace arrow diff --git a/cpp/src/arrow/chunk_resolver.cc b/cpp/src/arrow/chunk_resolver.cc index 55eec53ced1..4a1ba6d0a32 100644 --- a/cpp/src/arrow/chunk_resolver.cc +++ b/cpp/src/arrow/chunk_resolver.cc @@ -19,14 +19,14 @@ #include #include -#include #include #include #include "arrow/array.h" #include "arrow/record_batch.h" -namespace arrow::internal { +namespace arrow { +namespace internal { namespace { template @@ -54,107 +54,16 @@ inline std::vector MakeChunksOffsets(const std::vector& chunks) { offsets[chunks.size()] = offset; return offsets; } - -/// \pre all the pre-conditions of ChunkResolver::ResolveMany() -/// \pre num_offsets - 1 <= std::numeric_limits::max() -template -void ResolveManyInline(size_t num_offsets, const int64_t* signed_offsets, - int64_t n_indices, const IndexType* logical_index_vec, - IndexType* out_chunk_index_vec, IndexType chunk_hint, - IndexType* out_index_in_chunk_vec) { - auto* offsets = reinterpret_cast(signed_offsets); - const auto num_chunks = static_cast(num_offsets - 1); - // chunk_hint in [0, num_offsets) per the precondition. - for (int64_t i = 0; i < n_indices; i++) { - const auto index = static_cast(logical_index_vec[i]); - if (index >= offsets[chunk_hint] && - (chunk_hint == num_chunks || index < offsets[chunk_hint + 1])) { - out_chunk_index_vec[i] = chunk_hint; // hint is correct! - continue; - } - // lo < hi is guaranteed by `num_offsets = chunks.size() + 1` - auto chunk_index = - ChunkResolver::Bisect(index, offsets, /*lo=*/0, /*hi=*/num_offsets); - chunk_hint = static_cast(chunk_index); - out_chunk_index_vec[i] = chunk_hint; - } - if (out_index_in_chunk_vec != NULLPTR) { - for (int64_t i = 0; i < n_indices; i++) { - auto logical_index = logical_index_vec[i]; - auto chunk_index = out_chunk_index_vec[i]; - // chunk_index is in [0, chunks.size()] no matter what the - // value of logical_index is, so it's always safe to dereference - // offset_ as it contains chunks.size()+1 values. - out_index_in_chunk_vec[i] = - logical_index - static_cast(offsets[chunk_index]); -#if defined(ARROW_VALGRIND) || defined(ADDRESS_SANITIZER) - // Make it more likely that Valgrind/ASAN can catch an invalid memory - // access by poisoning out_index_in_chunk_vec[i] when the logical - // index is out-of-bounds. - if (chunk_index == num_chunks) { - out_index_in_chunk_vec[i] = std::numeric_limits::max(); - } -#endif - } - } -} - } // namespace -ChunkResolver::ChunkResolver(const ArrayVector& chunks) noexcept +ChunkResolver::ChunkResolver(const ArrayVector& chunks) : offsets_(MakeChunksOffsets(chunks)), cached_chunk_(0) {} -ChunkResolver::ChunkResolver(const std::vector& chunks) noexcept +ChunkResolver::ChunkResolver(const std::vector& chunks) : offsets_(MakeChunksOffsets(chunks)), cached_chunk_(0) {} -ChunkResolver::ChunkResolver(const RecordBatchVector& batches) noexcept +ChunkResolver::ChunkResolver(const RecordBatchVector& batches) : offsets_(MakeChunksOffsets(batches)), cached_chunk_(0) {} -ChunkResolver::ChunkResolver(ChunkResolver&& other) noexcept - : offsets_(std::move(other.offsets_)), - cached_chunk_(other.cached_chunk_.load(std::memory_order_relaxed)) {} - -ChunkResolver& ChunkResolver::operator=(ChunkResolver&& other) noexcept { - offsets_ = std::move(other.offsets_); - cached_chunk_.store(other.cached_chunk_.load(std::memory_order_relaxed)); - return *this; -} - -ChunkResolver::ChunkResolver(const ChunkResolver& other) noexcept - : offsets_(other.offsets_), cached_chunk_(0) {} - -ChunkResolver& ChunkResolver::operator=(const ChunkResolver& other) noexcept { - offsets_ = other.offsets_; - cached_chunk_.store(0, std::memory_order_relaxed); - return *this; -} - -void ChunkResolver::ResolveManyImpl(int64_t n_indices, const uint8_t* logical_index_vec, - uint8_t* out_chunk_index_vec, uint8_t chunk_hint, - uint8_t* out_index_in_chunk_vec) const { - ResolveManyInline(offsets_.size(), offsets_.data(), n_indices, logical_index_vec, - out_chunk_index_vec, chunk_hint, out_index_in_chunk_vec); -} - -void ChunkResolver::ResolveManyImpl(int64_t n_indices, const uint32_t* logical_index_vec, - uint32_t* out_chunk_index_vec, uint32_t chunk_hint, - uint32_t* out_index_in_chunk_vec) const { - ResolveManyInline(offsets_.size(), offsets_.data(), n_indices, logical_index_vec, - out_chunk_index_vec, chunk_hint, out_index_in_chunk_vec); -} - -void ChunkResolver::ResolveManyImpl(int64_t n_indices, const uint16_t* logical_index_vec, - uint16_t* out_chunk_index_vec, uint16_t chunk_hint, - uint16_t* out_index_in_chunk_vec) const { - ResolveManyInline(offsets_.size(), offsets_.data(), n_indices, logical_index_vec, - out_chunk_index_vec, chunk_hint, out_index_in_chunk_vec); -} - -void ChunkResolver::ResolveManyImpl(int64_t n_indices, const uint64_t* logical_index_vec, - uint64_t* out_chunk_index_vec, uint64_t chunk_hint, - uint64_t* out_index_in_chunk_vec) const { - ResolveManyInline(offsets_.size(), offsets_.data(), n_indices, logical_index_vec, - out_chunk_index_vec, chunk_hint, out_index_in_chunk_vec); -} - -} // namespace arrow::internal +} // namespace internal +} // namespace arrow diff --git a/cpp/src/arrow/chunk_resolver.h b/cpp/src/arrow/chunk_resolver.h index a2a3d5a8642..d3ae315568d 100644 --- a/cpp/src/arrow/chunk_resolver.h +++ b/cpp/src/arrow/chunk_resolver.h @@ -20,8 +20,6 @@ #include #include #include -#include -#include #include #include "arrow/type_fwd.h" @@ -29,28 +27,17 @@ namespace arrow::internal { -struct ChunkResolver; - struct ChunkLocation { /// \brief Index of the chunk in the array of chunks /// /// The value is always in the range `[0, chunks.size()]`. `chunks.size()` is used /// to represent out-of-bounds locations. - int64_t chunk_index = 0; + int64_t chunk_index; /// \brief Index of the value in the chunk /// - /// The value is UNDEFINED if chunk_index >= chunks.size() - int64_t index_in_chunk = 0; - - ChunkLocation() = default; - - ChunkLocation(int64_t chunk_index, int64_t index_in_chunk) - : chunk_index(chunk_index), index_in_chunk(index_in_chunk) {} - - bool operator==(ChunkLocation other) const { - return chunk_index == other.chunk_index && index_in_chunk == other.index_in_chunk; - } + /// The value is undefined if chunk_index >= chunks.size() + int64_t index_in_chunk; }; /// \brief An utility that incrementally resolves logical indices into @@ -69,37 +56,18 @@ struct ARROW_EXPORT ChunkResolver { mutable std::atomic cached_chunk_; public: - explicit ChunkResolver(const ArrayVector& chunks) noexcept; - explicit ChunkResolver(const std::vector& chunks) noexcept; - explicit ChunkResolver(const RecordBatchVector& batches) noexcept; - - /// \brief Construct a ChunkResolver from a vector of chunks.size() + 1 offsets. - /// - /// The first offset must be 0 and the last offset must be the logical length of the - /// chunked array. Each offset before the last represents the starting logical index of - /// the corresponding chunk. - explicit ChunkResolver(std::vector offsets) noexcept - : offsets_(std::move(offsets)), cached_chunk_(0) { -#ifndef NDEBUG - assert(offsets_.size() >= 1); - assert(offsets_[0] == 0); - for (size_t i = 1; i < offsets_.size(); i++) { - assert(offsets_[i] >= offsets_[i - 1]); - } -#endif - } - - ChunkResolver(ChunkResolver&& other) noexcept; - ChunkResolver& operator=(ChunkResolver&& other) noexcept; - - ChunkResolver(const ChunkResolver& other) noexcept; - ChunkResolver& operator=(const ChunkResolver& other) noexcept; - - int64_t logical_array_length() const { return offsets_.back(); } - int64_t num_chunks() const { return static_cast(offsets_.size()) - 1; } - - int64_t chunk_length(int64_t chunk_index) const { - return offsets_[chunk_index + 1] - offsets_[chunk_index]; + explicit ChunkResolver(const ArrayVector& chunks); + explicit ChunkResolver(const std::vector& chunks); + explicit ChunkResolver(const RecordBatchVector& batches); + + ChunkResolver(ChunkResolver&& other) noexcept + : offsets_(std::move(other.offsets_)), + cached_chunk_(other.cached_chunk_.load(std::memory_order_relaxed)) {} + + ChunkResolver& operator=(ChunkResolver&& other) { + offsets_ = std::move(other.offsets_); + cached_chunk_.store(other.cached_chunk_.load(std::memory_order_relaxed)); + return *this; } /// \brief Resolve a logical index to a ChunkLocation. @@ -117,7 +85,7 @@ struct ARROW_EXPORT ChunkResolver { const auto cached_chunk = cached_chunk_.load(std::memory_order_relaxed); const auto chunk_index = ResolveChunkIndex(index, cached_chunk); - return ChunkLocation{chunk_index, index - offsets_[chunk_index]}; + return {chunk_index, index - offsets_[chunk_index]}; } /// \brief Resolve a logical index to a ChunkLocation. @@ -128,75 +96,17 @@ struct ARROW_EXPORT ChunkResolver { /// \pre index >= 0 /// \post location.chunk_index in [0, chunks.size()] /// \param index The logical index to resolve - /// \param hint ChunkLocation{} or the last ChunkLocation returned by - /// this ChunkResolver. + /// \param cached_chunk_index 0 or the chunk_index of the last ChunkLocation + /// returned by this ChunkResolver. /// \return ChunkLocation with a valid chunk_index if index is within /// bounds, or with chunk_index == chunks.size() if logical index is /// `>= chunked_array.length()`. - inline ChunkLocation ResolveWithHint(int64_t index, ChunkLocation hint) const { - assert(hint.chunk_index < static_cast(offsets_.size())); + inline ChunkLocation ResolveWithChunkIndexHint(int64_t index, + int64_t cached_chunk_index) const { + assert(cached_chunk_index < static_cast(offsets_.size())); const auto chunk_index = - ResolveChunkIndex(index, hint.chunk_index); - return ChunkLocation{chunk_index, index - offsets_[chunk_index]}; - } - - /// \brief Resolve `n_indices` logical indices to chunk indices. - /// - /// \pre 0 <= logical_index_vec[i] < logical_array_length() - /// (for well-defined and valid chunk index results) - /// \pre out_chunk_index_vec has space for `n_indices` - /// \pre chunk_hint in [0, chunks.size()] - /// \post out_chunk_index_vec[i] in [0, chunks.size()] for i in [0, n) - /// \post if logical_index_vec[i] >= chunked_array.length(), then - /// out_chunk_index_vec[i] == chunks.size() - /// and out_index_in_chunk_vec[i] is UNDEFINED (can be out-of-bounds) - /// \post if logical_index_vec[i] < 0, then both out_chunk_index_vec[i] and - /// out_index_in_chunk_vec[i] are UNDEFINED - /// - /// \param n_indices The number of logical indices to resolve - /// \param logical_index_vec The logical indices to resolve - /// \param out_chunk_index_vec The output array where the chunk indices will be written - /// \param chunk_hint 0 or the last chunk_index produced by ResolveMany - /// \param out_index_in_chunk_vec If not NULLPTR, the output array where the - /// within-chunk indices will be written - /// \return false iff chunks.size() > std::numeric_limits::max() - template - [[nodiscard]] bool ResolveMany(int64_t n_indices, const IndexType* logical_index_vec, - IndexType* out_chunk_index_vec, IndexType chunk_hint = 0, - IndexType* out_index_in_chunk_vec = NULLPTR) const { - if constexpr (sizeof(IndexType) < sizeof(uint64_t)) { - // The max value returned by Bisect is `offsets.size() - 1` (= chunks.size()). - constexpr uint64_t kMaxIndexTypeValue = std::numeric_limits::max(); - // A ChunkedArray with enough empty chunks can make the index of a chunk - // exceed the logical index and thus the maximum value of IndexType. - const bool chunk_index_fits_on_type = - static_cast(offsets_.size() - 1) <= kMaxIndexTypeValue; - if (ARROW_PREDICT_FALSE(!chunk_index_fits_on_type)) { - return false; - } - // Since an index-in-chunk cannot possibly exceed the logical index being - // queried, we don't have to worry about these values not fitting on IndexType. - } - if constexpr (std::is_signed_v) { - // We interpret signed integers as unsigned and avoid having to generate double - // the amount of binary code to handle each integer width. - // - // Negative logical indices can become large values when cast to unsigned, and - // they are gracefully handled by ResolveManyImpl, but both the chunk index - // and the index in chunk values will be undefined in these cases. This - // happend because int8_t(-1) == uint8_t(255) and 255 could be a valid - // logical index in the chunked array. - using U = std::make_unsigned_t; - ResolveManyImpl(n_indices, reinterpret_cast(logical_index_vec), - reinterpret_cast(out_chunk_index_vec), - static_cast(chunk_hint), - reinterpret_cast(out_index_in_chunk_vec)); - } else { - static_assert(std::is_unsigned_v); - ResolveManyImpl(n_indices, logical_index_vec, out_chunk_index_vec, chunk_hint, - out_index_in_chunk_vec); - } - return true; + ResolveChunkIndex(index, cached_chunk_index); + return {chunk_index, index - offsets_[chunk_index]}; } private: @@ -224,33 +134,17 @@ struct ARROW_EXPORT ChunkResolver { return chunk_index; } - /// \pre all the pre-conditions of ChunkResolver::ResolveMany() - /// \pre num_offsets - 1 <= std::numeric_limits::max() - void ResolveManyImpl(int64_t, const uint8_t*, uint8_t*, uint8_t, uint8_t*) const; - void ResolveManyImpl(int64_t, const uint16_t*, uint16_t*, uint16_t, uint16_t*) const; - void ResolveManyImpl(int64_t, const uint32_t*, uint32_t*, uint32_t, uint32_t*) const; - void ResolveManyImpl(int64_t, const uint64_t*, uint64_t*, uint64_t, uint64_t*) const; - - public: /// \brief Find the index of the chunk that contains the logical index. /// /// Any non-negative index is accepted. When `hi=num_offsets`, the largest /// possible return value is `num_offsets-1` which is equal to - /// `chunks.size()`. Which is returned when the logical index is greater or - /// equal the logical length of the chunked array. + /// `chunks.size()`. The is returned when the logical index is out-of-bounds. /// - /// \pre index >= 0 (otherwise, when index is negative, hi-1 is returned) + /// \pre index >= 0 /// \pre lo < hi /// \pre lo >= 0 && hi <= offsets_.size() static inline int64_t Bisect(int64_t index, const int64_t* offsets, int64_t lo, int64_t hi) { - return Bisect(static_cast(index), - reinterpret_cast(offsets), static_cast(lo), - static_cast(hi)); - } - - static inline int64_t Bisect(uint64_t index, const uint64_t* offsets, uint64_t lo, - uint64_t hi) { // Similar to std::upper_bound(), but slightly different as our offsets // array always starts with 0. auto n = hi - lo; @@ -258,8 +152,8 @@ struct ARROW_EXPORT ChunkResolver { // (lo < hi is guaranteed by the precondition). assert(n > 1 && "lo < hi is a precondition of Bisect"); do { - const uint64_t m = n >> 1; - const uint64_t mid = lo + m; + const int64_t m = n >> 1; + const int64_t mid = lo + m; if (index >= offsets[mid]) { lo = mid; n -= m; diff --git a/cpp/src/arrow/chunked_array_test.cc b/cpp/src/arrow/chunked_array_test.cc index e9cc283b53c..6ca52ab46ca 100644 --- a/cpp/src/arrow/chunked_array_test.cc +++ b/cpp/src/arrow/chunked_array_test.cc @@ -23,7 +23,6 @@ #include #include -#include "arrow/chunk_resolver.h" #include "arrow/scalar.h" #include "arrow/status.h" #include "arrow/testing/builder.h" @@ -35,9 +34,6 @@ namespace arrow { -using internal::ChunkLocation; -using internal::ChunkResolver; - class TestChunkedArray : public ::testing::Test { protected: virtual void Construct() { @@ -314,200 +310,4 @@ TEST_F(TestChunkedArray, GetScalar) { ASSERT_RAISES(IndexError, carr.GetScalar(7)); } -// ChunkResolver tests - -using IndexTypes = ::testing::Types; - -TEST(TestChunkResolver, Resolve) { - ChunkResolver empty(std::vector({0})); // [] - // ChunkLocation::index_in_chunk is undefined when chunk_index==chunks.size(), - // so only chunk_index is compared in these cases. - ASSERT_EQ(empty.Resolve(0).chunk_index, 0); - ASSERT_EQ(empty.Resolve(0).chunk_index, 0); - - ChunkResolver one(std::vector({0, 1})); // [[0]] - ASSERT_EQ(one.Resolve(1).chunk_index, 1); - ASSERT_EQ(one.Resolve(0), (ChunkLocation(0, 0))); - ASSERT_EQ(one.Resolve(1).chunk_index, 1); - - ChunkResolver one_and_empty(std::vector({0, 1, 1, 1})); // [[0], [], []] - ASSERT_EQ(one_and_empty.Resolve(3).chunk_index, 3); - ASSERT_EQ(one_and_empty.Resolve(2).chunk_index, 3); - ASSERT_EQ(one_and_empty.Resolve(1).chunk_index, 3); - ASSERT_EQ(one_and_empty.Resolve(0), (ChunkLocation(0, 0))); - ASSERT_EQ(one_and_empty.Resolve(1).chunk_index, 3); - ASSERT_EQ(one_and_empty.Resolve(2).chunk_index, 3); - ASSERT_EQ(one_and_empty.Resolve(3).chunk_index, 3); - - ChunkResolver one_one_one(std::vector({0, 1, 2, 3})); // [[0], [1], [2]] - ASSERT_EQ(one_one_one.Resolve(3).chunk_index, 3); - ASSERT_EQ(one_one_one.Resolve(2), (ChunkLocation(2, 0))); - ASSERT_EQ(one_one_one.Resolve(1), (ChunkLocation(1, 0))); - ASSERT_EQ(one_one_one.Resolve(0), (ChunkLocation(0, 0))); - ASSERT_EQ(one_one_one.Resolve(1), (ChunkLocation(1, 0))); - ASSERT_EQ(one_one_one.Resolve(2), (ChunkLocation(2, 0))); - ASSERT_EQ(one_one_one.Resolve(3).chunk_index, 3); - - ChunkResolver resolver(std::vector({0, 2, 3, 10})); // [[0, 1], [2], [3..9]] - ASSERT_EQ(resolver.Resolve(10).chunk_index, 3); - ASSERT_EQ(resolver.Resolve(9), (ChunkLocation(2, 6))); - ASSERT_EQ(resolver.Resolve(8), (ChunkLocation(2, 5))); - ASSERT_EQ(resolver.Resolve(4), (ChunkLocation(2, 1))); - ASSERT_EQ(resolver.Resolve(3), (ChunkLocation(2, 0))); - ASSERT_EQ(resolver.Resolve(2), (ChunkLocation(1, 0))); - ASSERT_EQ(resolver.Resolve(1), (ChunkLocation(0, 1))); - ASSERT_EQ(resolver.Resolve(0), (ChunkLocation(0, 0))); - ASSERT_EQ(resolver.Resolve(1), (ChunkLocation(0, 1))); - ASSERT_EQ(resolver.Resolve(2), (ChunkLocation(1, 0))); - ASSERT_EQ(resolver.Resolve(3), (ChunkLocation(2, 0))); - ASSERT_EQ(resolver.Resolve(4), (ChunkLocation(2, 1))); - ASSERT_EQ(resolver.Resolve(8), (ChunkLocation(2, 5))); - ASSERT_EQ(resolver.Resolve(9), (ChunkLocation(2, 6))); - ASSERT_EQ(resolver.Resolve(10).chunk_index, 3); -} - -template -class TestChunkResolverMany : public ::testing::Test { - public: - using IndexType = T; - - Result> ResolveMany( - const ChunkResolver& resolver, const std::vector& logical_index_vec) { - const size_t n = logical_index_vec.size(); - std::vector chunk_index_vec; - chunk_index_vec.resize(n); - std::vector index_in_chunk_vec; - index_in_chunk_vec.resize(n); - bool valid = resolver.ResolveMany( - static_cast(n), logical_index_vec.data(), chunk_index_vec.data(), 0, - index_in_chunk_vec.data()); - if (ARROW_PREDICT_FALSE(!valid)) { - return Status::Invalid("index type doesn't fit possible chunk indexes"); - } - std::vector locations; - locations.reserve(n); - for (size_t i = 0; i < n; i++) { - auto chunk_index = static_cast(chunk_index_vec[i]); - auto index_in_chunk = static_cast(index_in_chunk_vec[i]); - locations.emplace_back(chunk_index, index_in_chunk); - } - return locations; - } - - void CheckResolveMany(const ChunkResolver& resolver, - const std::vector& logical_index_vec) { - ASSERT_OK_AND_ASSIGN(auto locations, ResolveMany(resolver, logical_index_vec)); - EXPECT_EQ(logical_index_vec.size(), locations.size()); - for (size_t i = 0; i < logical_index_vec.size(); i++) { - IndexType logical_index = logical_index_vec[i]; - const auto expected = resolver.Resolve(logical_index); - ASSERT_LE(expected.chunk_index, resolver.num_chunks()); - if (expected.chunk_index == resolver.num_chunks()) { - // index_in_chunk is undefined in this case - ASSERT_EQ(locations[i].chunk_index, expected.chunk_index); - } else { - ASSERT_EQ(locations[i], expected); - } - } - } - - void TestBasics() { - std::vector logical_index_vec; - - ChunkResolver empty(std::vector({0})); // [] - logical_index_vec = {0, 0}; - CheckResolveMany(empty, logical_index_vec); - - ChunkResolver one(std::vector({0, 1})); // [[0]] - logical_index_vec = {1, 0, 1}; - CheckResolveMany(one, logical_index_vec); - - ChunkResolver one_and_empty(std::vector({0, 1, 1, 1})); // [[0], [], []] - logical_index_vec = {3, 2, 1, 0, 1, 2, 3}; - CheckResolveMany(one_and_empty, logical_index_vec); - - ChunkResolver one_one_one(std::vector({0, 1, 2, 3})); // [[0], [1], [2]] - logical_index_vec = {3, 2, 1, 0, 1, 2, 3}; - CheckResolveMany(one_one_one, logical_index_vec); - - ChunkResolver resolver(std::vector({0, 2, 3, 10})); // [[0, 1], [2], [3..9]] - logical_index_vec = {10, 9, 8, 4, 3, 2, 1, 0, 1, 2, 3, 4, 8, 9, 10}; - CheckResolveMany(resolver, logical_index_vec); - } - - void TestOutOfBounds() { - ChunkResolver resolver(std::vector({0, 2, 3, 10})); // [[0, 1], [2], [3..9]] - - std::vector logical_index_vec = {10, 11, 12, 13, 14, 13, 11, 10}; - ASSERT_OK_AND_ASSIGN(auto locations, ResolveMany(resolver, logical_index_vec)); - EXPECT_EQ(logical_index_vec.size(), locations.size()); - for (size_t i = 0; i < logical_index_vec.size(); i++) { - ASSERT_EQ(locations[i].chunk_index, resolver.num_chunks()); - } - - if constexpr (std::is_signed_v) { - std::vector logical_index_vec = {-1, -2, -3, -4, INT8_MIN}; - - ChunkResolver resolver(std::vector({0, 2, 128})); // [[0, 1], [2..127]] - ASSERT_OK_AND_ASSIGN(auto locations, ResolveMany(resolver, logical_index_vec)); - EXPECT_EQ(logical_index_vec.size(), locations.size()); - for (size_t i = 0; i < logical_index_vec.size(); i++) { - // All the negative indices are greater than resolver.logical_array_length()-1 - // when cast to uint8_t. - ASSERT_EQ(locations[i].chunk_index, resolver.num_chunks()); - } - - if constexpr (sizeof(IndexType) == 1) { - ChunkResolver resolver(std::vector( - {0, 2, 128, 129, 256})); // [[0, 1], [2..127], [128], [129, 255]] - ASSERT_OK_AND_ASSIGN(auto locations, ResolveMany(resolver, logical_index_vec)); - EXPECT_EQ(logical_index_vec.size(), locations.size()); - for (size_t i = 0; i < logical_index_vec.size(); i++) { - if constexpr (sizeof(IndexType) == 1) { - // All the negative 8-bit indices are SMALLER than - // resolver.logical_array_length()=256 when cast to 8-bit unsigned integers. - // So the resolved locations might look valid, but they should not be trusted. - ASSERT_LT(locations[i].chunk_index, resolver.num_chunks()); - } else { - // All the negative indices are greater than resolver.logical_array_length() - // when cast to 16/32/64-bit unsigned integers. - ASSERT_EQ(locations[i].chunk_index, resolver.num_chunks()); - } - } - } - } - } - - void TestOverflow() { - const int64_t kMaxIndex = std::is_signed_v ? 127 : 255; - std::vector logical_index_vec = {0, 1, 2, - static_cast(kMaxIndex)}; - - // Overflows are rare because to make them possible, we need more chunks - // than logical elements in the ChunkedArray. That requires at least one - // empty chunk. - std::vector offsets; - for (int64_t i = 0; i <= kMaxIndex; i++) { - offsets.push_back(i); - } - ChunkResolver resolver{offsets}; - ASSERT_OK(ResolveMany(resolver, logical_index_vec)); - - offsets.push_back(kMaxIndex); // adding an empty chunk - ChunkResolver resolver_with_empty{offsets}; - if (sizeof(IndexType) == 1) { - ASSERT_NOT_OK(ResolveMany(resolver_with_empty, logical_index_vec)); - } else { - ASSERT_OK(ResolveMany(resolver_with_empty, logical_index_vec)); - } - } -}; - -TYPED_TEST_SUITE(TestChunkResolverMany, IndexTypes); - -TYPED_TEST(TestChunkResolverMany, Basics) { this->TestBasics(); } -TYPED_TEST(TestChunkResolverMany, OutOfBounds) { this->TestOutOfBounds(); } -TYPED_TEST(TestChunkResolverMany, Overflow) { this->TestOverflow(); } - } // namespace arrow diff --git a/cpp/src/arrow/compare.cc b/cpp/src/arrow/compare.cc index e983b47e39d..bb632e2eb91 100644 --- a/cpp/src/arrow/compare.cc +++ b/cpp/src/arrow/compare.cc @@ -44,7 +44,6 @@ #include "arrow/util/bitmap_ops.h" #include "arrow/util/bitmap_reader.h" #include "arrow/util/checked_cast.h" -#include "arrow/util/float16.h" #include "arrow/util/key_value_metadata.h" #include "arrow/util/logging.h" #include "arrow/util/macros.h" @@ -60,7 +59,6 @@ using internal::BitmapReader; using internal::BitmapUInt64Reader; using internal::checked_cast; using internal::OptionalBitmapEquals; -using util::Float16; // ---------------------------------------------------------------------- // Public method implementations @@ -97,30 +95,6 @@ struct FloatingEquality { const T epsilon; }; -// For half-float equality. -template -struct FloatingEquality { - explicit FloatingEquality(const EqualOptions& options) - : epsilon(static_cast(options.atol())) {} - - bool operator()(uint16_t x, uint16_t y) const { - Float16 f_x = Float16::FromBits(x); - Float16 f_y = Float16::FromBits(y); - if (x == y) { - return Flags::signed_zeros_equal || (f_x.signbit() == f_y.signbit()); - } - if (Flags::nans_equal && f_x.is_nan() && f_y.is_nan()) { - return true; - } - if (Flags::approximate && (fabs(f_x.ToFloat() - f_y.ToFloat()) <= epsilon)) { - return true; - } - return false; - } - - const float epsilon; -}; - template struct FloatingEqualityDispatcher { const EqualOptions& options; @@ -285,8 +259,6 @@ class RangeDataEqualsImpl { Status Visit(const DoubleType& type) { return CompareFloating(type); } - Status Visit(const HalfFloatType& type) { return CompareFloating(type); } - // Also matches StringType Status Visit(const BinaryType& type) { return CompareBinary(type); } @@ -891,8 +863,6 @@ class ScalarEqualsVisitor { Status Visit(const DoubleScalar& left) { return CompareFloating(left); } - Status Visit(const HalfFloatScalar& left) { return CompareFloating(left); } - template enable_if_t::value, Status> Visit(const T& left) { const auto& right = checked_cast(right_); diff --git a/cpp/src/arrow/compute/CMakeLists.txt b/cpp/src/arrow/compute/CMakeLists.txt index aa2a2d4e9af..e14d78ff6e5 100644 --- a/cpp/src/arrow/compute/CMakeLists.txt +++ b/cpp/src/arrow/compute/CMakeLists.txt @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -add_custom_target(arrow-compute-tests) +add_custom_target(arrow_compute) arrow_install_all_headers("arrow/compute") @@ -29,7 +29,7 @@ endif() # set(ARROW_COMPUTE_TEST_PREFIX "arrow-compute") -set(ARROW_COMPUTE_TEST_LABELS "arrow-compute-tests") +set(ARROW_COMPUTE_TEST_LABELS "arrow_compute") set(ARROW_COMPUTE_TEST_ARGS PREFIX ${ARROW_COMPUTE_TEST_PREFIX} LABELS ${ARROW_COMPUTE_TEST_LABELS}) @@ -90,11 +90,7 @@ add_arrow_test(internals_test light_array_test.cc registry_test.cc key_hash_test.cc - row/compare_test.cc - row/grouper_test.cc - row/row_encoder_internal_test.cc - row/row_test.cc - util_internal_test.cc) + row/compare_test.cc) add_arrow_compute_test(expression_test SOURCES expression_test.cc) diff --git a/cpp/src/arrow/compute/api_scalar.cc b/cpp/src/arrow/compute/api_scalar.cc index 7c3bc46650e..eaec9405563 100644 --- a/cpp/src/arrow/compute/api_scalar.cc +++ b/cpp/src/arrow/compute/api_scalar.cc @@ -341,8 +341,7 @@ static auto kMatchSubstringOptionsType = GetFunctionOptionsType( DataMember("nan_is_null", &NullOptions::nan_is_null)); static auto kPadOptionsType = GetFunctionOptionsType( - DataMember("width", &PadOptions::width), DataMember("padding", &PadOptions::padding), - DataMember("lean_left_on_odd_padding", &PadOptions::lean_left_on_odd_padding)); + DataMember("width", &PadOptions::width), DataMember("padding", &PadOptions::padding)); static auto kReplaceSliceOptionsType = GetFunctionOptionsType( DataMember("start", &ReplaceSliceOptions::start), DataMember("stop", &ReplaceSliceOptions::stop), @@ -481,11 +480,10 @@ NullOptions::NullOptions(bool nan_is_null) : FunctionOptions(internal::kNullOptionsType), nan_is_null(nan_is_null) {} constexpr char NullOptions::kTypeName[]; -PadOptions::PadOptions(int64_t width, std::string padding, bool lean_left_on_odd_padding) +PadOptions::PadOptions(int64_t width, std::string padding) : FunctionOptions(internal::kPadOptionsType), width(width), - padding(std::move(padding)), - lean_left_on_odd_padding(lean_left_on_odd_padding) {} + padding(std::move(padding)) {} PadOptions::PadOptions() : PadOptions(0, " ") {} constexpr char PadOptions::kTypeName[]; diff --git a/cpp/src/arrow/compute/api_scalar.h b/cpp/src/arrow/compute/api_scalar.h index 947474e5962..bad34f4a378 100644 --- a/cpp/src/arrow/compute/api_scalar.h +++ b/cpp/src/arrow/compute/api_scalar.h @@ -358,8 +358,7 @@ class ARROW_EXPORT StrftimeOptions : public FunctionOptions { class ARROW_EXPORT PadOptions : public FunctionOptions { public: - explicit PadOptions(int64_t width, std::string padding = " ", - bool lean_left_on_odd_padding = true); + explicit PadOptions(int64_t width, std::string padding = " "); PadOptions(); static constexpr char const kTypeName[] = "PadOptions"; @@ -367,10 +366,6 @@ class ARROW_EXPORT PadOptions : public FunctionOptions { int64_t width; /// What to pad the string with. Should be one codepoint (Unicode)/byte (ASCII). std::string padding; - /// What to do if there is an odd number of padding characters (in case of centered - /// padding). Defaults to aligning on the left (i.e. adding the extra padding character - /// on the right) - bool lean_left_on_odd_padding = true; }; class ARROW_EXPORT TrimOptions : public FunctionOptions { diff --git a/cpp/src/arrow/compute/api_vector.cc b/cpp/src/arrow/compute/api_vector.cc index f0d5c0fcc3d..d47ee42ebf2 100644 --- a/cpp/src/arrow/compute/api_vector.cc +++ b/cpp/src/arrow/compute/api_vector.cc @@ -153,8 +153,6 @@ static auto kRankOptionsType = GetFunctionOptionsType( DataMember("tiebreaker", &RankOptions::tiebreaker)); static auto kPairwiseOptionsType = GetFunctionOptionsType( DataMember("periods", &PairwiseOptions::periods)); -static auto kListFlattenOptionsType = GetFunctionOptionsType( - DataMember("recursive", &ListFlattenOptions::recursive)); } // namespace } // namespace internal @@ -226,10 +224,6 @@ PairwiseOptions::PairwiseOptions(int64_t periods) : FunctionOptions(internal::kPairwiseOptionsType), periods(periods) {} constexpr char PairwiseOptions::kTypeName[]; -ListFlattenOptions::ListFlattenOptions(bool recursive) - : FunctionOptions(internal::kListFlattenOptionsType), recursive(recursive) {} -constexpr char ListFlattenOptions::kTypeName[]; - namespace internal { void RegisterVectorOptions(FunctionRegistry* registry) { DCHECK_OK(registry->AddFunctionOptionsType(kFilterOptionsType)); @@ -243,7 +237,6 @@ void RegisterVectorOptions(FunctionRegistry* registry) { DCHECK_OK(registry->AddFunctionOptionsType(kCumulativeOptionsType)); DCHECK_OK(registry->AddFunctionOptionsType(kRankOptionsType)); DCHECK_OK(registry->AddFunctionOptionsType(kPairwiseOptionsType)); - DCHECK_OK(registry->AddFunctionOptionsType(kListFlattenOptionsType)); } } // namespace internal diff --git a/cpp/src/arrow/compute/api_vector.h b/cpp/src/arrow/compute/api_vector.h index e5bcc373296..919572f16ee 100644 --- a/cpp/src/arrow/compute/api_vector.h +++ b/cpp/src/arrow/compute/api_vector.h @@ -245,18 +245,6 @@ class ARROW_EXPORT PairwiseOptions : public FunctionOptions { int64_t periods = 1; }; -/// \brief Options for list_flatten function -class ARROW_EXPORT ListFlattenOptions : public FunctionOptions { - public: - explicit ListFlattenOptions(bool recursive = false); - static constexpr char const kTypeName[] = "ListFlattenOptions"; - static ListFlattenOptions Defaults() { return ListFlattenOptions(); } - - /// \brief If true, the list is flattened recursively until a non-list - /// array is formed. - bool recursive = false; -}; - /// @} /// \brief Filter with a boolean selection filter diff --git a/cpp/src/arrow/compute/exec.cc b/cpp/src/arrow/compute/exec.cc index 05c4936482b..28dcf493fa2 100644 --- a/cpp/src/arrow/compute/exec.cc +++ b/cpp/src/arrow/compute/exec.cc @@ -480,7 +480,7 @@ struct NullGeneralization { if (dtype_id == Type::NA) { return ALL_NULL; } - if (!arrow::internal::may_have_validity_bitmap(dtype_id)) { + if (!arrow::internal::HasValidityBitmap(dtype_id)) { return ALL_VALID; } if (value.is_scalar()) { @@ -923,7 +923,7 @@ class ScalarExecutor : public KernelExecutorImpl { DCHECK(output.is_array_data()); // Emit a result for each chunk - RETURN_NOT_OK(EmitResult(output.array_data(), listener)); + RETURN_NOT_OK(EmitResult(std::move(output.array_data()), listener)); } return Status::OK(); } @@ -1107,7 +1107,7 @@ class VectorExecutor : public KernelExecutorImpl { RETURN_NOT_OK(PropagateNulls(kernel_ctx_, span, out.array_data().get())); } RETURN_NOT_OK(kernel_->exec(kernel_ctx_, span, &out)); - return EmitResult(out.array_data(), listener); + return EmitResult(std::move(out.array_data()), listener); } Status ExecChunked(const ExecBatch& batch, ExecListener* listener) { @@ -1116,10 +1116,10 @@ class VectorExecutor : public KernelExecutorImpl { ARROW_ASSIGN_OR_RAISE(out.value, PrepareOutput(batch.length)); RETURN_NOT_OK(kernel_->exec_chunked(kernel_ctx_, batch, &out)); if (out.is_array()) { - return EmitResult(out.array(), listener); + return EmitResult(std::move(out.array()), listener); } else { DCHECK(out.is_chunked_array()); - return EmitResult(out.chunked_array(), listener); + return EmitResult(std::move(out.chunked_array()), listener); } } diff --git a/cpp/src/arrow/compute/expression.cc b/cpp/src/arrow/compute/expression.cc index 33e5928c286..8c59ad1df86 100644 --- a/cpp/src/arrow/compute/expression.cc +++ b/cpp/src/arrow/compute/expression.cc @@ -536,67 +536,60 @@ Result BindNonRecursive(Expression::Call call, bool insert_implicit_ std::vector types = GetTypes(call.arguments); ARROW_ASSIGN_OR_RAISE(call.function, GetFunction(call, exec_context)); - auto FinishBind = [&] { - compute::KernelContext kernel_context(exec_context, call.kernel); - if (call.kernel->init) { - const FunctionOptions* options = - call.options ? call.options.get() : call.function->default_options(); - ARROW_ASSIGN_OR_RAISE( - call.kernel_state, - call.kernel->init(&kernel_context, {call.kernel, types, options})); - - kernel_context.SetState(call.kernel_state.get()); - } - - ARROW_ASSIGN_OR_RAISE( - call.type, call.kernel->signature->out_type().Resolve(&kernel_context, types)); - return Status::OK(); - }; - // First try and bind exactly Result maybe_exact_match = call.function->DispatchExact(types); if (maybe_exact_match.ok()) { call.kernel = *maybe_exact_match; - if (FinishBind().ok()) { - return Expression(std::move(call)); + } else { + if (!insert_implicit_casts) { + return maybe_exact_match.status(); } - } - - if (!insert_implicit_casts) { - return maybe_exact_match.status(); - } + // If exact binding fails, and we are allowed to cast, then prefer casting literals + // first. Since DispatchBest generally prefers up-casting the best way to do this is + // first down-cast the literals as much as possible + types = GetTypesWithSmallestLiteralRepresentation(call.arguments); + ARROW_ASSIGN_OR_RAISE(call.kernel, call.function->DispatchBest(&types)); + + for (size_t i = 0; i < types.size(); ++i) { + if (types[i] == call.arguments[i].type()) continue; + + if (const Datum* lit = call.arguments[i].literal()) { + ARROW_ASSIGN_OR_RAISE(Datum new_lit, + compute::Cast(*lit, types[i].GetSharedPtr())); + call.arguments[i] = literal(std::move(new_lit)); + continue; + } - // If exact binding fails, and we are allowed to cast, then prefer casting literals - // first. Since DispatchBest generally prefers up-casting the best way to do this is - // first down-cast the literals as much as possible - types = GetTypesWithSmallestLiteralRepresentation(call.arguments); - ARROW_ASSIGN_OR_RAISE(call.kernel, call.function->DispatchBest(&types)); + // construct an implicit cast Expression with which to replace this argument + Expression::Call implicit_cast; + implicit_cast.function_name = "cast"; + implicit_cast.arguments = {std::move(call.arguments[i])}; - for (size_t i = 0; i < types.size(); ++i) { - if (types[i] == call.arguments[i].type()) continue; + // TODO(wesm): Use TypeHolder in options + implicit_cast.options = std::make_shared( + compute::CastOptions::Safe(types[i].GetSharedPtr())); - if (const Datum* lit = call.arguments[i].literal()) { - ARROW_ASSIGN_OR_RAISE(Datum new_lit, compute::Cast(*lit, types[i].GetSharedPtr())); - call.arguments[i] = literal(std::move(new_lit)); - continue; + ARROW_ASSIGN_OR_RAISE( + call.arguments[i], + BindNonRecursive(std::move(implicit_cast), + /*insert_implicit_casts=*/false, exec_context)); } + } - // construct an implicit cast Expression with which to replace this argument - Expression::Call implicit_cast; - implicit_cast.function_name = "cast"; - implicit_cast.arguments = {std::move(call.arguments[i])}; - - // TODO(wesm): Use TypeHolder in options - implicit_cast.options = std::make_shared( - compute::CastOptions::Safe(types[i].GetSharedPtr())); - + compute::KernelContext kernel_context(exec_context, call.kernel); + if (call.kernel->init) { + const FunctionOptions* options = + call.options ? call.options.get() : call.function->default_options(); ARROW_ASSIGN_OR_RAISE( - call.arguments[i], - BindNonRecursive(std::move(implicit_cast), - /*insert_implicit_casts=*/false, exec_context)); + call.kernel_state, + call.kernel->init(&kernel_context, {call.kernel, types, options})); + + kernel_context.SetState(call.kernel_state.get()); } - RETURN_NOT_OK(FinishBind()); + ARROW_ASSIGN_OR_RAISE( + call.type, call.kernel->signature->out_type().Resolve(&kernel_context, types)); + return Expression(std::move(call)); } @@ -763,7 +756,9 @@ Result ExecuteScalarExpression(const Expression& expr, const ExecBatch& i for (size_t i = 0; i < arguments.size(); ++i) { ARROW_ASSIGN_OR_RAISE( arguments[i], ExecuteScalarExpression(call->arguments[i], input, exec_context)); - all_scalar &= arguments[i].is_scalar(); + if (arguments[i].is_array()) { + all_scalar = false; + } } int64_t input_length; @@ -843,8 +838,6 @@ Result FoldConstants(Expression expr) { std::move(expr), [](Expression expr) { return expr; }, [](Expression expr, ...) -> Result { auto call = CallNotNull(expr); - if (!call->function->is_pure()) return expr; - if (std::all_of(call->arguments.begin(), call->arguments.end(), [](const Expression& argument) { return argument.literal(); })) { // all arguments are literal; we can evaluate this subexpression *now* @@ -861,6 +854,10 @@ Result FoldConstants(Expression expr) { if (GetNullHandling(*call) == compute::NullHandling::INTERSECTION) { // kernels which always produce intersected validity can be resolved // to null *now* if any of their inputs is a null literal + if (!call->type.type) { + return Status::Invalid("Cannot fold constants for unbound expression ", + expr.ToString()); + } for (const Expression& argument : call->arguments) { if (argument.IsNullLiteral()) { if (argument.type()->Equals(*call->type.type)) { @@ -1083,7 +1080,6 @@ Result Canonicalize(Expression expr, compute::ExecContext* exec_cont [&AlreadyCanonicalized, exec_context](Expression expr) -> Result { auto call = expr.call(); if (!call) return expr; - if (!call->function->is_pure()) return expr; if (AlreadyCanonicalized(expr)) return expr; @@ -1643,7 +1639,7 @@ Expression and_(const std::vector& operands) { Expression folded = operands.front(); for (auto it = operands.begin() + 1; it != operands.end(); ++it) { - folded = and_(std::move(folded), *it); + folded = and_(std::move(folded), std::move(*it)); } return folded; } @@ -1657,7 +1653,7 @@ Expression or_(const std::vector& operands) { Expression folded = operands.front(); for (auto it = operands.begin() + 1; it != operands.end(); ++it) { - folded = or_(std::move(folded), *it); + folded = or_(std::move(folded), std::move(*it)); } return folded; } diff --git a/cpp/src/arrow/compute/expression_internal.h b/cpp/src/arrow/compute/expression_internal.h index 2048ef96651..083756dc5fd 100644 --- a/cpp/src/arrow/compute/expression_internal.h +++ b/cpp/src/arrow/compute/expression_internal.h @@ -278,12 +278,9 @@ struct FlattenedAssociativeChain { inline Result> GetFunction( const Expression::Call& call, compute::ExecContext* exec_context) { - ARROW_ASSIGN_OR_RAISE(auto function, - exec_context->func_registry()->GetFunction(call.function_name)); - if (function.get() != exec_context->func_registry()->cast_function()) { - return function; + if (call.function_name != "cast") { + return exec_context->func_registry()->GetFunction(call.function_name); } - // XXX this special case is strange; why not make "cast" a ScalarFunction? const TypeHolder& to_type = ::arrow::internal::checked_cast(*call.options).to_type; diff --git a/cpp/src/arrow/compute/expression_test.cc b/cpp/src/arrow/compute/expression_test.cc index d94a17b6ffa..d33c348cd77 100644 --- a/cpp/src/arrow/compute/expression_test.cc +++ b/cpp/src/arrow/compute/expression_test.cc @@ -604,31 +604,6 @@ TEST(Expression, BindCall) { add(cast(field_ref("i32"), float32()), literal(3.5F))); } -TEST(Expression, BindWithAliasCasts) { - auto fm = GetFunctionRegistry(); - EXPECT_OK(fm->AddAlias("alias_cast", "cast")); - - auto expr = call("alias_cast", {field_ref("f1")}, CastOptions::Unsafe(arrow::int32())); - EXPECT_FALSE(expr.IsBound()); - - auto schema = arrow::schema({field("f1", decimal128(30, 3))}); - ExpectBindsTo(expr, no_change, &expr, *schema); -} - -TEST(Expression, BindWithDecimalArithmeticOps) { - for (std::string arith_op : {"add", "subtract", "multiply", "divide"}) { - auto expr = call(arith_op, {field_ref("d1"), field_ref("d2")}); - EXPECT_FALSE(expr.IsBound()); - - static const std::vector> scales = {{3, 9}, {6, 6}, {9, 3}}; - for (auto s : scales) { - auto schema = arrow::schema( - {field("d1", decimal256(30, s.first)), field("d2", decimal256(20, s.second))}); - ExpectBindsTo(expr, no_change, &expr, *schema); - } - } -} - TEST(Expression, BindWithImplicitCasts) { for (auto cmp : {equal, not_equal, less, less_equal, greater, greater_equal}) { // cast arguments to common numeric type @@ -895,10 +870,8 @@ TEST(Expression, ExecuteCallWithNoArguments) { Expression random_expr = call("random", {}, random_options); ASSERT_OK_AND_ASSIGN(random_expr, random_expr.Bind(float64())); - ASSERT_OK_AND_ASSIGN(auto simplify_expr, - SimplifyWithGuarantee(random_expr, input.guarantee)); - ASSERT_OK_AND_ASSIGN(Datum actual, ExecuteScalarExpression(simplify_expr, input)); + ASSERT_OK_AND_ASSIGN(Datum actual, ExecuteScalarExpression(random_expr, input)); compute::ExecContext* exec_context = default_exec_context(); ASSERT_OK_AND_ASSIGN(auto function, exec_context->func_registry()->GetFunction("random")); @@ -909,41 +882,6 @@ TEST(Expression, ExecuteCallWithNoArguments) { EXPECT_EQ(actual.length(), kCount); } -TEST(Expression, ExecuteChunkedArray) { - // GH-41923: compute should generate the right result if input - // ExecBatch is `chunked_array`. - auto input_schema = struct_({field("a", struct_({ - field("a", float64()), - field("b", float64()), - }))}); - - auto chunked_array_input = ChunkedArrayFromJSON(input_schema, {R"([ - {"a": {"a": 6.125, "b": 3.375}}, - {"a": {"a": 0.0, "b": 1}} - ])", - R"([ - {"a": {"a": -1, "b": 4.75}} - ])"}); - - ASSERT_OK_AND_ASSIGN(auto table_input, - Table::FromChunkedStructArray(chunked_array_input)); - - auto expr = add(field_ref(FieldRef("a", "a")), field_ref(FieldRef("a", "b"))); - - ASSERT_OK_AND_ASSIGN(expr, expr.Bind(input_schema)); - std::vector inputs{table_input->column(0)}; - ExecBatch batch{inputs, 3}; - - ASSERT_OK_AND_ASSIGN(Datum res, ExecuteScalarExpression(expr, batch)); - - AssertDatumsEqual(res, ArrayFromJSON(float64(), - R"([ - 9.5, - 1, - 3.75 - ])")); -} - TEST(Expression, ExecuteDictionaryTransparent) { ExpectExecute( equal(field_ref("a"), field_ref("b")), @@ -1433,36 +1371,6 @@ TEST(Expression, SingleComparisonGuarantees) { } } -static Status RegisterMyRandom() { - const std::string name = "my_random"; - auto func = std::make_shared(name, Arity::Unary(), FunctionDoc::Empty(), - nullptr, /*is_pure=*/false); - - auto func_exec = [](KernelContext* /*ctx*/, const ExecSpan& /*batch*/, - ExecResult* /*out*/) -> Status { return Status::OK(); }; - - ScalarKernel kernel({int32()}, float64(), func_exec); - ARROW_RETURN_NOT_OK(func->AddKernel(kernel)); - - auto registry = GetFunctionRegistry(); - ARROW_RETURN_NOT_OK(registry->AddFunction(std::move(func))); - - return Status::OK(); -} - -TEST(Expression, SimplifyImpureFunctionCall) { - // skip simplification for impure function with no arguments - auto impure_expr = call("random", {}); - Simplify{impure_expr}.WithGuarantee(literal("")).Expect(impure_expr); - - // simplify impure function's arguments - ASSERT_OK(RegisterMyRandom()); - auto pure_expr = call("add", {field_ref("i32"), literal(3)}); - Simplify{call("my_random", {pure_expr})} - .WithGuarantee(equal(field_ref("i32"), literal(1))) - .Expect(call("my_random", {literal(4)})); -} - TEST(Expression, SimplifyWithGuarantee) { // drop both members of a conjunctive filter Simplify{ diff --git a/cpp/src/arrow/compute/function.h b/cpp/src/arrow/compute/function.h index 2b86f642166..be934a3c5ab 100644 --- a/cpp/src/arrow/compute/function.h +++ b/cpp/src/arrow/compute/function.h @@ -229,14 +229,6 @@ class ARROW_EXPORT Function { virtual Status Validate() const; - /// \brief Returns the pure property for this function. - /// - /// Impure functions are those that may return different results for the same - /// input arguments. For example, a function that returns a random number is - /// not pure. An expression containing only pure functions can be simplified by - /// pre-evaluating any sub-expressions that have constant arguments. - virtual bool is_pure() const { return true; } - protected: Function(std::string name, Function::Kind kind, const Arity& arity, FunctionDoc doc, const FunctionOptions* default_options) @@ -299,10 +291,9 @@ class ARROW_EXPORT ScalarFunction : public detail::FunctionImpl { using KernelType = ScalarKernel; ScalarFunction(std::string name, const Arity& arity, FunctionDoc doc, - const FunctionOptions* default_options = NULLPTR, bool is_pure = true) + const FunctionOptions* default_options = NULLPTR) : detail::FunctionImpl(std::move(name), Function::SCALAR, arity, - std::move(doc), default_options), - is_pure_(is_pure) {} + std::move(doc), default_options) {} /// \brief Add a kernel with given input/output types, no required state /// initialization, preallocation for fixed-width types, and default null @@ -313,12 +304,6 @@ class ARROW_EXPORT ScalarFunction : public detail::FunctionImpl { /// \brief Add a kernel (function implementation). Returns error if the /// kernel's signature does not match the function's arity. Status AddKernel(ScalarKernel kernel); - - /// \brief Returns the pure property for this function. - bool is_pure() const override { return is_pure_; } - - private: - const bool is_pure_; }; /// \brief A function that executes general array operations that may yield diff --git a/cpp/src/arrow/compute/function_internal.h b/cpp/src/arrow/compute/function_internal.h index 9d8928466ba..653273ef0fa 100644 --- a/cpp/src/arrow/compute/function_internal.h +++ b/cpp/src/arrow/compute/function_internal.h @@ -684,13 +684,12 @@ const FunctionOptionsType* GetFunctionOptionsType(const Properties&... propertie auto options = std::make_unique(); RETURN_NOT_OK( FromStructScalarImpl(options.get(), scalar, properties_).status_); - // R build with openSUSE155 requires an explicit unique_ptr construction - return std::unique_ptr(std::move(options)); + return std::move(options); } std::unique_ptr Copy(const FunctionOptions& options) const override { auto out = std::make_unique(); CopyImpl(out.get(), checked_cast(options), properties_); - return out; + return std::move(out); } private: diff --git a/cpp/src/arrow/compute/function_test.cc b/cpp/src/arrow/compute/function_test.cc index c269de07632..66d38ecd64d 100644 --- a/cpp/src/arrow/compute/function_test.cc +++ b/cpp/src/arrow/compute/function_test.cc @@ -102,7 +102,6 @@ TEST(FunctionOptions, Equality) { #endif options.emplace_back(new PadOptions(5, " ")); options.emplace_back(new PadOptions(10, "A")); - options.emplace_back(new PadOptions(10, "A", false)); options.emplace_back(new TrimOptions(" ")); options.emplace_back(new TrimOptions("abc")); options.emplace_back(new SliceOptions(/*start=*/1)); diff --git a/cpp/src/arrow/compute/kernel.cc b/cpp/src/arrow/compute/kernel.cc index 5c87ef2cd05..fd554ba3d83 100644 --- a/cpp/src/arrow/compute/kernel.cc +++ b/cpp/src/arrow/compute/kernel.cc @@ -75,7 +75,7 @@ Result> ScalarAggregateKernel::MergeAll( for (auto& state : states) { RETURN_NOT_OK(kernel->merge(ctx, std::move(*state), out.get())); } - return out; + return std::move(out); } // ---------------------------------------------------------------------- @@ -361,8 +361,7 @@ size_t InputType::Hash() const { case InputType::EXACT_TYPE: hash_combine(result, type_->Hash()); break; - case InputType::ANY_TYPE: - case InputType::USE_TYPE_MATCHER: + default: break; } return result; @@ -379,8 +378,10 @@ std::string InputType::ToString() const { break; case InputType::USE_TYPE_MATCHER: { ss << type_matcher_->ToString(); + } break; + default: + DCHECK(false); break; - } } return ss.str(); } @@ -399,8 +400,9 @@ bool InputType::Equals(const InputType& other) const { return type_->Equals(*other.type_); case InputType::USE_TYPE_MATCHER: return type_matcher_->Equals(*other.type_matcher_); + default: + return false; } - return false; } bool InputType::Matches(const DataType& type) const { @@ -409,23 +411,21 @@ bool InputType::Matches(const DataType& type) const { return type_->Equals(type); case InputType::USE_TYPE_MATCHER: return type_matcher_->Matches(type); - case InputType::ANY_TYPE: + default: + // ANY_TYPE return true; } - return false; } bool InputType::Matches(const Datum& value) const { switch (value.kind()) { - case Datum::NONE: - case Datum::RECORD_BATCH: - case Datum::TABLE: - DCHECK(false) << "Matches expects ARRAY, CHUNKED_ARRAY or SCALAR"; - return false; case Datum::ARRAY: case Datum::CHUNKED_ARRAY: case Datum::SCALAR: break; + default: + DCHECK(false); + return false; } return Matches(*value.type()); } @@ -445,13 +445,11 @@ const TypeMatcher& InputType::type_matcher() const { Result OutputType::Resolve(KernelContext* ctx, const std::vector& types) const { - switch (kind_) { - case OutputType::FIXED: - return type_; - case OutputType::COMPUTED: - break; + if (kind_ == OutputType::FIXED) { + return type_.get(); + } else { + return resolver_(ctx, types); } - return resolver_(ctx, types); } const std::shared_ptr& OutputType::type() const { @@ -465,13 +463,11 @@ const OutputType::Resolver& OutputType::resolver() const { } std::string OutputType::ToString() const { - switch (kind_) { - case OutputType::FIXED: - return type_->ToString(); - case OutputType::COMPUTED: - break; + if (kind_ == OutputType::FIXED) { + return type_->ToString(); + } else { + return "computed"; } - return "computed"; } // ---------------------------------------------------------------------- diff --git a/cpp/src/arrow/compute/kernels/CMakeLists.txt b/cpp/src/arrow/compute/kernels/CMakeLists.txt index 7c7b9c8b68d..4350cd57ff0 100644 --- a/cpp/src/arrow/compute/kernels/CMakeLists.txt +++ b/cpp/src/arrow/compute/kernels/CMakeLists.txt @@ -23,7 +23,7 @@ if(ARROW_TESTING) add_library(arrow_compute_kernels_testing OBJECT test_util.cc) # Even though this is still just an object library we still need to "link" our # dependencies so that include paths are configured correctly - target_link_libraries(arrow_compute_kernels_testing PUBLIC ${ARROW_GTEST_GMOCK}) + target_link_libraries(arrow_compute_kernels_testing PRIVATE ${ARROW_GTEST_GMOCK}) endif() add_arrow_test(scalar_cast_test @@ -36,17 +36,13 @@ add_arrow_test(scalar_cast_test # ---------------------------------------------------------------------- # Scalar kernels -set(ARROW_COMPUTE_SCALAR_TYPE_TEST_LINK_LIBS arrow_compute_kernels_testing) -if(ARROW_WITH_UTF8PROC) - list(APPEND ARROW_COMPUTE_SCALAR_TYPE_TEST_LINK_LIBS utf8proc::utf8proc) -endif() add_arrow_compute_test(scalar_type_test SOURCES scalar_boolean_test.cc scalar_nested_test.cc scalar_string_test.cc EXTRA_LINK_LIBS - ${ARROW_COMPUTE_SCALAR_TYPE_TEST_LINK_LIBS}) + arrow_compute_kernels_testing) add_arrow_compute_test(scalar_if_else_test SOURCES @@ -81,7 +77,6 @@ add_arrow_benchmark(scalar_boolean_benchmark PREFIX "arrow-compute") add_arrow_benchmark(scalar_cast_benchmark PREFIX "arrow-compute") add_arrow_benchmark(scalar_compare_benchmark PREFIX "arrow-compute") add_arrow_benchmark(scalar_if_else_benchmark PREFIX "arrow-compute") -add_arrow_benchmark(scalar_list_benchmark PREFIX "arrow-compute") add_arrow_benchmark(scalar_random_benchmark PREFIX "arrow-compute") add_arrow_benchmark(scalar_round_benchmark PREFIX "arrow-compute") add_arrow_benchmark(scalar_set_lookup_benchmark PREFIX "arrow-compute") @@ -131,8 +126,7 @@ add_arrow_compute_test(aggregate_test SOURCES aggregate_test.cc EXTRA_LINK_LIBS - arrow_compute_kernels_testing - Boost::headers) + arrow_compute_kernels_testing) # ---------------------------------------------------------------------- # Utilities diff --git a/cpp/src/arrow/compute/kernels/aggregate_basic_avx512.cc b/cpp/src/arrow/compute/kernels/aggregate_basic_avx512.cc index 05356e0aa5e..0d66ed2ec3e 100644 --- a/cpp/src/arrow/compute/kernels/aggregate_basic_avx512.cc +++ b/cpp/src/arrow/compute/kernels/aggregate_basic_avx512.cc @@ -80,8 +80,8 @@ void AddMinMaxAvx512AggKernels(ScalarAggregateFunction* func) { AddMinMaxKernels(MinMaxInitAvx512, {int32(), uint32(), int64(), uint64()}, func, SimdLevel::AVX512); AddMinMaxKernels(MinMaxInitAvx512, TemporalTypes(), func, SimdLevel::AVX512); - AddMinMaxKernels(MinMaxInitAvx512, BaseBinaryTypes(), func, SimdLevel::AVX512); - AddMinMaxKernel(MinMaxInitAvx512, Type::FIXED_SIZE_BINARY, func, SimdLevel::AVX512); + AddMinMaxKernels(MinMaxInitAvx512, BaseBinaryTypes(), func, SimdLevel::AVX2); + AddMinMaxKernel(MinMaxInitAvx512, Type::FIXED_SIZE_BINARY, func, SimdLevel::AVX2); AddMinMaxKernel(MinMaxInitAvx512, Type::INTERVAL_MONTHS, func, SimdLevel::AVX512); } diff --git a/cpp/src/arrow/compute/kernels/chunked_internal.h b/cpp/src/arrow/compute/kernels/chunked_internal.h index 2b72e0ab310..69f439fccf0 100644 --- a/cpp/src/arrow/compute/kernels/chunked_internal.h +++ b/cpp/src/arrow/compute/kernels/chunked_internal.h @@ -31,44 +31,51 @@ namespace compute { namespace internal { // The target chunk in a chunked array. +template struct ResolvedChunk { + using ViewType = GetViewType; + using LogicalValueType = typename ViewType::T; + // The target array in chunked array. - const Array* array; + const ArrayType* array; // The index in the target array. const int64_t index; - ResolvedChunk(const Array* array, int64_t index) : array(array), index(index) {} + ResolvedChunk(const ArrayType* array, int64_t index) : array(array), index(index) {} - public: bool IsNull() const { return array->IsNull(index); } - template > - typename ViewType::T Value() const { - using LogicalArrayType = typename TypeTraits::ArrayType; - auto* typed_array = checked_cast(array); - return ViewType::LogicalValue(typed_array->GetView(index)); - } + LogicalValueType Value() const { return ViewType::LogicalValue(array->GetView(index)); } }; -class ChunkedArrayResolver { - private: - ::arrow::internal::ChunkResolver resolver_; - std::vector chunks_; +// ResolvedChunk specialization for untyped arrays when all is needed is null lookup +template <> +struct ResolvedChunk { + // The target array in chunked array. + const Array* array; + // The index in the target array. + const int64_t index; - public: - explicit ChunkedArrayResolver(const std::vector& chunks) - : resolver_(chunks), chunks_(chunks) {} + ResolvedChunk(const Array* array, int64_t index) : array(array), index(index) {} - ChunkedArrayResolver(ChunkedArrayResolver&& other) = default; - ChunkedArrayResolver& operator=(ChunkedArrayResolver&& other) = default; + bool IsNull() const { return array->IsNull(index); } +}; - ChunkedArrayResolver(const ChunkedArrayResolver& other) = default; - ChunkedArrayResolver& operator=(const ChunkedArrayResolver& other) = default; +struct ChunkedArrayResolver : protected ::arrow::internal::ChunkResolver { + ChunkedArrayResolver(const ChunkedArrayResolver& other) + : ::arrow::internal::ChunkResolver(other.chunks_), chunks_(other.chunks_) {} - ResolvedChunk Resolve(int64_t index) const { - const auto loc = resolver_.Resolve(index); - return {chunks_[loc.chunk_index], loc.index_in_chunk}; + explicit ChunkedArrayResolver(const std::vector& chunks) + : ::arrow::internal::ChunkResolver(chunks), chunks_(chunks) {} + + template + ResolvedChunk Resolve(int64_t index) const { + const auto loc = ::arrow::internal::ChunkResolver::Resolve(index); + return {checked_cast(chunks_[loc.chunk_index]), loc.index_in_chunk}; } + + protected: + const std::vector chunks_; }; inline std::vector GetArrayPointers(const ArrayVector& arrays) { diff --git a/cpp/src/arrow/compute/kernels/codegen_internal.cc b/cpp/src/arrow/compute/kernels/codegen_internal.cc index 0fd9cae7a8d..00a833742f9 100644 --- a/cpp/src/arrow/compute/kernels/codegen_internal.cc +++ b/cpp/src/arrow/compute/kernels/codegen_internal.cc @@ -23,7 +23,6 @@ #include #include -#include "arrow/compute/api_vector.h" #include "arrow/type_fwd.h" namespace arrow { @@ -57,23 +56,9 @@ Result LastType(KernelContext*, const std::vector& types return types.back(); } -Result ListValuesType(KernelContext* ctx, - const std::vector& args) { - auto list_type = checked_cast(args[0].type); - auto value_type = list_type->value_type().get(); - - auto recursive = - ctx->state() ? OptionsWrapper::Get(ctx).recursive : false; - if (!recursive) { - return value_type; - } - - for (auto value_kind = value_type->id(); - is_list(value_kind) || is_list_view(value_kind); value_kind = value_type->id()) { - list_type = checked_cast(list_type->value_type().get()); - value_type = list_type->value_type().get(); - } - return value_type; +Result ListValuesType(KernelContext*, const std::vector& args) { + const auto& list_type = checked_cast(*args[0].type); + return list_type.value_type().get(); } void EnsureDictionaryDecoded(std::vector* types) { diff --git a/cpp/src/arrow/compute/kernels/codegen_internal.h b/cpp/src/arrow/compute/kernels/codegen_internal.h index 9e46a21887f..72b29057b82 100644 --- a/cpp/src/arrow/compute/kernels/codegen_internal.h +++ b/cpp/src/arrow/compute/kernels/codegen_internal.h @@ -369,6 +369,43 @@ struct UnboxScalar { } }; +template +struct BoxScalar; + +template +struct BoxScalar> { + using T = typename GetOutputType::T; + static void Box(T val, Scalar* out) { + // Enables BoxScalar to work on a (for example) Time64Scalar + T* mutable_data = reinterpret_cast( + checked_cast<::arrow::internal::PrimitiveScalarBase*>(out)->mutable_data()); + *mutable_data = val; + } +}; + +template +struct BoxScalar> { + using T = typename GetOutputType::T; + using ScalarType = typename TypeTraits::ScalarType; + static void Box(T val, Scalar* out) { + checked_cast(out)->value = std::make_shared(val); + } +}; + +template <> +struct BoxScalar { + using T = Decimal128; + using ScalarType = Decimal128Scalar; + static void Box(T val, Scalar* out) { checked_cast(out)->value = val; } +}; + +template <> +struct BoxScalar { + using T = Decimal256; + using ScalarType = Decimal256Scalar; + static void Box(T val, Scalar* out) { checked_cast(out)->value = val; } +}; + // A VisitArraySpanInline variant that calls its visitor function with logical // values, such as Decimal128 rather than std::string_view. @@ -423,8 +460,7 @@ static void VisitTwoArrayValuesInline(const ArraySpan& arr0, const ArraySpan& ar Result FirstType(KernelContext*, const std::vector& types); Result LastType(KernelContext*, const std::vector& types); -Result ListValuesType(KernelContext* ctx, - const std::vector& types); +Result ListValuesType(KernelContext*, const std::vector& types); // ---------------------------------------------------------------------- // Helpers for iterating over common DataType instances for adding kernels to diff --git a/cpp/src/arrow/compute/kernels/gather_internal.h b/cpp/src/arrow/compute/kernels/gather_internal.h deleted file mode 100644 index 4c161533a72..00000000000 --- a/cpp/src/arrow/compute/kernels/gather_internal.h +++ /dev/null @@ -1,306 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -#pragma once - -#include -#include -#include - -#include "arrow/array/data.h" -#include "arrow/util/bit_block_counter.h" -#include "arrow/util/bit_run_reader.h" -#include "arrow/util/bit_util.h" -#include "arrow/util/bitmap_ops.h" -#include "arrow/util/macros.h" - -// Implementation helpers for kernels that need to load/gather fixed-width -// data from multiple, arbitrary indices. -// -// https://en.wikipedia.org/wiki/Gather/scatter_(vector_addressing) - -namespace arrow::internal { - -// CRTP [1] base class for Gather that provides a gathering loop in terms of -// Write*() methods that must be implemented by the derived class. -// -// [1] https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern -template -class GatherBaseCRTP { - public: - // Output offset is not supported by Gather and idx is supposed to have offset - // pre-applied. idx_validity parameters on functions can use the offset they - // carry to read the validity bitmap as bitmaps can't have pre-applied offsets - // (they might not align to byte boundaries). - - GatherBaseCRTP() = default; - ARROW_DISALLOW_COPY_AND_ASSIGN(GatherBaseCRTP); - ARROW_DEFAULT_MOVE_AND_ASSIGN(GatherBaseCRTP); - - protected: - ARROW_FORCE_INLINE int64_t ExecuteNoNulls(int64_t idx_length) { - auto* self = static_cast(this); - for (int64_t position = 0; position < idx_length; position++) { - self->WriteValue(position); - } - return idx_length; - } - - // See derived Gather classes below for the meaning of the parameters, pre and - // post-conditions. - // - // src_validity is not necessarily the source of the values that are being - // gathered (e.g. the source could be a nested fixed-size list array and the - // values being gathered are from the innermost buffer), so the ArraySpan is - // used solely to check for nulls in the source values and nothing else. - // - // idx_length is the number of elements in idx and consequently the number of - // bits that might be written to out_is_valid. Member `Write*()` functions will be - // called with positions from 0 to idx_length - 1. - // - // If `kOutputIsZeroInitialized` is true, then `WriteZero()` or `WriteZeroSegment()` - // doesn't have to be called for resulting null positions. A position is - // considered null if either the index or the source value is null at that - // position. - template - ARROW_FORCE_INLINE int64_t ExecuteWithNulls(const ArraySpan& src_validity, - int64_t idx_length, const IndexCType* idx, - const ArraySpan& idx_validity, - uint8_t* out_is_valid) { - auto* self = static_cast(this); - OptionalBitBlockCounter indices_bit_counter(idx_validity.buffers[0].data, - idx_validity.offset, idx_length); - int64_t position = 0; - int64_t valid_count = 0; - while (position < idx_length) { - BitBlockCount block = indices_bit_counter.NextBlock(); - if (!src_validity.MayHaveNulls()) { - // Source values are never null, so things are easier - valid_count += block.popcount; - if (block.popcount == block.length) { - // Fastest path: neither source values nor index nulls - bit_util::SetBitsTo(out_is_valid, position, block.length, true); - for (int64_t i = 0; i < block.length; ++i) { - self->WriteValue(position); - ++position; - } - } else if (block.popcount > 0) { - // Slow path: some indices but not all are null - for (int64_t i = 0; i < block.length; ++i) { - ARROW_COMPILER_ASSUME(idx_validity.buffers[0].data != nullptr); - if (idx_validity.IsValid(position)) { - // index is not null - bit_util::SetBit(out_is_valid, position); - self->WriteValue(position); - } else if constexpr (!kOutputIsZeroInitialized) { - self->WriteZero(position); - } - ++position; - } - } else { - self->WriteZeroSegment(position, block.length); - position += block.length; - } - } else { - // Source values may be null, so we must do random access into src_validity - if (block.popcount == block.length) { - // Faster path: indices are not null but source values may be - for (int64_t i = 0; i < block.length; ++i) { - ARROW_COMPILER_ASSUME(src_validity.buffers[0].data != nullptr); - if (src_validity.IsValid(idx[position])) { - // value is not null - self->WriteValue(position); - bit_util::SetBit(out_is_valid, position); - ++valid_count; - } else if constexpr (!kOutputIsZeroInitialized) { - self->WriteZero(position); - } - ++position; - } - } else if (block.popcount > 0) { - // Slow path: some but not all indices are null. Since we are doing - // random access in general we have to check the value nullness one by - // one. - for (int64_t i = 0; i < block.length; ++i) { - ARROW_COMPILER_ASSUME(src_validity.buffers[0].data != nullptr); - ARROW_COMPILER_ASSUME(idx_validity.buffers[0].data != nullptr); - if (idx_validity.IsValid(position) && src_validity.IsValid(idx[position])) { - // index is not null && value is not null - self->WriteValue(position); - bit_util::SetBit(out_is_valid, position); - ++valid_count; - } else if constexpr (!kOutputIsZeroInitialized) { - self->WriteZero(position); - } - ++position; - } - } else { - if constexpr (!kOutputIsZeroInitialized) { - self->WriteZeroSegment(position, block.length); - } - position += block.length; - } - } - } - return valid_count; - } -}; - -// A gather primitive for primitive fixed-width types with a integral byte width. If -// `kWithFactor` is true, the actual width is a runtime multiple of `kValueWidthInbits` -// (this can be useful for fixed-size list inputs and other input types with unusual byte -// widths that don't deserve value specialization). -template -class Gather : public GatherBaseCRTP> { - public: - static_assert(kValueWidthInBits >= 0 && kValueWidthInBits % 8 == 0); - static constexpr int kValueWidth = kValueWidthInBits / 8; - - private: - const int64_t src_length_; // number of elements of kValueWidth bytes in src_ - const uint8_t* src_; - const int64_t idx_length_; // number IndexCType elements in idx_ - const IndexCType* idx_; - uint8_t* out_; - int64_t factor_; - - public: - void WriteValue(int64_t position) { - if constexpr (kWithFactor) { - const int64_t scaled_factor = kValueWidth * factor_; - memcpy(out_ + position * scaled_factor, src_ + idx_[position] * scaled_factor, - scaled_factor); - } else { - memcpy(out_ + position * kValueWidth, src_ + idx_[position] * kValueWidth, - kValueWidth); - } - } - - void WriteZero(int64_t position) { - if constexpr (kWithFactor) { - const int64_t scaled_factor = kValueWidth * factor_; - memset(out_ + position * scaled_factor, 0, scaled_factor); - } else { - memset(out_ + position * kValueWidth, 0, kValueWidth); - } - } - - void WriteZeroSegment(int64_t position, int64_t length) { - if constexpr (kWithFactor) { - const int64_t scaled_factor = kValueWidth * factor_; - memset(out_ + position * scaled_factor, 0, length * scaled_factor); - } else { - memset(out_ + position * kValueWidth, 0, length * kValueWidth); - } - } - - public: - Gather(int64_t src_length, const uint8_t* src, int64_t zero_src_offset, - int64_t idx_length, const IndexCType* idx, uint8_t* out, int64_t factor) - : src_length_(src_length), - src_(src), - idx_length_(idx_length), - idx_(idx), - out_(out), - factor_(factor) { - assert(zero_src_offset == 0); - assert(src && idx && out); - assert((kWithFactor || factor == 1) && - "When kWithFactor is false, the factor is assumed to be 1 at compile time"); - } - - ARROW_FORCE_INLINE int64_t Execute() { return this->ExecuteNoNulls(idx_length_); } - - /// \pre If kOutputIsZeroInitialized, then this->out_ has to be zero initialized. - /// \pre Bits in out_is_valid have to always be zero initialized. - /// \post The bits for the valid elements (and only those) are set in out_is_valid. - /// \post If !kOutputIsZeroInitialized, then positions in this->_out containing null - /// elements have 0s written to them. This might be less efficient than - /// zero-initializing first and calling this->Execute() afterwards. - /// \return The number of valid elements in out. - template - ARROW_FORCE_INLINE int64_t Execute(const ArraySpan& src_validity, - const ArraySpan& idx_validity, - uint8_t* out_is_valid) { - assert(src_length_ == src_validity.length); - assert(idx_length_ == idx_validity.length); - assert(out_is_valid); - return this->template ExecuteWithNulls( - src_validity, idx_length_, idx_, idx_validity, out_is_valid); - } -}; - -// A gather primitive for boolean inputs. Unlike its counterpart above, -// this does not support passing a non-trivial factor parameter. -template -class Gather - : public GatherBaseCRTP> { - private: - const int64_t src_length_; // number of elements of bits bytes in src_ after offset - const uint8_t* src_; // the boolean array data buffer in bits - const int64_t src_offset_; // offset in bits - const int64_t idx_length_; // number IndexCType elements in idx_ - const IndexCType* idx_; - uint8_t* out_; // output boolean array data buffer in bits - - public: - Gather(int64_t src_length, const uint8_t* src, int64_t src_offset, int64_t idx_length, - const IndexCType* idx, uint8_t* out, int64_t factor) - : src_length_(src_length), - src_(src), - src_offset_(src_offset), - idx_length_(idx_length), - idx_(idx), - out_(out) { - assert(src && idx && out); - assert(factor == 1 && - "factor != 1 is not supported when Gather is used to gather bits/booleans"); - } - - void WriteValue(int64_t position) { - bit_util::SetBitTo(out_, position, - bit_util::GetBit(src_, src_offset_ + idx_[position])); - } - - void WriteZero(int64_t position) { bit_util::ClearBit(out_, position); } - - void WriteZeroSegment(int64_t position, int64_t block_length) { - bit_util::SetBitsTo(out_, position, block_length, false); - } - - ARROW_FORCE_INLINE int64_t Execute() { return this->ExecuteNoNulls(idx_length_); } - - /// \pre If kOutputIsZeroInitialized, then this->out_ has to be zero initialized. - /// \pre Bits in out_is_valid have to always be zero initialized. - /// \post The bits for the valid elements (and only those) are set in out_is_valid. - /// \post If !kOutputIsZeroInitialized, then positions in this->_out containing null - /// elements have 0s written to them. This might be less efficient than - /// zero-initializing first and calling this->Execute() afterwards. - /// \return The number of valid elements in out. - template - ARROW_FORCE_INLINE int64_t Execute(const ArraySpan& src_validity, - const ArraySpan& idx_validity, - uint8_t* out_is_valid) { - assert(src_length_ == src_validity.length); - assert(idx_length_ == idx_validity.length); - assert(out_is_valid); - return this->template ExecuteWithNulls( - src_validity, idx_length_, idx_, idx_validity, out_is_valid); - } -}; - -} // namespace arrow::internal diff --git a/cpp/src/arrow/compute/kernels/hash_aggregate.cc b/cpp/src/arrow/compute/kernels/hash_aggregate.cc index 4bf6a6106df..5052d8dd666 100644 --- a/cpp/src/arrow/compute/kernels/hash_aggregate.cc +++ b/cpp/src/arrow/compute/kernels/hash_aggregate.cc @@ -33,9 +33,9 @@ #include "arrow/compute/kernels/aggregate_internal.h" #include "arrow/compute/kernels/aggregate_var_std_internal.h" #include "arrow/compute/kernels/common_internal.h" +#include "arrow/compute/kernels/row_encoder_internal.h" #include "arrow/compute/kernels/util_internal.h" #include "arrow/compute/row/grouper.h" -#include "arrow/compute/row/row_encoder_internal.h" #include "arrow/record_batch.h" #include "arrow/stl_allocator.h" #include "arrow/type_traits.h" @@ -83,8 +83,7 @@ Result> HashAggregateInit(KernelContext* ctx, const KernelInitArgs& args) { auto impl = std::make_unique(); RETURN_NOT_OK(impl->Init(ctx->exec_context(), args)); - // R build with openSUSE155 requires an explicit unique_ptr construction - return std::unique_ptr(std::move(impl)); + return std::move(impl); } Status HashAggregateResize(KernelContext* ctx, int64_t num_groups) { @@ -814,7 +813,7 @@ struct GroupedMeanImpl (*null_count)++; bit_util::SetBitTo((*null_bitmap)->mutable_data(), i, false); } - return values; + return std::move(values); } std::shared_ptr out_type() const override { @@ -1115,8 +1114,7 @@ Result> VarStdInit(KernelContext* ctx, auto impl = std::make_unique>(); impl->result_type_ = result_type; RETURN_NOT_OK(impl->Init(ctx->exec_context(), args)); - // R build with openSUSE155 requires an explicit unique_ptr construction - return std::unique_ptr(std::move(impl)); + return std::move(impl); } template @@ -1687,7 +1685,7 @@ Result> MinMaxInit(KernelContext* ctx, const KernelInitArgs& args) { ARROW_ASSIGN_OR_RAISE(auto impl, HashAggregateInit>(ctx, args)); static_cast*>(impl.get())->type_ = args.inputs[0].GetSharedPtr(); - return impl; + return std::move(impl); } template @@ -2190,7 +2188,7 @@ Result> FirstLastInit(KernelContext* ctx, ARROW_ASSIGN_OR_RAISE(auto impl, HashAggregateInit>(ctx, args)); static_cast*>(impl.get())->type_ = args.inputs[0].GetSharedPtr(); - return impl; + return std::move(impl); } template @@ -2599,7 +2597,7 @@ Result> GroupedDistinctInit(KernelContext* ctx, instance->out_type_ = args.inputs[0].GetSharedPtr(); ARROW_ASSIGN_OR_RAISE(instance->grouper_, Grouper::Make(args.inputs, ctx->exec_context())); - return impl; + return std::move(impl); } // ---------------------------------------------------------------------- @@ -2841,7 +2839,7 @@ Result> GroupedOneInit(KernelContext* ctx, ARROW_ASSIGN_OR_RAISE(auto impl, HashAggregateInit>(ctx, args)); auto instance = static_cast*>(impl.get()); instance->out_type_ = args.inputs[0].GetSharedPtr(); - return impl; + return std::move(impl); } struct GroupedOneFactory { @@ -3239,7 +3237,7 @@ Result> GroupedListInit(KernelContext* ctx, ARROW_ASSIGN_OR_RAISE(auto impl, HashAggregateInit>(ctx, args)); auto instance = static_cast*>(impl.get()); instance->out_type_ = args.inputs[0].GetSharedPtr(); - return impl; + return std::move(impl); } struct GroupedListFactory { diff --git a/cpp/src/arrow/compute/row/row_encoder_internal.cc b/cpp/src/arrow/compute/kernels/row_encoder.cc similarity index 93% rename from cpp/src/arrow/compute/row/row_encoder_internal.cc rename to cpp/src/arrow/compute/kernels/row_encoder.cc index 414cc6793a5..8224eaa6d63 100644 --- a/cpp/src/arrow/compute/row/row_encoder_internal.cc +++ b/cpp/src/arrow/compute/kernels/row_encoder.cc @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -#include "arrow/compute/row/row_encoder_internal.h" +#include "arrow/compute/kernels/row_encoder_internal.h" #include "arrow/util/bitmap_writer.h" #include "arrow/util/logging.h" @@ -75,31 +75,26 @@ void BooleanKeyEncoder::AddLengthNull(int32_t* length) { Status BooleanKeyEncoder::Encode(const ExecValue& data, int64_t batch_length, uint8_t** encoded_bytes) { - auto handle_next_valid_value = [&encoded_bytes](bool value) { - auto& encoded_ptr = *encoded_bytes++; - *encoded_ptr++ = kValidByte; - *encoded_ptr++ = value; - }; - auto handle_next_null_value = [&encoded_bytes]() { - auto& encoded_ptr = *encoded_bytes++; - *encoded_ptr++ = kNullByte; - *encoded_ptr++ = 0; - }; - if (data.is_array()) { - VisitArraySpanInline(data.array, handle_next_valid_value, - handle_next_null_value); + VisitArraySpanInline( + data.array, + [&](bool value) { + auto& encoded_ptr = *encoded_bytes++; + *encoded_ptr++ = kValidByte; + *encoded_ptr++ = value; + }, + [&] { + auto& encoded_ptr = *encoded_bytes++; + *encoded_ptr++ = kNullByte; + *encoded_ptr++ = 0; + }); } else { const auto& scalar = data.scalar_as(); - if (!scalar.is_valid) { - for (int64_t i = 0; i < batch_length; i++) { - handle_next_null_value(); - } - } else { - const bool value = scalar.value; - for (int64_t i = 0; i < batch_length; i++) { - handle_next_valid_value(value); - } + bool value = scalar.is_valid && scalar.value; + for (int64_t i = 0; i < batch_length; i++) { + auto& encoded_ptr = *encoded_bytes++; + *encoded_ptr++ = kValidByte; + *encoded_ptr++ = value; } } return Status::OK(); diff --git a/cpp/src/arrow/compute/row/row_encoder_internal.h b/cpp/src/arrow/compute/kernels/row_encoder_internal.h similarity index 96% rename from cpp/src/arrow/compute/row/row_encoder_internal.h rename to cpp/src/arrow/compute/kernels/row_encoder_internal.h index 60eb14af504..9bf7c1d1c4f 100644 --- a/cpp/src/arrow/compute/row/row_encoder_internal.h +++ b/cpp/src/arrow/compute/kernels/row_encoder_internal.h @@ -29,7 +29,7 @@ using internal::checked_cast; namespace compute { namespace internal { -struct ARROW_EXPORT KeyEncoder { +struct KeyEncoder { // the first byte of an encoded key is used to indicate nullity static constexpr bool kExtraByteForNull = true; @@ -60,7 +60,7 @@ struct ARROW_EXPORT KeyEncoder { } }; -struct ARROW_EXPORT BooleanKeyEncoder : KeyEncoder { +struct BooleanKeyEncoder : KeyEncoder { static constexpr int kByteWidth = 1; void AddLength(const ExecValue& data, int64_t batch_length, int32_t* lengths) override; @@ -76,7 +76,7 @@ struct ARROW_EXPORT BooleanKeyEncoder : KeyEncoder { MemoryPool* pool) override; }; -struct ARROW_EXPORT FixedWidthKeyEncoder : KeyEncoder { +struct FixedWidthKeyEncoder : KeyEncoder { explicit FixedWidthKeyEncoder(std::shared_ptr type) : type_(std::move(type)), byte_width_(checked_cast(*type_).bit_width() / 8) {} @@ -97,7 +97,7 @@ struct ARROW_EXPORT FixedWidthKeyEncoder : KeyEncoder { int byte_width_; }; -struct ARROW_EXPORT DictionaryKeyEncoder : FixedWidthKeyEncoder { +struct DictionaryKeyEncoder : FixedWidthKeyEncoder { DictionaryKeyEncoder(std::shared_ptr type, MemoryPool* pool) : FixedWidthKeyEncoder(std::move(type)), pool_(pool) {} @@ -112,7 +112,7 @@ struct ARROW_EXPORT DictionaryKeyEncoder : FixedWidthKeyEncoder { }; template -struct ARROW_EXPORT VarLengthKeyEncoder : KeyEncoder { +struct VarLengthKeyEncoder : KeyEncoder { using Offset = typename T::offset_type; void AddLength(const ExecValue& data, int64_t batch_length, int32_t* lengths) override { @@ -232,7 +232,7 @@ struct ARROW_EXPORT VarLengthKeyEncoder : KeyEncoder { std::shared_ptr type_; }; -struct ARROW_EXPORT NullKeyEncoder : KeyEncoder { +struct NullKeyEncoder : KeyEncoder { void AddLength(const ExecValue&, int64_t batch_length, int32_t* lengths) override {} void AddLengthNull(int32_t* length) override {} @@ -274,7 +274,7 @@ class ARROW_EXPORT RowEncoder { } private: - ExecContext* ctx_{nullptr}; + ExecContext* ctx_; std::vector> encoders_; std::vector offsets_; std::vector bytes_; diff --git a/cpp/src/arrow/compute/kernels/scalar_arithmetic.cc b/cpp/src/arrow/compute/kernels/scalar_arithmetic.cc index eb243de4a76..44f5fea7907 100644 --- a/cpp/src/arrow/compute/kernels/scalar_arithmetic.cc +++ b/cpp/src/arrow/compute/kernels/scalar_arithmetic.cc @@ -499,23 +499,16 @@ Result ResolveDecimalBinaryOperationOutput( DCHECK_EQ(left_type.id(), right_type.id()); int32_t precision, scale; - ARROW_ASSIGN_OR_RAISE(std::tie(precision, scale), - ToResult(getter(left_type.precision(), left_type.scale(), - right_type.precision(), right_type.scale()))); + std::tie(precision, scale) = getter(left_type.precision(), left_type.scale(), + right_type.precision(), right_type.scale()); ARROW_ASSIGN_OR_RAISE(auto type, DecimalType::Make(left_type.id(), precision, scale)); - return type; + return std::move(type); } Result ResolveDecimalAdditionOrSubtractionOutput( KernelContext*, const std::vector& types) { return ResolveDecimalBinaryOperationOutput( - types, - [](int32_t p1, int32_t s1, int32_t p2, - int32_t s2) -> Result> { - if (s1 != s2) { - return Status::Invalid("Addition or subtraction of two decimal ", - "types scale1 != scale2. (", s1, s2, ")."); - } + types, [](int32_t p1, int32_t s1, int32_t p2, int32_t s2) { DCHECK_EQ(s1, s2); const int32_t scale = s1; const int32_t precision = std::max(p1 - s1, p2 - s2) + scale + 1; @@ -526,9 +519,7 @@ Result ResolveDecimalAdditionOrSubtractionOutput( Result ResolveDecimalMultiplicationOutput( KernelContext*, const std::vector& types) { return ResolveDecimalBinaryOperationOutput( - types, - [](int32_t p1, int32_t s1, int32_t p2, - int32_t s2) -> Result> { + types, [](int32_t p1, int32_t s1, int32_t p2, int32_t s2) { const int32_t scale = s1 + s2; const int32_t precision = p1 + p2 + 1; return std::make_pair(precision, scale); @@ -538,13 +529,7 @@ Result ResolveDecimalMultiplicationOutput( Result ResolveDecimalDivisionOutput(KernelContext*, const std::vector& types) { return ResolveDecimalBinaryOperationOutput( - types, - [](int32_t p1, int32_t s1, int32_t p2, - int32_t s2) -> Result> { - if (s1 < s2) { - return Status::Invalid("Division of two decimal types scale1 < scale2. ", "(", - s1, s2, ")."); - } + types, [](int32_t p1, int32_t s1, int32_t p2, int32_t s2) { DCHECK_GE(s1, s2); const int32_t scale = s1 - s2; const int32_t precision = p1; @@ -566,7 +551,7 @@ Result ResolveTemporalOutput(KernelContext*, } auto type = duration(right_type.unit()); - return type; + return std::move(type); } template diff --git a/cpp/src/arrow/compute/kernels/scalar_cast_extension.cc b/cpp/src/arrow/compute/kernels/scalar_cast_extension.cc index 2a54d28c6fb..c32a6ef6de9 100644 --- a/cpp/src/arrow/compute/kernels/scalar_cast_extension.cc +++ b/cpp/src/arrow/compute/kernels/scalar_cast_extension.cc @@ -56,9 +56,8 @@ Status CastToExtension(KernelContext* ctx, const ExecSpan& batch, ExecResult* ou std::shared_ptr GetCastToExtension(std::string name) { auto func = std::make_shared(std::move(name), Type::EXTENSION); for (Type::type in_ty : AllTypeIds()) { - DCHECK_OK(func->AddKernel(in_ty, {InputType(in_ty)}, kOutputTargetType, - CastToExtension, NullHandling::COMPUTED_NO_PREALLOCATE, - MemAllocation::NO_PREALLOCATE)); + DCHECK_OK( + func->AddKernel(in_ty, {InputType(in_ty)}, kOutputTargetType, CastToExtension)); } return func; } diff --git a/cpp/src/arrow/compute/kernels/scalar_cast_internal.cc b/cpp/src/arrow/compute/kernels/scalar_cast_internal.cc index d8c40887596..8cf5a04addb 100644 --- a/cpp/src/arrow/compute/kernels/scalar_cast_internal.cc +++ b/cpp/src/arrow/compute/kernels/scalar_cast_internal.cc @@ -19,13 +19,10 @@ #include "arrow/compute/cast_internal.h" #include "arrow/compute/kernels/common_internal.h" #include "arrow/extension_type.h" -#include "arrow/type_traits.h" #include "arrow/util/checked_cast.h" -#include "arrow/util/float16.h" namespace arrow { -using arrow::util::Float16; using internal::checked_cast; using internal::PrimitiveScalarBase; @@ -50,42 +47,6 @@ struct CastPrimitive { } }; -// Converting floating types to half float. -template -struct CastPrimitive> { - static void Exec(const ArraySpan& arr, ArraySpan* out) { - using InT = typename InType::c_type; - const InT* in_values = arr.GetValues(1); - uint16_t* out_values = out->GetValues(1); - for (int64_t i = 0; i < arr.length; ++i) { - *out_values++ = Float16(*in_values++).bits(); - } - } -}; - -// Converting from half float to other floating types. -template <> -struct CastPrimitive> { - static void Exec(const ArraySpan& arr, ArraySpan* out) { - const uint16_t* in_values = arr.GetValues(1); - float* out_values = out->GetValues(1); - for (int64_t i = 0; i < arr.length; ++i) { - *out_values++ = Float16::FromBits(*in_values++).ToFloat(); - } - } -}; - -template <> -struct CastPrimitive> { - static void Exec(const ArraySpan& arr, ArraySpan* out) { - const uint16_t* in_values = arr.GetValues(1); - double* out_values = out->GetValues(1); - for (int64_t i = 0; i < arr.length; ++i) { - *out_values++ = Float16::FromBits(*in_values++).ToDouble(); - } - } -}; - template struct CastPrimitive::value>> { // memcpy output @@ -95,33 +56,6 @@ struct CastPrimitive: } }; -// Cast int to half float -template -struct CastPrimitive> { - static void Exec(const ArraySpan& arr, ArraySpan* out) { - using InT = typename InType::c_type; - const InT* in_values = arr.GetValues(1); - uint16_t* out_values = out->GetValues(1); - for (int64_t i = 0; i < arr.length; ++i) { - float temp = static_cast(*in_values++); - *out_values++ = Float16(temp).bits(); - } - } -}; - -// Cast half float to int -template -struct CastPrimitive> { - static void Exec(const ArraySpan& arr, ArraySpan* out) { - using OutT = typename OutType::c_type; - const uint16_t* in_values = arr.GetValues(1); - OutT* out_values = out->GetValues(1); - for (int64_t i = 0; i < arr.length; ++i) { - *out_values++ = static_cast(Float16::FromBits(*in_values++).ToFloat()); - } - } -}; - template void CastNumberImpl(Type::type out_type, const ArraySpan& input, ArraySpan* out) { switch (out_type) { @@ -145,8 +79,6 @@ void CastNumberImpl(Type::type out_type, const ArraySpan& input, ArraySpan* out) return CastPrimitive::Exec(input, out); case Type::DOUBLE: return CastPrimitive::Exec(input, out); - case Type::HALF_FLOAT: - return CastPrimitive::Exec(input, out); default: break; } @@ -177,8 +109,6 @@ void CastNumberToNumberUnsafe(Type::type in_type, Type::type out_type, return CastNumberImpl(out_type, input, out); case Type::DOUBLE: return CastNumberImpl(out_type, input, out); - case Type::HALF_FLOAT: - return CastNumberImpl(out_type, input, out); default: DCHECK(false); break; diff --git a/cpp/src/arrow/compute/kernels/scalar_cast_numeric.cc b/cpp/src/arrow/compute/kernels/scalar_cast_numeric.cc index bd9be3e8a95..b054e57f04d 100644 --- a/cpp/src/arrow/compute/kernels/scalar_cast_numeric.cc +++ b/cpp/src/arrow/compute/kernels/scalar_cast_numeric.cc @@ -23,7 +23,6 @@ #include "arrow/compute/kernels/util_internal.h" #include "arrow/scalar.h" #include "arrow/util/bit_block_counter.h" -#include "arrow/util/float16.h" #include "arrow/util/int_util.h" #include "arrow/util/value_parsing.h" @@ -35,7 +34,6 @@ using internal::IntegersCanFit; using internal::OptionalBitBlockCounter; using internal::ParseValue; using internal::PrimitiveScalarBase; -using util::Float16; namespace compute { namespace internal { @@ -58,37 +56,18 @@ Status CastFloatingToFloating(KernelContext*, const ExecSpan& batch, ExecResult* // ---------------------------------------------------------------------- // Implement fast safe floating point to integer cast -// -template -struct WasTruncated { - static bool Check(OutT out_val, InT in_val) { - return static_cast(out_val) != in_val; - } - - static bool CheckMaybeNull(OutT out_val, InT in_val, bool is_valid) { - return is_valid && static_cast(out_val) != in_val; - } -}; - -// Half float to int -template -struct WasTruncated { - using OutT = typename OutType::c_type; - static bool Check(OutT out_val, uint16_t in_val) { - return static_cast(out_val) != Float16::FromBits(in_val).ToFloat(); - } - - static bool CheckMaybeNull(OutT out_val, uint16_t in_val, bool is_valid) { - return is_valid && static_cast(out_val) != Float16::FromBits(in_val).ToFloat(); - } -}; // InType is a floating point type we are planning to cast to integer template ARROW_DISABLE_UBSAN("float-cast-overflow") Status CheckFloatTruncation(const ArraySpan& input, const ArraySpan& output) { + auto WasTruncated = [&](OutT out_val, InT in_val) -> bool { + return static_cast(out_val) != in_val; + }; + auto WasTruncatedMaybeNull = [&](OutT out_val, InT in_val, bool is_valid) -> bool { + return is_valid && static_cast(out_val) != in_val; + }; auto GetErrorMessage = [&](InT val) { return Status::Invalid("Float value ", val, " was truncated converting to ", *output.type); @@ -107,28 +86,26 @@ Status CheckFloatTruncation(const ArraySpan& input, const ArraySpan& output) { if (block.popcount == block.length) { // Fast path: branchless for (int64_t i = 0; i < block.length; ++i) { - block_out_of_bounds |= - WasTruncated::Check(out_data[i], in_data[i]); + block_out_of_bounds |= WasTruncated(out_data[i], in_data[i]); } } else if (block.popcount > 0) { // Indices have nulls, must only boundscheck non-null values for (int64_t i = 0; i < block.length; ++i) { - block_out_of_bounds |= WasTruncated::CheckMaybeNull( + block_out_of_bounds |= WasTruncatedMaybeNull( out_data[i], in_data[i], bit_util::GetBit(bitmap, offset_position + i)); } } if (ARROW_PREDICT_FALSE(block_out_of_bounds)) { if (input.GetNullCount() > 0) { for (int64_t i = 0; i < block.length; ++i) { - if (WasTruncated::CheckMaybeNull( - out_data[i], in_data[i], - bit_util::GetBit(bitmap, offset_position + i))) { + if (WasTruncatedMaybeNull(out_data[i], in_data[i], + bit_util::GetBit(bitmap, offset_position + i))) { return GetErrorMessage(in_data[i]); } } } else { for (int64_t i = 0; i < block.length; ++i) { - if (WasTruncated::Check(out_data[i], in_data[i])) { + if (WasTruncated(out_data[i], in_data[i])) { return GetErrorMessage(in_data[i]); } } @@ -174,9 +151,6 @@ Status CheckFloatToIntTruncation(const ExecValue& input, const ExecResult& outpu return CheckFloatToIntTruncationImpl(input.array, *output.array_span()); case Type::DOUBLE: return CheckFloatToIntTruncationImpl(input.array, *output.array_span()); - case Type::HALF_FLOAT: - return CheckFloatToIntTruncationImpl(input.array, - *output.array_span()); default: break; } @@ -319,15 +293,6 @@ struct CastFunctor< } }; -template <> -struct CastFunctor> { - static Status Exec(KernelContext* ctx, const ExecSpan& batch, ExecResult* out) { - return applicator::ScalarUnaryNotNull>::Exec(ctx, batch, - out); - } -}; - // ---------------------------------------------------------------------- // Decimal to integer @@ -724,10 +689,6 @@ std::shared_ptr GetCastToInteger(std::string name) { DCHECK_OK(func->AddKernel(in_ty->id(), {in_ty}, out_ty, CastFloatingToInteger)); } - // Cast from half-float - DCHECK_OK(func->AddKernel(Type::HALF_FLOAT, {InputType(Type::HALF_FLOAT)}, out_ty, - CastFloatingToInteger)); - // From other numbers to integer AddCommonNumberCasts(out_ty, func.get()); @@ -754,10 +715,6 @@ std::shared_ptr GetCastToFloating(std::string name) { DCHECK_OK(func->AddKernel(in_ty->id(), {in_ty}, out_ty, CastFloatingToFloating)); } - // From half-float to float/double - DCHECK_OK(func->AddKernel(Type::HALF_FLOAT, {InputType(Type::HALF_FLOAT)}, out_ty, - CastFloatingToFloating)); - // From other numbers to floating point AddCommonNumberCasts(out_ty, func.get()); @@ -766,7 +723,6 @@ std::shared_ptr GetCastToFloating(std::string name) { CastFunctor::Exec)); DCHECK_OK(func->AddKernel(Type::DECIMAL256, {InputType(Type::DECIMAL256)}, out_ty, CastFunctor::Exec)); - return func; } @@ -839,51 +795,6 @@ std::shared_ptr GetCastToDecimal256() { return func; } -std::shared_ptr GetCastToHalfFloat() { - // HalfFloat is a bit brain-damaged for now - auto func = std::make_shared("func", Type::HALF_FLOAT); - AddCommonCasts(Type::HALF_FLOAT, float16(), func.get()); - - // Casts from integer to floating point - for (const std::shared_ptr& in_ty : IntTypes()) { - DCHECK_OK(func->AddKernel(in_ty->id(), {in_ty}, - TypeTraits::type_singleton(), - CastIntegerToFloating)); - } - - // Cast from other strings to half float. - for (const std::shared_ptr& in_ty : BaseBinaryTypes()) { - auto exec = GenerateVarBinaryBase(*in_ty); - DCHECK_OK(func->AddKernel(in_ty->id(), {in_ty}, - TypeTraits::type_singleton(), exec)); - } - - DCHECK_OK(func.get()->AddKernel(Type::FLOAT, {InputType(Type::FLOAT)}, float16(), - CastFloatingToFloating)); - DCHECK_OK(func.get()->AddKernel(Type::DOUBLE, {InputType(Type::DOUBLE)}, float16(), - CastFloatingToFloating)); - return func; -} - -struct NullExtensionTypeMatcher : public TypeMatcher { - ~NullExtensionTypeMatcher() override = default; - - bool Matches(const DataType& type) const override { - return type.id() == Type::EXTENSION && - checked_cast(type).storage_id() == Type::NA; - } - - std::string ToString() const override { return "extension"; } - - bool Equals(const TypeMatcher& other) const override { - if (this == &other) { - return true; - } - auto casted = dynamic_cast(&other); - return casted != nullptr; - } -}; - } // namespace std::vector> GetNumericCasts() { @@ -894,10 +805,6 @@ std::vector> GetNumericCasts() { auto cast_null = std::make_shared("cast_null", Type::NA); DCHECK_OK(cast_null->AddKernel(Type::DICTIONARY, {InputType(Type::DICTIONARY)}, null(), OutputAllNull)); - // Explicitly allow casting extension type with null backing array to null - DCHECK_OK(cast_null->AddKernel( - Type::EXTENSION, {InputType(std::make_shared())}, null(), - OutputAllNull)); functions.push_back(cast_null); functions.push_back(GetCastToInteger("cast_int8")); @@ -923,14 +830,13 @@ std::vector> GetNumericCasts() { functions.push_back(GetCastToInteger("cast_uint64")); // HalfFloat is a bit brain-damaged for now - auto cast_half_float = GetCastToHalfFloat(); + auto cast_half_float = + std::make_shared("cast_half_float", Type::HALF_FLOAT); + AddCommonCasts(Type::HALF_FLOAT, float16(), cast_half_float.get()); functions.push_back(cast_half_float); - auto cast_float = GetCastToFloating("cast_float"); - functions.push_back(cast_float); - - auto cast_double = GetCastToFloating("cast_double"); - functions.push_back(cast_double); + functions.push_back(GetCastToFloating("cast_float")); + functions.push_back(GetCastToFloating("cast_double")); functions.push_back(GetCastToDecimal128()); functions.push_back(GetCastToDecimal256()); diff --git a/cpp/src/arrow/compute/kernels/scalar_cast_string.cc b/cpp/src/arrow/compute/kernels/scalar_cast_string.cc index dc3fe29a3df..a6576e4e4c2 100644 --- a/cpp/src/arrow/compute/kernels/scalar_cast_string.cc +++ b/cpp/src/arrow/compute/kernels/scalar_cast_string.cc @@ -340,15 +340,10 @@ BinaryToBinaryCastExec(KernelContext* ctx, const ExecSpan& batch, ExecResult* ou if (input.offset == output->offset) { output->buffers[0] = input.GetBuffer(0); } else { - // When the offsets are different (e.g., due to slice operation), we need to check if - // the null bitmap buffer is not null before copying it. The null bitmap buffer can be - // null if the input array value does not contain any null value. - if (input.buffers[0].data != NULLPTR) { - ARROW_ASSIGN_OR_RAISE( - output->buffers[0], - arrow::internal::CopyBitmap(ctx->memory_pool(), input.buffers[0].data, - input.offset, input.length)); - } + ARROW_ASSIGN_OR_RAISE( + output->buffers[0], + arrow::internal::CopyBitmap(ctx->memory_pool(), input.buffers[0].data, + input.offset, input.length)); } // This buffer is preallocated @@ -442,10 +437,6 @@ void AddNumberToStringCasts(CastFunction* func) { GenerateNumeric(*in_ty), NullHandling::COMPUTED_NO_PREALLOCATE)); } - - DCHECK_OK(func->AddKernel(Type::HALF_FLOAT, {float16()}, out_ty, - NumericToStringCastFunctor::Exec, - NullHandling::COMPUTED_NO_PREALLOCATE)); } template diff --git a/cpp/src/arrow/compute/kernels/scalar_cast_temporal.cc b/cpp/src/arrow/compute/kernels/scalar_cast_temporal.cc index a293000d566..a5612643913 100644 --- a/cpp/src/arrow/compute/kernels/scalar_cast_temporal.cc +++ b/cpp/src/arrow/compute/kernels/scalar_cast_temporal.cc @@ -510,12 +510,9 @@ void AddCrossUnitCastNoPreallocate(CastFunction* func) { std::shared_ptr GetDate32Cast() { auto func = std::make_shared("cast_date32", Type::DATE32); - const auto& out_ty = date32(); + auto out_ty = date32(); AddCommonCasts(Type::DATE32, out_ty, func.get()); - // date32 -> date32 - AddZeroCopyCast(Type::DATE32, date32(), date32(), func.get()); - // int32 -> date32 AddZeroCopyCast(Type::INT32, int32(), date32(), func.get()); @@ -535,12 +532,9 @@ std::shared_ptr GetDate32Cast() { std::shared_ptr GetDate64Cast() { auto func = std::make_shared("cast_date64", Type::DATE64); - const auto& out_ty = date64(); + auto out_ty = date64(); AddCommonCasts(Type::DATE64, out_ty, func.get()); - // date64 -> date64 - AddZeroCopyCast(Type::DATE64, date64(), date64(), func.get()); - // int64 -> date64 AddZeroCopyCast(Type::INT64, int64(), date64(), func.get()); diff --git a/cpp/src/arrow/compute/kernels/scalar_cast_test.cc b/cpp/src/arrow/compute/kernels/scalar_cast_test.cc index 140789e5966..a8acf68f66c 100644 --- a/cpp/src/arrow/compute/kernels/scalar_cast_test.cc +++ b/cpp/src/arrow/compute/kernels/scalar_cast_test.cc @@ -389,7 +389,7 @@ TEST(Cast, ToIntDowncastUnsafe) { } TEST(Cast, FloatingToInt) { - for (auto from : {float16(), float32(), float64()}) { + for (auto from : {float32(), float64()}) { for (auto to : {int32(), int64()}) { // float to int no truncation CheckCast(ArrayFromJSON(from, "[1.0, null, 0.0, -1.0, 5.0]"), @@ -407,15 +407,6 @@ TEST(Cast, FloatingToInt) { } } -TEST(Cast, FloatingToFloating) { - for (auto from : {float16(), float32(), float64()}) { - for (auto to : {float16(), float32(), float64()}) { - CheckCast(ArrayFromJSON(from, "[1.0, 0.0, -1.0, 5.0]"), - ArrayFromJSON(to, "[1.0, 0.0, -1.0, 5.0]")); - } - } -} - TEST(Cast, IntToFloating) { for (auto from : {uint32(), int32()}) { std::string two_24 = "[16777216, 16777217]"; @@ -1646,10 +1637,6 @@ TEST(Cast, DateToDate) { 86400000, 864000000])"); - // Zero copy - CheckCast(day_32, day_32); - CheckCast(day_64, day_64); - // Multiply promotion CheckCast(day_32, day_64); @@ -2200,33 +2187,6 @@ TEST(Cast, BinaryOrStringToFixedSizeBinary) { } } -TEST(Cast, FixedSizeBinaryToBinaryOrString) { - for (auto out_type : {utf8(), large_utf8(), binary(), large_binary()}) { - auto valid_input = ArrayFromJSON(fixed_size_binary(3), R"(["foo", null, "bar", - "baz", "quu"])"); - - CheckCast(valid_input, ArrayFromJSON(out_type, R"(["foo", null, "bar", "baz", - "quu"])")); - - auto empty_input = ArrayFromJSON(fixed_size_binary(3), "[]"); - CheckCast(empty_input, ArrayFromJSON(out_type, "[]")); - } -} - -TEST(Cast, FixedSizeBinaryToBinaryOrStringWithSlice) { - for (auto out_type : {utf8(), large_utf8(), binary(), large_binary()}) { - auto valid_input = ArrayFromJSON(fixed_size_binary(3), R"(["foo", null, "bar", - "baz", "quu"])"); - auto sliced = valid_input->Slice(1, 3); - CheckCast(sliced, ArrayFromJSON(out_type, R"([null, "bar", "baz"])")); - - auto valid_input_without_null = ArrayFromJSON(fixed_size_binary(3), R"(["foo", "bar", - "baz", "quu"])"); - auto sliced_without_null = valid_input_without_null->Slice(1, 3); - CheckCast(sliced_without_null, ArrayFromJSON(out_type, R"(["bar", "baz", "quu"])")); - } -} - TEST(Cast, IntToString) { for (auto string_type : {utf8(), large_utf8()}) { CheckCast(ArrayFromJSON(int8(), "[0, 1, 127, -128, null]"), @@ -2260,12 +2220,14 @@ TEST(Cast, IntToString) { } TEST(Cast, FloatingToString) { - for (auto float_type : {float16(), float32(), float64()}) { - for (auto string_type : {utf8(), large_utf8()}) { - CheckCast(ArrayFromJSON(float_type, "[0.0, -0.0, 1.5, -Inf, Inf, NaN, null]"), - ArrayFromJSON(string_type, - R"(["0", "-0", "1.5", "-inf", "inf", "nan", null])")); - } + for (auto string_type : {utf8(), large_utf8()}) { + CheckCast( + ArrayFromJSON(float32(), "[0.0, -0.0, 1.5, -Inf, Inf, NaN, null]"), + ArrayFromJSON(string_type, R"(["0", "-0", "1.5", "-inf", "inf", "nan", null])")); + + CheckCast( + ArrayFromJSON(float64(), "[0.0, -0.0, 1.5, -Inf, Inf, NaN, null]"), + ArrayFromJSON(string_type, R"(["0", "-0", "1.5", "-inf", "inf", "nan", null])")); } } @@ -2285,7 +2247,7 @@ TEST(Cast, ListToPrimitive) { Cast(*ArrayFromJSON(list(binary()), R"([["1", "2"], ["3", "4"]])"), utf8())); } -using make_list_t = std::shared_ptr(std::shared_ptr); +using make_list_t = std::shared_ptr(const std::shared_ptr&); static const auto list_factories = std::vector{&list, &large_list}; diff --git a/cpp/src/arrow/compute/kernels/scalar_compare.cc b/cpp/src/arrow/compute/kernels/scalar_compare.cc index 9b2fd987d81..daf8ed76d62 100644 --- a/cpp/src/arrow/compute/kernels/scalar_compare.cc +++ b/cpp/src/arrow/compute/kernels/scalar_compare.cc @@ -491,9 +491,8 @@ template struct ScalarMinMax { using OutValue = typename GetOutputType::T; - static Result> ExecScalar( - const ExecSpan& batch, const ElementWiseAggregateOptions& options, - std::shared_ptr type) { + static void ExecScalar(const ExecSpan& batch, + const ElementWiseAggregateOptions& options, Scalar* out) { // All arguments are scalar OutValue value{}; bool valid = false; @@ -503,8 +502,8 @@ struct ScalarMinMax { const Scalar& scalar = *arg.scalar; if (!scalar.is_valid) { if (options.skip_nulls) continue; - valid = false; - break; + out->is_valid = false; + return; } if (!valid) { value = UnboxScalar::Unbox(scalar); @@ -514,10 +513,9 @@ struct ScalarMinMax { value, UnboxScalar::Unbox(scalar)); } } + out->is_valid = valid; if (valid) { - return MakeScalar(std::move(type), std::move(value)); - } else { - return MakeNullScalar(std::move(type)); + BoxScalar::Box(value, out); } } @@ -539,7 +537,8 @@ struct ScalarMinMax { bool initialize_output = true; if (scalar_count > 0) { ARROW_ASSIGN_OR_RAISE(std::shared_ptr temp_scalar, - ExecScalar(batch, options, out->type()->GetSharedPtr())); + MakeScalar(out->type()->GetSharedPtr(), 0)); + ExecScalar(batch, options, temp_scalar.get()); if (temp_scalar->is_valid) { const auto value = UnboxScalar::Unbox(*temp_scalar); initialize_output = false; diff --git a/cpp/src/arrow/compute/kernels/scalar_if_else.cc b/cpp/src/arrow/compute/kernels/scalar_if_else.cc index 6368ef525ff..ee181c053c0 100644 --- a/cpp/src/arrow/compute/kernels/scalar_if_else.cc +++ b/cpp/src/arrow/compute/kernels/scalar_if_else.cc @@ -1309,10 +1309,9 @@ void AddFixedWidthIfElseKernel(const std::shared_ptr& scalar_fun } void AddNestedIfElseKernels(const std::shared_ptr& scalar_function) { - for (const auto type_id : - {Type::LIST, Type::LARGE_LIST, Type::LIST_VIEW, Type::LARGE_LIST_VIEW, - Type::FIXED_SIZE_LIST, Type::MAP, Type::STRUCT, Type::DENSE_UNION, - Type::SPARSE_UNION, Type::DICTIONARY}) { + for (const auto type_id : {Type::LIST, Type::LARGE_LIST, Type::LIST_VIEW, + Type::LARGE_LIST_VIEW, Type::FIXED_SIZE_LIST, Type::STRUCT, + Type::DENSE_UNION, Type::SPARSE_UNION, Type::DICTIONARY}) { ScalarKernel kernel({boolean(), InputType(type_id), InputType(type_id)}, LastType, NestedIfElseExec::Exec); kernel.null_handling = NullHandling::COMPUTED_NO_PREALLOCATE; @@ -1483,27 +1482,39 @@ Status ExecScalarCaseWhen(KernelContext* ctx, const ExecSpan& batch, ExecResult* result = temp.get(); } - // Only input types of non-fixed length (which cannot be pre-allocated) - // will save the output data in ArrayData. And make sure the FixedLength - // types must be output in ArraySpan. - static_assert(is_fixed_width(Type::type_id)); - DCHECK(out->is_array_span()); - - ArraySpan* output = out->array_span_mutable(); - if (is_dictionary_type::value) { - const ExecValue& dict_from = has_result ? result : batch[1]; - output->child_data.resize(1); - if (dict_from.is_scalar()) { - output->child_data[0].SetMembers( - *checked_cast(*dict_from.scalar) - .value.dictionary->data()); - } else { - output->child_data[0] = dict_from.array; + // TODO(wesm): clean this up to have less duplication + if (out->is_array_data()) { + ArrayData* output = out->array_data().get(); + if (is_dictionary_type::value) { + const ExecValue& dict_from = has_result ? result : batch[1]; + if (dict_from.is_scalar()) { + output->dictionary = checked_cast(*dict_from.scalar) + .value.dictionary->data(); + } else { + output->dictionary = dict_from.array.ToArrayData()->dictionary; + } } + CopyValues(result, /*in_offset=*/0, batch.length, + output->GetMutableValues(0, 0), + output->GetMutableValues(1, 0), output->offset); + } else { + // ArraySpan + ArraySpan* output = out->array_span_mutable(); + if (is_dictionary_type::value) { + const ExecValue& dict_from = has_result ? result : batch[1]; + output->child_data.resize(1); + if (dict_from.is_scalar()) { + output->child_data[0].SetMembers( + *checked_cast(*dict_from.scalar) + .value.dictionary->data()); + } else { + output->child_data[0] = dict_from.array; + } + } + CopyValues(result, /*in_offset=*/0, batch.length, + output->GetValues(0, 0), output->GetValues(1, 0), + output->offset); } - CopyValues(result, /*in_offset=*/0, batch.length, - output->GetValues(0, 0), output->GetValues(1, 0), - output->offset); return Status::OK(); } @@ -1836,48 +1847,6 @@ struct CaseWhenFunctor> { } }; -// TODO(GH-41453): a more efficient implementation for list-views is possible -template -struct CaseWhenFunctor> { - using offset_type = typename Type::offset_type; - using BuilderType = typename TypeTraits::BuilderType; - static Status Exec(KernelContext* ctx, const ExecSpan& batch, ExecResult* out) { - /// TODO(wesm): should this be a DCHECK? Or checked elsewhere - if (batch[0].null_count() > 0) { - return Status::Invalid("cond struct must not have outer nulls"); - } - if (batch[0].is_scalar()) { - return ExecVarWidthScalarCaseWhen(ctx, batch, out); - } - return ExecArray(ctx, batch, out); - } - - static Status ExecArray(KernelContext* ctx, const ExecSpan& batch, ExecResult* out) { - return ExecVarWidthArrayCaseWhen( - ctx, batch, out, - // ReserveData - [&](ArrayBuilder* raw_builder) { - auto builder = checked_cast(raw_builder); - auto child_builder = builder->value_builder(); - - int64_t reservation = 0; - for (int arg = 1; arg < batch.num_values(); arg++) { - const ExecValue& source = batch[arg]; - if (!source.is_array()) { - const auto& scalar = checked_cast(*source.scalar); - if (!scalar.value) continue; - reservation = - std::max(reservation, batch.length * scalar.value->length()); - } else { - const ArraySpan& array = source.array; - reservation = std::max(reservation, array.child_data[0].length); - } - } - return child_builder->Reserve(reservation); - }); - } -}; - // No-op reserve function, pulled out to avoid apparent miscompilation on MinGW Status ReserveNoData(ArrayBuilder*) { return Status::OK(); } @@ -2743,25 +2712,6 @@ void AddBinaryCaseWhenKernels(const std::shared_ptr& scalar_fu } } -template -void AddNestedCaseWhenKernel(const std::shared_ptr& scalar_function) { - AddCaseWhenKernel(scalar_function, ArrowNestedType::type_id, - CaseWhenFunctor::Exec); -} - -void AddNestedCaseWhenKernels(const std::shared_ptr& scalar_function) { - AddNestedCaseWhenKernel(scalar_function); - AddNestedCaseWhenKernel(scalar_function); - AddNestedCaseWhenKernel(scalar_function); - AddNestedCaseWhenKernel(scalar_function); - AddNestedCaseWhenKernel(scalar_function); - AddNestedCaseWhenKernel(scalar_function); - AddNestedCaseWhenKernel(scalar_function); - AddNestedCaseWhenKernel(scalar_function); - AddNestedCaseWhenKernel(scalar_function); - AddNestedCaseWhenKernel(scalar_function); -} - void AddCoalesceKernel(const std::shared_ptr& scalar_function, detail::GetTypeId get_id, ArrayKernelExec exec) { ScalarKernel kernel(KernelSignature::Make({InputType(get_id.id)}, FirstType, @@ -2781,25 +2731,6 @@ void AddPrimitiveCoalesceKernels(const std::shared_ptr& scalar_f } } -template -void AddNestedCoalesceKernel(const std::shared_ptr& scalar_function) { - AddCoalesceKernel(scalar_function, ArrowNestedType::type_id, - CoalesceFunctor::Exec); -} - -void AddNestedCoalesceKernels(const std::shared_ptr& scalar_function) { - AddNestedCoalesceKernel(scalar_function); - AddNestedCoalesceKernel(scalar_function); - AddNestedCoalesceKernel(scalar_function); - AddNestedCoalesceKernel(scalar_function); - AddNestedCoalesceKernel(scalar_function); - AddNestedCoalesceKernel(scalar_function); - AddNestedCoalesceKernel(scalar_function); - AddNestedCoalesceKernel(scalar_function); - AddNestedCoalesceKernel(scalar_function); - AddNestedCoalesceKernel(scalar_function); -} - void AddChooseKernel(const std::shared_ptr& scalar_function, detail::GetTypeId get_id, ArrayKernelExec exec) { ScalarKernel kernel(KernelSignature::Make({Type::INT64, InputType(get_id.id)}, LastType, @@ -2891,7 +2822,15 @@ void RegisterScalarIfElse(FunctionRegistry* registry) { AddCaseWhenKernel(func, Type::DECIMAL128, CaseWhenFunctor::Exec); AddCaseWhenKernel(func, Type::DECIMAL256, CaseWhenFunctor::Exec); AddBinaryCaseWhenKernels(func, BaseBinaryTypes()); - AddNestedCaseWhenKernels(func); + AddCaseWhenKernel(func, Type::FIXED_SIZE_LIST, + CaseWhenFunctor::Exec); + AddCaseWhenKernel(func, Type::LIST, CaseWhenFunctor::Exec); + AddCaseWhenKernel(func, Type::LARGE_LIST, CaseWhenFunctor::Exec); + AddCaseWhenKernel(func, Type::MAP, CaseWhenFunctor::Exec); + AddCaseWhenKernel(func, Type::STRUCT, CaseWhenFunctor::Exec); + AddCaseWhenKernel(func, Type::DENSE_UNION, CaseWhenFunctor::Exec); + AddCaseWhenKernel(func, Type::SPARSE_UNION, CaseWhenFunctor::Exec); + AddCaseWhenKernel(func, Type::DICTIONARY, CaseWhenFunctor::Exec); DCHECK_OK(registry->AddFunction(std::move(func))); } { @@ -2909,7 +2848,15 @@ void RegisterScalarIfElse(FunctionRegistry* registry) { for (const auto& ty : BaseBinaryTypes()) { AddCoalesceKernel(func, ty, GenerateTypeAgnosticVarBinaryBase(ty)); } - AddNestedCoalesceKernels(func); + AddCoalesceKernel(func, Type::FIXED_SIZE_LIST, + CoalesceFunctor::Exec); + AddCoalesceKernel(func, Type::LIST, CoalesceFunctor::Exec); + AddCoalesceKernel(func, Type::LARGE_LIST, CoalesceFunctor::Exec); + AddCoalesceKernel(func, Type::MAP, CoalesceFunctor::Exec); + AddCoalesceKernel(func, Type::STRUCT, CoalesceFunctor::Exec); + AddCoalesceKernel(func, Type::DENSE_UNION, CoalesceFunctor::Exec); + AddCoalesceKernel(func, Type::SPARSE_UNION, CoalesceFunctor::Exec); + AddCoalesceKernel(func, Type::DICTIONARY, CoalesceFunctor::Exec); DCHECK_OK(registry->AddFunction(std::move(func))); } { diff --git a/cpp/src/arrow/compute/kernels/scalar_if_else_benchmark.cc b/cpp/src/arrow/compute/kernels/scalar_if_else_benchmark.cc index 5988908853d..58bc560f528 100644 --- a/cpp/src/arrow/compute/kernels/scalar_if_else_benchmark.cc +++ b/cpp/src/arrow/compute/kernels/scalar_if_else_benchmark.cc @@ -284,11 +284,8 @@ static void CaseWhenBench(benchmark::State& state) { state.SetItemsProcessed(state.iterations() * (len - offset)); } -template -static void CaseWhenBenchList(benchmark::State& state, - const std::shared_ptr& type) { - using ArrayType = typename TypeTraits::ArrayType; - +static void CaseWhenBenchList(benchmark::State& state) { + auto type = list(int64()); auto fld = field("", type); int64_t len = state.range(0); @@ -298,17 +295,17 @@ static void CaseWhenBenchList(benchmark::State& state, auto cond_field = field("cond", boolean(), key_value_metadata({{"null_probability", "0.01"}})); - auto cond = std::static_pointer_cast( - rand.ArrayOf(*field("", struct_({cond_field, cond_field, cond_field}), - key_value_metadata({{"null_probability", "0.0"}})), - len)) - ->Slice(offset); - auto val1 = std::static_pointer_cast(rand.ArrayOf(*fld, len))->Slice(offset); - auto val2 = std::static_pointer_cast(rand.ArrayOf(*fld, len))->Slice(offset); - auto val3 = std::static_pointer_cast(rand.ArrayOf(*fld, len))->Slice(offset); - auto val4 = std::static_pointer_cast(rand.ArrayOf(*fld, len))->Slice(offset); + auto cond = rand.ArrayOf(*field("", struct_({cond_field, cond_field, cond_field}), + key_value_metadata({{"null_probability", "0.0"}})), + len); + auto val1 = rand.ArrayOf(*fld, len); + auto val2 = rand.ArrayOf(*fld, len); + auto val3 = rand.ArrayOf(*fld, len); + auto val4 = rand.ArrayOf(*fld, len); for (auto _ : state) { - ABORT_NOT_OK(CaseWhen(cond, {val1, val2, val3, val4})); + ABORT_NOT_OK( + CaseWhen(cond->Slice(offset), {val1->Slice(offset), val2->Slice(offset), + val3->Slice(offset), val4->Slice(offset)})); } // Set bytes processed to ~length of output @@ -375,21 +372,6 @@ static void CaseWhenBenchStringContiguous(benchmark::State& state) { return CaseWhenBenchContiguous(state); } -template -static void CaseWhenBenchVarLengthListLike(benchmark::State& state) { - auto value_type = TypeTraits::type_singleton(); - auto list_type = std::make_shared(value_type); - return CaseWhenBenchList(state, list_type); -} - -static void CaseWhenBenchListInt64(benchmark::State& state) { - return CaseWhenBenchVarLengthListLike(state); -} - -static void CaseWhenBenchListViewInt64(benchmark::State& state) { - CaseWhenBenchVarLengthListLike(state); -} - struct CoalesceParams { int64_t length; int64_t num_arguments; @@ -551,11 +533,9 @@ BENCHMARK(CaseWhenBench64)->Args({kNumItems, 99}); BENCHMARK(CaseWhenBench64Contiguous)->Args({kNumItems, 0}); BENCHMARK(CaseWhenBench64Contiguous)->Args({kNumItems, 99}); -// CaseWhen: List-like types -BENCHMARK(CaseWhenBenchListInt64)->Args({kFewItems, 0}); -BENCHMARK(CaseWhenBenchListInt64)->Args({kFewItems, 99}); -BENCHMARK(CaseWhenBenchListViewInt64)->Args({kFewItems, 0}); -BENCHMARK(CaseWhenBenchListViewInt64)->Args({kFewItems, 99}); +// CaseWhen: Lists +BENCHMARK(CaseWhenBenchList)->Args({kFewItems, 0}); +BENCHMARK(CaseWhenBenchList)->Args({kFewItems, 99}); // CaseWhen: Strings BENCHMARK(CaseWhenBenchString)->Args({kFewItems, 0}); diff --git a/cpp/src/arrow/compute/kernels/scalar_if_else_test.cc b/cpp/src/arrow/compute/kernels/scalar_if_else_test.cc index 9a0ca325277..c4c46b5efe8 100644 --- a/cpp/src/arrow/compute/kernels/scalar_if_else_test.cc +++ b/cpp/src/arrow/compute/kernels/scalar_if_else_test.cc @@ -896,21 +896,6 @@ TEST_F(TestIfElseKernel, ParameterizedTypes) { {cond, ArrayFromJSON(type0, "[0]"), ArrayFromJSON(type1, "[1]")})); } -TEST_F(TestIfElseKernel, MapNested) { - auto type = map(int64(), utf8()); - CheckWithDifferentShapes( - ArrayFromJSON(boolean(), "[true, true, false, false]"), - ArrayFromJSON(type, R"([null, [[2, "foo"], [4, null]], [[3, "test"]], []])"), - ArrayFromJSON(type, R"([[[1, "b"]], [[2, "c"]], [[7, "abc"]], null])"), - ArrayFromJSON(type, R"([null, [[2, "foo"], [4, null]], [[7, "abc"]], null])")); - - CheckWithDifferentShapes( - ArrayFromJSON(boolean(), "[null, null, null, null]"), - ArrayFromJSON(type, R"([null, [[1, "c"]], [[4, null]], [[6, "ok"]]])"), - ArrayFromJSON(type, R"([[[-1, null]], [[3, "c"]], null, [[6, "ok"]]])"), - ArrayFromJSON(type, R"([null, null, null, null])")); -} - template class TestIfElseUnion : public ::testing::Test {}; @@ -1935,7 +1920,7 @@ TYPED_TEST(TestCaseWhenBinary, Random) { template class TestCaseWhenList : public ::testing::Test {}; -TYPED_TEST_SUITE(TestCaseWhenList, ListAndListViewArrowTypes); +TYPED_TEST_SUITE(TestCaseWhenList, ListArrowTypes); TYPED_TEST(TestCaseWhenList, ListOfString) { auto type = std::make_shared(utf8()); @@ -2570,7 +2555,7 @@ class TestCoalesceList : public ::testing::Test {}; TYPED_TEST_SUITE(TestCoalesceNumeric, IfElseNumericBasedTypes); TYPED_TEST_SUITE(TestCoalesceBinary, BaseBinaryArrowTypes); -TYPED_TEST_SUITE(TestCoalesceList, ListAndListViewArrowTypes); +TYPED_TEST_SUITE(TestCoalesceList, ListArrowTypes); TYPED_TEST(TestCoalesceNumeric, Basics) { auto type = default_type_instance(); diff --git a/cpp/src/arrow/compute/kernels/scalar_list_benchmark.cc b/cpp/src/arrow/compute/kernels/scalar_list_benchmark.cc deleted file mode 100644 index 8c5b43d55f7..00000000000 --- a/cpp/src/arrow/compute/kernels/scalar_list_benchmark.cc +++ /dev/null @@ -1,153 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -#include -#include -#include - -#include "arrow/compute/api_scalar.h" -#include "arrow/compute/exec.h" -#include "arrow/testing/gtest_util.h" -#include "arrow/testing/random.h" -#include "arrow/util/benchmark_util.h" -#include "benchmark/benchmark.h" - -namespace arrow::compute { - -constexpr auto kSeed = 0x94378165; - -const auto kSliceStart = 2; -const auto kSliceStop = 10; - -static void BenchmarkListSlice(benchmark::State& state, const ListSliceOptions& opts, - std::shared_ptr list_ty) { - RegressionArgs args(state, /*size_is_bytes=*/false); - auto rand = random::RandomArrayGenerator(kSeed); - auto array = rand.ArrayOf(std::move(list_ty), args.size, args.null_proportion); - auto ctx = default_exec_context(); - std::vector input_args = {std::move(array)}; - for (auto _ : state) { - ABORT_NOT_OK(CallFunction("list_slice", input_args, &opts, ctx).status()); - } -} - -template -static void ListSliceInt64List(benchmark::State& state) { - ListSliceOptions opts; - opts.start = kSliceStart; - BenchmarkListSlice(state, opts, std::make_shared(int64())); -} - -template -static void ListSliceStringList(benchmark::State& state) { - ListSliceOptions opts; - opts.start = kSliceStart; - BenchmarkListSlice(state, opts, std::make_shared(utf8())); -} - -template -static void ListSliceInt64ListWithStop(benchmark::State& state) { - ListSliceOptions opts; - opts.start = kSliceStart; - opts.stop = kSliceStop; - BenchmarkListSlice(state, opts, std::make_shared(int64())); -} - -template -static void ListSliceStringListWithStop(benchmark::State& state) { - ListSliceOptions opts; - opts.start = kSliceStart; - opts.stop = kSliceStop; - BenchmarkListSlice(state, opts, std::make_shared(utf8())); -} - -template -static void ListSliceInt64ListWithStepAndStop(benchmark::State& state) { - ListSliceOptions opts; - opts.start = kSliceStart; - opts.step = 2; - opts.stop = kSliceStop; - BenchmarkListSlice(state, opts, std::make_shared(int64())); -} - -template -static void ListSliceStringListWithStepAndStop(benchmark::State& state) { - ListSliceOptions opts; - opts.start = kSliceStart; - opts.step = 2; - opts.stop = kSliceStop; - BenchmarkListSlice(state, opts, std::make_shared(utf8())); -} - -static void ListSliceInt64ListView(benchmark::State& state) { - ListSliceInt64List(state); -} - -static void ListSliceStringListView(benchmark::State& state) { - ListSliceStringList(state); -} - -static void ListSliceInt64ListViewWithStop(benchmark::State& state) { - ListSliceInt64ListWithStop(state); -} - -static void ListSliceStringListViewWithStop(benchmark::State& state) { - ListSliceStringListWithStop(state); -} - -static void ListSliceInt64ListViewWithStepAndStop(benchmark::State& state) { - ListSliceInt64ListWithStepAndStop(state); -} - -static void ListSliceStringListViewWithStepAndStop(benchmark::State& state) { - ListSliceStringListWithStepAndStop(state); -} - -static void ListSliceInt64ListToFSL(benchmark::State& state) { - ListSliceOptions opts; - opts.start = kSliceStart; - opts.stop = kSliceStop; - opts.return_fixed_size_list = true; - BenchmarkListSlice(state, opts, std::make_shared(int64())); -} - -static void ListSliceStringListToFSL(benchmark::State& state) { - ListSliceOptions opts; - opts.start = kSliceStart; - opts.stop = kSliceStop; - opts.return_fixed_size_list = true; - BenchmarkListSlice(state, opts, std::make_shared(utf8())); -} - -BENCHMARK(ListSliceInt64List)->Apply(RegressionSetArgs); -BENCHMARK(ListSliceStringList)->Apply(RegressionSetArgs); -BENCHMARK(ListSliceInt64ListWithStop)->Apply(RegressionSetArgs); -BENCHMARK(ListSliceStringListWithStop)->Apply(RegressionSetArgs); -BENCHMARK(ListSliceInt64ListWithStepAndStop)->Apply(RegressionSetArgs); -BENCHMARK(ListSliceStringListWithStepAndStop)->Apply(RegressionSetArgs); - -BENCHMARK(ListSliceInt64ListView)->Apply(RegressionSetArgs); -BENCHMARK(ListSliceStringListView)->Apply(RegressionSetArgs); -BENCHMARK(ListSliceInt64ListViewWithStop)->Apply(RegressionSetArgs); -BENCHMARK(ListSliceStringListViewWithStop)->Apply(RegressionSetArgs); -BENCHMARK(ListSliceInt64ListViewWithStepAndStop)->Apply(RegressionSetArgs); -BENCHMARK(ListSliceStringListViewWithStepAndStop)->Apply(RegressionSetArgs); - -BENCHMARK(ListSliceInt64ListToFSL)->Apply(RegressionSetArgs); -BENCHMARK(ListSliceStringListToFSL)->Apply(RegressionSetArgs); - -} // namespace arrow::compute diff --git a/cpp/src/arrow/compute/kernels/scalar_nested.cc b/cpp/src/arrow/compute/kernels/scalar_nested.cc index 71e367153d9..733ab9c0dc2 100644 --- a/cpp/src/arrow/compute/kernels/scalar_nested.cc +++ b/cpp/src/arrow/compute/kernels/scalar_nested.cc @@ -23,12 +23,10 @@ #include "arrow/compute/api_scalar.h" #include "arrow/compute/kernels/common_internal.h" #include "arrow/result.h" -#include "arrow/type_fwd.h" #include "arrow/util/bit_block_counter.h" #include "arrow/util/bit_util.h" #include "arrow/util/bitmap_generate.h" #include "arrow/util/string.h" -#include "arrow/util/unreachable.h" namespace arrow { @@ -43,17 +41,10 @@ Status ListValueLength(KernelContext* ctx, const ExecSpan& batch, ExecResult* ou const ArraySpan& arr = batch[0].array; ArraySpan* out_arr = out->array_span_mutable(); auto out_values = out_arr->GetValues(1); - if (is_list_view(*arr.type)) { - const auto* sizes = arr.GetValues(2); - if (arr.length > 0) { - memcpy(out_values, sizes, arr.length * sizeof(offset_type)); - } - } else { - const offset_type* offsets = arr.GetValues(1); - // Offsets are always well-defined and monotonic, even for null values - for (int64_t i = 0; i < arr.length; ++i) { - *out_values++ = offsets[i + 1] - offsets[i]; - } + const offset_type* offsets = arr.GetValues(1); + // Offsets are always well-defined and monotonic, even for null values + for (int64_t i = 0; i < arr.length; ++i) { + *out_values++ = offsets[i + 1] - offsets[i]; } return Status::OK(); } @@ -68,30 +59,6 @@ Status FixedSizeListValueLength(KernelContext* ctx, const ExecSpan& batch, return Status::OK(); } -template -void AddListValueLengthKernel(ScalarFunction* func, - const std::shared_ptr& out_type) { - auto in_type = {InputType(InListType::type_id)}; - ScalarKernel kernel(in_type, out_type, ListValueLength); - DCHECK_OK(func->AddKernel(std::move(kernel))); -} - -template <> -void AddListValueLengthKernel( - ScalarFunction* func, const std::shared_ptr& out_type) { - auto in_type = {InputType(Type::FIXED_SIZE_LIST)}; - ScalarKernel kernel(in_type, out_type, FixedSizeListValueLength); - DCHECK_OK(func->AddKernel(std::move(kernel))); -} - -void AddListValueLengthKernels(ScalarFunction* func) { - AddListValueLengthKernel(func, int32()); - AddListValueLengthKernel(func, int64()); - AddListValueLengthKernel(func, int32()); - AddListValueLengthKernel(func, int64()); - AddListValueLengthKernel(func, int32()); -} - const FunctionDoc list_value_length_doc{ "Compute list lengths", ("`lists` must have a list-like type.\n" @@ -131,56 +98,14 @@ std::string ToString(const std::optional& o) { return o.has_value() ? ToChars(*o) : "(nullopt)"; } -/// \param stop User-provided stop or the length of the input list -int64_t ListSliceLength(int64_t start, int64_t step, int64_t stop) { - DCHECK_GE(step, 1); - const auto size = std::max(stop - start, 0); - return bit_util::CeilDiv(size, step); -} - -std::optional EffectiveSliceStop(const ListSliceOptions& opts, - const BaseListType& input_type) { - if (!opts.stop.has_value() && input_type.id() == Type::FIXED_SIZE_LIST) { - return checked_cast(input_type).list_size(); - } - return opts.stop; -} - -Result ListSliceOutputType(const ListSliceOptions& opts, - const BaseListType& input_list_type) { - const auto& value_type = input_list_type.field(0); - const bool is_fixed_size_list = input_list_type.id() == Type::FIXED_SIZE_LIST; - const auto return_fixed_size_list = - opts.return_fixed_size_list.value_or(is_fixed_size_list); - if (return_fixed_size_list) { - auto stop = EffectiveSliceStop(opts, input_list_type); - if (!stop.has_value()) { - return Status::Invalid( - "Unable to produce FixedSizeListArray from non-FixedSizeListArray without " - "`stop` being set."); - } - if (opts.step < 1) { - return Status::Invalid("`step` must be >= 1, got: ", opts.step); - } - const auto length = ListSliceLength(opts.start, opts.step, *stop); - return fixed_size_list(value_type, static_cast(length)); - } - if (is_fixed_size_list) { - return list(value_type); - } - return TypeHolder{&input_list_type}; -} - -template +template struct ListSlice { - using offset_type = typename InListType::offset_type; + using offset_type = typename Type::offset_type; static Status Exec(KernelContext* ctx, const ExecSpan& batch, ExecResult* out) { - const auto& opts = OptionsWrapper::Get(ctx); - const ArraySpan& list_array = batch[0].array; - const auto* list_type = checked_cast(list_array.type); + const auto opts = OptionsWrapper::Get(ctx); - // Pre-conditions + // Invariants if (opts.start < 0 || (opts.stop.has_value() && opts.start >= opts.stop.value())) { // TODO(ARROW-18281): support start == stop which should give empty lists return Status::Invalid("`start`(", opts.start, @@ -191,201 +116,128 @@ struct ListSlice { return Status::Invalid("`step` must be >= 1, got: ", opts.step); } - auto* pool = ctx->memory_pool(); - ARROW_ASSIGN_OR_RAISE(auto output_type_holder, ListSliceOutputType(opts, *list_type)); - constexpr auto kInputTypeId = InListType::type_id; - auto output_type = output_type_holder.GetSharedPtr(); - switch (output_type->id()) { - // The various `if constexpr` guards below avoid generating - // ListSlice::BuildArray specializations - // that will never be invoked at runtime. - case Type::LIST: - DCHECK(kInputTypeId == Type::LIST || kInputTypeId == Type::FIXED_SIZE_LIST); - if constexpr (kInputTypeId == Type::LIST || - kInputTypeId == Type::FIXED_SIZE_LIST) { - return BuildArray(pool, opts, batch, output_type, out); - } - break; - case Type::LARGE_LIST: - DCHECK_EQ(kInputTypeId, Type::LARGE_LIST); - if constexpr (kInputTypeId == Type::LARGE_LIST) { - return BuildArray(pool, opts, batch, output_type, out); - } - break; - case Type::FIXED_SIZE_LIST: - // A fixed-size list can be produced from any list-like input - // if ListSliceOptions::return_fixed_size_list is set to true - return BuildArray(pool, opts, batch, output_type, out); - case Type::LIST_VIEW: - DCHECK_EQ(kInputTypeId, Type::LIST_VIEW); - if constexpr (kInputTypeId == Type::LIST_VIEW) { - return BuildArray(pool, opts, batch, output_type, out); - } - break; - case Type::LARGE_LIST_VIEW: - DCHECK_EQ(kInputTypeId, Type::LARGE_LIST_VIEW); - if constexpr (kInputTypeId == Type::LARGE_LIST_VIEW) { - return BuildArray(pool, opts, batch, output_type, out); - } - break; - default: - break; + const ArraySpan& list_array = batch[0].array; + const Type* list_type = checked_cast(list_array.type); + const auto value_type = list_type->field(0); + const auto return_fixed_size_list = opts.return_fixed_size_list.value_or( + list_type->id() == arrow::Type::FIXED_SIZE_LIST); + std::unique_ptr builder; + + // should have been checked in resolver + // if stop not set, then cannot return fixed size list without input being fixed size + // list b/c we cannot determine the max list element in type resolving. + DCHECK(opts.stop.has_value() || + (!opts.stop.has_value() && (!return_fixed_size_list || + list_type->id() == arrow::Type::FIXED_SIZE_LIST))); + + // construct array values + if (return_fixed_size_list) { + int32_t stop; + if (opts.stop.has_value()) { + stop = static_cast(opts.stop.value()); + } else { + DCHECK_EQ(list_type->id(), arrow::Type::FIXED_SIZE_LIST); + stop = reinterpret_cast(list_type)->list_size(); + } + const auto size = std::max(stop - static_cast(opts.start), 0); + const auto length = bit_util::CeilDiv(size, opts.step); + RETURN_NOT_OK(MakeBuilder(ctx->memory_pool(), + fixed_size_list(value_type, static_cast(length)), + &builder)); + RETURN_NOT_OK(BuildArray(batch, opts, *builder)); + } else { + if constexpr (std::is_same_v) { + RETURN_NOT_OK(MakeBuilder(ctx->memory_pool(), large_list(value_type), &builder)); + RETURN_NOT_OK(BuildArray(batch, opts, *builder)); + } else { + RETURN_NOT_OK(MakeBuilder(ctx->memory_pool(), list(value_type), &builder)); + RETURN_NOT_OK(BuildArray(batch, opts, *builder)); + } } - Unreachable(); + + // build output arrays and set result + ARROW_ASSIGN_OR_RAISE(auto result, builder->Finish()); + out->value = std::move(result->data()); return Status::OK(); } - /// \brief Builds the array of list slices from the input list array template - static Status BuildArray(MemoryPool* pool, const ListSliceOptions& opts, - const ExecSpan& batch, - const std::shared_ptr& output_type, - ExecResult* out) { - std::unique_ptr builder; - RETURN_NOT_OK(MakeBuilder(pool, output_type, &builder)); - auto* list_builder = checked_cast(builder.get()); - RETURN_NOT_OK(list_builder->Resize(batch[0].array.length)); - if constexpr (std::is_same_v) { - RETURN_NOT_OK(BuildArrayFromFixedSizeListType(opts.start, opts.step, opts.stop, - batch, list_builder)); + static Status BuildArray(const ExecSpan& batch, const ListSliceOptions& opts, + ArrayBuilder& builder) { + if constexpr (std::is_same_v) { + RETURN_NOT_OK(BuildArrayFromFixedSizeListType(batch, opts, builder)); } else { - RETURN_NOT_OK(BuildArrayFromVarLenListLikeType(opts.start, opts.step, opts.stop, - batch, list_builder)); + RETURN_NOT_OK(BuildArrayFromListType(batch, opts, builder)); } - std::shared_ptr result; - RETURN_NOT_OK(list_builder->FinishInternal(&result)); - out->value = std::move(result); return Status::OK(); } template - static Status BuildArrayFromFixedSizeListType(int64_t start, int64_t step, - std::optional stop, - const ExecSpan& batch, - BuilderType* out_list_builder) { - static_assert(std::is_same_v); - constexpr bool kIsFixedSizeOutput = std::is_same_v; - const auto& fsl_type = checked_cast(*batch[0].type()); + static Status BuildArrayFromFixedSizeListType(const ExecSpan& batch, + const ListSliceOptions& opts, + ArrayBuilder& builder) { + const auto list_size = + checked_cast(*batch[0].type()).list_size(); const ArraySpan& list_array = batch[0].array; - const ArraySpan& values_array = list_array.child_data[0]; - ArrayBuilder* value_builder = out_list_builder->value_builder(); - - auto* is_valid = list_array.GetValues(0, 0); - const auto list_size = static_cast(fsl_type.list_size()); - const int64_t effective_stop = stop.value_or(list_size); - int64_t slice_length, value_count; - int64_t null_padding = 0; - if constexpr (kIsFixedSizeOutput) { - if (list_size < effective_stop) { - slice_length = ListSliceLength(start, step, effective_stop); - value_count = ListSliceLength(start, step, list_size); - DCHECK_LE(value_count, slice_length); - null_padding = slice_length - value_count; - } else { - slice_length = ListSliceLength(start, step, effective_stop); - value_count = slice_length; - } - } else { - slice_length = ListSliceLength(start, step, std::min(list_size, effective_stop)); - value_count = slice_length; - } - int64_t offset = list_array.offset * list_size; - for (int64_t i = 0; i < list_array.length; ++i) { - if (is_valid && !bit_util::GetBit(is_valid, list_array.offset + i)) { - RETURN_NOT_OK(out_list_builder->AppendNull()); + const ArraySpan& list_values = list_array.child_data[0]; + + auto list_builder = checked_cast(&builder); + for (auto i = 0; i < list_array.length; ++i) { + auto offset = (i + list_array.offset) * list_size; + auto next_offset = offset + list_size; + if (list_array.IsNull(i)) { + RETURN_NOT_OK(list_builder->AppendNull()); } else { - int64_t start_offset = offset + start; - RETURN_NOT_OK(AppendListSliceDimensions(slice_length, - out_list_builder)); - RETURN_NOT_OK(AppendListSliceValues(start_offset, step, value_count, null_padding, - values_array, value_builder)); + RETURN_NOT_OK(SetValues(list_builder, offset, next_offset, &opts, + &list_values)); } - offset += list_size; } return Status::OK(); } template - static Status BuildArrayFromVarLenListLikeType(int64_t start, int64_t step, - std::optional stop, - const ExecSpan& batch, - BuilderType* out_list_builder) { - constexpr bool kIsListViewInput = is_list_view(InListType::type_id); - constexpr bool kIsFixedSizeOutput = std::is_same_v; + static Status BuildArrayFromListType(const ExecSpan& batch, + const ListSliceOptions& opts, + ArrayBuilder& builder) { const ArraySpan& list_array = batch[0].array; - const ArraySpan& values_array = list_array.child_data[0]; - ArrayBuilder* value_builder = out_list_builder->value_builder(); - - const auto* is_valid = list_array.GetValues(0, 0); - const auto* offsets = list_array.GetValues(1); - const offset_type* sizes = nullptr; - if constexpr (kIsListViewInput) { - sizes = list_array.GetValues(2); - } - for (int64_t i = 0; i < list_array.length; ++i) { + const offset_type* offsets = list_array.GetValues(1); + + const ArraySpan& list_values = list_array.child_data[0]; + + auto list_builder = checked_cast(&builder); + for (auto i = 0; i < list_array.length; ++i) { const offset_type offset = offsets[i]; - const int64_t list_size = kIsListViewInput ? sizes[i] : offsets[i + 1] - offset; - if (is_valid && !bit_util::GetBit(is_valid, list_array.offset + i)) { - RETURN_NOT_OK(out_list_builder->AppendNull()); + const offset_type next_offset = offsets[i + 1]; + if (list_array.IsNull(i)) { + RETURN_NOT_OK(list_builder->AppendNull()); } else { - int64_t effective_stop = stop.value_or(list_size); - int64_t slice_length, value_count; - int64_t null_padding = 0; - if constexpr (kIsFixedSizeOutput) { - if (list_size < effective_stop) { - slice_length = ListSliceLength(start, step, effective_stop); - value_count = ListSliceLength(start, step, list_size); - DCHECK_LE(value_count, slice_length); - null_padding = slice_length - value_count; - } else { - slice_length = ListSliceLength(start, step, effective_stop); - value_count = slice_length; - } - } else { - slice_length = - ListSliceLength(start, step, std::min(list_size, effective_stop)); - value_count = slice_length; - } - RETURN_NOT_OK(AppendListSliceDimensions(slice_length, - out_list_builder)); - RETURN_NOT_OK(AppendListSliceValues(offset + start, step, value_count, - null_padding, values_array, value_builder)); + RETURN_NOT_OK(SetValues(list_builder, offset, next_offset, &opts, + &list_values)); } } return Status::OK(); } - - template - static Status AppendListSliceDimensions(int64_t slice_length, - BuilderType* out_list_builder) { - if constexpr (kIsFixedSizeOutput) { - DCHECK_EQ(out_list_builder->type()->id(), Type::FIXED_SIZE_LIST); - return out_list_builder->Append(); - } else { - return out_list_builder->Append(/*is_valid=*/true, slice_length); - } - } - - /// \param value_count The pre-validated number of values to append starting - /// from `start_offset` with a step of `step` - /// \param null_padding The number of nulls to append after the values - static Status AppendListSliceValues(int64_t start_offset, int64_t step, - int64_t value_count, int64_t null_padding, - const ArraySpan& values_array, - ArrayBuilder* out_value_builder) { - if (step == 1) { - RETURN_NOT_OK( - out_value_builder->AppendArraySlice(values_array, start_offset, value_count)); - } else { - auto cursor_offset = start_offset; - for (int64_t i = 0; i < value_count; i++) { + template + static Status SetValues(BuilderType* list_builder, const offset_type offset, + const offset_type next_offset, const ListSliceOptions* opts, + const ArraySpan* list_values) { + auto value_builder = list_builder->value_builder(); + auto cursor = offset; + + RETURN_NOT_OK(list_builder->Append()); + const auto size = opts->stop.has_value() ? (opts->stop.value() - opts->start) + : ((next_offset - opts->start) - offset); + while (cursor < offset + size) { + if (cursor + opts->start >= next_offset) { + if constexpr (!std::is_same_v) { + break; // don't pad nulls for variable sized list output + } + RETURN_NOT_OK(value_builder->AppendNull()); + } else { RETURN_NOT_OK( - out_value_builder->AppendArraySlice(values_array, cursor_offset, 1)); - cursor_offset += step; + value_builder->AppendArraySlice(*list_values, cursor + opts->start, 1)); } - } - if (null_padding > 0) { - RETURN_NOT_OK(out_value_builder->AppendNulls(null_padding)); + cursor += static_cast(opts->step); } return Status::OK(); } @@ -394,8 +246,36 @@ struct ListSlice { Result MakeListSliceResolve(KernelContext* ctx, const std::vector& types) { const auto& opts = OptionsWrapper::Get(ctx); - const auto* list_type = checked_cast(types[0].type); - return ListSliceOutputType(opts, *list_type); + const auto list_type = checked_cast(types[0].type); + const auto value_type = list_type->field(0); + const auto return_fixed_size_list = + opts.return_fixed_size_list.value_or(list_type->id() == Type::FIXED_SIZE_LIST); + if (return_fixed_size_list) { + int32_t stop; + if (!opts.stop.has_value()) { + if (list_type->id() == Type::FIXED_SIZE_LIST) { + stop = checked_cast(list_type)->list_size(); + } else { + return Status::NotImplemented( + "Unable to produce FixedSizeListArray from non-FixedSizeListArray without " + "`stop` being set."); + } + } else { + stop = static_cast(opts.stop.value()); + } + const auto size = std::max(static_cast(stop - opts.start), 0); + if (opts.step < 1) { + return Status::Invalid("`step` must be >= 1, got: ", opts.step); + } + const auto length = bit_util::CeilDiv(size, opts.step); + return fixed_size_list(value_type, static_cast(length)); + } else { + // Returning large list if that's what we got in and didn't ask for fixed size + if (list_type->id() == Type::LARGE_LIST) { + return large_list(value_type); + } + return list(value_type); + } } template @@ -413,8 +293,6 @@ void AddListSliceKernels(ScalarFunction* func) { AddListSliceKernels(func); AddListSliceKernels(func); AddListSliceKernels(func); - AddListSliceKernels(func); - AddListSliceKernels(func); } const FunctionDoc list_slice_doc( @@ -521,8 +399,6 @@ void AddListElementKernels(ScalarFunction* func) { void AddListElementKernels(ScalarFunction* func) { AddListElementKernels(func); AddListElementKernels(func); - AddListElementKernels(func); - AddListElementKernels(func); AddListElementKernels(func); } @@ -948,7 +824,12 @@ const FunctionDoc map_lookup_doc{ void RegisterScalarNested(FunctionRegistry* registry) { auto list_value_length = std::make_shared( "list_value_length", Arity::Unary(), list_value_length_doc); - AddListValueLengthKernels(list_value_length.get()); + DCHECK_OK(list_value_length->AddKernel({InputType(Type::LIST)}, int32(), + ListValueLength)); + DCHECK_OK(list_value_length->AddKernel({InputType(Type::FIXED_SIZE_LIST)}, int32(), + FixedSizeListValueLength)); + DCHECK_OK(list_value_length->AddKernel({InputType(Type::LARGE_LIST)}, int64(), + ListValueLength)); DCHECK_OK(registry->AddFunction(std::move(list_value_length))); auto list_element = diff --git a/cpp/src/arrow/compute/kernels/scalar_nested_test.cc b/cpp/src/arrow/compute/kernels/scalar_nested_test.cc index b6a6cac1b43..a72ec99620b 100644 --- a/cpp/src/arrow/compute/kernels/scalar_nested_test.cc +++ b/cpp/src/arrow/compute/kernels/scalar_nested_test.cc @@ -30,21 +30,11 @@ namespace arrow { namespace compute { static std::shared_ptr GetOffsetType(const DataType& type) { - switch (type.id()) { - case Type::LIST: - case Type::LIST_VIEW: - return int32(); - case Type::LARGE_LIST: - case Type::LARGE_LIST_VIEW: - return int64(); - default: - Unreachable("Unexpected type"); - } + return type.id() == Type::LIST ? int32() : int64(); } TEST(TestScalarNested, ListValueLength) { - for (auto ty : {list(int32()), large_list(int32()), list_view(int32()), - large_list_view(int32())}) { + for (auto ty : {list(int32()), large_list(int32())}) { CheckScalarUnary("list_value_length", ty, "[[0, null, 1], null, [2, 3], []]", GetOffsetType(*ty), "[3, null, 2, 0]"); } @@ -57,8 +47,7 @@ TEST(TestScalarNested, ListValueLength) { TEST(TestScalarNested, ListElementNonFixedListWithNulls) { auto sample = "[[7, 5, 81], [6, null, 4, 7, 8], [3, 12, 2, 0], [1, 9], null]"; for (auto ty : NumericTypes()) { - for (auto list_type : - {list(ty), large_list(ty), list_view(ty), large_list_view(ty)}) { + for (auto list_type : {list(ty), large_list(ty)}) { auto input = ArrayFromJSON(list_type, sample); auto null_input = ArrayFromJSON(list_type, "[null]"); for (auto index_type : IntTypes()) { @@ -128,45 +117,33 @@ TEST(TestScalarNested, ListElementInvalid) { Raises(StatusCode::Invalid)); } -using VarLenListLikeTypeFactory = - std::shared_ptr (*)(std::shared_ptr); -static const VarLenListLikeTypeFactory kVarLenListTypeFactories[] = { - list, - large_list, - list_view, - large_list_view, -}; - TEST(TestScalarNested, ListSliceVariableOutput) { const auto value_types = {float32(), int32()}; for (auto value_type : value_types) { - for (auto list_type_factory : kVarLenListTypeFactories) { - ListSliceOptions args(/*start=*/0, /*stop=*/2, /*step=*/1, - /*return_fixed_size_list=*/false); - auto list_ty = list_type_factory(value_type); - auto input = ArrayFromJSON(list_ty, "[[1, 2, 3], [4, 5], [6], null]"); - auto expected = ArrayFromJSON(list_ty, "[[1, 2], [4, 5], [6], null]"); - CheckScalarUnary("list_slice", input, expected, &args); + auto input = ArrayFromJSON(list(value_type), "[[1, 2, 3], [4, 5], [6], null]"); + ListSliceOptions args(/*start=*/0, /*stop=*/2, /*step=*/1, + /*return_fixed_size_list=*/false); + auto expected = ArrayFromJSON(list(value_type), "[[1, 2], [4, 5], [6], null]"); + CheckScalarUnary("list_slice", input, expected, &args); - args.start = 1; - expected = ArrayFromJSON(list_ty, "[[2], [5], [], null]"); - CheckScalarUnary("list_slice", input, expected, &args); + args.start = 1; + expected = ArrayFromJSON(list(value_type), "[[2], [5], [], null]"); + CheckScalarUnary("list_slice", input, expected, &args); - args.start = 2; - args.stop = 4; - expected = ArrayFromJSON(list_ty, "[[3], [], [], null]"); - CheckScalarUnary("list_slice", input, expected, &args); + args.start = 2; + args.stop = 4; + expected = ArrayFromJSON(list(value_type), "[[3], [], [], null]"); + CheckScalarUnary("list_slice", input, expected, &args); - args.start = 1; - args.stop = std::nullopt; - expected = ArrayFromJSON(list_ty, "[[2, 3], [5], [], null]"); - CheckScalarUnary("list_slice", input, expected, &args); + args.start = 1; + args.stop = std::nullopt; + expected = ArrayFromJSON(list(value_type), "[[2, 3], [5], [], null]"); + CheckScalarUnary("list_slice", input, expected, &args); - args.start = 0; - args.stop = 4; - args.step = 2; - expected = ArrayFromJSON(list_ty, "[[1, 3], [4], [6], null]"); - } + args.start = 0; + args.stop = 4; + args.step = 2; + expected = ArrayFromJSON(list(value_type), "[[1, 3], [4], [6], null]"); } // Verify passing `return_fixed_size_list=false` with fixed size input @@ -181,13 +158,9 @@ TEST(TestScalarNested, ListSliceVariableOutput) { TEST(TestScalarNested, ListSliceFixedOutput) { const auto value_types = {float32(), int32()}; for (auto value_type : value_types) { - const char* kVarLenListJSON = "[[1, 2, 3], [4, 5], [6], null]"; - const char* kFixedSizeListJSON = "[[1, 2, 3], [4, 5, null], [6, null, null], null]"; - std::vector> inputs; - for (auto list_type_factory : kVarLenListTypeFactories) { - inputs.push_back(ArrayFromJSON(list_type_factory(value_type), kVarLenListJSON)); - } - inputs.push_back(ArrayFromJSON(fixed_size_list(value_type, 3), kFixedSizeListJSON)); + auto inputs = {ArrayFromJSON(list(value_type), "[[1, 2, 3], [4, 5], [6], null]"), + ArrayFromJSON(fixed_size_list(value_type, 3), + "[[1, 2, 3], [4, 5, null], [6, null, null], null]")}; for (auto input : inputs) { ListSliceOptions args(/*start=*/0, /*stop=*/2, /*step=*/1, /*return_fixed_size_list=*/true); @@ -214,7 +187,7 @@ TEST(TestScalarNested, ListSliceFixedOutput) { CheckScalarUnary("list_slice", input, expected, &args); } else { EXPECT_RAISES_WITH_MESSAGE_THAT( - Invalid, + NotImplemented, ::testing::HasSubstr("Unable to produce FixedSizeListArray from " "non-FixedSizeListArray without `stop` being set."), CallFunction("list_slice", {input}, &args)); @@ -280,25 +253,22 @@ TEST(TestScalarNested, ListSliceChildArrayOffset) { ASSERT_EQ(input->offset(), 0); ASSERT_EQ(input->values()->offset(), 2); - ListSliceOptions args(/*start=*/0, /*stop=*/3, /*step=*/1, + ListSliceOptions args(/*start=*/0, /*stop=*/2, /*step=*/1, /*return_fixed_size_list=*/false); auto expected = ArrayFromJSON(list(int8()), "[[2], [3, 4]]"); CheckScalarUnary("list_slice", input, expected, &args); args.return_fixed_size_list = true; - expected = ArrayFromJSON(fixed_size_list(int8(), 3), "[[2, null, null], [3, 4, null]]"); + expected = ArrayFromJSON(fixed_size_list(int8(), 2), "[[2, null], [3, 4]]"); CheckScalarUnary("list_slice", input, expected, &args); } TEST(TestScalarNested, ListSliceOutputEqualsInputType) { - const char* kVarLenListJSON = "[[1, 2, 3], [4, 5], [6, null], null]"; - const char* kFixedLenListJSON = "[[1, 2], [4, 5], [6, null], null]"; // Default is to return same type as the one passed in. - std::vector> inputs; - for (auto list_type_factory : kVarLenListTypeFactories) { - inputs.push_back(ArrayFromJSON(list_type_factory(int8()), kVarLenListJSON)); - } - inputs.push_back(ArrayFromJSON(fixed_size_list(int8(), 2), kFixedLenListJSON)); + auto inputs = { + ArrayFromJSON(list(int8()), "[[1, 2, 3], [4, 5], [6, null], null]"), + ArrayFromJSON(large_list(int8()), "[[1, 2, 3], [4, 5], [6, null], null]"), + ArrayFromJSON(fixed_size_list(int8(), 2), "[[1, 2], [4, 5], [6, null], null]")}; for (auto input : inputs) { ListSliceOptions args(/*start=*/0, /*stop=*/2, /*step=*/1); auto expected = ArrayFromJSON(input->type(), "[[1, 2], [4, 5], [6, null], null]"); @@ -335,9 +305,10 @@ TEST(TestScalarNested, ListSliceBadParameters) { // stop not set and FixedSizeList requested with variable sized input args.stop = std::nullopt; EXPECT_RAISES_WITH_MESSAGE_THAT( - Invalid, - ::testing::HasSubstr("Invalid: Unable to produce FixedSizeListArray from " - "non-FixedSizeListArray without `stop` being set."), + NotImplemented, + ::testing::HasSubstr("NotImplemented: Unable to produce FixedSizeListArray from " + "non-FixedSizeListArray without " + "`stop` being set."), CallFunction("list_slice", {input}, &args)); // Catch step must be >= 1 args.start = 0; diff --git a/cpp/src/arrow/compute/kernels/scalar_random.cc b/cpp/src/arrow/compute/kernels/scalar_random.cc index 517cf068673..608f7630213 100644 --- a/cpp/src/arrow/compute/kernels/scalar_random.cc +++ b/cpp/src/arrow/compute/kernels/scalar_random.cc @@ -87,8 +87,8 @@ const FunctionDoc random_doc{ void RegisterScalarRandom(FunctionRegistry* registry) { static auto random_options = RandomOptions::Defaults(); - auto random_func = std::make_shared( - "random", Arity::Nullary(), random_doc, &random_options, /*is_pure=*/false); + auto random_func = std::make_shared("random", Arity::Nullary(), + random_doc, &random_options); ScalarKernel kernel{{}, float64(), ExecRandom, RandomState::Init}; kernel.null_handling = NullHandling::OUTPUT_NOT_NULL; DCHECK_OK(random_func->AddKernel(kernel)); diff --git a/cpp/src/arrow/compute/kernels/scalar_string_ascii.cc b/cpp/src/arrow/compute/kernels/scalar_string_ascii.cc index fecd57412b4..8fdc6172aa6 100644 --- a/cpp/src/arrow/compute/kernels/scalar_string_ascii.cc +++ b/cpp/src/arrow/compute/kernels/scalar_string_ascii.cc @@ -21,18 +21,17 @@ #include #include +#ifdef ARROW_WITH_RE2 +#include +#endif + #include "arrow/array/builder_nested.h" #include "arrow/compute/kernels/scalar_string_internal.h" #include "arrow/result.h" -#include "arrow/util/config.h" #include "arrow/util/macros.h" #include "arrow/util/string.h" #include "arrow/util/value_parsing.h" -#ifdef ARROW_WITH_RE2 -#include -#endif - namespace arrow { using internal::EndsWith; @@ -1142,13 +1141,9 @@ struct AsciiPadTransform : public StringTransformBase { int64_t left = 0; int64_t right = 0; if (PadLeft && PadRight) { - if (options_.lean_left_on_odd_padding) { - left = spaces / 2; - right = spaces - left; - } else { - right = spaces / 2; - left = spaces - right; - } + // If odd number of spaces, put the extra space on the right + left = spaces / 2; + right = spaces - left; } else if (PadLeft) { left = spaces; } else if (PadRight) { @@ -1319,7 +1314,7 @@ struct RegexSubstringMatcher { const MatchSubstringOptions& options, bool is_utf8 = true, bool literal = false) { auto matcher = std::make_unique(options, is_utf8, literal); RETURN_NOT_OK(RegexStatus(matcher->regex_match_)); - return matcher; + return std::move(matcher); } explicit RegexSubstringMatcher(const MatchSubstringOptions& options, @@ -1689,7 +1684,7 @@ struct FindSubstringRegex { bool is_utf8 = true, bool literal = false) { auto matcher = FindSubstringRegex(options, is_utf8, literal); RETURN_NOT_OK(RegexStatus(*matcher.regex_match_)); - return matcher; + return std::move(matcher); } explicit FindSubstringRegex(const MatchSubstringOptions& options, bool is_utf8 = true, @@ -1836,7 +1831,7 @@ struct CountSubstringRegex { bool is_utf8 = true, bool literal = false) { CountSubstringRegex counter(options, is_utf8, literal); RETURN_NOT_OK(RegexStatus(*counter.regex_match_)); - return counter; + return std::move(counter); } template @@ -2059,7 +2054,7 @@ struct RegexSubstringReplacer { std::move(replacement_error)); } - return replacer; + return std::move(replacer); } // Using RE2::FindAndConsume we can only find the pattern if it is a group, therefore @@ -2207,7 +2202,7 @@ struct ExtractRegexData { } data.group_names.emplace_back(item->second); } - return data; + return std::move(data); } Result ResolveOutputType(const std::vector& types) const { diff --git a/cpp/src/arrow/compute/kernels/scalar_string_benchmark.cc b/cpp/src/arrow/compute/kernels/scalar_string_benchmark.cc index 909c89dbe47..0977ea7806c 100644 --- a/cpp/src/arrow/compute/kernels/scalar_string_benchmark.cc +++ b/cpp/src/arrow/compute/kernels/scalar_string_benchmark.cc @@ -25,7 +25,6 @@ #include "arrow/testing/random.h" #include "arrow/util/benchmark_util.h" #include "arrow/util/checked_cast.h" -#include "arrow/util/config.h" namespace arrow { diff --git a/cpp/src/arrow/compute/kernels/scalar_string_test.cc b/cpp/src/arrow/compute/kernels/scalar_string_test.cc index 0a226129084..d7e35d07334 100644 --- a/cpp/src/arrow/compute/kernels/scalar_string_test.cc +++ b/cpp/src/arrow/compute/kernels/scalar_string_test.cc @@ -23,6 +23,10 @@ #include #include +#ifdef ARROW_WITH_UTF8PROC +#include +#endif + #include "arrow/compute/api_scalar.h" #include "arrow/compute/exec.h" #include "arrow/compute/kernels/codegen_internal.h" @@ -30,13 +34,8 @@ #include "arrow/testing/gtest_util.h" #include "arrow/type.h" #include "arrow/type_fwd.h" -#include "arrow/util/config.h" #include "arrow/util/value_parsing.h" -#ifdef ARROW_WITH_UTF8PROC -#include -#endif - namespace arrow::compute { // interesting utf8 characters for testing (lower case / upper case): @@ -1988,11 +1987,6 @@ TYPED_TEST(TestBaseBinaryKernels, ExtractRegexInvalid) { #endif TYPED_TEST(TestStringKernels, Strptime) { -#ifdef __EMSCRIPTEN__ - GTEST_SKIP() << "Skipping some strptime tests due to emscripten bug " - "https://github.com/emscripten-core/emscripten/issues/20466"; -#endif - std::string input1 = R"(["5/1/2020", null, null, "12/13/1900", null])"; std::string input2 = R"(["5-1-2020", "12/13/1900"])"; std::string input3 = R"(["5/1/2020", "AA/BB/CCCC"])"; @@ -2013,7 +2007,6 @@ TYPED_TEST(TestStringKernels, Strptime) { this->CheckUnary("strptime", input4, unit, output4, &options); options.format = "%m/%d/%Y %%z"; - // emscripten bug https://github.com/emscripten-core/emscripten/issues/20466 this->CheckUnary("strptime", input5, unit, output1, &options); options.error_is_null = false; @@ -2025,11 +2018,6 @@ TYPED_TEST(TestStringKernels, Strptime) { } TYPED_TEST(TestStringKernels, StrptimeZoneOffset) { -#ifdef __EMSCRIPTEN__ - GTEST_SKIP() - << "Emscripten bug https://github.com/emscripten-core/emscripten/issues/20467"; -#endif - if (!arrow::internal::kStrptimeSupportsZone) { GTEST_SKIP() << "strptime does not support %z on this platform"; } @@ -2117,12 +2105,6 @@ TYPED_TEST(TestStringKernels, PadUTF8) { R"([null, "a\u2008\u2008\u2008\u2008", "bb\u2008\u2008\u2008", "b\u00E1r\u2008\u2008", "foobar"])", &options); - PadOptions options2{/*width=*/5, "\xe2\x80\x88", /*lean_left_on_odd_padding=*/false}; - this->CheckUnary( - "utf8_center", R"([null, "a", "bb", "b\u00E1r", "foobar"])", this->type(), - R"([null, "\u2008\u2008a\u2008\u2008", "\u2008\u2008bb\u2008", "\u2008b\u00E1r\u2008", "foobar"])", - &options2); - PadOptions options_bad{/*width=*/3, /*padding=*/"spam"}; auto input = ArrayFromJSON(this->type(), R"(["foo"])"); EXPECT_RAISES_WITH_MESSAGE_THAT(Invalid, @@ -2465,10 +2447,6 @@ TYPED_TEST(TestStringKernels, PadAscii) { this->CheckUnary("ascii_rpad", R"([null, "a", "bb", "bar", "foobar"])", this->type(), R"([null, "a ", "bb ", "bar ", "foobar"])", &options); - PadOptions options2{/*width=*/5, " ", /*lean_left_on_odd_padding=*/false}; - this->CheckUnary("ascii_center", R"([null, "a", "bb", "bar", "foobar"])", this->type(), - R"([null, " a ", " bb ", " bar ", "foobar"])", &options2); - PadOptions options_bad{/*width=*/3, /*padding=*/"spam"}; auto input = ArrayFromJSON(this->type(), R"(["foo"])"); EXPECT_RAISES_WITH_MESSAGE_THAT(Invalid, diff --git a/cpp/src/arrow/compute/kernels/scalar_string_utf8.cc b/cpp/src/arrow/compute/kernels/scalar_string_utf8.cc index 42762ca8b11..cf8a697fea4 100644 --- a/cpp/src/arrow/compute/kernels/scalar_string_utf8.cc +++ b/cpp/src/arrow/compute/kernels/scalar_string_utf8.cc @@ -19,14 +19,13 @@ #include #include -#include "arrow/compute/kernels/scalar_string_internal.h" -#include "arrow/util/config.h" -#include "arrow/util/utf8_internal.h" - #ifdef ARROW_WITH_UTF8PROC #include #endif +#include "arrow/compute/kernels/scalar_string_internal.h" +#include "arrow/util/utf8_internal.h" + namespace arrow { namespace compute { namespace internal { @@ -930,13 +929,9 @@ struct Utf8PadTransform : public StringTransformBase { int64_t left = 0; int64_t right = 0; if (PadLeft && PadRight) { - if (options_.lean_left_on_odd_padding) { - left = spaces / 2; - right = spaces - left; - } else { - right = spaces / 2; - left = spaces - right; - } + // If odd number of spaces, put the extra space on the right + left = spaces / 2; + right = spaces - left; } else if (PadLeft) { left = spaces; } else if (PadRight) { diff --git a/cpp/src/arrow/compute/kernels/scalar_temporal_test.cc b/cpp/src/arrow/compute/kernels/scalar_temporal_test.cc index 8da8c760ea2..8dac6525fe2 100644 --- a/cpp/src/arrow/compute/kernels/scalar_temporal_test.cc +++ b/cpp/src/arrow/compute/kernels/scalar_temporal_test.cc @@ -2143,10 +2143,7 @@ TEST_F(ScalarTemporalTest, StrftimeCLocale) { TEST_F(ScalarTemporalTest, StrftimeOtherLocale) { #ifdef _WIN32 GTEST_SKIP() << "There is a known bug in strftime for locales on Windows (ARROW-15922)"; -#elif defined(__EMSCRIPTEN__) - GTEST_SKIP() << "Emscripten doesn't build with multiple locales as default"; -#endif - +#else if (!LocaleExists("fr_FR.UTF-8")) { GTEST_SKIP() << "locale 'fr_FR.UTF-8' doesn't exist on this system"; } @@ -2158,12 +2155,10 @@ TEST_F(ScalarTemporalTest, StrftimeOtherLocale) { ["01 janvier 1970 00:00:59,123", "18 août 2021 15:11:50,456", null])"; CheckScalarUnary("strftime", timestamp(TimeUnit::MILLI, "UTC"), milliseconds, utf8(), expected, &options); +#endif } TEST_F(ScalarTemporalTest, StrftimeInvalidLocale) { -#ifdef __EMSCRIPTEN__ - GTEST_SKIP() << "Emscripten doesn't build with multiple locales as default"; -#endif auto options = StrftimeOptions("%d %B %Y %H:%M:%S", "nonexistent"); const char* seconds = R"(["1970-01-01T00:00:59", null])"; auto arr = ArrayFromJSON(timestamp(TimeUnit::SECOND, "UTC"), seconds); diff --git a/cpp/src/arrow/compute/kernels/scalar_temporal_unary.cc b/cpp/src/arrow/compute/kernels/scalar_temporal_unary.cc index 35b1deb3cda..f49e201492c 100644 --- a/cpp/src/arrow/compute/kernels/scalar_temporal_unary.cc +++ b/cpp/src/arrow/compute/kernels/scalar_temporal_unary.cc @@ -1741,7 +1741,7 @@ const FunctionDoc millisecond_doc{ const FunctionDoc microsecond_doc{ "Extract microsecond values", - ("Microsecond returns number of microseconds since the last full millisecond.\n" + ("Millisecond returns number of microseconds since the last full millisecond.\n" "Null values emit null.\n" "An error is returned if the values have a defined timezone but it\n" "cannot be found in the timezone database."), diff --git a/cpp/src/arrow/compute/kernels/test_util.cc b/cpp/src/arrow/compute/kernels/test_util.cc index 2217787663a..23d0fd18d57 100644 --- a/cpp/src/arrow/compute/kernels/test_util.cc +++ b/cpp/src/arrow/compute/kernels/test_util.cc @@ -31,7 +31,6 @@ #include "arrow/datum.h" #include "arrow/result.h" #include "arrow/table.h" -#include "arrow/testing/fixed_width_test_util.h" #include "arrow/testing/gtest_util.h" namespace arrow { diff --git a/cpp/src/arrow/compute/kernels/vector_hash.cc b/cpp/src/arrow/compute/kernels/vector_hash.cc index 50672988581..800deba3a5e 100644 --- a/cpp/src/arrow/compute/kernels/vector_hash.cc +++ b/cpp/src/arrow/compute/kernels/vector_hash.cc @@ -530,8 +530,7 @@ Result> HashInit(KernelContext* ctx, auto result = std::make_unique(args.inputs[0].GetSharedPtr(), args.options, ctx->memory_pool()); RETURN_NOT_OK(result->Reset()); - // R build with openSUSE155 requires an explicit unique_ptr construction - return std::unique_ptr(std::move(result)); + return std::move(result); } template @@ -698,12 +697,13 @@ void AddHashKernels(VectorFunction* func, VectorKernel base, OutputType out_ty) DCHECK_OK(func->AddKernel(base)); } - // Parametric types that we want matching to be dependent only on type id - auto parametric_types = {Type::TIME32, Type::TIME64, Type::TIMESTAMP, Type::DURATION, - Type::FIXED_SIZE_BINARY}; - for (const auto& type_id : parametric_types) { - base.init = GetHashInit(type_id); - base.signature = KernelSignature::Make({type_id}, out_ty); + // Example parametric types that we want to match only on Type::type + auto parametric_types = {time32(TimeUnit::SECOND), time64(TimeUnit::MICRO), + timestamp(TimeUnit::SECOND), duration(TimeUnit::SECOND), + fixed_size_binary(0)}; + for (const auto& ty : parametric_types) { + base.init = GetHashInit(ty->id()); + base.signature = KernelSignature::Make({ty->id()}, out_ty); DCHECK_OK(func->AddKernel(base)); } diff --git a/cpp/src/arrow/compute/kernels/vector_hash_benchmark.cc b/cpp/src/arrow/compute/kernels/vector_hash_benchmark.cc index 3200f7a469a..472f50db8cf 100644 --- a/cpp/src/arrow/compute/kernels/vector_hash_benchmark.cc +++ b/cpp/src/arrow/compute/kernels/vector_hash_benchmark.cc @@ -87,23 +87,32 @@ struct HashBenchCase { double null_probability; }; -template +template struct HashParams { - using CType = typename TypeTraits::CType; + using T = typename Type::c_type; + HashBenchCase params; void GenerateTestData(std::shared_ptr* arr) const { - random::RandomArrayGenerator rand(0); - auto min = static_cast(0); - auto max = static_cast(params.num_unique); - - *arr = rand.Numeric(params.length, min, max, params.null_probability); + std::vector draws; + std::vector values; + std::vector is_valid; + randint(params.length, 0, params.num_unique, &draws); + for (int64_t draw : draws) { + values.push_back(static_cast(draw)); + } + if (params.null_probability > 0) { + random_is_valid(params.length, params.null_probability, &is_valid); + ArrayFromVector(is_valid, values, arr); + } else { + ArrayFromVector(values, arr); + } } void SetMetadata(benchmark::State& state) const { state.counters["null_percent"] = params.null_probability * 100; state.counters["num_unique"] = static_cast(params.num_unique); - state.SetBytesProcessed(state.iterations() * params.length * sizeof(CType)); + state.SetBytesProcessed(state.iterations() * params.length * sizeof(T)); state.SetItemsProcessed(state.iterations() * params.length); } }; @@ -113,10 +122,29 @@ struct HashParams { HashBenchCase params; int32_t byte_width; void GenerateTestData(std::shared_ptr* arr) const { - random::RandomArrayGenerator rnd(/*seed=*/0); - *arr = rnd.StringWithRepeats( - params.length, params.num_unique, /*min_length=*/this->byte_width, - /*max_length=*/this->byte_width, params.null_probability); + std::vector draws; + randint(params.length, 0, params.num_unique, &draws); + + const int64_t total_bytes = this->byte_width * params.num_unique; + std::vector uniques(total_bytes); + const uint32_t seed = 0; + random_bytes(total_bytes, seed, uniques.data()); + + std::vector is_valid; + if (params.null_probability > 0) { + random_is_valid(params.length, params.null_probability, &is_valid); + } + + StringBuilder builder; + for (int64_t i = 0; i < params.length; ++i) { + if (params.null_probability == 0 || is_valid[i]) { + ABORT_NOT_OK(builder.Append(uniques.data() + this->byte_width * draws[i], + this->byte_width)); + } else { + ABORT_NOT_OK(builder.AppendNull()); + } + } + ABORT_NOT_OK(builder.Finish(arr)); } void SetMetadata(benchmark::State& state) const { diff --git a/cpp/src/arrow/compute/kernels/vector_nested.cc b/cpp/src/arrow/compute/kernels/vector_nested.cc index 955f9b8cbd1..08930e589f7 100644 --- a/cpp/src/arrow/compute/kernels/vector_nested.cc +++ b/cpp/src/arrow/compute/kernels/vector_nested.cc @@ -18,32 +18,19 @@ // Vector kernels involving nested types #include "arrow/array/array_base.h" -#include "arrow/compute/api_vector.h" #include "arrow/compute/kernels/common_internal.h" #include "arrow/result.h" -#include "arrow/util/bit_run_reader.h" -#include "arrow/util/bit_util.h" -#include "arrow/util/list_util.h" #include "arrow/visit_type_inline.h" namespace arrow { - -using internal::CountSetBits; -using list_util::internal::RangeOfValuesUsed; - namespace compute { namespace internal { namespace { template Status ListFlatten(KernelContext* ctx, const ExecSpan& batch, ExecResult* out) { - auto recursive = OptionsWrapper::Get(ctx).recursive; typename TypeTraits::ArrayType list_array(batch[0].array.ToArrayData()); - - auto pool = ctx->memory_pool(); - ARROW_ASSIGN_OR_RAISE(auto result, (recursive ? list_array.FlattenRecursively(pool) - : list_array.Flatten(pool))); - + ARROW_ASSIGN_OR_RAISE(auto result, list_array.Flatten(ctx->memory_pool())); out->value = std::move(result->data()); return Status::OK(); } @@ -83,63 +70,6 @@ struct ListParentIndicesArray { Status Visit(const LargeListType& type) { return VisitList(type); } - template - Status VisitListView(const Type&) { - ArraySpan list_view{*input}; - - const offset_type* offsets = list_view.GetValues(1); - const offset_type* sizes = list_view.GetValues(2); - int64_t values_offset; - int64_t values_length; - ARROW_ASSIGN_OR_RAISE(std::tie(values_offset, values_length), - RangeOfValuesUsed(list_view)); - - ARROW_ASSIGN_OR_RAISE(auto indices_validity, - AllocateEmptyBitmap(values_length, ctx->memory_pool())); - auto* out_indices_validity = indices_validity->mutable_data(); - int64_t total_pop_count = 0; - - ARROW_ASSIGN_OR_RAISE(auto indices, ctx->Allocate(values_length * sizeof(int64_t))); - auto* out_indices = indices->template mutable_data_as(); - memset(out_indices, -1, values_length * sizeof(int64_t)); - - const auto* validity = list_view.GetValues(0, 0); - RETURN_NOT_OK(arrow::internal::VisitSetBitRuns( - validity, list_view.offset, list_view.length, - [this, offsets, sizes, out_indices, out_indices_validity, values_offset, - &total_pop_count](int64_t run_start, int64_t run_length) { - for (int64_t i = run_start; i < run_start + run_length; ++i) { - auto validity_offset = offsets[i] - values_offset; - const int64_t pop_count = - CountSetBits(out_indices_validity, validity_offset, sizes[i]); - if (ARROW_PREDICT_FALSE(pop_count > 0)) { - return Status::Invalid( - "Function 'list_parent_indices' cannot produce parent indices for " - "values used by more than one list-view array element."); - } - bit_util::SetBitmap(out_indices_validity, validity_offset, sizes[i]); - total_pop_count += sizes[i]; - for (auto j = static_cast(offsets[i]); - j < static_cast(offsets[i]) + sizes[i]; ++j) { - out_indices[j - values_offset] = i + base_output_offset; - } - } - return Status::OK(); - })); - - DCHECK_LE(total_pop_count, values_length); - const int64_t null_count = values_length - total_pop_count; - BufferVector buffers{null_count > 0 ? std::move(indices_validity) : nullptr, - std::move(indices)}; - out = std::make_shared(int64(), values_length, std::move(buffers), - null_count); - return Status::OK(); - } - - Status Visit(const ListViewType& type) { return VisitListView(type); } - - Status Visit(const LargeListViewType& type) { return VisitListView(type); } - Status Visit(const FixedSizeListType& type) { using offset_type = typename FixedSizeListType::offset_type; const offset_type slot_length = type.list_size(); @@ -177,19 +107,14 @@ struct ListParentIndicesArray { const FunctionDoc list_flatten_doc( "Flatten list values", - ("`lists` must have a list-like type (lists, list-views, and\n" - "fixed-size lists).\n" - "Return an array with the top list level flattened unless\n" - "`recursive` is set to true in ListFlattenOptions. When that\n" - "is that case, flattening happens recursively until a non-list\n" - "array is formed.\n" - "\n" - "Null list values do not emit anything to the output."), - {"lists"}, "ListFlattenOptions"); + ("`lists` must have a list-like type.\n" + "Return an array with the top list level flattened.\n" + "Top-level null values in `lists` do not emit anything in the input."), + {"lists"}); const FunctionDoc list_parent_indices_doc( "Compute parent indices of nested list values", - ("`lists` must have a list-like or list-view type.\n" + ("`lists` must have a list-like type.\n" "For each value in each list of `lists`, the top-level list index\n" "is emitted."), {"lists"}); @@ -211,7 +136,6 @@ class ListParentIndicesFunction : public MetaFunction { int64_t base_output_offset = 0; ArrayVector out_chunks; - out_chunks.reserve(input->num_chunks()); for (const auto& chunk : input->chunks()) { ARROW_ASSIGN_OR_RAISE(auto out_chunk, ListParentIndicesArray::Exec(&kernel_ctx, chunk->data(), @@ -229,34 +153,17 @@ class ListParentIndicesFunction : public MetaFunction { } }; -const ListFlattenOptions* GetDefaultListFlattenOptions() { - static const auto kDefaultListFlattenOptions = ListFlattenOptions::Defaults(); - return &kDefaultListFlattenOptions; -} - -template -void AddBaseListFlattenKernels(VectorFunction* func) { - auto in_type = {InputType(InListType::type_id)}; - auto out_type = OutputType(ListValuesType); - VectorKernel kernel(in_type, out_type, ListFlatten, - OptionsWrapper::Init); - DCHECK_OK(func->AddKernel(std::move(kernel))); -} - -void AddBaseListFlattenKernels(VectorFunction* func) { - AddBaseListFlattenKernels(func); - AddBaseListFlattenKernels(func); - AddBaseListFlattenKernels(func); - AddBaseListFlattenKernels(func); - AddBaseListFlattenKernels(func); -} - } // namespace void RegisterVectorNested(FunctionRegistry* registry) { - auto flatten = std::make_shared( - "list_flatten", Arity::Unary(), list_flatten_doc, GetDefaultListFlattenOptions()); - AddBaseListFlattenKernels(flatten.get()); + auto flatten = + std::make_shared("list_flatten", Arity::Unary(), list_flatten_doc); + DCHECK_OK(flatten->AddKernel({Type::LIST}, OutputType(ListValuesType), + ListFlatten)); + DCHECK_OK(flatten->AddKernel({Type::FIXED_SIZE_LIST}, OutputType(ListValuesType), + ListFlatten)); + DCHECK_OK(flatten->AddKernel({Type::LARGE_LIST}, OutputType(ListValuesType), + ListFlatten)); DCHECK_OK(registry->AddFunction(std::move(flatten))); DCHECK_OK(registry->AddFunction(std::make_shared())); diff --git a/cpp/src/arrow/compute/kernels/vector_nested_test.cc b/cpp/src/arrow/compute/kernels/vector_nested_test.cc index da751fa5de4..eef1b6835ff 100644 --- a/cpp/src/arrow/compute/kernels/vector_nested_test.cc +++ b/cpp/src/arrow/compute/kernels/vector_nested_test.cc @@ -19,7 +19,6 @@ #include "arrow/chunked_array.h" #include "arrow/compute/api.h" -#include "arrow/compute/api_vector.h" #include "arrow/compute/kernels/test_util.h" #include "arrow/result.h" #include "arrow/testing/gtest_util.h" @@ -30,113 +29,38 @@ namespace compute { using arrow::internal::checked_cast; -using ListAndListViewTypes = - ::testing::Types; - -// ---------------------------------------------------------------------- -// [Large]List and [Large]ListView tests -template -class TestVectorNestedSpecialized : public ::testing::Test { - public: - using TypeClass = T; - - void SetUp() override { - value_type_ = int16(); - type_ = std::make_shared(value_type_); - } - - public: - void TestListFlatten() { - auto input = ArrayFromJSON(type_, "[[0, null, 1], null, [2, 3], []]"); - auto expected = ArrayFromJSON(value_type_, "[0, null, 1, 2, 3]"); +TEST(TestVectorNested, ListFlatten) { + for (auto ty : {list(int16()), large_list(int16())}) { + auto input = ArrayFromJSON(ty, "[[0, null, 1], null, [2, 3], []]"); + auto expected = ArrayFromJSON(int16(), "[0, null, 1, 2, 3]"); CheckVectorUnary("list_flatten", input, expected); // Construct a list with a non-empty null slot auto tweaked = TweakValidityBit(input, 0, false); - expected = ArrayFromJSON(value_type_, "[2, 3]"); + expected = ArrayFromJSON(int16(), "[2, 3]"); CheckVectorUnary("list_flatten", tweaked, expected); } +} - void TestListFlattenNulls() { - value_type_ = int32(); - type_ = std::make_shared(value_type_); - auto input = ArrayFromJSON(type_, "[null, null]"); - auto expected = ArrayFromJSON(value_type_, "[]"); - CheckVectorUnary("list_flatten", input, expected); - } +TEST(TestVectorNested, ListFlattenNulls) { + const auto ty = list(int32()); + auto input = ArrayFromJSON(ty, "[null, null]"); + auto expected = ArrayFromJSON(int32(), "[]"); + CheckVectorUnary("list_flatten", input, expected); +} - void TestListFlattenChunkedArray() { - ARROW_SCOPED_TRACE(type_->ToString()); - auto input = ChunkedArrayFromJSON(type_, {"[[0, null, 1], null]", "[[2, 3], []]"}); - auto expected = ChunkedArrayFromJSON(value_type_, {"[0, null, 1]", "[2, 3]"}); +TEST(TestVectorNested, ListFlattenChunkedArray) { + for (auto ty : {list(int16()), large_list(int16())}) { + ARROW_SCOPED_TRACE(ty->ToString()); + auto input = ChunkedArrayFromJSON(ty, {"[[0, null, 1], null]", "[[2, 3], []]"}); + auto expected = ChunkedArrayFromJSON(int16(), {"[0, null, 1]", "[2, 3]"}); CheckVectorUnary("list_flatten", input, expected); ARROW_SCOPED_TRACE("empty"); - input = ChunkedArrayFromJSON(type_, {}); - expected = ChunkedArrayFromJSON(value_type_, {}); + input = ChunkedArrayFromJSON(ty, {}); + expected = ChunkedArrayFromJSON(int16(), {}); CheckVectorUnary("list_flatten", input, expected); } - - void TestListFlattenRecursively() { - auto inner_type = std::make_shared(value_type_); - type_ = std::make_shared(inner_type); - - ListFlattenOptions opts; - opts.recursive = true; - - // List types with two nesting levels: list> - auto input = ArrayFromJSON(type_, R"([ - [[0, 1, 2], null, [3, null]], - [null], - [[2, 9], [4], [], [6, 5]] - ])"); - auto expected = ArrayFromJSON(value_type_, "[0, 1, 2, 3, null, 2, 9, 4, 6, 5]"); - CheckVectorUnary("list_flatten", input, expected, &opts); - - // Empty nested list should flatten until non-list type is reached - input = ArrayFromJSON(type_, R"([null])"); - expected = ArrayFromJSON(value_type_, "[]"); - CheckVectorUnary("list_flatten", input, expected, &opts); - - // List types with three nesting levels: list>> - type_ = std::make_shared(std::make_shared(fixed_size_list(value_type_, 2))); - input = ArrayFromJSON(type_, R"([ - [ - [[null, 0]], - [[3, 7], null] - ], - [ - [[4, null], [5, 8]], - [[8, null]], - null - ], - [ - null - ] - ])"); - expected = ArrayFromJSON(value_type_, "[null, 0, 3, 7, 4, null, 5, 8, 8, null]"); - CheckVectorUnary("list_flatten", input, expected, &opts); - } - - protected: - std::shared_ptr type_; - std::shared_ptr value_type_; -}; - -TYPED_TEST_SUITE(TestVectorNestedSpecialized, ListAndListViewTypes); - -TYPED_TEST(TestVectorNestedSpecialized, ListFlatten) { this->TestListFlatten(); } - -TYPED_TEST(TestVectorNestedSpecialized, ListFlattenNulls) { - this->TestListFlattenNulls(); -} - -TYPED_TEST(TestVectorNestedSpecialized, ListFlattenChunkedArray) { - this->TestListFlattenChunkedArray(); -} - -TYPED_TEST(TestVectorNestedSpecialized, ListFlattenRecursively) { - this->TestListFlattenRecursively(); } TEST(TestVectorNested, ListFlattenFixedSizeList) { @@ -168,65 +92,8 @@ TEST(TestVectorNested, ListFlattenFixedSizeListNulls) { CheckVectorUnary("list_flatten", input, expected); } -TEST(TestVectorNested, ListFlattenFixedSizeListRecursively) { - ListFlattenOptions opts; - opts.recursive = true; - - auto inner_type = fixed_size_list(int32(), 2); - auto type = fixed_size_list(inner_type, 2); - auto input = ArrayFromJSON(type, R"([ - [[0, 1], [null, 3]], - [[7, null], [2, 5]], - [null, null] - ])"); - auto expected = ArrayFromJSON(int32(), "[0, 1, null, 3, 7, null, 2, 5]"); - CheckVectorUnary("list_flatten", input, expected, &opts); -} - -template -void SwapListView(ArrayData* array, int64_t i, int64_t j) { - ASSERT_TRUE(is_list_view(array->type->id())); - ASSERT_EQ(array->type->id(), T::type_id); - ASSERT_LT(i, array->length); - ASSERT_LT(j, array->length); - auto* validity = array->GetMutableValues(0); - if (validity) { - const bool is_valid_i = bit_util::GetBit(validity, array->offset + i); - const bool is_valid_j = bit_util::GetBit(validity, array->offset + j); - if (is_valid_i ^ is_valid_j) { - bit_util::SetBitTo(validity, array->offset + i, is_valid_j); - bit_util::SetBitTo(validity, array->offset + j, is_valid_i); - } - } - auto* offsets = array->GetMutableValues(1); - auto* sizes = array->GetMutableValues(2); - std::swap(offsets[i], offsets[j]); - std::swap(sizes[i], sizes[j]); -} - -template -void SetListView(ArrayData* array, int64_t i, offset_type offset, offset_type size) { - ASSERT_TRUE(is_list_view(array->type->id())); - ASSERT_EQ(array->type->id(), T::type_id); - ASSERT_LT(i, array->length); - auto* validity = array->GetMutableValues(0); - if (validity) { - bit_util::SetBit(validity, array->offset + i); - } - auto* offsets = array->GetMutableValues(1); - auto* sizes = array->GetMutableValues(2); - offsets[i] = offset; - sizes[i] = size; -} - TEST(TestVectorNested, ListParentIndices) { - const auto types = { - list(int16()), - large_list(int16()), - list_view(int16()), - large_list_view(int16()), - }; - for (auto ty : types) { + for (auto ty : {list(int16()), large_list(int16())}) { auto input = ArrayFromJSON(ty, "[[0, null, 1], null, [2, 3], [], [4, 5]]"); auto expected = ArrayFromJSON(int64(), "[0, 0, 0, 2, 2, 4, 4]"); @@ -238,47 +105,10 @@ TEST(TestVectorNested, ListParentIndices) { auto tweaked = TweakValidityBit(input, 1, false); auto expected = ArrayFromJSON(int64(), "[0, 0, 0, 1, 1, 2, 2, 4, 4]"); CheckVectorUnary("list_parent_indices", tweaked, expected); - - { - // Construct a list-view with a non-empty null slot - auto input = - ArrayFromJSON(list_view(int16()), "[[0, null, 1], [0, 0], [2, 3], [], [4, 5]]"); - auto tweaked = TweakValidityBit(input, 1, false); - auto expected = ArrayFromJSON(int64(), "[0, 0, 0, null, null, 2, 2, 4, 4]"); - CheckVectorUnary("list_parent_indices", tweaked, expected); - - // Swap some list-view entries - auto swapped = tweaked->data()->Copy(); - SwapListView(swapped.get(), 0, 2); - SwapListView(swapped.get(), 1, 4); - AssertDatumsEqual( - swapped, - ArrayFromJSON(list_view(int16()), "[[2, 3], [4, 5], [0, null, 1], [], null]"), - /*verbose=*/true); - expected = ArrayFromJSON(int64(), "[2, 2, 2, null, null, 0, 0, 1, 1]"); - CheckVectorUnary("list_parent_indices", swapped, expected); - - // Make one view use values that are used by other list-views - SetListView(swapped.get(), 3, 1, 4); - AssertDatumsEqual( - swapped, - ArrayFromJSON(list_view(int16()), - "[[2, 3], [4, 5], [0, null, 1], [null, 1, 0, 0], null]"), - /*verbose=*/true); - EXPECT_RAISES_WITH_MESSAGE_THAT( - Invalid, ::testing::HasSubstr("values used by more than one list-view"), - CallFunction("list_parent_indices", {input})); - } } TEST(TestVectorNested, ListParentIndicesChunkedArray) { - const auto types = { - list(int16()), - large_list(int16()), - list_view(int16()), - large_list_view(int16()), - }; - for (auto ty : types) { + for (auto ty : {list(int16()), large_list(int16())}) { auto input = ChunkedArrayFromJSON(ty, {"[[0, null, 1], null]", "[[2, 3], [], [4, 5]]"}); diff --git a/cpp/src/arrow/compute/kernels/vector_rank.cc b/cpp/src/arrow/compute/kernels/vector_rank.cc index c4e52701411..0cea7246e51 100644 --- a/cpp/src/arrow/compute/kernels/vector_rank.cc +++ b/cpp/src/arrow/compute/kernels/vector_rank.cc @@ -227,6 +227,8 @@ class Ranker : public RankerMixin Status RankInternal() { + using ArrayType = typename TypeTraits::ArrayType; + if (physical_chunks_.empty()) { return Status::OK(); } @@ -238,7 +240,7 @@ class Ranker : public RankerMixin(); + return resolver.Resolve(index).Value(); }; ARROW_ASSIGN_OR_RAISE(*output_, CreateRankings(ctx_, sorted, null_placement_, tiebreaker_, value_selector)); diff --git a/cpp/src/arrow/compute/kernels/vector_select_k.cc b/cpp/src/arrow/compute/kernels/vector_select_k.cc index 4ef7d80b994..97996e6d52c 100644 --- a/cpp/src/arrow/compute/kernels/vector_select_k.cc +++ b/cpp/src/arrow/compute/kernels/vector_select_k.cc @@ -406,7 +406,10 @@ class TableSelector : public TypeVisitor { // Find the target chunk and index in the target chunk from an // index in chunked array. - ResolvedChunk GetChunk(int64_t index) const { return resolver.Resolve(index); } + template + ResolvedChunk GetChunk(int64_t index) const { + return resolver.Resolve(index); + } const SortOrder order; const std::shared_ptr type; @@ -492,6 +495,7 @@ class TableSelector : public TypeVisitor { template Status SelectKthInternal() { + using ArrayType = typename TypeTraits::ArrayType; auto& comparator = comparator_; const auto& first_sort_key = sort_keys_[0]; @@ -505,10 +509,10 @@ class TableSelector : public TypeVisitor { std::function cmp; SelectKComparator select_k_comparator; cmp = [&](const uint64_t& left, const uint64_t& right) -> bool { - auto chunk_left = first_sort_key.GetChunk(left); - auto chunk_right = first_sort_key.GetChunk(right); - auto value_left = chunk_left.Value(); - auto value_right = chunk_right.Value(); + auto chunk_left = first_sort_key.template GetChunk(left); + auto chunk_right = first_sort_key.template GetChunk(right); + auto value_left = chunk_left.Value(); + auto value_right = chunk_right.Value(); if (value_left == value_right) { return comparator.Compare(left, right, 1); } diff --git a/cpp/src/arrow/compute/kernels/vector_selection.cc b/cpp/src/arrow/compute/kernels/vector_selection.cc index b265673e23c..64c3db204c9 100644 --- a/cpp/src/arrow/compute/kernels/vector_selection.cc +++ b/cpp/src/arrow/compute/kernels/vector_selection.cc @@ -68,10 +68,12 @@ using TakeState = OptionsWrapper; // ---------------------------------------------------------------------- // DropNull Implementation -std::shared_ptr MakeDropNullFilter(const Array& values) { - auto& bitmap_buffer = values.null_bitmap(); - return std::make_shared(values.length(), bitmap_buffer, nullptr, 0, - values.offset()); +Result> GetDropNullFilter(const Array& values, + MemoryPool* memory_pool) { + auto bitmap_buffer = values.null_bitmap(); + std::shared_ptr out_array = std::make_shared( + values.length(), bitmap_buffer, nullptr, 0, values.offset()); + return out_array; } Result DropNullArray(const std::shared_ptr& values, ExecContext* ctx) { @@ -84,7 +86,8 @@ Result DropNullArray(const std::shared_ptr& values, ExecContext* c if (values->type()->id() == Type::type::NA) { return std::make_shared(0); } - auto drop_null_filter = Datum{MakeDropNullFilter(*values)}; + ARROW_ASSIGN_OR_RAISE(auto drop_null_filter, + GetDropNullFilter(*values, ctx->memory_pool())); return Filter(values, drop_null_filter, FilterOptions::Defaults(), ctx); } @@ -182,16 +185,19 @@ class DropNullMetaFunction : public MetaFunction { Result ExecuteImpl(const std::vector& args, const FunctionOptions* options, ExecContext* ctx) const override { - auto& values = args[0]; - switch (values.kind()) { - case Datum::ARRAY: - return DropNullArray(values.make_array(), ctx); - case Datum::CHUNKED_ARRAY: - return DropNullChunkedArray(values.chunked_array(), ctx); - case Datum::RECORD_BATCH: - return DropNullRecordBatch(values.record_batch(), ctx); - case Datum::TABLE: - return DropNullTable(values.table(), ctx); + switch (args[0].kind()) { + case Datum::ARRAY: { + return DropNullArray(args[0].make_array(), ctx); + } break; + case Datum::CHUNKED_ARRAY: { + return DropNullChunkedArray(args[0].chunked_array(), ctx); + } break; + case Datum::RECORD_BATCH: { + return DropNullRecordBatch(args[0].record_batch(), ctx); + } break; + case Datum::TABLE: { + return DropNullTable(args[0].table(), ctx); + } break; default: break; } diff --git a/cpp/src/arrow/compute/kernels/vector_selection_benchmark.cc b/cpp/src/arrow/compute/kernels/vector_selection_benchmark.cc index 75affd32560..e65d5dbcab1 100644 --- a/cpp/src/arrow/compute/kernels/vector_selection_benchmark.cc +++ b/cpp/src/arrow/compute/kernels/vector_selection_benchmark.cc @@ -17,7 +17,6 @@ #include "benchmark/benchmark.h" -#include #include #include @@ -43,9 +42,6 @@ struct FilterParams { const double filter_null_proportion; }; -constexpr double kDefaultTakeSelectionFactor = 1.0; -constexpr double kSmallTakeSelectionFactor = 0.05; - std::vector g_data_sizes = {kL2Size}; // The benchmark state parameter references this vector of cases. Test high and @@ -108,42 +104,17 @@ struct TakeBenchmark { benchmark::State& state; RegressionArgs args; random::RandomArrayGenerator rand; - double selection_factor; bool indices_have_nulls; bool monotonic_indices = false; TakeBenchmark(benchmark::State& state, bool indices_have_nulls, bool monotonic_indices = false) - : TakeBenchmark(state, /*selection_factor=*/kDefaultTakeSelectionFactor, - indices_have_nulls, monotonic_indices) {} - - TakeBenchmark(benchmark::State& state, double selection_factor, bool indices_have_nulls, - bool monotonic_indices = false) : state(state), args(state, /*size_is_bytes=*/false), rand(kSeed), - selection_factor(selection_factor), indices_have_nulls(indices_have_nulls), monotonic_indices(monotonic_indices) {} - static constexpr int kStringMinLength = 0; - static constexpr int kStringMaxLength = 32; - static constexpr int kByteWidthRange = 2; - - template - std::shared_ptr GenChunkedArray(int64_t num_chunks, - GenChunk&& gen_chunk) { - const int64_t chunk_length = - std::llround(args.size / static_cast(num_chunks)); - ArrayVector chunks; - for (int64_t i = 0; i < num_chunks; ++i) { - const int64_t fitting_chunk_length = - std::min(chunk_length, args.size - i * chunk_length); - chunks.push_back(gen_chunk(fitting_chunk_length)); - } - return std::make_shared(std::move(chunks)); - } - void Int64() { auto values = rand.Int64(args.size, -100, 100, args.null_proportion); Bench(values); @@ -158,48 +129,24 @@ struct TakeBenchmark { } void FixedSizeBinary() { - const auto byte_width = static_cast(state.range(kByteWidthRange)); + const int32_t byte_width = static_cast(state.range(2)); auto values = rand.FixedSizeBinary(args.size, byte_width, args.null_proportion); Bench(values); state.counters["byte_width"] = byte_width; } void String() { - auto values = std::static_pointer_cast( - rand.String(args.size, kStringMinLength, kStringMaxLength, args.null_proportion)); + int32_t string_min_length = 0, string_max_length = 32; + auto values = std::static_pointer_cast(rand.String( + args.size, string_min_length, string_max_length, args.null_proportion)); Bench(values); } - void ChunkedInt64(int64_t num_chunks, bool chunk_indices_too) { - auto chunked_array = GenChunkedArray(num_chunks, [this](int64_t chunk_length) { - return rand.Int64(chunk_length, -100, 100, args.null_proportion); - }); - BenchChunked(chunked_array, chunk_indices_too); - } - - void ChunkedFSB(int64_t num_chunks, bool chunk_indices_too) { - const auto byte_width = static_cast(state.range(kByteWidthRange)); - auto chunked_array = - GenChunkedArray(num_chunks, [this, byte_width](int64_t chunk_length) { - return rand.FixedSizeBinary(chunk_length, byte_width, args.null_proportion); - }); - BenchChunked(chunked_array, chunk_indices_too); - state.counters["byte_width"] = byte_width; - } - - void ChunkedString(int64_t num_chunks, bool chunk_indices_too) { - auto chunked_array = GenChunkedArray(num_chunks, [this](int64_t chunk_length) { - return std::static_pointer_cast(rand.String( - chunk_length, kStringMinLength, kStringMaxLength, args.null_proportion)); - }); - BenchChunked(chunked_array, chunk_indices_too); - } - void Bench(const std::shared_ptr& values) { - const double indices_null_proportion = indices_have_nulls ? args.null_proportion : 0; - const int64_t num_indices = static_cast(selection_factor * values->length()); - auto indices = rand.Int32(num_indices, 0, static_cast(values->length() - 1), - indices_null_proportion); + double indices_null_proportion = indices_have_nulls ? args.null_proportion : 0; + auto indices = + rand.Int32(values->length(), 0, static_cast(values->length() - 1), + indices_null_proportion); if (monotonic_indices) { auto arg_sorter = *SortIndices(*indices); @@ -209,55 +156,7 @@ struct TakeBenchmark { for (auto _ : state) { ABORT_NOT_OK(Take(values, indices).status()); } - state.SetItemsProcessed(state.iterations() * num_indices); - state.counters["selection_factor"] = selection_factor; - } - - void BenchChunked(const std::shared_ptr& values, bool chunk_indices_too) { - double indices_null_proportion = indices_have_nulls ? args.null_proportion : 0; - const int64_t num_indices = static_cast(selection_factor * values->length()); - auto indices = rand.Int32(num_indices, 0, static_cast(values->length() - 1), - indices_null_proportion); - - if (monotonic_indices) { - auto arg_sorter = *SortIndices(*indices); - indices = *Take(*indices, *arg_sorter); - } - std::shared_ptr chunked_indices; - if (chunk_indices_too) { - // Here we choose for indices chunks to have roughly the same length - // as values chunks, but there may be less of them if selection_factor < 1.0. - // The alternative is to have the same number of chunks, but with a potentially - // much smaller (and irrealistic) length. - std::vector> indices_chunks; - // Make sure there are at least two chunks of indices - const auto max_chunk_length = indices->length() / 2 + 1; - int64_t offset = 0; - for (int i = 0; i < values->num_chunks(); ++i) { - const auto chunk_length = std::min(max_chunk_length, values->chunk(i)->length()); - auto chunk = indices->Slice(offset, chunk_length); - indices_chunks.push_back(std::move(chunk)); - offset += chunk_length; - if (offset >= indices->length()) { - break; - } - } - chunked_indices = std::make_shared(std::move(indices_chunks)); - ARROW_CHECK_EQ(chunked_indices->length(), num_indices); - ARROW_CHECK_GT(chunked_indices->num_chunks(), 1); - } - - if (chunk_indices_too) { - for (auto _ : state) { - ABORT_NOT_OK(Take(values, chunked_indices).status()); - } - } else { - for (auto _ : state) { - ABORT_NOT_OK(Take(values, indices).status()); - } - } - state.SetItemsProcessed(state.iterations() * num_indices); - state.counters["selection_factor"] = selection_factor; + state.SetItemsProcessed(state.iterations() * values->length()); } }; @@ -399,11 +298,11 @@ static void FilterRecordBatchWithNulls(benchmark::State& state) { } static void TakeInt64RandomIndicesNoNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/false).Int64(); + TakeBenchmark(state, false).Int64(); } static void TakeInt64RandomIndicesWithNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/true).Int64(); + TakeBenchmark(state, true).Int64(); } static void TakeInt64MonotonicIndices(benchmark::State& state) { @@ -411,11 +310,11 @@ static void TakeInt64MonotonicIndices(benchmark::State& state) { } static void TakeFixedSizeBinaryRandomIndicesNoNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/false).FixedSizeBinary(); + TakeBenchmark(state, false).FixedSizeBinary(); } static void TakeFixedSizeBinaryRandomIndicesWithNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/true).FixedSizeBinary(); + TakeBenchmark(state, true).FixedSizeBinary(); } static void TakeFixedSizeBinaryMonotonicIndices(benchmark::State& state) { @@ -424,11 +323,11 @@ static void TakeFixedSizeBinaryMonotonicIndices(benchmark::State& state) { } static void TakeFSLInt64RandomIndicesNoNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/false).FSLInt64(); + TakeBenchmark(state, false).FSLInt64(); } static void TakeFSLInt64RandomIndicesWithNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/true).FSLInt64(); + TakeBenchmark(state, true).FSLInt64(); } static void TakeFSLInt64MonotonicIndices(benchmark::State& state) { @@ -436,117 +335,17 @@ static void TakeFSLInt64MonotonicIndices(benchmark::State& state) { } static void TakeStringRandomIndicesNoNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/false).String(); + TakeBenchmark(state, false).String(); } static void TakeStringRandomIndicesWithNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/true).String(); + TakeBenchmark(state, true).String(); } static void TakeStringMonotonicIndices(benchmark::State& state) { TakeBenchmark(state, /*indices_with_nulls=*/false, /*monotonic=*/true).FSLInt64(); } -static void TakeChunkedChunkedInt64RandomIndicesNoNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/false) - .ChunkedInt64(/*num_chunks=*/100, /*chunk_indices_too=*/true); -} - -static void TakeChunkedChunkedInt64RandomIndicesWithNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/true) - .ChunkedInt64(/*num_chunks=*/100, /*chunk_indices_too=*/true); -} - -static void TakeChunkedChunkedInt64FewRandomIndicesWithNulls(benchmark::State& state) { - TakeBenchmark(state, /*selection_factor=*/kSmallTakeSelectionFactor, - /*indices_with_nulls=*/true) - .ChunkedInt64(/*num_chunks=*/100, /*chunk_indices_too=*/true); -} - -static void TakeChunkedChunkedInt64MonotonicIndices(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/false, /*monotonic=*/true) - .ChunkedInt64( - /*num_chunks=*/100, /*chunk_indices_too=*/true); -} - -static void TakeChunkedChunkedInt64FewMonotonicIndices(benchmark::State& state) { - TakeBenchmark(state, /*selection_factor=*/kSmallTakeSelectionFactor, - /*indices_with_nulls=*/false, /*monotonic=*/true) - .ChunkedInt64( - /*num_chunks=*/100, /*chunk_indices_too=*/true); -} - -static void TakeChunkedChunkedFSBRandomIndicesNoNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/false) - .ChunkedFSB(/*num_chunks=*/100, /*chunk_indices_too=*/true); -} - -static void TakeChunkedChunkedFSBRandomIndicesWithNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/true) - .ChunkedFSB(/*num_chunks=*/100, /*chunk_indices_too=*/true); -} - -static void TakeChunkedChunkedFSBMonotonicIndices(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/false, /*monotonic=*/true) - .ChunkedFSB(/*num_chunks=*/100, /*chunk_indices_too=*/true); -} - -static void TakeChunkedChunkedStringRandomIndicesNoNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/false) - .ChunkedString(/*num_chunks=*/100, /*chunk_indices_too=*/true); -} - -static void TakeChunkedChunkedStringRandomIndicesWithNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/true) - .ChunkedString(/*num_chunks=*/100, /*chunk_indices_too=*/true); -} - -static void TakeChunkedChunkedStringFewRandomIndicesWithNulls(benchmark::State& state) { - TakeBenchmark(state, /*selection_factor=*/kSmallTakeSelectionFactor, - /*indices_with_nulls=*/true) - .ChunkedString(/*num_chunks=*/100, /*chunk_indices_too=*/true); -} - -static void TakeChunkedChunkedStringMonotonicIndices(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/false, /*monotonic=*/true) - .ChunkedString(/*num_chunks=*/100, /*chunk_indices_too=*/true); -} - -static void TakeChunkedChunkedStringFewMonotonicIndices(benchmark::State& state) { - TakeBenchmark(state, /*selection_factor=*/kSmallTakeSelectionFactor, - /*indices_with_nulls=*/false, /*monotonic=*/true) - .ChunkedString(/*num_chunks=*/100, /*chunk_indices_too=*/true); -} - -static void TakeChunkedFlatInt64RandomIndicesNoNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/false) - .ChunkedInt64(/*num_chunks=*/100, /*chunk_indices_too=*/false); -} - -static void TakeChunkedFlatInt64RandomIndicesWithNulls(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/true) - .ChunkedInt64(/*num_chunks=*/100, /*chunk_indices_too=*/false); -} - -static void TakeChunkedFlatInt64FewRandomIndicesWithNulls(benchmark::State& state) { - TakeBenchmark(state, /*selection_factor=*/kSmallTakeSelectionFactor, - /*indices_with_nulls=*/true) - .ChunkedInt64(/*num_chunks=*/100, /*chunk_indices_too=*/false); -} - -static void TakeChunkedFlatInt64MonotonicIndices(benchmark::State& state) { - TakeBenchmark(state, /*indices_with_nulls=*/false, /*monotonic=*/true) - .ChunkedInt64( - /*num_chunks=*/100, /*chunk_indices_too=*/false); -} - -static void TakeChunkedFlatInt64FewMonotonicIndices(benchmark::State& state) { - TakeBenchmark(state, /*selection_factor=*/kSmallTakeSelectionFactor, - /*indices_with_nulls=*/false, /*monotonic=*/true) - .ChunkedInt64( - /*num_chunks=*/100, /*chunk_indices_too=*/false); -} - void FilterSetArgs(benchmark::internal::Benchmark* bench) { for (int64_t size : g_data_sizes) { for (int i = 0; i < static_cast(g_filter_params.size()); ++i) { @@ -606,7 +405,6 @@ void TakeFSBSetArgs(benchmark::internal::Benchmark* bench) { } } -// Flat values x Flat indices BENCHMARK(TakeInt64RandomIndicesNoNulls)->Apply(TakeSetArgs); BENCHMARK(TakeInt64RandomIndicesWithNulls)->Apply(TakeSetArgs); BENCHMARK(TakeInt64MonotonicIndices)->Apply(TakeSetArgs); @@ -620,27 +418,5 @@ BENCHMARK(TakeStringRandomIndicesNoNulls)->Apply(TakeSetArgs); BENCHMARK(TakeStringRandomIndicesWithNulls)->Apply(TakeSetArgs); BENCHMARK(TakeStringMonotonicIndices)->Apply(TakeSetArgs); -// Chunked values x Chunked indices -BENCHMARK(TakeChunkedChunkedInt64RandomIndicesNoNulls)->Apply(TakeSetArgs); -BENCHMARK(TakeChunkedChunkedInt64RandomIndicesWithNulls)->Apply(TakeSetArgs); -BENCHMARK(TakeChunkedChunkedInt64FewRandomIndicesWithNulls)->Apply(TakeSetArgs); -BENCHMARK(TakeChunkedChunkedInt64MonotonicIndices)->Apply(TakeSetArgs); -BENCHMARK(TakeChunkedChunkedInt64FewMonotonicIndices)->Apply(TakeSetArgs); -BENCHMARK(TakeChunkedChunkedFSBRandomIndicesNoNulls)->Apply(TakeFSBSetArgs); -BENCHMARK(TakeChunkedChunkedFSBRandomIndicesWithNulls)->Apply(TakeFSBSetArgs); -BENCHMARK(TakeChunkedChunkedFSBMonotonicIndices)->Apply(TakeFSBSetArgs); -BENCHMARK(TakeChunkedChunkedStringRandomIndicesNoNulls)->Apply(TakeSetArgs); -BENCHMARK(TakeChunkedChunkedStringRandomIndicesWithNulls)->Apply(TakeSetArgs); -BENCHMARK(TakeChunkedChunkedStringFewRandomIndicesWithNulls)->Apply(TakeSetArgs); -BENCHMARK(TakeChunkedChunkedStringMonotonicIndices)->Apply(TakeSetArgs); -BENCHMARK(TakeChunkedChunkedStringFewMonotonicIndices)->Apply(TakeSetArgs); - -// Chunked values x Flat indices -BENCHMARK(TakeChunkedFlatInt64RandomIndicesNoNulls)->Apply(TakeSetArgs); -BENCHMARK(TakeChunkedFlatInt64RandomIndicesWithNulls)->Apply(TakeSetArgs); -BENCHMARK(TakeChunkedFlatInt64FewRandomIndicesWithNulls)->Apply(TakeSetArgs); -BENCHMARK(TakeChunkedFlatInt64MonotonicIndices)->Apply(TakeSetArgs); -BENCHMARK(TakeChunkedFlatInt64FewMonotonicIndices)->Apply(TakeSetArgs); - } // namespace compute } // namespace arrow diff --git a/cpp/src/arrow/compute/kernels/vector_selection_filter_internal.cc b/cpp/src/arrow/compute/kernels/vector_selection_filter_internal.cc index bf67a474f31..8825d697fdf 100644 --- a/cpp/src/arrow/compute/kernels/vector_selection_filter_internal.cc +++ b/cpp/src/arrow/compute/kernels/vector_selection_filter_internal.cc @@ -22,7 +22,6 @@ #include #include -#include "arrow/array/concatenate.h" #include "arrow/array/data.h" #include "arrow/buffer_builder.h" #include "arrow/chunked_array.h" @@ -41,7 +40,6 @@ #include "arrow/util/bit_run_reader.h" #include "arrow/util/bit_util.h" #include "arrow/util/bitmap_ops.h" -#include "arrow/util/fixed_width_internal.h" namespace arrow { @@ -160,11 +158,9 @@ class PrimitiveFilterImpl { PrimitiveFilterImpl(const ArraySpan& values, const ArraySpan& filter, FilterOptions::NullSelectionBehavior null_selection, ArrayData* out_arr) - : byte_width_(util::FixedWidthInBytes(*values.type)), + : byte_width_(values.type->byte_width()), values_is_valid_(values.buffers[0].data), - // No offset applied for boolean because it's a bitmap - values_data_(kIsBoolean ? values.buffers[1].data - : util::OffsetPointerOfFixedByteWidthValues(values)), + values_data_(values.buffers[1].data), values_null_count_(values.null_count), values_offset_(values.offset), values_length_(values.length), @@ -173,13 +169,17 @@ class PrimitiveFilterImpl { if constexpr (kByteWidth >= 0 && !kIsBoolean) { DCHECK_EQ(kByteWidth, byte_width_); } + if constexpr (!kIsBoolean) { + // No offset applied for boolean because it's a bitmap + values_data_ += values.offset * byte_width(); + } - DCHECK_EQ(out_arr->offset, 0); if (out_arr->buffers[0] != nullptr) { // May be unallocated if neither filter nor values contain nulls out_is_valid_ = out_arr->buffers[0]->mutable_data(); } - out_data_ = util::MutableFixedWidthValuesPointer(out_arr); + out_data_ = out_arr->buffers[1]->mutable_data(); + DCHECK_EQ(out_arr->offset, 0); out_length_ = out_arr->length; out_position_ = 0; } @@ -416,7 +416,7 @@ class PrimitiveFilterImpl { out_position_ += length; } - constexpr int64_t byte_width() const { + constexpr int32_t byte_width() const { if constexpr (kByteWidth >= 0) { return kByteWidth; } else { @@ -425,7 +425,7 @@ class PrimitiveFilterImpl { } private: - int64_t byte_width_; + int32_t byte_width_; const uint8_t* values_is_valid_; const uint8_t* values_data_; int64_t values_null_count_; @@ -439,8 +439,6 @@ class PrimitiveFilterImpl { int64_t out_position_; }; -} // namespace - Status PrimitiveFilterExec(KernelContext* ctx, const ExecSpan& batch, ExecResult* out) { const ArraySpan& values = batch[0].array; const ArraySpan& filter = batch[1].array; @@ -470,10 +468,9 @@ Status PrimitiveFilterExec(KernelContext* ctx, const ExecSpan& batch, ExecResult // validity bitmap. const bool allocate_validity = values.null_count != 0 || !filter_null_count_is_zero; - DCHECK(util::IsFixedWidthLike(values)); - const int64_t bit_width = util::FixedWidthInBits(*values.type); - RETURN_NOT_OK(util::internal::PreallocateFixedWidthArrayData( - ctx, output_length, /*source=*/values, allocate_validity, out_arr)); + const int bit_width = values.type->bit_width(); + RETURN_NOT_OK(PreallocatePrimitiveArrayData(ctx, output_length, bit_width, + allocate_validity, out_arr)); switch (bit_width) { case 1: @@ -508,8 +505,6 @@ Status PrimitiveFilterExec(KernelContext* ctx, const ExecSpan& batch, ExecResult return Status::OK(); } -namespace { - // ---------------------------------------------------------------------- // Optimized filter for base binary types (32-bit and 64-bit) @@ -929,26 +924,12 @@ Result> FilterRecordBatch(const RecordBatch& batch, return Status::Invalid("Filter inputs must all be the same length"); } - // Fetch filter - const auto& filter_opts = *static_cast(options); - ArrayData filter_array; - switch (filter.kind()) { - case Datum::ARRAY: - filter_array = *filter.array(); - break; - case Datum::CHUNKED_ARRAY: { - ARROW_ASSIGN_OR_RAISE(auto combined, Concatenate(filter.chunked_array()->chunks())); - filter_array = *combined->data(); - break; - } - default: - return Status::TypeError("Filter should be array-like"); - } - // Convert filter to selection vector/indices and use Take - ARROW_ASSIGN_OR_RAISE(std::shared_ptr indices, - GetTakeIndices(filter_array, filter_opts.null_selection_behavior, - ctx->memory_pool())); + const auto& filter_opts = *static_cast(options); + ARROW_ASSIGN_OR_RAISE( + std::shared_ptr indices, + GetTakeIndices(*filter.array(), filter_opts.null_selection_behavior, + ctx->memory_pool())); std::vector> columns(batch.num_columns()); for (int i = 0; i < batch.num_columns(); ++i) { ARROW_ASSIGN_OR_RAISE(Datum out, Take(batch.column(i)->data(), Datum(indices), @@ -1057,6 +1038,7 @@ class FilterMetaFunction : public MetaFunction { } if (args[0].kind() == Datum::RECORD_BATCH) { + auto values_batch = args[0].record_batch(); ARROW_ASSIGN_OR_RAISE( std::shared_ptr out_batch, FilterRecordBatch(*args[0].record_batch(), args[1], options, ctx)); @@ -1101,8 +1083,6 @@ void PopulateFilterKernels(std::vector* out) { {InputType(Type::EXTENSION), plain_filter, ExtensionFilterExec}, {InputType(Type::LIST), plain_filter, ListFilterExec}, {InputType(Type::LARGE_LIST), plain_filter, LargeListFilterExec}, - {InputType(Type::LIST_VIEW), plain_filter, ListViewFilterExec}, - {InputType(Type::LARGE_LIST_VIEW), plain_filter, LargeListViewFilterExec}, {InputType(Type::FIXED_SIZE_LIST), plain_filter, FSLFilterExec}, {InputType(Type::DENSE_UNION), plain_filter, DenseUnionFilterExec}, {InputType(Type::SPARSE_UNION), plain_filter, SparseUnionFilterExec}, @@ -1121,8 +1101,6 @@ void PopulateFilterKernels(std::vector* out) { {InputType(Type::EXTENSION), ree_filter, ExtensionFilterExec}, {InputType(Type::LIST), ree_filter, ListFilterExec}, {InputType(Type::LARGE_LIST), ree_filter, LargeListFilterExec}, - {InputType(Type::LIST_VIEW), ree_filter, ListViewFilterExec}, - {InputType(Type::LARGE_LIST_VIEW), ree_filter, LargeListViewFilterExec}, {InputType(Type::FIXED_SIZE_LIST), ree_filter, FSLFilterExec}, {InputType(Type::DENSE_UNION), ree_filter, DenseUnionFilterExec}, {InputType(Type::SPARSE_UNION), ree_filter, SparseUnionFilterExec}, diff --git a/cpp/src/arrow/compute/kernels/vector_selection_internal.cc b/cpp/src/arrow/compute/kernels/vector_selection_internal.cc index 7189d42850e..a0fe2808e3e 100644 --- a/cpp/src/arrow/compute/kernels/vector_selection_internal.cc +++ b/cpp/src/arrow/compute/kernels/vector_selection_internal.cc @@ -37,7 +37,6 @@ #include "arrow/util/bit_block_counter.h" #include "arrow/util/bit_run_reader.h" #include "arrow/util/bit_util.h" -#include "arrow/util/fixed_width_internal.h" #include "arrow/util/int_util.h" #include "arrow/util/logging.h" #include "arrow/util/ree_util.h" @@ -66,6 +65,24 @@ void RegisterSelectionFunction(const std::string& name, FunctionDoc doc, DCHECK_OK(registry->AddFunction(std::move(func))); } +Status PreallocatePrimitiveArrayData(KernelContext* ctx, int64_t length, int bit_width, + bool allocate_validity, ArrayData* out) { + // Preallocate memory + out->length = length; + out->buffers.resize(2); + + if (allocate_validity) { + ARROW_ASSIGN_OR_RAISE(out->buffers[0], ctx->AllocateBitmap(length)); + } + if (bit_width == 1) { + ARROW_ASSIGN_OR_RAISE(out->buffers[1], ctx->AllocateBitmap(length)); + } else { + ARROW_ASSIGN_OR_RAISE(out->buffers[1], + ctx->Allocate(bit_util::BytesForBits(length * bit_width))); + } + return Status::OK(); +} + namespace { /// \brief Iterate over a REE filter, emitting ranges of a plain values array that @@ -547,6 +564,39 @@ struct VarBinarySelectionImpl : public Selection, T } }; +struct FSBSelectionImpl : public Selection { + using Base = Selection; + LIFT_BASE_MEMBERS(); + + TypedBufferBuilder data_builder; + + FSBSelectionImpl(KernelContext* ctx, const ExecSpan& batch, int64_t output_length, + ExecResult* out) + : Base(ctx, batch, output_length, out), data_builder(ctx->memory_pool()) {} + + template + Status GenerateOutput() { + FixedSizeBinaryArray typed_values(this->values.ToArrayData()); + int32_t value_size = typed_values.byte_width(); + + RETURN_NOT_OK(data_builder.Reserve(value_size * output_length)); + Adapter adapter(this); + return adapter.Generate( + [&](int64_t index) { + auto val = typed_values.GetView(index); + data_builder.UnsafeAppend(reinterpret_cast(val.data()), + value_size); + return Status::OK(); + }, + [&]() { + data_builder.UnsafeAppend(value_size, static_cast(0x00)); + return Status::OK(); + }); + } + + Status Finish() override { return data_builder.Finish(&out->buffers[1]); } +}; + template struct ListSelectionImpl : public Selection, Type> { using offset_type = typename Type::offset_type; @@ -612,63 +662,6 @@ struct ListSelectionImpl : public Selection, Type> { } }; -template -struct ListViewSelectionImpl : public Selection, Type> { - using offset_type = typename Type::offset_type; - - using Base = Selection, Type>; - LIFT_BASE_MEMBERS(); - - TypedBufferBuilder offsets_builder; - TypedBufferBuilder sizes_builder; - - ListViewSelectionImpl(KernelContext* ctx, const ExecSpan& batch, int64_t output_length, - ExecResult* out) - : Base(ctx, batch, output_length, out), - offsets_builder(ctx->memory_pool()), - sizes_builder(ctx->memory_pool()) {} - - template - Status GenerateOutput() { - auto* offsets = this->values.template GetValues(1); - auto* sizes = this->values.template GetValues(2); - - offset_type null_list_view_offset = 0; - Adapter adapter(this); - RETURN_NOT_OK(adapter.Generate( - [&](int64_t index) { - offset_type value_offset = offsets[index]; - offset_type value_length = sizes[index]; - offsets_builder.UnsafeAppend(value_offset); - sizes_builder.UnsafeAppend(value_length); - null_list_view_offset = value_offset + value_length; - return Status::OK(); - }, - [&]() { - // 0 could be appended here, but by adding the last offset, we keep - // the buffer compatible with how offsets behave in ListType as well. - // The invariant that `offsets[i] + sizes[i] <= values.length` is - // trivially maintained by having `sizes[i]` set to 0 here. - offsets_builder.UnsafeAppend(null_list_view_offset); - sizes_builder.UnsafeAppend(0); - return Status::OK(); - })); - return Status::OK(); - } - - Status Init() override { - RETURN_NOT_OK(offsets_builder.Reserve(output_length)); - return sizes_builder.Reserve(output_length); - } - - Status Finish() override { - RETURN_NOT_OK(offsets_builder.Finish(&out->buffers[1])); - RETURN_NOT_OK(sizes_builder.Finish(&out->buffers[2])); - out->child_data = {this->values.child_data[0].ToArrayData()}; - return Status::OK(); - } -}; - struct DenseUnionSelectionImpl : public Selection { using Base = Selection; @@ -915,30 +908,7 @@ Status LargeListFilterExec(KernelContext* ctx, const ExecSpan& batch, ExecResult return FilterExec>(ctx, batch, out); } -Status ListViewFilterExec(KernelContext* ctx, const ExecSpan& batch, ExecResult* out) { - return FilterExec>(ctx, batch, out); -} - -Status LargeListViewFilterExec(KernelContext* ctx, const ExecSpan& batch, - ExecResult* out) { - return FilterExec>(ctx, batch, out); -} - Status FSLFilterExec(KernelContext* ctx, const ExecSpan& batch, ExecResult* out) { - const ArraySpan& values = batch[0].array; - - // If a FixedSizeList wraps a fixed-width type we can, in some cases, use - // PrimitiveFilterExec for a fixed-size list array. - if (util::IsFixedWidthLike(values, - /*force_null_count=*/true, - /*exclude_bool_and_dictionary=*/true)) { - const auto byte_width = util::FixedWidthInBytes(*values.type); - // 0 is a valid byte width for FixedSizeList, but PrimitiveFilterExec - // might not handle it correctly. - if (byte_width > 0) { - return PrimitiveFilterExec(ctx, batch, out); - } - } return FilterExec(ctx, batch, out); } @@ -972,6 +942,23 @@ Status LargeVarBinaryTakeExec(KernelContext* ctx, const ExecSpan& batch, return TakeExec>(ctx, batch, out); } +Status FSBTakeExec(KernelContext* ctx, const ExecSpan& batch, ExecResult* out) { + const ArraySpan& values = batch[0].array; + const auto byte_width = values.type->byte_width(); + // Use primitive Take implementation (presumably faster) for some byte widths + switch (byte_width) { + case 1: + case 2: + case 4: + case 8: + case 16: + case 32: + return PrimitiveTakeExec(ctx, batch, out); + default: + return TakeExec(ctx, batch, out); + } +} + Status ListTakeExec(KernelContext* ctx, const ExecSpan& batch, ExecResult* out) { return TakeExec>(ctx, batch, out); } @@ -980,24 +967,7 @@ Status LargeListTakeExec(KernelContext* ctx, const ExecSpan& batch, ExecResult* return TakeExec>(ctx, batch, out); } -Status ListViewTakeExec(KernelContext* ctx, const ExecSpan& batch, ExecResult* out) { - return TakeExec>(ctx, batch, out); -} - -Status LargeListViewTakeExec(KernelContext* ctx, const ExecSpan& batch, ExecResult* out) { - return TakeExec>(ctx, batch, out); -} - Status FSLTakeExec(KernelContext* ctx, const ExecSpan& batch, ExecResult* out) { - const ArraySpan& values = batch[0].array; - - // If a FixedSizeList wraps a fixed-width type we can, in some cases, use - // FixedWidthTakeExec for a fixed-size list array. - if (util::IsFixedWidthLike(values, - /*force_null_count=*/true, - /*exclude_bool_and_dictionary=*/true)) { - return FixedWidthTakeExec(ctx, batch, out); - } return TakeExec(ctx, batch, out); } diff --git a/cpp/src/arrow/compute/kernels/vector_selection_internal.h b/cpp/src/arrow/compute/kernels/vector_selection_internal.h index 887bf083541..95f3e51cd67 100644 --- a/cpp/src/arrow/compute/kernels/vector_selection_internal.h +++ b/cpp/src/arrow/compute/kernels/vector_selection_internal.h @@ -45,6 +45,12 @@ void RegisterSelectionFunction(const std::string& name, FunctionDoc doc, const FunctionOptions* default_options, FunctionRegistry* registry); +/// \brief Allocate an ArrayData for a primitive array with a given length and bit width +/// +/// \param[in] bit_width 1 or a multiple of 8 +Status PreallocatePrimitiveArrayData(KernelContext* ctx, int64_t length, int bit_width, + bool allocate_validity, ArrayData* out); + /// \brief Callback type for VisitPlainxREEFilterOutputSegments. /// /// position is the logical position in the values array relative to its offset. @@ -64,22 +70,18 @@ void VisitPlainxREEFilterOutputSegments( FilterOptions::NullSelectionBehavior null_selection, const EmitREEFilterSegment& emit_segment); -Status PrimitiveFilterExec(KernelContext*, const ExecSpan&, ExecResult*); Status ListFilterExec(KernelContext*, const ExecSpan&, ExecResult*); Status LargeListFilterExec(KernelContext*, const ExecSpan&, ExecResult*); -Status ListViewFilterExec(KernelContext*, const ExecSpan&, ExecResult*); -Status LargeListViewFilterExec(KernelContext*, const ExecSpan&, ExecResult*); Status FSLFilterExec(KernelContext*, const ExecSpan&, ExecResult*); Status DenseUnionFilterExec(KernelContext*, const ExecSpan&, ExecResult*); Status MapFilterExec(KernelContext*, const ExecSpan&, ExecResult*); Status VarBinaryTakeExec(KernelContext*, const ExecSpan&, ExecResult*); Status LargeVarBinaryTakeExec(KernelContext*, const ExecSpan&, ExecResult*); -Status FixedWidthTakeExec(KernelContext*, const ExecSpan&, ExecResult*); +Status PrimitiveTakeExec(KernelContext*, const ExecSpan&, ExecResult*); +Status FSBTakeExec(KernelContext*, const ExecSpan&, ExecResult*); Status ListTakeExec(KernelContext*, const ExecSpan&, ExecResult*); Status LargeListTakeExec(KernelContext*, const ExecSpan&, ExecResult*); -Status ListViewTakeExec(KernelContext*, const ExecSpan&, ExecResult*); -Status LargeListViewTakeExec(KernelContext*, const ExecSpan&, ExecResult*); Status FSLTakeExec(KernelContext*, const ExecSpan&, ExecResult*); Status DenseUnionTakeExec(KernelContext*, const ExecSpan&, ExecResult*); Status SparseUnionTakeExec(KernelContext*, const ExecSpan&, ExecResult*); diff --git a/cpp/src/arrow/compute/kernels/vector_selection_take_internal.cc b/cpp/src/arrow/compute/kernels/vector_selection_take_internal.cc index c45cc552a2c..89b3f7d0d3c 100644 --- a/cpp/src/arrow/compute/kernels/vector_selection_take_internal.cc +++ b/cpp/src/arrow/compute/kernels/vector_selection_take_internal.cc @@ -19,7 +19,6 @@ #include #include #include -#include #include #include "arrow/array/builder_primitive.h" @@ -28,10 +27,8 @@ #include "arrow/chunked_array.h" #include "arrow/compute/api_vector.h" #include "arrow/compute/kernels/codegen_internal.h" -#include "arrow/compute/kernels/gather_internal.h" #include "arrow/compute/kernels/vector_selection_internal.h" #include "arrow/compute/kernels/vector_selection_take_internal.h" -#include "arrow/compute/registry.h" #include "arrow/memory_pool.h" #include "arrow/record_batch.h" #include "arrow/table.h" @@ -40,7 +37,6 @@ #include "arrow/util/bit_block_counter.h" #include "arrow/util/bit_run_reader.h" #include "arrow/util/bit_util.h" -#include "arrow/util/fixed_width_internal.h" #include "arrow/util/int_util.h" #include "arrow/util/ree_util.h" @@ -327,79 +323,235 @@ namespace { using TakeState = OptionsWrapper; // ---------------------------------------------------------------------- -// Implement optimized take for primitive types from boolean to -// 1/2/4/8/16/32-byte C-type based types and fixed-size binary (0 or more -// bytes). -// -// Use one specialization for each of these primitive byte-widths so the -// compiler can specialize the memcpy to dedicated CPU instructions and for -// fixed-width binary use the 1-byte specialization but pass WithFactor=true -// that makes the kernel consider the factor parameter provided at runtime. -// -// Only unsigned index types need to be instantiated since after -// boundschecking to check for negative numbers in the indices we can safely -// reinterpret_cast signed integers as unsigned. - -/// \brief The Take implementation for primitive types and fixed-width binary. +// Implement optimized take for primitive types from boolean to 1/2/4/8-byte +// C-type based types. Use common implementation for every byte width and only +// generate code for unsigned integer indices, since after boundschecking to +// check for negative numbers in the indices we can safely reinterpret_cast +// signed integers as unsigned. + +/// \brief The Take implementation for primitive (fixed-width) types does not +/// use the logical Arrow type but rather the physical C type. This way we +/// only generate one take function for each byte width. /// -/// Also note that this function can also handle fixed-size-list arrays if -/// they fit the criteria described in fixed_width_internal.h, so use the -/// function defined in that file to access values and destination pointers -/// and DO NOT ASSUME `values.type()` is a primitive type. -/// -/// NOTE: Template parameters are types instead of values to let -/// `TakeIndexDispatch<>` forward `typename... Args` after the index type. -/// -/// \pre the indices have been boundschecked -template -struct FixedWidthTakeImpl { - static constexpr int kValueWidthInBits = ValueBitWidthConstant::value; - - static Status Exec(KernelContext* ctx, const ArraySpan& values, - const ArraySpan& indices, ArrayData* out_arr, int64_t factor) { -#ifndef NDEBUG - int64_t bit_width = util::FixedWidthInBits(*values.type); - DCHECK(WithFactor::value || (kValueWidthInBits == bit_width && factor == 1)); - DCHECK(!WithFactor::value || - (factor > 0 && kValueWidthInBits == 8 && // factors are used with bytes - static_cast(factor * kValueWidthInBits) == bit_width)); -#endif - const bool out_has_validity = values.MayHaveNulls() || indices.MayHaveNulls(); - - const uint8_t* src; - int64_t src_offset; - std::tie(src_offset, src) = util::OffsetPointerOfFixedBitWidthValues(values); - uint8_t* out = util::MutableFixedWidthValuesPointer(out_arr); +/// This function assumes that the indices have been boundschecked. +template +struct PrimitiveTakeImpl { + static constexpr int kValueWidth = ValueWidthConstant::value; + + static void Exec(const ArraySpan& values, const ArraySpan& indices, + ArrayData* out_arr) { + DCHECK_EQ(values.type->byte_width(), kValueWidth); + const auto* values_data = + values.GetValues(1, 0) + kValueWidth * values.offset; + const uint8_t* values_is_valid = values.buffers[0].data; + auto values_offset = values.offset; + + const auto* indices_data = indices.GetValues(1); + const uint8_t* indices_is_valid = indices.buffers[0].data; + auto indices_offset = indices.offset; + + auto out = out_arr->GetMutableValues(1, 0) + kValueWidth * out_arr->offset; + auto out_is_valid = out_arr->buffers[0]->mutable_data(); + auto out_offset = out_arr->offset; + DCHECK_EQ(out_offset, 0); + + // If either the values or indices have nulls, we preemptively zero out the + // out validity bitmap so that we don't have to use ClearBit in each + // iteration for nulls. + if (values.null_count != 0 || indices.null_count != 0) { + bit_util::SetBitsTo(out_is_valid, out_offset, indices.length, false); + } + + auto WriteValue = [&](int64_t position) { + memcpy(out + position * kValueWidth, + values_data + indices_data[position] * kValueWidth, kValueWidth); + }; + + auto WriteZero = [&](int64_t position) { + memset(out + position * kValueWidth, 0, kValueWidth); + }; + + auto WriteZeroSegment = [&](int64_t position, int64_t length) { + memset(out + position * kValueWidth, 0, kValueWidth * length); + }; + + OptionalBitBlockCounter indices_bit_counter(indices_is_valid, indices_offset, + indices.length); + int64_t position = 0; int64_t valid_count = 0; - arrow::internal::Gather gather{ - /*src_length=*/values.length, - src, - src_offset, - /*idx_length=*/indices.length, - /*idx=*/indices.GetValues(1), - out, - factor}; - if (out_has_validity) { - DCHECK_EQ(out_arr->offset, 0); - // out_is_valid must be zero-initiliazed, because Gather::Execute - // saves time by not having to ClearBit on every null element. - auto out_is_valid = out_arr->GetMutableValues(0); - memset(out_is_valid, 0, bit_util::BytesForBits(out_arr->length)); - valid_count = gather.template Execute( - /*src_validity=*/values, /*idx_validity=*/indices, out_is_valid); - } else { - valid_count = gather.Execute(); + while (position < indices.length) { + BitBlockCount block = indices_bit_counter.NextBlock(); + if (values.null_count == 0) { + // Values are never null, so things are easier + valid_count += block.popcount; + if (block.popcount == block.length) { + // Fastest path: neither values nor index nulls + bit_util::SetBitsTo(out_is_valid, out_offset + position, block.length, true); + for (int64_t i = 0; i < block.length; ++i) { + WriteValue(position); + ++position; + } + } else if (block.popcount > 0) { + // Slow path: some indices but not all are null + for (int64_t i = 0; i < block.length; ++i) { + if (bit_util::GetBit(indices_is_valid, indices_offset + position)) { + // index is not null + bit_util::SetBit(out_is_valid, out_offset + position); + WriteValue(position); + } else { + WriteZero(position); + } + ++position; + } + } else { + WriteZeroSegment(position, block.length); + position += block.length; + } + } else { + // Values have nulls, so we must do random access into the values bitmap + if (block.popcount == block.length) { + // Faster path: indices are not null but values may be + for (int64_t i = 0; i < block.length; ++i) { + if (bit_util::GetBit(values_is_valid, + values_offset + indices_data[position])) { + // value is not null + WriteValue(position); + bit_util::SetBit(out_is_valid, out_offset + position); + ++valid_count; + } else { + WriteZero(position); + } + ++position; + } + } else if (block.popcount > 0) { + // Slow path: some but not all indices are null. Since we are doing + // random access in general we have to check the value nullness one by + // one. + for (int64_t i = 0; i < block.length; ++i) { + if (bit_util::GetBit(indices_is_valid, indices_offset + position) && + bit_util::GetBit(values_is_valid, + values_offset + indices_data[position])) { + // index is not null && value is not null + WriteValue(position); + bit_util::SetBit(out_is_valid, out_offset + position); + ++valid_count; + } else { + WriteZero(position); + } + ++position; + } + } else { + WriteZeroSegment(position, block.length); + position += block.length; + } + } + } + out_arr->null_count = out_arr->length - valid_count; + } +}; + +template +struct BooleanTakeImpl { + static void Exec(const ArraySpan& values, const ArraySpan& indices, + ArrayData* out_arr) { + const uint8_t* values_data = values.buffers[1].data; + const uint8_t* values_is_valid = values.buffers[0].data; + auto values_offset = values.offset; + + const auto* indices_data = indices.GetValues(1); + const uint8_t* indices_is_valid = indices.buffers[0].data; + auto indices_offset = indices.offset; + + auto out = out_arr->buffers[1]->mutable_data(); + auto out_is_valid = out_arr->buffers[0]->mutable_data(); + auto out_offset = out_arr->offset; + + // If either the values or indices have nulls, we preemptively zero out the + // out validity bitmap so that we don't have to use ClearBit in each + // iteration for nulls. + if (values.null_count != 0 || indices.null_count != 0) { + bit_util::SetBitsTo(out_is_valid, out_offset, indices.length, false); + } + // Avoid uninitialized data in values array + bit_util::SetBitsTo(out, out_offset, indices.length, false); + + auto PlaceDataBit = [&](int64_t loc, IndexCType index) { + bit_util::SetBitTo(out, out_offset + loc, + bit_util::GetBit(values_data, values_offset + index)); + }; + + OptionalBitBlockCounter indices_bit_counter(indices_is_valid, indices_offset, + indices.length); + int64_t position = 0; + int64_t valid_count = 0; + while (position < indices.length) { + BitBlockCount block = indices_bit_counter.NextBlock(); + if (values.null_count == 0) { + // Values are never null, so things are easier + valid_count += block.popcount; + if (block.popcount == block.length) { + // Fastest path: neither values nor index nulls + bit_util::SetBitsTo(out_is_valid, out_offset + position, block.length, true); + for (int64_t i = 0; i < block.length; ++i) { + PlaceDataBit(position, indices_data[position]); + ++position; + } + } else if (block.popcount > 0) { + // Slow path: some but not all indices are null + for (int64_t i = 0; i < block.length; ++i) { + if (bit_util::GetBit(indices_is_valid, indices_offset + position)) { + // index is not null + bit_util::SetBit(out_is_valid, out_offset + position); + PlaceDataBit(position, indices_data[position]); + } + ++position; + } + } else { + position += block.length; + } + } else { + // Values have nulls, so we must do random access into the values bitmap + if (block.popcount == block.length) { + // Faster path: indices are not null but values may be + for (int64_t i = 0; i < block.length; ++i) { + if (bit_util::GetBit(values_is_valid, + values_offset + indices_data[position])) { + // value is not null + bit_util::SetBit(out_is_valid, out_offset + position); + PlaceDataBit(position, indices_data[position]); + ++valid_count; + } + ++position; + } + } else if (block.popcount > 0) { + // Slow path: some but not all indices are null. Since we are doing + // random access in general we have to check the value nullness one by + // one. + for (int64_t i = 0; i < block.length; ++i) { + if (bit_util::GetBit(indices_is_valid, indices_offset + position)) { + // index is not null + if (bit_util::GetBit(values_is_valid, + values_offset + indices_data[position])) { + // value is not null + PlaceDataBit(position, indices_data[position]); + bit_util::SetBit(out_is_valid, out_offset + position); + ++valid_count; + } + } + ++position; + } + } else { + position += block.length; + } + } } out_arr->null_count = out_arr->length - valid_count; - return Status::OK(); } }; template