diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 907865009..020b40874 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -1,3 +1,22 @@ +# -------------------------------------------------------------------- +# +# 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: "\U0001F41B Bug Report" description: Problems and issues with code in PXF for Apache Cloudberry. title: "[Bug] " diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index ea2b86e63..29b375d23 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,3 +1,22 @@ +# -------------------------------------------------------------------- +# +# 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. +# +# -------------------------------------------------------------------- blank_issues_enabled: true contact_links: - name: 🙏🏻 Q&A diff --git a/.github/workflows/apache-rat-audit.yml b/.github/workflows/apache-rat-audit.yml new file mode 100644 index 000000000..ffa2530c4 --- /dev/null +++ b/.github/workflows/apache-rat-audit.yml @@ -0,0 +1,326 @@ +# -------------------------------------------------------------------- +# +# 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. +# +# -------------------------------------------------------------------- +# Apache Cloudberry PXF (Incubating) Compliance Workflow +# +# Comprehensive compliance checks for Apache Cloudberry PXF: +# 1. Apache RAT license header validation +# 2. Copyright year verification (NOTICE) +# 3. Binary file presence detection with approved allowlist +# +# Based on Apache Rat tool, run locally with: +# `mvn clean verify -Drat.consoleOutput=true` +# -------------------------------------------------------------------- + +name: Apache Rat License Check + +on: + push: + branches: [main, REL_2_STABLE] + pull_request: + branches: [main, REL_2_STABLE] + types: [opened, synchronize, reopened, edited] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + rat-check: + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - name: Check out repository + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Set up Java and Maven + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '11' + cache: maven + + - name: Run Apache Rat check + run: | + echo "Running Apache Rat license check..." + mvn clean verify -Drat.consoleOutput=true | tee rat-output.log + + # Check for build failure + if grep -q "\[INFO\] BUILD FAILURE" rat-output.log; then + echo "::error::Apache Rat check failed - build failure detected" + echo "RAT_CHECK=fail" >> $GITHUB_ENV + else + echo "RAT_CHECK=pass" >> $GITHUB_ENV + echo "Apache Rat check passed successfully" + fi + + - name: Check copyright years are up-to-date + run: | + echo "Checking copyright years..." + current_year=$(date -u +"%Y") + echo "CURRENT_YEAR=$current_year" >> $GITHUB_ENV + + # Initialize to pass, will be updated if checks fail + echo "NOTICE_CHECK=pass" >> $GITHUB_ENV + echo "PSQL_HELP_CHECK=pass" >> $GITHUB_ENV + + # Check NOTICE file + echo "Checking NOTICE file..." + if ! grep -q "Copyright 2024-$current_year The Apache Software Foundation" NOTICE; then + echo "::error::NOTICE file does not contain the current year ($current_year)" + echo "NOTICE_CHECK=fail" >> $GITHUB_ENV + else + echo "PASS: NOTICE file contains the current year ($current_year)" + fi + + # Continue execution even if checks fail + if [ "$NOTICE_CHECK" = "pass" ]; then + echo "All copyright year checks passed" + else + echo "Copyright year checks completed with errors" + fi + + - name: Check for binary files + run: | + echo "Checking for binary files..." + echo "Checking extensions: class, jar, tar, tgz, zip, exe, dll, so, gz, bz2" + echo "----------------------------------------------------------------------" + + # Binary file allowlist, see README.apache.md + ALLOWLIST=( + "server/pxf-json/src/test/resources/parser-tests/offset/input.json.bz2" + "server/pxf-json/src/test/resources/parser-tests/offset/big_data.json.bz2" + "server/pxf-json/src/test/resources/tweets.tar.gz" + "automation/src/test/resources/data/s3select/sample.csv.gz" + "automation/src/test/resources/data/s3select/sample.csv.bz2" + "automation/src/test/resources/data/fixedwidth/fixedwidth_small_correct.txt.gz" + ) + + # Check for specific binary file extensions + binary_extensions="class jar tar tgz zip exe dll so gz bz2" + echo "BINARY_EXTENSIONS=${binary_extensions}" >> $GITHUB_ENV + binary_results="" + binaryfiles_found=false + + for extension in ${binary_extensions}; do + printf "Checking *.%-4s files..." "${extension}" + found=$(find . -name "*.${extension}" -type f || true) + + # Filter out allowed files + if [ -n "$found" ]; then + filtered_found="" + while IFS= read -r file; do + is_allowed=false + for allowlist_file in "${ALLOWLIST[@]}"; do + if [ "$file" = "./$allowlist_file" ]; then + is_allowed=true + echo "Allowed: $file" >> binary_allowlist.txt + break + fi + done + if [ "$is_allowed" = false ]; then + filtered_found+="$file"$'\n' + fi + done <<< "$found" + + filtered_found=$(echo "$filtered_found" | sed '/^$/d') + + if [ -n "$filtered_found" ]; then + echo "FOUND" + echo "::error::${extension} files should not exist" + echo "For ASF compatibility: the source tree should not contain" + echo "binary files as users have a hard time verifying their contents." + echo "Found files:" + echo "$filtered_found" | sed 's/^/ /' + echo "${extension}:${filtered_found}" >> binary_results.txt + binaryfiles_found=true + else + echo "NONE (all allowed)" + echo "${extension}:none" >> binary_results.txt + fi + else + echo "NONE" + echo "${extension}:none" >> binary_results.txt + fi + done + + echo "----------------------------------------------------------------------" + if [ "$binaryfiles_found" = true ]; then + echo "ERROR: Non-allowed binary files were found in the source tree" + echo "BINARY_CHECK=fail" >> $GITHUB_ENV + else + echo "PASS: No non-allowed binary files found" + echo "BINARY_CHECK=pass" >> $GITHUB_ENV + fi + + # Show allowlist summary if any allowed files were found + if [ -f binary_allowlist.txt ]; then + echo "" + echo "Allowed binary files (approved):" + cat binary_allowlist.txt | sed 's/^/ /' + fi + + - name: Upload Rat check results + if: always() + uses: actions/upload-artifact@v4 + with: + name: rat-check-results + path: rat-output.log + retention-days: 7 + + - name: Generate Job Summary + if: always() + run: | + { + echo "## Apache Cloudberry PXF Compliance Audit Results" + echo "- Run Time: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" + echo "" + + # Copyright Year Check Summary + echo "### Copyright Year Checks" + echo "**NOTICE file:**" + if [ "$NOTICE_CHECK" = "pass" ]; then + echo "PASS: Contains current year ($CURRENT_YEAR)" + else + echo "ERROR: Does not contain current year ($CURRENT_YEAR)" + fi + echo "" + + # Binary Files Check Summary + echo "### Binary Files Check" + echo "Checked extensions: \`${BINARY_EXTENSIONS}\`" + echo "" + echo "Results:" + echo "\`\`\`" + if [ -f binary_results.txt ]; then + while IFS=: read -r ext files; do + if [ "$files" = "none" ]; then + echo "PASS: No .${ext} files found" + else + echo "ERROR: Found .${ext} files:" + echo "$files" | sed 's/^/ /' + fi + done < binary_results.txt + fi + echo "\`\`\`" + echo "" + + # Allowlist summary + if [ -f binary_allowlist.txt ]; then + echo "### Allowed Binary Files" + echo "The following binary files are approved for testing purposes:" + echo "You can see `README.apache.md` for details." + echo "\`\`\`" + cat binary_allowlist.txt | sed 's/Allowed: //' + echo "\`\`\`" + echo "" + fi + + # Rat check summary + if [[ -f rat-output.log ]]; then + # First extract and display summary statistics (only once) + if grep -q "Rat check: Summary over all files" rat-output.log; then + echo "### License Header Check" + summary_line=$(grep "Rat check: Summary over all files" rat-output.log) + echo "\`\`\`" + echo "$summary_line" + echo "\`\`\`" + echo "" + fi + + # Then determine the result status + if [ "$RAT_CHECK" = "fail" ]; then + echo "#### Check Failed - License Compliance Issues Detected" + echo "" + + # Extract and display files with unapproved licenses + if grep -q "Files with unapproved licenses:" rat-output.log; then + echo "##### Files with Unapproved Licenses" + echo "\`\`\`" + # Get the line with "Files with unapproved licenses:" and all following lines until the dashed line + sed -n '/Files with unapproved licenses:/,/\[INFO\] ------------------------------------------------------------------------/p' rat-output.log | \ + grep -v "\[INFO\] ------------------------------------------------------------------------" | \ + grep -v "^$" | \ + head -20 + echo "\`\`\`" + echo "" + fi + + echo "**How to fix:**" + echo "" + echo "**For new original files you created:**" + echo "- Add the standard Apache License header to each file" + echo "" + echo "**For third-party files with different licenses:**" + echo "- Add the file to exclusion list in \`pom.xml\` under the rat-maven-plugin configuration" + echo "- Ensure the license is compatible with Apache License 2.0" + echo "- Avoid introducing components with incompatible licenses" + echo "" + echo "**Need help?**" + echo "- Run \`mvn clean verify -Drat.consoleOutput=true\` locally for the full report" + echo "- Email dev@cloudberry.apache.org if you have questions about license compatibility" + + elif [ "$RAT_CHECK" = "pass" ]; then + echo "#### Check Passed - All Files Comply with Apache License Requirements" + fi + fi + } >> "$GITHUB_STEP_SUMMARY" + + - name: Report Status + if: always() + shell: bash {0} + run: | + # Check overall status of all checks + overall_status=0 + + # Check Apache RAT status + if [ "$RAT_CHECK" = "fail" ]; then + echo "ERROR: Apache Rat check failed" + overall_status=1 + elif [ "$RAT_CHECK" = "pass" ]; then + echo "Apache Rat check passed" + fi + + # Check copyright year status + if [ -n "$NOTICE_CHECK" ] && [ "$NOTICE_CHECK" = "fail" ]; then + echo "ERROR: NOTICE file copyright year check failed" + overall_status=1 + fi + + # Check binary files status (if this variable exists) + if [ -n "$BINARY_CHECK" ] && [ "$BINARY_CHECK" = "fail" ]; then + echo "ERROR: Binary files check failed" + overall_status=1 + fi + + # Exit with appropriate status + if [ $overall_status -eq 0 ]; then + echo "SUCCESS: All checks passed" + exit 0 + else + echo "FAILURE: One or more checks failed" + exit 1 + fi diff --git a/.github/workflows/dependency-submission.yml b/.github/workflows/dependency-submission.yml index 1c0858f93..5c4ed859b 100644 --- a/.github/workflows/dependency-submission.yml +++ b/.github/workflows/dependency-submission.yml @@ -37,6 +37,9 @@ jobs: with: distribution: temurin java-version: 11 + - name: Download Gradle Wrapper Jar + working-directory: ./server + run: make prepare-gradle-wrapper - name: Generate and submit dependency graph uses: gradle/actions/dependency-submission@v5 with: diff --git a/.github/workflows/pxf-ci.yml b/.github/workflows/pxf-ci.yml index 3666ab8e2..660c47d4e 100644 --- a/.github/workflows/pxf-ci.yml +++ b/.github/workflows/pxf-ci.yml @@ -113,6 +113,23 @@ jobs: path: /tmp/singlecluster-image.tar retention-days: 1 + java-compatibility-test: + name: build-and-test with java v${{ matrix.java }} + runs-on: ubuntu-latest + strategy: + matrix: + java: [ '8', '11', '17' ] + fail-fast: false + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.java }} + distribution: 'corretto' + - name: Assemble and test with Gradle + working-directory: ./server + run: make test + # Stage 2: Parallel test jobs using matrix strategy pxf-test: name: Test PXF - ${{ matrix.test_group }} @@ -125,7 +142,6 @@ jobs: - cli - external-table - fdw - - server - sanity - smoke - hdfs diff --git a/LICENSE b/LICENSE index 3c1f33f21..0f1653582 100644 --- a/LICENSE +++ b/LICENSE @@ -292,13 +292,57 @@ CI/Test Templates: ci/singlecluster/templates/tez/conf/tez-site.xml ci/singlecluster/templates/usersync/install.properties + +The Greenplum Platform Extension Framework includes: + +---------------------------- + Apache License - Version 2.0 + +The following files and directories are licensed under the Apache License, Version 2.0: + +FDW Module: + fdw/ + +External Table Module: + external-table/ + +Server Module (Java Sources) and Configuration Files: + server/ + +Documentation Templates: + docs/ + +CI/Test Templates: + automation/ + ci/ + +CLI and Packaging: + cli/ + package/ + +Data Loading and Regression Tests: + load/ + regression/ + ======================================================================= -This product bundles Gradle Wrapper, which is licensed under -the Apache License, Version 2.0. +Apache Cloudberry PXF includes codes from + +---------------------------- + Apache License - Version 2.0 + + server/gradlew-install.sh + + Copyright (C) 2024 Dremio - Copyright © Gradle, Inc. + Licensed 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 - server/gradle/wrapper/gradle-wrapper.jar + http://www.apache.org/licenses/LICENSE-2.0 -======================================================================= \ No newline at end of file + 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. \ No newline at end of file diff --git a/Makefile b/Makefile index 826ed8d64..8477ec74d 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,8 @@ export PXF_VERSION export SKIP_EXTERNAL_TABLE_BUILD_REASON export SKIP_FDW_BUILD_REASON +export SKIP_EXTERNAL_TABLE_PACKAGE_REASON +export SKIP_FDW_PACKAGE_REASON SOURCE_EXTENSION_DIR = external-table TARGET_EXTENSION_DIR = gpextable @@ -65,7 +67,7 @@ it: install: ifneq ($(SKIP_EXTERNAL_TABLE_BUILD_REASON),) - @echo "Skipping installing FDW extension because $(SKIP_EXTERNAL_TABLE_BUILD_REASON)" + @echo "Skipping installing external-table extension because $(SKIP_EXTERNAL_TABLE_BUILD_REASON)" $(eval PXF_MODULES := $(filter-out external-table,$(PXF_MODULES))) endif ifneq ($(SKIP_FDW_BUILD_REASON),) @@ -85,10 +87,15 @@ install-server: stage: rm -rf build/stage make -C $(SOURCE_EXTENSION_DIR) stage - make -C cli stage +ifeq ($(SKIP_FDW_PACKAGE_REASON),) + make -C fdw stage +else + @echo "Skipping staging FDW extension because $(SKIP_FDW_PACKAGE_REASON)" +endif + make -C cli stage make -C server stage ifneq ($(SKIP_EXTERNAL_TABLE_PACKAGE_REASON),) - @echo "Skipping staging FDW extension because $(SKIP_EXTERNAL_TABLE_PACKAGE_REASON)" + @echo "Skipping staging external-table extension because $(SKIP_EXTERNAL_TABLE_PACKAGE_REASON)" $(eval PXF_MODULES := $(filter-out external-table,$(PXF_MODULES))) endif ifneq ($(SKIP_FDW_PACKAGE_REASON),) @@ -101,6 +108,9 @@ endif PXF_PACKAGE_NAME=pxf-cloudberry$${GP_MAJOR_VERSION}-$${PXF_VERSION}-$${GP_BUILD_ARCH} ;\ mkdir -p build/stage/$${PXF_PACKAGE_NAME} ;\ cp -a $(SOURCE_EXTENSION_DIR)/build/stage/* build/stage/$${PXF_PACKAGE_NAME} ;\ + if [[ -z "$${SKIP_FDW_PACKAGE_REASON:-}" ]]; then \ + cp -a fdw/build/stage/* build/stage/$${PXF_PACKAGE_NAME} ;\ + fi ;\ cp -a cli/build/stage/* build/stage/$${PXF_PACKAGE_NAME} ;\ cp -a server/build/stage/* build/stage/$${PXF_PACKAGE_NAME} ;\ echo $$(git rev-parse --verify HEAD) > build/stage/$${PXF_PACKAGE_NAME}/commit.sha ;\ @@ -169,6 +179,9 @@ deb: stage rm -rf build/debbuild ;\ mkdir -p build/debbuild/usr/local/cloudberry-pxf/$(TARGET_EXTENSION_DIR) ;\ cp -a $(SOURCE_EXTENSION_DIR)/build/stage/* build/debbuild/usr/local/cloudberry-pxf/ ;\ + if [[ -z "$${SKIP_FDW_PACKAGE_REASON:-}" ]] && [[ -d fdw/build/stage ]]; then \ + cp -a fdw/build/stage/* build/debbuild/usr/local/cloudberry-pxf/ ;\ + fi ;\ cp -a cli/build/stage/* build/debbuild/usr/local/cloudberry-pxf ;\ cp -a server/build/stage/* build/debbuild/usr/local/cloudberry-pxf ;\ echo $$(git rev-parse --verify HEAD) > build/debbuild/usr/local/cloudberry-pxf/commit.sha ;\ diff --git a/README.apache.md b/README.apache.md new file mode 100644 index 000000000..cbe8af29f --- /dev/null +++ b/README.apache.md @@ -0,0 +1,45 @@ + + +# Apache Cloudberry PXF (Incubating) License Audit Notes + +This file documents licensing clarifications and exceptions as part of ASF release readiness for Apache Cloudberry PXF (Incubating). + +## Historical Attribution Under Apache License 2.0 + +The following entities have contributed to the Greenplum Platform Extension Framework source code under the Apache License 2.0: + +- Greenplum, Inc. +- EMC Corporation +- VMware, Inc. +- Pivotal Software + +RAT matchers are used to classify their license headers accordingly. + +## Compressed / Archived files + +The following compressed files are included in the source tree. These files are archives of text files used for testing purposes and do not contain binary executables. They are not used during the build process. + +* server/pxf-json/src/test/resources/parser-tests/offset/input.json.bz2 +* server/pxf-json/src/test/resources/parser-tests/offset/big_data.json.bz2 +* server/pxf-json/src/test/resources/tweets.tar.gz +* automation/src/test/resources/data/s3select/sample.csv.gz +* automation/src/test/resources/data/s3select/sample.csv.bz2 +* automation/src/test/resources/data/fixedwidth/fixedwidth_small_correct.txt.gz + diff --git a/README.md b/README.md index e580cd5a7..ff531a404 100755 --- a/README.md +++ b/README.md @@ -1,3 +1,21 @@ + # Platform Extension Framework (PXF) for Apache Cloudberry (Incubating) [![Website](https://img.shields.io/badge/Website-eebc46)](https://cloudberry.apache.org) @@ -78,6 +96,10 @@ To build PXF, you must have: PXF uses Makefiles to build its components. PXF server component uses Gradle that is wrapped into the Makefile for convenience. +> [!NOTE] +> To comply with Apache Software Foundation release guidelines, `gradle-wrapper.jar` is not included in the source distribution. It will be downloaded automatically during the initial build. Please ensure you have an active and stable internet connection. + + ```bash cd cloudberry-pxf/ diff --git a/ci/docker/README.md b/ci/docker/README.md index 2ee66a342..eb2ce63fe 100644 --- a/ci/docker/README.md +++ b/ci/docker/README.md @@ -1,3 +1,21 @@ + # Docker container for Cloudberry development/testing ## Requirements diff --git a/ci/docker/pxf-cbdb-dev/ubuntu/docker-compose.yml b/ci/docker/pxf-cbdb-dev/ubuntu/docker-compose.yml index f6d4d688b..02519cb96 100644 --- a/ci/docker/pxf-cbdb-dev/ubuntu/docker-compose.yml +++ b/ci/docker/pxf-cbdb-dev/ubuntu/docker-compose.yml @@ -1,3 +1,22 @@ +# -------------------------------------------------------------------- +# +# 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. +# +# -------------------------------------------------------------------- services: # hadoop singlecluster: diff --git a/ci/docker/pxf-cbdb-dev/ubuntu/script/build_cloudberrry.sh b/ci/docker/pxf-cbdb-dev/ubuntu/script/build_cloudberrry.sh index 993a21007..e1ae6e262 100755 --- a/ci/docker/pxf-cbdb-dev/ubuntu/script/build_cloudberrry.sh +++ b/ci/docker/pxf-cbdb-dev/ubuntu/script/build_cloudberrry.sh @@ -1,4 +1,22 @@ - +# -------------------------------------------------------------------- +# +# 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 sudo & git sudo apt update && sudo apt install -y sudo git diff --git a/ci/docker/pxf-cbdb-dev/ubuntu/script/build_cloudberry_deb.sh b/ci/docker/pxf-cbdb-dev/ubuntu/script/build_cloudberry_deb.sh index d48720b7e..fc117e888 100755 --- a/ci/docker/pxf-cbdb-dev/ubuntu/script/build_cloudberry_deb.sh +++ b/ci/docker/pxf-cbdb-dev/ubuntu/script/build_cloudberry_deb.sh @@ -1,4 +1,23 @@ #!/bin/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 -euo pipefail # Cloudberry DEB Package Build Script for Ubuntu 22.04 diff --git a/ci/docker/pxf-cbdb-dev/ubuntu/script/build_pxf.sh b/ci/docker/pxf-cbdb-dev/ubuntu/script/build_pxf.sh index a644c1e4f..b48cbc9e7 100755 --- a/ci/docker/pxf-cbdb-dev/ubuntu/script/build_pxf.sh +++ b/ci/docker/pxf-cbdb-dev/ubuntu/script/build_pxf.sh @@ -1,3 +1,22 @@ +# -------------------------------------------------------------------- +# +# 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. +# +# -------------------------------------------------------------------- case "$(uname -m)" in aarch64|arm64) JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-11-openjdk-arm64} ;; x86_64|amd64) JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-11-openjdk-amd64} ;; @@ -49,11 +68,11 @@ export PXF_HOME=/usr/local/pxf sudo mkdir -p "$PXF_HOME" sudo chown -R gpadmin:gpadmin "$PXF_HOME" -# Build all PXF components -make all - -# Install PXF -make install +# Build and Install PXF +make -C external-table install +make -C fdw install +make -C cli install +make -C server install-server # Set up PXF environment diff --git a/ci/docker/pxf-cbdb-dev/ubuntu/script/entrypoint.sh b/ci/docker/pxf-cbdb-dev/ubuntu/script/entrypoint.sh index 80cbb35a8..f3ca1beea 100755 --- a/ci/docker/pxf-cbdb-dev/ubuntu/script/entrypoint.sh +++ b/ci/docker/pxf-cbdb-dev/ubuntu/script/entrypoint.sh @@ -1,4 +1,23 @@ #!/bin/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 -euo pipefail log() { echo "[entrypoint][$(date '+%F %T')] $*"; } diff --git a/ci/docker/pxf-cbdb-dev/ubuntu/script/entrypoint_kerberos.sh b/ci/docker/pxf-cbdb-dev/ubuntu/script/entrypoint_kerberos.sh index 52a26f351..f15ee35c9 100755 --- a/ci/docker/pxf-cbdb-dev/ubuntu/script/entrypoint_kerberos.sh +++ b/ci/docker/pxf-cbdb-dev/ubuntu/script/entrypoint_kerberos.sh @@ -1,4 +1,23 @@ #!/bin/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. +# +# -------------------------------------------------------------------- # Kerberos entrypoint: enable singlecluster + PXF secure setup in one go. set -euo pipefail diff --git a/ci/docker/pxf-cbdb-dev/ubuntu/script/pxf-env.sh b/ci/docker/pxf-cbdb-dev/ubuntu/script/pxf-env.sh index 2743d4a26..bd785ea10 100755 --- a/ci/docker/pxf-cbdb-dev/ubuntu/script/pxf-env.sh +++ b/ci/docker/pxf-cbdb-dev/ubuntu/script/pxf-env.sh @@ -1,4 +1,23 @@ #!/bin/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. +# +# -------------------------------------------------------------------- # Centralized environment for Cloudberry + PXF + Hadoop stack # -------------------------------------------------------------------- diff --git a/ci/docker/pxf-cbdb-dev/ubuntu/script/pxf-test.sh b/ci/docker/pxf-cbdb-dev/ubuntu/script/pxf-test.sh index ede1896b2..386fb1e98 100755 --- a/ci/docker/pxf-cbdb-dev/ubuntu/script/pxf-test.sh +++ b/ci/docker/pxf-cbdb-dev/ubuntu/script/pxf-test.sh @@ -1,4 +1,23 @@ #!/bin/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 -euo pipefail RUN_TESTS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" diff --git a/ci/docker/pxf-cbdb-dev/ubuntu/script/run_tests.sh b/ci/docker/pxf-cbdb-dev/ubuntu/script/run_tests.sh index f45878aba..63b993526 100755 --- a/ci/docker/pxf-cbdb-dev/ubuntu/script/run_tests.sh +++ b/ci/docker/pxf-cbdb-dev/ubuntu/script/run_tests.sh @@ -1,4 +1,23 @@ #!/bin/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 -euo pipefail # Run automation tests only (assumes build/env already prepared) diff --git a/ci/docker/pxf-cbdb-dev/ubuntu/script/start_minio.bash b/ci/docker/pxf-cbdb-dev/ubuntu/script/start_minio.bash index 2d1be0054..896c6d7f9 100755 --- a/ci/docker/pxf-cbdb-dev/ubuntu/script/start_minio.bash +++ b/ci/docker/pxf-cbdb-dev/ubuntu/script/start_minio.bash @@ -1,4 +1,23 @@ #!/bin/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 diff --git a/ci/docker/pxf-cbdb-dev/ubuntu/script/utils.sh b/ci/docker/pxf-cbdb-dev/ubuntu/script/utils.sh index dbf8c844a..786017fc0 100644 --- a/ci/docker/pxf-cbdb-dev/ubuntu/script/utils.sh +++ b/ci/docker/pxf-cbdb-dev/ubuntu/script/utils.sh @@ -1,4 +1,23 @@ #!/bin/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. +# +# -------------------------------------------------------------------- # Shared health-check helpers for entrypoint and run_tests set -euo pipefail diff --git a/ci/singlecluster/Dockerfile b/ci/singlecluster/Dockerfile index abb60e3cc..accf1d513 100644 --- a/ci/singlecluster/Dockerfile +++ b/ci/singlecluster/Dockerfile @@ -1,3 +1,22 @@ +# -------------------------------------------------------------------- +# +# 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. +# +# -------------------------------------------------------------------- FROM apache/incubator-cloudberry:cbdb-build-ubuntu22.04-latest ENV DEBIAN_FRONTEND noninteractive diff --git a/ci/singlecluster/templates/hive/conf/hive-env.sh b/ci/singlecluster/templates/hive/conf/hive-env.sh index 7791c8a86..a5bb77d85 100755 --- a/ci/singlecluster/templates/hive/conf/hive-env.sh +++ b/ci/singlecluster/templates/hive/conf/hive-env.sh @@ -1,3 +1,22 @@ +# -------------------------------------------------------------------- +# +# 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. +# +# -------------------------------------------------------------------- # load singlecluster environment . $GPHD_ROOT/bin/gphd-env.sh diff --git a/fdw/Makefile b/fdw/Makefile index 91dea429e..c195edbb6 100644 --- a/fdw/Makefile +++ b/fdw/Makefile @@ -11,7 +11,7 @@ PG_CPPFLAGS := -DPXF_API_VERSION=\"$(PXF_API_VERSION)\" PG_CONFIG ?= pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) ifndef PGXS - $(error Make sure the Greenplum installation binaries are in your PATH. i.e. export PATH=/bin:$$PATH) + $(error Make sure the Cloudberry installation binaries are in your PATH. i.e. export PATH=/bin:$$PATH) endif include $(PGXS) diff --git a/fdw/pxf_fdw.control b/fdw/pxf_fdw.control index e10226c73..9df860a49 100644 --- a/fdw/pxf_fdw.control +++ b/fdw/pxf_fdw.control @@ -1,6 +1,6 @@ # pxf_fdw extension directory = 'extension' -comment = 'PXF Foreign Data Wrapper for Greenplum' +comment = 'PXF Foreign Data Wrapper for Apache Cloudberry' default_version = '2.0' module_pathname = '$libdir/pxf_fdw' relocatable = true diff --git a/package/DEBIAN/postinst b/package/DEBIAN/postinst index 35578858e..46270d49f 100755 --- a/package/DEBIAN/postinst +++ b/package/DEBIAN/postinst @@ -1,4 +1,9 @@ #!/bin/sh sed -i "s|directory =.*|directory = '/usr/local/cloudberry-pxf/gpextable/'|g" "/usr/local/cloudberry-pxf/gpextable/pxf.control" -sed -i "s|module_pathname =.*|module_pathname = '/usr/local/cloudberry-pxf/gpextable/pxf'|g" "/usr/local/cloudberry-pxf/gpextable/pxf.control" \ No newline at end of file +sed -i "s|module_pathname =.*|module_pathname = '/usr/local/cloudberry-pxf/gpextable/pxf'|g" "/usr/local/cloudberry-pxf/gpextable/pxf.control" + +if [ -f "/usr/local/cloudberry-pxf/fdw/pxf_fdw.control" ]; then + sed -i "s|directory =.*|directory = '/usr/local/cloudberry-pxf/fdw/'|g" "/usr/local/cloudberry-pxf/fdw/pxf_fdw.control" + sed -i "s|module_pathname =.*|module_pathname = '/usr/local/cloudberry-pxf/fdw/pxf_fdw'|g" "/usr/local/cloudberry-pxf/fdw/pxf_fdw.control" +fi diff --git a/package/README.md b/package/README.md index e235b0a19..025b42a60 100644 --- a/package/README.md +++ b/package/README.md @@ -3,7 +3,7 @@ PXF Packaging Apache Cloudberry PXF (Platform Extension Framework) consists of 3 groups of artifacts, each developed using a different underlying technology: -* Apache Cloudberry extension -- written in C; when built, produces a `pxf.so` library and configuration files +* Apache Cloudberry extensions -- written in C; when built, produces the `pxf` (external table) and `pxf_fdw` (foreign data wrapper) libraries and extension files * PXF Server -- written in Java; when built, produces a `pxf.war` file, Tomcat server, dependent JAR files, templates and scripts * Script Cluster Plugin -- written in Go; when built, produces a `pxf-cli` executable diff --git a/package/cloudberry-pxf-release.sh b/package/cloudberry-pxf-release.sh new file mode 100755 index 000000000..fc0352c4a --- /dev/null +++ b/package/cloudberry-pxf-release.sh @@ -0,0 +1,646 @@ +#!/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. +# +# ====================================================================== +# +# cloudberry-pxf-release.sh — Cloudberry PXF (Incubating) release utility +# +# This script automates the preparation of an Apache Cloudberry release +# candidate, including version validation, tag creation, and source +# tarball assembly. +# +# Supported Features: +# - Validates version consistency between release tag and version file +# - Supports both final releases and release candidates (e.g., 2.0.0-incubating, 2.0.0-incubating-rc1) +# - Optionally reuses existing annotated Git tags if they match the current HEAD +# - Verifies that Git submodules are initialized (if defined in .gitmodules) +# - Verifies Git identity (user.name and user.email) prior to tagging +# - Recursively archives all submodules into the source tarball +# - Generates SHA-512 checksum (.sha512) using sha512sum for cross-platform consistency +# - Generates GPG signature (.asc) for the source tarball, unless --skip-signing is used +# - Moves signed artifacts into a dedicated artifacts/ directory +# - Verifies integrity and authenticity of artifacts via SHA-512 checksum and GPG signature +# - Allows skipping of upstream remote URL validation (e.g., for forks) via --skip-remote-check +# - Excludes macOS extended attribute files (._*, .DS_Store, __MACOSX) for cross-platform compatibility +# - Validates availability of required tools (sha512sum, gtar, gpg) with platform-specific guidance +# +# Usage: +# ./cloudberry-pxf-release.sh --stage --tag 2.0.0-incubating-rc1 --gpg-user your@apache.org +# +# Options: +# -s, --stage Stage a release candidate and generate source tarball +# -t, --tag Tag to apply or validate (e.g., 2.0.0-incubating-rc1) +# -f, --force-tag-reuse Allow reuse of an existing tag (must match HEAD) +# -r, --repo Optional path to local cloudberry-pxf Git repository +# -S, --skip-remote-check Skip validation of remote.origin.url (useful for forks/mirrors) +# -g, --gpg-user GPG key ID or email to use for signing (required) +# -k, --skip-signing Skip GPG key validation and signature generation +# -h, --help Show usage and exit +# +# Requirements: +# - Must be run from the root of a valid cloudberry-pxf Git clone, +# or the path must be explicitly provided using --repo +# - Git user.name and user.email must be configured +# - Repository remote must be: git@github.com:apache/cloudberry-pxf.git +# - Required tools: sha512sum, tar (gtar on macOS), gpg, xmllint +# - On macOS: brew install coreutils gnu-tar gnupg +# +# Examples: +# ./cloudberry-pxf-release.sh -s -t 2.0.0-incubating-rc1 --gpg-user your@apache.org +# ./cloudberry-pxf-release.sh -s -t 2.0.0-incubating-rc1 --skip-signing +# ./cloudberry-pxf-release.sh --stage --tag 2.0.0-incubating-rc2 --force-tag-reuse --gpg-user your@apache.org +# ./cloudberry-pxf-release.sh --stage --tag 2.0.0-incubating-rc1 -r ~/cloudberry-pxf --skip-remote-check --gpg-user your@apache.org +# +# Notes: +# - When reusing a tag, the `--force-tag-reuse` flag must be provided. +# ====================================================================== + +set -euo pipefail + +# Global variables for detected platform and tools +DETECTED_PLATFORM="" +DETECTED_SHA_TOOL="" +DETECTED_TAR_TOOL="" + +# Platform detection and tool check +check_platform_and_tools() { + local has_errors=false + + # Detect platform + case "$(uname -s)" in + Linux*) DETECTED_PLATFORM="Linux" ;; + Darwin*) DETECTED_PLATFORM="macOS" ;; + CYGWIN*|MINGW*|MSYS*) DETECTED_PLATFORM="Windows" ;; + *) DETECTED_PLATFORM="Unknown" ;; + esac + + echo "Platform detected: $DETECTED_PLATFORM" + echo + + # Check sha512sum + if command -v sha512sum >/dev/null 2>&1; then + DETECTED_SHA_TOOL="sha512sum" + echo "[OK] SHA-512 tool: $DETECTED_SHA_TOOL" + else + echo "[ERROR] SHA-512 tool: sha512sum not found" + has_errors=true + fi + + # Check tar tool + if [[ "$DETECTED_PLATFORM" == "macOS" ]]; then + if command -v gtar >/dev/null 2>&1; then + DETECTED_TAR_TOOL="gtar" + echo "[OK] Tar tool: $DETECTED_TAR_TOOL (GNU tar)" + else + echo "[ERROR] Tar tool: gtar not found (GNU tar required on macOS)" + has_errors=true + fi + else + if command -v tar >/dev/null 2>&1; then + DETECTED_TAR_TOOL="tar" + echo "[OK] Tar tool: $DETECTED_TAR_TOOL" + else + echo "[ERROR] Tar tool: tar not found" + has_errors=true + fi + fi + + # Check GPG tool (only when signing is required) + if [[ "$SKIP_SIGNING" == true ]]; then + echo "- GPG tool: skipped (--skip-signing enabled)" + else + if command -v gpg >/dev/null 2>&1; then + local gpg_version=$(gpg --version | head -n1 | sed 's/gpg (GnuPG) //') + echo "[OK] GPG tool: gpg $gpg_version" + else + echo "[ERROR] GPG tool: gpg not found" + has_errors=true + fi + fi + + # Check xmllint tool + if command -v xmllint >/dev/null 2>&1; then + echo "[OK] XML tool: xmllint" + else + echo "[ERROR] XML tool: xmllint not found" + has_errors=true + fi + + # Show installation guidance if there are errors + if [[ "$has_errors" == true ]]; then + echo + echo "Missing required tools. Installation guidance:" + case "$DETECTED_PLATFORM" in + Linux) + echo " Please install required packages: coreutils tar gnupg libxml2-utils" + ;; + macOS) + echo " brew install coreutils gnu-tar gnupg" + ;; + Windows) + echo " Please use Git Bash or install GNU tools" + ;; + *) + echo " Please install GNU coreutils, tar, GnuPG, and libxml2" + ;; + esac + echo + echo "These tools ensure consistent cross-platform behavior and secure signing." + return 1 + fi + + return 0 +} + +confirm() { + read -r -p "$1 [y/N] " response + case "$response" in + [yY][eE][sS]|[yY]) true ;; + *) echo "Aborted."; exit 1 ;; + esac +} + +# Interactive step confirmation +confirm_next_step() { + echo + read -r -p "Press Enter or type y/yes to continue, or 'n' to exit: " response + case "$response" in + ""|[yY][eE][sS]|[yY]) + return 0 + ;; + [nN]|[nN][oO]) + echo "Process stopped by user." + exit 0 + ;; + *) + echo "Invalid input. Please press Enter or type y/yes to continue, or 'n' to exit." + confirm_next_step + ;; + esac +} + +section() { + echo + echo "=================================================================" + echo ">> $1" + echo "=================================================================" +} + +show_help() { + echo "Apache Cloudberry PXF (Incubating) Release Tool" + echo + echo "Usage:" + echo " $0 --stage --tag " + echo + echo "Options:" + echo " -s, --stage" + echo " Stage a release candidate and generate source tarball" + echo + echo " -t, --tag " + echo " Required with --stage (e.g., 2.0.0-incubating-rc1)" + echo + echo " -f, --force-tag-reuse" + echo " Reuse existing tag if it matches current HEAD" + echo + echo " -r, --repo " + echo " Optional path to a local cloudberry-pxf Git repository clone" + echo + echo " -S, --skip-remote-check" + echo " Skip remote.origin.url check (use for forks or mirrors)" + echo " Required for official releases:" + echo " git@github.com:apache/cloudberry-pxf.git" + echo + echo " -g, --gpg-user " + echo " GPG key ID or email to use for signing (required unless --skip-signing)" + echo + echo " -k, --skip-signing" + echo " Skip GPG key validation and signature generation" + echo + echo " -h, --help" + echo " Show this help message" + exit 1 +} + +# Flags +STAGE=false +SKIP_SIGNING=false +TAG="" +FORCE_TAG_REUSE=false +REPO_ARG="" +SKIP_REMOTE_CHECK=false +GPG_USER="" + +# Parse arguments +while [[ $# -gt 0 ]]; do + case "$1" in + -g|--gpg-user) + if [[ $# -lt 2 ]]; then + echo "ERROR: --gpg-user requires an email." >&2 + show_help + fi + GPG_USER="$2" + shift 2 + ;; + -s|--stage) + STAGE=true + shift + ;; + -t|--tag) + if [[ $# -lt 2 ]]; then + echo "ERROR: Missing tag value after --tag" >&2 + show_help + fi + TAG="$2" + shift 2 + ;; + -f|--force-tag-reuse) + FORCE_TAG_REUSE=true + shift + ;; + -r|--repo) + if [[ $# -lt 2 ]]; then + echo "ERROR: --repo requires a path." >&2 + show_help + fi + REPO_ARG="$2" + shift 2 + ;; + -S|--skip-remote-check) + SKIP_REMOTE_CHECK=true + shift + ;; + -k|--skip-signing) + SKIP_SIGNING=true + shift + ;; + -h|--help) + show_help + ;; + *) + echo "ERROR: Unknown option: $1" >&2 + show_help + ;; + esac +done + +# GPG signing checks +if [[ "$SKIP_SIGNING" != true ]]; then + if [[ -z "$GPG_USER" ]]; then + echo "ERROR: --gpg-user is required for signing the release tarball." >&2 + show_help + fi + + if ! gpg --list-keys "$GPG_USER" > /dev/null 2>&1; then + echo "ERROR: GPG key '$GPG_USER' not found in your local keyring." >&2 + echo "Please import or generate the key before proceeding." >&2 + exit 1 + fi +else + echo "INFO: GPG signing has been intentionally skipped (--skip-signing)." +fi + +# Resolve repository location +if [[ -n "$REPO_ARG" ]]; then + if [[ ! -d "$REPO_ARG" ]]; then + echo "ERROR: --repo path '$REPO_ARG' does not exist." + exit 1 + fi + cd "$REPO_ARG" +fi + +if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then + echo "ERROR: Current directory is not inside a Git repository." + echo "Run from a cloudberry-pxf clone or pass --repo ." + exit 1 +fi + +REPO_ROOT=$(git rev-parse --show-toplevel) +cd "$REPO_ROOT" + +# Ensure we are in a valid cloudberry-pxf source directory +if [[ ! -f version ]]; then + echo "ERROR: '$REPO_ROOT' does not look like a valid cloudberry-pxf source root." + echo "Missing required file:" + echo " - version" + exit 1 +fi + +if [[ "$SKIP_REMOTE_CHECK" != true ]]; then + REMOTE_URL=$(git config --get remote.origin.url || true) + if [[ "$REMOTE_URL" != "git@github.com:apache/cloudberry-pxf.git" ]]; then + echo "ERROR: remote.origin.url must be 'git@github.com:apache/cloudberry-pxf.git' for official releases." + echo " Found: '${REMOTE_URL:-}'" + echo + echo "This check ensures the release is being staged from the authoritative upstream repository." + echo "Use --skip-remote-check only if this is a fork or non-release automation." + exit 1 + fi +fi + +if ! $STAGE && [[ -z "$TAG" ]]; then + show_help +fi + +if $STAGE && [[ -z "$TAG" ]]; then + echo "ERROR: --tag (-t) is required when using --stage." >&2 + show_help +fi + +# Check platform and required tools early +if $STAGE; then + section "Platform and Tool Detection" + if ! check_platform_and_tools; then + exit 1 + fi + confirm_next_step +fi + +section "Validating Version Consistency" + +# Validate tag format +SEMVER_REGEX='^[0-9]+\.[0-9]+\.[0-9]+-incubating(-rc[0-9]+)?$' +if ! [[ "$TAG" =~ $SEMVER_REGEX ]]; then + echo "ERROR: Tag '$TAG' does not match expected pattern (e.g., 2.0.0-incubating or 2.0.0-incubating-rc1)." + exit 1 +fi + + +# Extract base version from tag (strip -incubating and optional -rcN) +BASE_VERSION=$(echo "$TAG" | sed -E 's/-incubating(-rc[0-9]+)?$//') + +echo "Version validation strategy:" +echo " Tag: $TAG" +echo " Base version (for source files): $BASE_VERSION" + +VERSION_FILE=$(tr -d '[:space:]' < version) +if [[ -z "$VERSION_FILE" ]]; then + echo "ERROR: version file is empty." + exit 1 +fi + +if [[ "$VERSION_FILE" != "$BASE_VERSION" ]]; then + echo "ERROR: version file value ($VERSION_FILE) does not match base version ($BASE_VERSION)." + echo "For RC tags like '$TAG', version should contain '$BASE_VERSION'." + exit 1 +fi + + +# Ensure working tree is clean +if ! git diff-index --quiet HEAD --; then + echo "ERROR: Working tree is not clean. Please commit or stash changes before proceeding." + exit 1 +fi + +echo "Version consistency verified" +printf " %-14s: %s\n" "Release Tag" "$TAG" +printf " %-14s: %s\n" "Base Version" "$BASE_VERSION" +printf " %-14s: %s\n" "version file" "$VERSION_FILE" +confirm_next_step + +section "Checking the state of the Tag" + +# Check if the tag already exists before making any changes +if git rev-parse "$TAG" >/dev/null 2>&1; then + TAG_COMMIT=$(git rev-list -n 1 "$TAG") + HEAD_COMMIT=$(git rev-parse HEAD) + + if [[ "$TAG_COMMIT" == "$HEAD_COMMIT" && "$FORCE_TAG_REUSE" == true ]]; then + echo "INFO: Tag '$TAG' already exists and matches HEAD. Proceeding with reuse." + elif [[ "$FORCE_TAG_REUSE" == true ]]; then + echo "ERROR: --force-tag-reuse was specified but tag '$TAG' does not match HEAD." + echo " Tags must be immutable. Cannot continue." + exit 1 + else + echo "ERROR: Tag '$TAG' already exists and does not match HEAD." + echo " Use --force-tag-reuse only when HEAD matches the tag commit." + exit 1 + fi +elif [[ "$FORCE_TAG_REUSE" == true ]]; then + echo "ERROR: --force-tag-reuse was specified, but tag '$TAG' does not exist." + echo " You can only reuse a tag if it already exists." + exit 1 +else + echo "INFO: Tag '$TAG' does not yet exist. It will be created during staging." +fi + +confirm_next_step + +# Check and display submodule initialization status +if [ -s .gitmodules ]; then + section "Checking Git Submodules" + + UNINITIALIZED=false + while read -r status path rest; do + if [[ "$status" == "-"* ]]; then + echo "Uninitialized: $path" + UNINITIALIZED=true + else + echo "Initialized : $path" + fi + done < <(git submodule status) + + if [[ "$UNINITIALIZED" == true ]]; then + echo + echo "ERROR: One or more Git submodules are not initialized." + echo "Please run:" + echo " git submodule update --init --recursive" + echo "before proceeding with the release preparation." + exit 1 + fi +fi + +section "Checking GIT_USER_NAME and GIT_USER_EMAIL values" + +if $STAGE; then + # Validate Git environment before performing tag operation + GIT_USER_NAME=$(git config --get user.name || true) + GIT_USER_EMAIL=$(git config --get user.email || true) + + echo "Git User Info:" + printf " %-14s: %s\n" "user.name" "${GIT_USER_NAME:-}" + printf " %-14s: %s\n" "user.email" "${GIT_USER_EMAIL:-}" + + if [[ -z "$GIT_USER_NAME" || -z "$GIT_USER_EMAIL" ]]; then + echo "ERROR: Git configuration is incomplete." + echo + echo " Detected:" + echo " user.name = ${GIT_USER_NAME:-}" + echo " user.email = ${GIT_USER_EMAIL:-}" + echo + echo " Git requires both to be set in order to create annotated tags for releases." + echo " You may configure them globally using:" + echo " git config --global user.name \"Your Name\"" + echo " git config --global user.email \"your@apache.org\"" + echo + echo " Alternatively, set them just for this repo using the same commands without --global." + exit 1 + fi + +section "Staging release: $TAG" + + if [[ "$FORCE_TAG_REUSE" == false ]]; then + confirm "You are about to create tag '$TAG'. Continue?" + git tag -a "$TAG" -m "Apache Cloudberry PXF (Incubating) ${TAG} Release Candidate" + else + echo "INFO: Reusing existing tag '$TAG'; skipping tag creation." + fi + + echo -e "\nTag Summary" + TAG_OBJECT=$(git rev-parse "$TAG") + TAG_COMMIT=$(git rev-list -n 1 "$TAG") + echo "$TAG (tag object): $TAG_OBJECT" + echo " Points to commit: $TAG_COMMIT" + git log -1 --format="%C(auto)%h %d" "$TAG" + confirm_next_step + + section "Creating Source Tarball" + + TAR_NAME="apache-cloudberry-pxf-${TAG}-src.tar.gz" + TMP_DIR=$(mktemp -d) + trap 'rm -rf "$TMP_DIR"' EXIT + + # Set environment variables to prevent macOS extended attributes + export COPYFILE_DISABLE=1 + export COPY_EXTENDED_ATTRIBUTES_DISABLE=1 + + # Keep -rcN in the artifact filename for RC voting, but keep the extracted + # top-level directory name as the main version (without -rcN). + git archive --format=tar --prefix="apache-cloudberry-pxf-${VERSION_FILE}/" "$TAG" | tar -x -C "$TMP_DIR" + + # Archive submodules if any + if [ -s .gitmodules ]; then + git submodule foreach --recursive --quiet " + echo \"Archiving submodule: \$sm_path\" + fullpath=\"\$toplevel/\$sm_path\" + destpath=\"$TMP_DIR/apache-cloudberry-pxf-${VERSION_FILE}/\$sm_path\" + mkdir -p \"\$destpath\" + git -C \"\$fullpath\" archive --format=tar --prefix=\"\$sm_path/\" HEAD | tar -x -C \"$TMP_DIR/apache-cloudberry-pxf-${VERSION_FILE}\" + " + fi + + # Clean up macOS extended attributes if on macOS + if [[ "$DETECTED_PLATFORM" == "macOS" ]]; then + echo "Cleaning macOS extended attributes from extracted files..." + # Remove all extended attributes recursively + if command -v xattr >/dev/null 2>&1; then + find "$TMP_DIR/apache-cloudberry-pxf-${VERSION_FILE}" -type f -exec xattr -c {} \; 2>/dev/null || true + echo "[OK] Extended attributes cleaned using xattr" + fi + + # Remove any ._* files that might have been created + find "$TMP_DIR/apache-cloudberry-pxf-${VERSION_FILE}" -name '._*' -delete 2>/dev/null || true + find "$TMP_DIR/apache-cloudberry-pxf-${VERSION_FILE}" -name '.DS_Store' -delete 2>/dev/null || true + find "$TMP_DIR/apache-cloudberry-pxf-${VERSION_FILE}" -name '__MACOSX' -type d -exec rm -rf {} \; 2>/dev/null || true + echo "[OK] macOS-specific files removed" + fi + + # Create tarball using the detected tar tool + if [[ "$DETECTED_PLATFORM" == "macOS" ]]; then + echo "Using GNU tar for cross-platform compatibility..." + $DETECTED_TAR_TOOL --exclude='._*' --exclude='.DS_Store' --exclude='__MACOSX' -czf "$TAR_NAME" -C "$TMP_DIR" "apache-cloudberry-pxf-${VERSION_FILE}" + echo "INFO: macOS detected - applied extended attribute cleanup and GNU tar" + else + # On other platforms, use standard tar + $DETECTED_TAR_TOOL -czf "$TAR_NAME" -C "$TMP_DIR" "apache-cloudberry-pxf-${VERSION_FILE}" + fi + + rm -rf "$TMP_DIR" + echo -e "Archive saved to: $TAR_NAME" + + echo "Verifying tarball does not contain Gradle wrapper files..." + GRADLE_WRAPPER_FILES=$($DETECTED_TAR_TOOL -tzf "$TAR_NAME" | grep -E '(gradle-wrapper\.jar)$' || true) + if [[ -n "$GRADLE_WRAPPER_FILES" ]]; then + echo "WARNING: Found Gradle wrapper files in tarball:" + echo "$GRADLE_WRAPPER_FILES" + echo "These files must be excluded from Apache source release artifacts." + else + echo "[OK] Tarball verified clean of Gradle wrapper files" + fi + + # Verify that no macOS extended attribute files are included + if [[ "$DETECTED_PLATFORM" == "macOS" ]]; then + echo "Verifying tarball does not contain macOS-specific files..." + MACOS_FILES=$($DETECTED_TAR_TOOL -tzf "$TAR_NAME" | grep -E '\._|\.DS_Store|__MACOSX' || true) + if [[ -n "$MACOS_FILES" ]]; then + echo "WARNING: Found macOS-specific files in tarball:" + echo "$MACOS_FILES" + echo "This may cause compilation issues on Linux systems." + else + echo "[OK] Tarball verified clean of macOS-specific files" + fi + + # Additional check for extended attributes in tar headers + echo "Checking for extended attribute headers in tarball..." + if $DETECTED_TAR_TOOL -tvf "$TAR_NAME" 2>&1 | grep -q "LIBARCHIVE.xattr" 2>/dev/null; then + echo "WARNING: Tarball may still contain extended attribute headers" + echo "This could cause 'Ignoring unknown extended header keyword' warnings on Linux" + else + echo "[OK] No extended attribute headers detected in tarball (GNU tar used)" + fi + fi + + confirm_next_step + + # Generate SHA-512 checksum + section "Generating SHA-512 Checksum" + + echo -e "\nGenerating SHA-512 checksum" + sha512sum "$TAR_NAME" > "${TAR_NAME}.sha512" + echo "Checksum saved to: ${TAR_NAME}.sha512" + confirm_next_step + + section "Signing with GPG key: $GPG_USER" + # Conditionally generate GPG signature + if [[ "$SKIP_SIGNING" != true ]]; then + echo -e "\nSigning tarball with GPG key: $GPG_USER" + gpg --armor --detach-sign --local-user "$GPG_USER" "$TAR_NAME" + echo "GPG signature saved to: ${TAR_NAME}.asc" + else + echo "INFO: Skipping tarball signing as requested (--skip-signing)" + fi + + # Move artifacts to top-level artifacts directory + # At this point, we're always in the cloudberry repository directory + # (either we started there, or we cd'd there via --repo) + ARTIFACTS_DIR="$(cd .. && pwd)/artifacts" + + mkdir -p "$ARTIFACTS_DIR" + + section "Moving Artifacts to $ARTIFACTS_DIR" + + echo -e "\nMoving release artifacts to: $ARTIFACTS_DIR" + mv -vf "$TAR_NAME" "$ARTIFACTS_DIR/" + mv -vf "${TAR_NAME}.sha512" "$ARTIFACTS_DIR/" + [[ -f "${TAR_NAME}.asc" ]] && mv -vf "${TAR_NAME}.asc" "$ARTIFACTS_DIR/" + confirm_next_step + + section "Verifying sha512 ($ARTIFACTS_DIR/${TAR_NAME}.sha512) Release Artifact" + (cd "$ARTIFACTS_DIR" && sha512sum -c "${TAR_NAME}.sha512") + confirm_next_step + + section "Verifying GPG Signature ($ARTIFACTS_DIR/${TAR_NAME}.asc) Release Artifact" + + if [[ "$SKIP_SIGNING" != true ]]; then + gpg --verify "$ARTIFACTS_DIR/${TAR_NAME}.asc" "$ARTIFACTS_DIR/$TAR_NAME" + else + echo "INFO: Signature verification skipped (--skip-signing). Signature is only available when generated via this script." + fi + confirm_next_step + + section "Release candidate for $TAG staged successfully" +fi diff --git a/package/cloudberry-pxf.spec b/package/cloudberry-pxf.spec index 24fea7810..b95507dbf 100644 --- a/package/cloudberry-pxf.spec +++ b/package/cloudberry-pxf.spec @@ -1,3 +1,22 @@ +# -------------------------------------------------------------------- +# +# 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. +# +# -------------------------------------------------------------------- # Disable repacking of jars, since it takes forever %define __jar_repack %{nil} @@ -84,6 +103,11 @@ fi sed -i "s|directory =.*|directory = '${RPM_INSTALL_PREFIX}/gpextable/'|g" "${RPM_INSTALL_PREFIX}/gpextable/pxf.control" sed -i "s|module_pathname =.*|module_pathname = '${RPM_INSTALL_PREFIX}/gpextable/pxf'|g" "${RPM_INSTALL_PREFIX}/gpextable/pxf.control" +if [ -f "${RPM_INSTALL_PREFIX}/fdw/pxf_fdw.control" ]; then + sed -i "s|directory =.*|directory = '${RPM_INSTALL_PREFIX}/fdw/'|g" "${RPM_INSTALL_PREFIX}/fdw/pxf_fdw.control" + sed -i "s|module_pathname =.*|module_pathname = '${RPM_INSTALL_PREFIX}/fdw/pxf_fdw'|g" "${RPM_INSTALL_PREFIX}/fdw/pxf_fdw.control" +fi + # Change ownership to gpadmin.gpadmin if the gpadmin user exists if id "gpadmin" &>/dev/null; then chown -R gpadmin:gpadmin ${RPM_INSTALL_PREFIX} diff --git a/pom.xml b/pom.xml new file mode 100644 index 000000000..4863ada78 --- /dev/null +++ b/pom.xml @@ -0,0 +1,1423 @@ + + + + 4.0.0 + + org.apache.cloudberry + cloudberry-pxf + 2.1.0-incubating + pom + + Apache Cloudberry PXF (Incubating) + Platform Extension Framework for Apache Cloudberry (Incubating) + + + + + org.apache.rat + apache-rat-plugin + 0.16.1 + + true + false + + + + external-table/test/pxfbridge_test.c + external-table/test/Makefile + external-table/test/mock/** + external-table/test/pxfutils_test.c + external-table/test/libchurl_test.c + external-table/test/pxffragment_test.c + external-table/pxf.control + external-table/Makefile + external-table/pxf--1.0--2.0.sql + external-table/README.md + external-table/pxf--2.1--2.0.sql + external-table/pxf--2.0--2.1.sql + external-table/pxf--1.0.sql + external-table/pxf--2.1.sql + external-table/pxf--2.0.sql + external-table/src/pxfutils.h + external-table/src/pxfutils.c + external-table/sql/** + + ci/.yamllint + ci/singlecluster/bin/** + ci/singlecluster/templates/zookeeper/conf/zoo.cfg + ci/singlecluster/templates/hadoop/etc/hadoop/yarn-site.xml + ci/singlecluster/templates/hadoop/etc/hadoop/mapred-site.xml + ci/singlecluster/templates/hadoop/etc/hadoop/hadoop-env.sh + ci/singlecluster/templates/hive/conf/hive-site.xml + ci/singlecluster/conf/gphd-conf.sh + ci/singlecluster/README.HDP3.md + + server/pxf-diagnostic/** + server/pxf-hbase/build.gradle + server/pxf-hbase/src/test/java/org/apache/cloudberry/pxf/plugins/hbase/HBaseFragmentMetadataTest.java + server/pxf-hbase/src/main/java/org/apache/cloudberry/pxf/plugins/hbase/HBaseFragmentMetadata.java + server/pxf-api/build.gradle + server/pxf-api/src/test/resources/server-config-test.properties + server/pxf-api/src/test/resources/servers/default/test-red-site.xml + server/pxf-api/src/test/resources/servers/default/test-green.xml + server/pxf-api/src/test/resources/servers/default/test-blue-site.xml + server/pxf-api/src/test/resources/servers/default/dummy-user.xml + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/configuration/PxfServerPropertiesTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/security/** + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/io/DataTypeTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/utilities/CharsetUtilsTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/examples/DemoFragmentMetadataTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/model/BasePluginTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/model/GreenplumCSVTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/model/BaseFragmenterTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/model/RequestContextTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/model/BaseConfigurationFactoryTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/model/OutputFormatTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/filter/ColumnPredicateBuilderTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/filter/ColumnIndexOperandNodeTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/filter/OperatorNodeTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/filter/InOperatorTransformerTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/filter/TreeTraverserTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/filter/NodeTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/filter/SupportedDataTypePrunerTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/filter/ScalarOperandNodeTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/filter/ToStringTreeVisitorTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/filter/CollectionOperandNodeTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/filter/SupportedOperatorPrunerTest.java + server/pxf-api/src/test/java/org/apache/cloudberry/pxf/api/error/PxfRuntimeExceptionTest.java + server/pxf-api/src/test/java/org/apache/hadoop/security/LoginSessionTest.java + server/pxf-api/src/test/java/org/apache/hadoop/security/PxfUserGroupInformationTest.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/configuration/PxfServerProperties.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/security/GSSCredentialProvider.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/function/** + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/utilities/SerializationService.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/utilities/FragmenterCacheFactory.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/utilities/SpringContext.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/utilities/CharsetUtils.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/examples/DemoFragmentMetadata.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/model/BasePlugin.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/model/GreenplumCSV.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/model/ConfigurationFactory.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/model/InputStreamHandler.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/model/PluginConf.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/model/Plugin.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/model/ProtocolHandler.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/model/WriteVectorizedResolver.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/model/BaseConfigurationFactory.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/model/Fragmenter.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/model/BaseFragmenter.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/GreenplumDateTime.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/Node.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/ToStringTreeVisitor.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/OperandNode.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/Operator.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/OperatorNode.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/ColumnPredicateBuilder.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/InOperatorTransformer.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/CollectionOperandNode.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/ScalarOperandNode.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/ColumnIndexOperandNode.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/TreeTraverser.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/SupportedDataTypePruner.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/TreeVisitor.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/BaseTreePruner.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/filter/SupportedOperatorPruner.java + server/pxf-api/src/main/java/org/apache/cloudberry/pxf/api/error/PxfRuntimeException.java + server/pxf-api/src/main/java/org/apache/hadoop/security/PxfUserGroupInformation.java + server/pxf-api/src/main/java/org/apache/hadoop/security/LoginSession.java + server/gradle/wrapper/gradle-wrapper.properties + server/pxf-service/build.gradle + server/pxf-service/src/test/resources/server-config-test.properties + server/pxf-service/src/test/resources/profile/** + server/pxf-service/src/test/resources/data/** + server/pxf-service/src/test/resources/log4j.properties + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/security/PxfSaslPropertiesResolverTest.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/bridge/TestStatsAccessor.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/bridge/BaseBridgeTest.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/bridge/TestReadVectorizedResolver.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/bridge/SimpleBridgeFactoryTest.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/bridge/WriteBridgeTest.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/bridge/TestAccessor.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/bridge/TestWriteVectorizedResolver.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/bridge/TestResolver.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/bridge/ReadBridgeTest.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/PxfApiVersionCheckerTest.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/controller/** + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/HttpHeaderDecoderTest.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/utilities/GSSFailureHandlerTest.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/PxfMetricsIT.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/GPDataGenerator.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/PxfTestConfig.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/FragmenterServiceTest.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/MetricsReporterTest.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/serde/** + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/rest/PxfResourceIT.java + server/pxf-service/src/test/java/org/apache/cloudberry/pxf/service/spring/* + server/pxf-service/src/scripts/pxf-pre-gpupgrade + server/pxf-service/src/scripts/kill-pxf.sh + server/pxf-service/src/scripts/pxf-post-gpupgrade + server/pxf-service/src/scripts/merge-pxf-config.sh + server/pxf-service/src/templates/templates/** + server/pxf-service/src/templates/conf/pxf-application.properties + server/pxf-service/src/templates/conf/pxf-log4j2.xml + server/pxf-service/src/templates/conf/pxf-env.sh + server/pxf-service/src/main/resources/hive-site.xml + server/pxf-service/src/main/resources/hiveserver2-site.xml + server/pxf-service/src/main/resources/hivemetastore-site.xml + server/pxf-service/src/main/resources/banner.txt + server/pxf-service/src/main/resources/application.properties + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/PxfApiVersionChecker.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/MetricsReporter.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/PxfServiceApplication.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/HttpRequestParser.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/security/PxfSaslPropertiesResolver.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/security/BaseSecurityService.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/bridge/BaseBridge.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/bridge/BridgeFactory.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/bridge/WriteVectorizedBridge.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/bridge/SimpleBridgeFactory.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/controller/** + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/utilities/ThrowingSupplier.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/utilities/GSSFailureHandler.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/utilities/BasePluginFactory.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/HttpHeaderDecoder.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/profile/Profile.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/profile/Profiles.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/serde/StreamRecordReader.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/serde/GPDBWritableRecordReader.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/serde/TextRecordReader.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/serde/BaseRecordReader.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/serde/RecordReader.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/serde/RecordReaderFactory.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/RequestParser.java + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/rest/** + server/pxf-service/src/main/java/org/apache/cloudberry/pxf/service/spring/** + server/doc/dependency_decisions.yml + server/doc/README.md + server/pxf-hdfs/build.gradle + server/pxf-hdfs/src/test/resources/log4j2.xml + server/pxf-hdfs/src/test/resources/avro/user-provided.avsc + server/pxf-hdfs/src/test/resources/avro/user provided.avsc + server/pxf-hdfs/src/test/resources/csv/** + server/pxf-hdfs/src/test/resources/orc/Makefile + server/pxf-hdfs/src/test/resources/orc/README.md + server/pxf-hdfs/src/test/resources/parquet/unsupported_list_of_lists_type.schema + server/pxf-hdfs/src/test/resources/parquet/invalid_list_schema_without_element_group.schema + server/pxf-hdfs/src/test/resources/parquet/primitive_types.schema + server/pxf-hdfs/src/test/resources/parquet/old-repeated-int.parquet + server/pxf-hdfs/src/test/resources/parquet/primitive_types.txt + server/pxf-hdfs/src/test/resources/parquet/parquet_types.schema + server/pxf-hdfs/src/test/resources/parquet/parquet_types.csv + server/pxf-hdfs/src/test/resources/parquet/README.md + server/pxf-hdfs/src/test/resources/parquet/invalid_list_schema_with_invalid_repeated_group.schema + server/pxf-hdfs/src/test/resources/parquet/invalid_list_schema_without_repeated_group.schema + server/pxf-hdfs/src/test/resources/parquet/unsupported_map_type.schema + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/ParquetFileAccessorTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/HdfsFileFragmenterTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/AvroResolverTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/AvroFileAccessorTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/ParquetWriteTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/HdfsDataFragmenterTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/HcfsFragmentMetadataTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/utilities/DecimalOverflowOptionTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/utilities/PgArrayBuilderTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/utilities/DecimalUtilitiesTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/utilities/PxfInputFormatTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/HcfsTypeTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/avro/** + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/ParquetResolverTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/orc/** + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/filter/** + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/QuotedLineBreakAccessorTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/parquet/** + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/QuotedLineBreakAccessorReadLineTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/HdfsSplittableDataAccessorTest.java + server/pxf-hdfs/src/test/java/org/apache/cloudberry/pxf/plugins/hdfs/LineBreakAccessorTest.java + server/pxf-hdfs/src/main/java/org/apache/cloudberry/pxf/plugins/hdfs/HcfsType.java + server/pxf-hdfs/src/main/java/org/apache/cloudberry/pxf/plugins/hdfs/IncompatibleInputStreamException.java + server/pxf-hdfs/src/main/java/org/apache/cloudberry/pxf/plugins/hdfs/HdfsFileFragmenter.java + server/pxf-hdfs/src/main/java/org/apache/cloudberry/pxf/plugins/hdfs/HcfsFragmentMetadata.java + server/pxf-hdfs/src/main/java/org/apache/cloudberry/pxf/plugins/hdfs/utilities/PgArrayBuilder.java + server/pxf-hdfs/src/main/java/org/apache/cloudberry/pxf/plugins/hdfs/utilities/DecimalUtilities.java + server/pxf-hdfs/src/main/java/org/apache/cloudberry/pxf/plugins/hdfs/utilities/DecimalOverflowOption.java + server/pxf-hdfs/src/main/java/org/apache/cloudberry/pxf/plugins/hdfs/avro/** + server/pxf-hdfs/src/main/java/org/apache/cloudberry/pxf/plugins/hdfs/orc/** + server/pxf-hdfs/src/main/java/org/apache/cloudberry/pxf/plugins/hdfs/filter/** + server/pxf-hdfs/src/main/java/org/apache/cloudberry/pxf/plugins/hdfs/parquet/ParquetUtilities.java + server/pxf-hdfs/src/main/java/org/apache/cloudberry/pxf/plugins/hdfs/parquet/ParquetTypeConverter.java + server/pxf-hdfs/src/main/java/org/apache/cloudberry/pxf/plugins/hdfs/parquet/ParquetOperatorPruner.java + server/pxf-hdfs/src/main/java/org/apache/cloudberry/pxf/plugins/hdfs/parquet/ParquetRecordFilterBuilder.java + server/pxf-hive/build.gradle + server/pxf-hive/src/test/java/org/apache/cloudberry/pxf/plugins/hive/HiveFragmentMetadataTest.java + server/pxf-hive/src/test/java/org/apache/cloudberry/pxf/plugins/hive/HiveParquetFilterPushDownTest.java + server/pxf-hive/src/test/java/org/apache/cloudberry/pxf/plugins/hive/HiveResolverTest.java + server/pxf-hive/src/test/java/org/apache/cloudberry/pxf/plugins/hive/HiveClientWrapperTest.java + server/pxf-hive/src/test/java/org/apache/cloudberry/pxf/plugins/hive/HiveMetastoreCompatibilityTest.java + server/pxf-hive/src/test/java/org/apache/cloudberry/pxf/plugins/hive/HiveAccessorTest.java + server/pxf-hive/src/test/java/org/apache/cloudberry/pxf/plugins/hive/HiveProtocolHandlerTest.java + server/pxf-hive/src/main/java/org/apache/cloudberry/pxf/plugins/hive/HivePartition.java + server/pxf-hive/src/main/java/org/apache/cloudberry/pxf/plugins/hive/HiveMetadata.java + server/pxf-hive/src/main/java/org/apache/cloudberry/pxf/plugins/hive/HiveClientWrapper.java + server/pxf-hive/src/main/java/org/apache/cloudberry/pxf/plugins/hive/HiveFragmentMetadata.java + server/pxf-hive/src/main/java/org/apache/cloudberry/pxf/plugins/hive/HivePartitionPruner.java + server/pxf-hive/src/main/java/org/apache/cloudberry/pxf/plugins/hive/HiveProtocolHandler.java + server/pxf-hive/src/main/java/org/apache/cloudberry/pxf/plugins/hive/orc/PxfReaderImpl.java + server/pxf-hive/src/main/java/org/apache/hadoop/hive/ql/io/orc/PxfRecordReaderImpl.java + server/pxf-hive/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClientCompatibility1xx.java + server/pxf-json/build.gradle + server/pxf-json/src/test/resources/test-write-rows-one.jsonl + server/pxf-json/src/test/resources/test-write-rows-three.jsonl + server/pxf-json/src/test/resources/parser-tests/offset/README.md + server/pxf-json/src/test/java/org/apache/cloudberry/pxf/plugins/json/** + server/pxf-json/src/main/java/org/apache/cloudberry/pxf/plugins/json/JsonUtilities.java + server/pxf-json/src/main/java/org/apache/cloudberry/pxf/plugins/json/JsonProtocolHandler.java + server/pxf-jdbc/README.md + server/pxf-jdbc/build.gradle + server/pxf-jdbc/src/test/resources/servers/test-server/** + server/pxf-jdbc/src/test/java/org/apache/cloudberry/pxf/plugins/jdbc/PxfJdbcPropertiesTest.java + server/pxf-jdbc/src/test/java/org/apache/cloudberry/pxf/plugins/jdbc/JdbcPredicateBuilderTest.java + server/pxf-jdbc/src/test/java/org/apache/cloudberry/pxf/plugins/jdbc/FakeJdbcDriver.java + server/pxf-jdbc/src/test/java/org/apache/cloudberry/pxf/plugins/jdbc/utils/ConnectionManagerTest.java + server/pxf-jdbc/src/test/java/org/apache/cloudberry/pxf/plugins/jdbc/utils/oracle/OracleSessionQueryFactoryTest.java + server/pxf-jdbc/src/test/java/org/apache/cloudberry/pxf/plugins/jdbc/utils/oracle/OracleParallelSessionParamFactoryTest.java + server/pxf-jdbc/src/test/java/org/apache/cloudberry/pxf/plugins/jdbc/utils/HiveJdbcUtilsTest.java + server/pxf-jdbc/src/test/java/org/apache/cloudberry/pxf/plugins/jdbc/utils/PoolDescriptorTest.java + server/pxf-jdbc/src/test/java/org/apache/cloudberry/pxf/plugins/jdbc/JdbcResolverTest.java + server/pxf-jdbc/src/test/java/org/apache/cloudberry/pxf/plugins/jdbc/JdbcTestConfig.java + server/pxf-jdbc/src/test/java/org/apache/cloudberry/pxf/plugins/jdbc/JdbcAccessorTest.java + server/pxf-jdbc/src/test/java/org/apache/cloudberry/pxf/plugins/jdbc/partitioning/PartitionTypeTest.java + server/pxf-jdbc/src/main/java/org/apache/cloudberry/pxf/plugins/jdbc/Interval.java + server/pxf-jdbc/src/main/java/org/apache/cloudberry/pxf/plugins/jdbc/utils/oracle/** + server/pxf-jdbc/src/main/java/org/apache/cloudberry/pxf/plugins/jdbc/utils/ConnectionManager.java + server/pxf-jdbc/src/main/java/org/apache/cloudberry/pxf/plugins/jdbc/utils/PoolDescriptor.java + server/pxf-jdbc/src/main/java/org/apache/cloudberry/pxf/plugins/jdbc/utils/HiveJdbcUtils.java + server/pxf-jdbc/src/main/java/org/apache/cloudberry/pxf/plugins/jdbc/IntervalType.java + server/pxf-jdbc/src/main/java/org/apache/cloudberry/pxf/plugins/jdbc/partitioning/BasePartition.java + server/pxf-jdbc/src/main/java/org/apache/cloudberry/pxf/plugins/jdbc/PxfJdbcProperties.java + server/pxf-s3/build.gradle + server/pxf-s3/src/test/resources/log4j.properties + server/pxf-s3/src/test/java/org/apache/cloudberry/pxf/plugins/s3/** + server/pxf-s3/src/main/java/org/apache/cloudberry/pxf/plugins/s3/** + + automation/tincrepo/main/pxf/features/orc/read/null_in_string/** + automation/Makefile + automation/pxf_regress/go.mod + automation/pxf_regress/Makefile + automation/pxf_regress/global_init_file + automation/pxf_regress/README.md + automation/pxf_regress/main.go + automation/pom.xml + automation/README.md + automation/README.Linux.md + automation/sqlrepo/smoke/small_data/expected/** + automation/sqlrepo/smoke/small_data/sql/** + automation/sqlrepo/smoke/hcatalog_small_data/expected/** + automation/sqlrepo/smoke/hcatalog_small_data/sql/** + automation/sqlrepo/smoke/multi_block/expected/** + automation/sqlrepo/smoke/multi_block/sql/** + automation/sqlrepo/proxy/small_data/expected/** + automation/sqlrepo/proxy/small_data/sql/** + automation/sqlrepo/proxy/hive_small_data/expected/** + automation/sqlrepo/proxy/hive_small_data/sql/** + automation/sqlrepo/proxy/hive_small_data_ipa/expected/** + automation/sqlrepo/proxy/hive_small_data_ipa/sql/** + automation/sqlrepo/proxy/hbase_small_data/expected/** + automation/sqlrepo/proxy/hbase_small_data/sql/** + automation/sqlrepo/proxy/small_data_ipa/expected/** + automation/sqlrepo/proxy/small_data_ipa/sql/** + automation/sqlrepo/features/small_data_orc/expected/query01.ans + automation/sqlrepo/features/small_data_orc/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_cr/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_cr/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/encoding_quote_escape/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/encoding_quote_escape/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/encoding_bytes/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/encoding_bytes/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/three_byte/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/three_byte/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_quote_and_escape/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_quote_and_escape/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/one_byte/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/one_byte/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_wrong_eol/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_wrong_eol/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_quote/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_quote/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/no_profile/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/no_profile/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/multi_char/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/multi_char/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/encoding/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/encoding/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/encoding_quote/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/encoding_quote/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_wrong_escape/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_wrong_escape/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/wrong_profile/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/wrong_profile/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_crlf/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_crlf/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/one_col_quote/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/one_col_quote/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/four_byte/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/four_byte/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/two_byte_wrong_formatter/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/two_byte_wrong_formatter/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/quote_escape_newline/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/quote_escape_newline/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_wrong_eol_5X/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_wrong_eol_5X/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_wrong_quote_5X/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_wrong_quote_5X/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/two_byte_no_delim/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/two_byte_no_delim/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_wrong_delim/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_wrong_delim/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_wrong_quote/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_wrong_quote/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/two_byte/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/two_byte/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/one_col/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/one_col/sql/query01.sql + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_bzip2/expected/query01.ans + automation/sqlrepo/features/multibyte_delimiter/two_byte_with_bzip2/sql/query01.sql + automation/sqlrepo/features/multi_user/expected/query02.ans + automation/sqlrepo/features/multi_user/expected/query01.ans + automation/sqlrepo/features/multi_user/sql/query01.sql + automation/sqlrepo/features/multi_user/sql/query02.sql + automation/sqlrepo/features/general/databaseEncoding/readOtherEncoding/expected/query01.ans + automation/sqlrepo/features/general/databaseEncoding/readOtherEncoding/sql/query01.sql + automation/sqlrepo/features/general/databaseEncoding/readUTF8/expected/query01.ans + automation/sqlrepo/features/general/databaseEncoding/readUTF8/sql/query01.sql + automation/sqlrepo/features/general/outOfMemory/expected/query01.ans + automation/sqlrepo/features/general/outOfMemory/sql/query01.sql + automation/sqlrepo/features/general/alter/csv/expected/query01.ans + automation/sqlrepo/features/general/alter/csv/sql/query01.sql + automation/sqlrepo/features/general/alter/pxfwritable_import/with_column_projection/expected/query01.ans + automation/sqlrepo/features/general/alter/pxfwritable_import/with_column_projection/sql/query01.sql + automation/sqlrepo/features/general/alter/pxfwritable_import/without_column_projection/expected/query01.ans + automation/sqlrepo/features/general/alter/pxfwritable_import/without_column_projection/sql/query01.sql + automation/sqlrepo/features/general/alter/pxfwritable_export/parquet/expected/query01.ans + automation/sqlrepo/features/general/alter/pxfwritable_export/parquet/sql/query01.sql + automation/sqlrepo/features/general/secured/errors/invalid_principal/expected/query01.ans + automation/sqlrepo/features/general/secured/errors/invalid_principal/sql/query01.sql + automation/sqlrepo/features/general/secured/errors/invalid_keytab/expected/query01.ans + automation/sqlrepo/features/general/secured/errors/invalid_keytab/sql/query01.sql + automation/sqlrepo/features/columnprojection/checkColumnProjection_fdw/expected/query01.ans + automation/sqlrepo/features/columnprojection/checkColumnProjection_fdw/sql/query01.sql + automation/sqlrepo/features/columnprojection/checkColumnProjection/expected/query01.ans + automation/sqlrepo/features/columnprojection/checkColumnProjection/sql/query01.sql + automation/sqlrepo/features/columnprojection/checkColumnProjection_gp7/expected/query01.ans + automation/sqlrepo/features/columnprojection/checkColumnProjection_gp7/sql/query01.sql + automation/sqlrepo/features/gpupgrade/extension2_0/step_3_after_running_pxf_post_gpupgrade/expected/query01.ans + automation/sqlrepo/features/gpupgrade/extension2_0/step_3_after_running_pxf_post_gpupgrade/sql/query01.sql + automation/sqlrepo/features/gpupgrade/extension2_0/step_1_before_running_pxf_pre_gpupgrade/expected/query01.ans + automation/sqlrepo/features/gpupgrade/extension2_0/step_1_before_running_pxf_pre_gpupgrade/sql/query01.sql + automation/sqlrepo/features/gpupgrade/extension2_0/step_2_after_running_pxf_pre_gpupgrade/expected/query01.ans + automation/sqlrepo/features/gpupgrade/extension2_0/step_2_after_running_pxf_pre_gpupgrade/sql/query01.sql + automation/sqlrepo/features/gpupgrade/extension2_1/step_3_after_running_pxf_post_gpupgrade/expected/query01.ans + automation/sqlrepo/features/gpupgrade/extension2_1/step_3_after_running_pxf_post_gpupgrade/sql/query01.sql + automation/sqlrepo/features/gpupgrade/extension2_1/step_1_before_running_pxf_pre_gpupgrade/expected/query01.ans + automation/sqlrepo/features/gpupgrade/extension2_1/step_1_before_running_pxf_pre_gpupgrade/sql/query01.sql + automation/sqlrepo/features/gpupgrade/extension2_1/step_2_after_running_pxf_pre_gpupgrade/expected/query01.ans + automation/sqlrepo/features/gpupgrade/extension2_1/step_2_after_running_pxf_pre_gpupgrade/sql/query01.sql + automation/sqlrepo/features/hcatalog/collection_types/expected/query01.ans + automation/sqlrepo/features/hcatalog/collection_types/sql/query01.sql + automation/sqlrepo/features/hcatalog/hive_partitioned_clustered_sorted_table/expected/query01.ans + automation/sqlrepo/features/hcatalog/hive_partitioned_clustered_sorted_table/sql/query01.sql + automation/sqlrepo/features/hcatalog/small_data_orc/expected/query01.ans + automation/sqlrepo/features/hcatalog/small_data_orc/sql/query01.sql + automation/sqlrepo/features/hcatalog/transaction/expected/query01.ans + automation/sqlrepo/features/hcatalog/transaction/sql/query01.sql + automation/sqlrepo/features/hcatalog/small_data/expected/query01.ans + automation/sqlrepo/features/hcatalog/small_data/sql/query01.sql + automation/sqlrepo/features/hcatalog/hive_partitioned_clustered_table/expected/query01.ans + automation/sqlrepo/features/hcatalog/hive_partitioned_clustered_table/sql/query01.sql + automation/sqlrepo/features/hcatalog/hive_partitioned_skewed_table/expected/query01.ans + automation/sqlrepo/features/hcatalog/hive_partitioned_skewed_table/sql/query01.sql + automation/sqlrepo/features/hcatalog/primitive_types/expected/query01.ans + automation/sqlrepo/features/hcatalog/primitive_types/sql/query01.sql + automation/sqlrepo/features/hcatalog/small_data_avro/expected/query01.ans + automation/sqlrepo/features/hcatalog/small_data_avro/sql/query01.sql + automation/sqlrepo/features/hcatalog/hive_text_custom_delimiter/expected/query01.ans + automation/sqlrepo/features/hcatalog/hive_text_custom_delimiter/sql/query01.sql + automation/sqlrepo/features/hcatalog/hive_orc_all_types/expected/query01.ans + automation/sqlrepo/features/hcatalog/hive_orc_all_types/sql/query01.sql + automation/sqlrepo/features/hcatalog/noDataFilePresentForHive/expected/query01.ans + automation/sqlrepo/features/hcatalog/noDataFilePresentForHive/sql/query01.sql + automation/sqlrepo/features/hcatalog/small_data_rc/expected/query01.ans + automation/sqlrepo/features/hcatalog/small_data_rc/sql/query01.sql + automation/sqlrepo/features/hcatalog/hive_partitioned_skewed_stored_as_dirs_table/expected/query01.ans + automation/sqlrepo/features/hcatalog/hive_partitioned_skewed_stored_as_dirs_table/sql/query01.sql + automation/sqlrepo/features/hcatalog/heterogeneous_table_three_text_partitions/expected/query01.ans + automation/sqlrepo/features/hcatalog/heterogeneous_table_three_text_partitions/sql/query01.sql + automation/sqlrepo/features/hcatalog/small_data_seq/expected/query01.ans + automation/sqlrepo/features/hcatalog/small_data_seq/sql/query01.sql + automation/sqlrepo/features/hcatalog/hive_orc_zlib/expected/query01.ans + automation/sqlrepo/features/hcatalog/hive_orc_zlib/sql/query01.sql + automation/sqlrepo/features/hcatalog/aggregate_queries/expected/query02.ans + automation/sqlrepo/features/hcatalog/aggregate_queries/expected/query01.ans + automation/sqlrepo/features/hcatalog/aggregate_queries/sql/query01.sql + automation/sqlrepo/features/hcatalog/aggregate_queries/sql/query02.sql + automation/sqlrepo/features/hcatalog/errors/notExistingHiveTable/expected/query01.ans + automation/sqlrepo/features/hcatalog/errors/notExistingHiveTable/sql/query01.sql + automation/sqlrepo/features/hcatalog/errors/hiveViews/expected/query01.ans + automation/sqlrepo/features/hcatalog/errors/hiveViews/sql/query01.sql + automation/sqlrepo/features/hcatalog/partitions_all_types/expected/query02.ans + automation/sqlrepo/features/hcatalog/partitions_all_types/expected/query01.ans + automation/sqlrepo/features/hcatalog/partitions_all_types/sql/query01.sql + automation/sqlrepo/features/hcatalog/partitions_all_types/sql/query02.sql + automation/sqlrepo/features/hcatalog/hive_partitioned_table/expected/query01.ans + automation/sqlrepo/features/hcatalog/hive_partitioned_table/sql/query01.sql + automation/sqlrepo/features/hcatalog/heterogeneous_table/expected/query01.ans + automation/sqlrepo/features/hcatalog/heterogeneous_table/sql/query01.sql + automation/sqlrepo/features/hcatalog/hive_orc_snappy/expected/query01.ans + automation/sqlrepo/features/hcatalog/hive_orc_snappy/sql/query01.sql + automation/sqlrepo/features/hcatalog/small_data_parquet/expected/query01.ans + automation/sqlrepo/features/hcatalog/small_data_parquet/sql/query01.sql + automation/sqlrepo/features/multi_server/test_all/expected/query01.ans + automation/sqlrepo/features/multi_server/test_all/sql/query01.sql + automation/sqlrepo/features/multi_server/two_secure_hdfs/expected/query01.ans + automation/sqlrepo/features/multi_server/two_secure_hdfs/sql/query01.sql + automation/sqlrepo/features/multi_server/secure_hdfs_and_non_secure_hdfs/expected/query01.ans + automation/sqlrepo/features/multi_server/secure_hdfs_and_non_secure_hdfs/sql/query01.sql + automation/sqlrepo/features/multi_server/test_all_ipa/expected/query01.ans + automation/sqlrepo/features/multi_server/test_all_ipa/sql/query01.sql + automation/sqlrepo/features/multi_server/hdfs_and_cloud/expected/query01.ans + automation/sqlrepo/features/multi_server/hdfs_and_cloud/sql/query01.sql + automation/sqlrepo/features/jdbc/writable_date_wide_range/expected/query01.ans + automation/sqlrepo/features/jdbc/writable_date_wide_range/sql/query01.sql + automation/sqlrepo/features/jdbc/named_query/expected/query01.ans + automation/sqlrepo/features/jdbc/named_query/sql/query01.sql + automation/sqlrepo/features/jdbc/hive_writable/expected/query01.ans + automation/sqlrepo/features/jdbc/hive_writable/sql/query01.sql + automation/sqlrepo/features/jdbc/server_config/expected/query01.ans + automation/sqlrepo/features/jdbc/server_config/sql/query01.sql + automation/sqlrepo/features/jdbc/session_params/expected/query01.ans + automation/sqlrepo/features/jdbc/session_params/sql/query01.sql + automation/sqlrepo/features/jdbc/writable/expected/query01.ans + automation/sqlrepo/features/jdbc/writable/sql/query01.sql + automation/sqlrepo/features/jdbc/multiple_fragments/expected/query03.ans + automation/sqlrepo/features/jdbc/multiple_fragments/expected/query02.ans + automation/sqlrepo/features/jdbc/multiple_fragments/expected/query01.ans + automation/sqlrepo/features/jdbc/multiple_fragments/sql/query01.sql + automation/sqlrepo/features/jdbc/multiple_fragments/sql/query02.sql + automation/sqlrepo/features/jdbc/multiple_fragments/sql/query03.sql + automation/sqlrepo/features/jdbc/readable_nobatch/expected/query01.ans + automation/sqlrepo/features/jdbc/readable_nobatch/sql/query01.sql + automation/sqlrepo/features/jdbc/writable_pool/expected/query01.ans + automation/sqlrepo/features/jdbc/writable_pool/sql/query01.sql + automation/sqlrepo/features/jdbc/readable_date_wide_range/expected/query01.ans + automation/sqlrepo/features/jdbc/readable_date_wide_range/sql/query01.sql + automation/sqlrepo/features/jdbc/write_secured_and_non_secured_hive/expected/query01.ans + automation/sqlrepo/features/jdbc/write_secured_and_non_secured_hive/sql/query01.sql + automation/sqlrepo/features/jdbc/write_two_secured_hive/expected/query01.ans + automation/sqlrepo/features/jdbc/write_two_secured_hive/sql/query01.sql + automation/sqlrepo/features/jdbc/column_projection/expected/query03.ans + automation/sqlrepo/features/jdbc/column_projection/expected/query02.ans + automation/sqlrepo/features/jdbc/column_projection/expected/query01.ans + automation/sqlrepo/features/jdbc/column_projection/expected/query04.ans + automation/sqlrepo/features/jdbc/column_projection/sql/query04.sql + automation/sqlrepo/features/jdbc/column_projection/sql/query01.sql + automation/sqlrepo/features/jdbc/column_projection/sql/query02.sql + automation/sqlrepo/features/jdbc/column_projection/sql/query03.sql + automation/sqlrepo/features/jdbc/hive/expected/query03.ans + automation/sqlrepo/features/jdbc/hive/expected/query02.ans + automation/sqlrepo/features/jdbc/hive/expected/query01.ans + automation/sqlrepo/features/jdbc/hive/expected/query05.ans + automation/sqlrepo/features/jdbc/hive/expected/query04.ans + automation/sqlrepo/features/jdbc/hive/sql/query04.sql + automation/sqlrepo/features/jdbc/hive/sql/query05.sql + automation/sqlrepo/features/jdbc/hive/sql/query01.sql + automation/sqlrepo/features/jdbc/hive/sql/query02.sql + automation/sqlrepo/features/jdbc/hive/sql/query03.sql + automation/sqlrepo/features/jdbc/single_fragment/expected/query01.ans + automation/sqlrepo/features/jdbc/single_fragment/sql/query01.sql + automation/sqlrepo/features/jdbc/columns/expected/query01.ans + automation/sqlrepo/features/jdbc/columns/sql/query01.sql + automation/sqlrepo/features/jdbc/writable_nobatch/expected/query01.ans + automation/sqlrepo/features/jdbc/writable_nobatch/sql/query01.sql + automation/sqlrepo/features/jdbc/two_secured_hive/expected/query03.ans + automation/sqlrepo/features/jdbc/two_secured_hive/expected/query02.ans + automation/sqlrepo/features/jdbc/two_secured_hive/expected/query01.ans + automation/sqlrepo/features/jdbc/two_secured_hive/expected/query05.ans + automation/sqlrepo/features/jdbc/two_secured_hive/expected/query04.ans + automation/sqlrepo/features/jdbc/two_secured_hive/sql/query04.sql + automation/sqlrepo/features/jdbc/two_secured_hive/sql/query05.sql + automation/sqlrepo/features/jdbc/two_secured_hive/sql/query01.sql + automation/sqlrepo/features/jdbc/two_secured_hive/sql/query02.sql + automation/sqlrepo/features/jdbc/two_secured_hive/sql/query03.sql + automation/sqlrepo/features/jdbc/secured_and_non_secured_hive/expected/query03.ans + automation/sqlrepo/features/jdbc/secured_and_non_secured_hive/expected/query02.ans + automation/sqlrepo/features/jdbc/secured_and_non_secured_hive/expected/query01.ans + automation/sqlrepo/features/jdbc/secured_and_non_secured_hive/expected/query05.ans + automation/sqlrepo/features/jdbc/secured_and_non_secured_hive/expected/query04.ans + automation/sqlrepo/features/jdbc/secured_and_non_secured_hive/sql/query04.sql + automation/sqlrepo/features/jdbc/secured_and_non_secured_hive/sql/query05.sql + automation/sqlrepo/features/jdbc/secured_and_non_secured_hive/sql/query01.sql + automation/sqlrepo/features/jdbc/secured_and_non_secured_hive/sql/query02.sql + automation/sqlrepo/features/jdbc/secured_and_non_secured_hive/sql/query03.sql + automation/sqlrepo/features/hdfsha/step_1_pre_failover/expected/query03.ans + automation/sqlrepo/features/hdfsha/step_1_pre_failover/expected/query02.ans + automation/sqlrepo/features/hdfsha/step_1_pre_failover/expected/query01.ans + automation/sqlrepo/features/hdfsha/step_1_pre_failover/expected/query04.ans + automation/sqlrepo/features/hdfsha/step_1_pre_failover/sql/query04.sql + automation/sqlrepo/features/hdfsha/step_1_pre_failover/sql/query01.sql + automation/sqlrepo/features/hdfsha/step_1_pre_failover/sql/query02.sql + automation/sqlrepo/features/hdfsha/step_1_pre_failover/sql/query03.sql + automation/sqlrepo/features/hdfsha/step_2_after_failover/expected/query03.ans + automation/sqlrepo/features/hdfsha/step_2_after_failover/expected/query02.ans + automation/sqlrepo/features/hdfsha/step_2_after_failover/expected/query01.ans + automation/sqlrepo/features/hdfsha/step_2_after_failover/expected/query04.ans + automation/sqlrepo/features/hdfsha/step_2_after_failover/sql/query04.sql + automation/sqlrepo/features/hdfsha/step_2_after_failover/sql/query01.sql + automation/sqlrepo/features/hdfsha/step_2_after_failover/sql/query02.sql + automation/sqlrepo/features/hdfsha/step_2_after_failover/sql/query03.sql + automation/sqlrepo/features/hdfsha/step_3_after_failover_back/expected/query03.ans + automation/sqlrepo/features/hdfsha/step_3_after_failover_back/expected/query02.ans + automation/sqlrepo/features/hdfsha/step_3_after_failover_back/expected/query01.ans + automation/sqlrepo/features/hdfsha/step_3_after_failover_back/expected/query04.ans + automation/sqlrepo/features/hdfsha/step_3_after_failover_back/sql/query04.sql + automation/sqlrepo/features/hdfsha/step_3_after_failover_back/sql/query01.sql + automation/sqlrepo/features/hdfsha/step_3_after_failover_back/sql/query02.sql + automation/sqlrepo/features/hdfsha/step_3_after_failover_back/sql/query03.sql + automation/sqlrepo/features/cloud_access/no_server_credentials_no_config/expected/query01.ans + automation/sqlrepo/features/cloud_access/no_server_credentials_no_config/sql/query01.sql + automation/sqlrepo/features/cloud_access/server_no_credentials_valid_config_with_hdfs/expected/query01.ans + automation/sqlrepo/features/cloud_access/server_no_credentials_valid_config_with_hdfs/sql/query01.sql + automation/sqlrepo/features/cloud_access/server_no_credentials_invalid_config_with_hdfs/expected/query01.ans + automation/sqlrepo/features/cloud_access/server_no_credentials_invalid_config_with_hdfs/sql/query01.sql + automation/sqlrepo/features/cloud_access/server_credentials_invalid_config/expected/query01.ans + automation/sqlrepo/features/cloud_access/server_credentials_invalid_config/sql/query01.sql + automation/sqlrepo/features/cloud_access/server_credentials_no_config/expected/query01.ans + automation/sqlrepo/features/cloud_access/server_credentials_no_config/sql/query01.sql + automation/sqlrepo/features/cloud_access/no_server_credentials_no_config_with_hdfs/expected/query01.ans + automation/sqlrepo/features/cloud_access/no_server_credentials_no_config_with_hdfs/sql/query01.sql + automation/sqlrepo/features/cloud_access/server_no_credentials_invalid_config/expected/query01.ans + automation/sqlrepo/features/cloud_access/server_no_credentials_invalid_config/sql/query01.sql + automation/sqlrepo/features/cloud_access/no_server_no_credentials/expected/query01.ans + automation/sqlrepo/features/cloud_access/no_server_no_credentials/sql/query01.sql + automation/sqlrepo/features/cloud_access/server_no_credentials_valid_config_with_hdfs_write/expected/query01.ans + automation/sqlrepo/features/cloud_access/server_no_credentials_valid_config_with_hdfs_write/sql/query01.sql + automation/sqlrepo/features/cloud_access/server_no_credentials_no_config/expected/query01.ans + automation/sqlrepo/features/cloud_access/server_no_credentials_no_config/sql/query01.sql + automation/sqlrepo/features/cloud_access/server_no_credentials_no_config_with_hdfs/expected/query01.ans + automation/sqlrepo/features/cloud_access/server_no_credentials_no_config_with_hdfs/sql/query01.sql + automation/sqlrepo/features/cloud_access/no_server_no_credentials_with_hdfs/expected/query01.ans + automation/sqlrepo/features/cloud_access/no_server_no_credentials_with_hdfs/sql/query01.sql + automation/sqlrepo/features/cloud_access/server_credentials_invalid_config_with_hdfs/expected/query01.ans + automation/sqlrepo/features/cloud_access/server_credentials_invalid_config_with_hdfs/sql/query01.sql + automation/sqlrepo/features/fdw_extension_tests/upgrade/step_2_after_alter_extension/expected/query01.ans + automation/sqlrepo/features/fdw_extension_tests/upgrade/step_2_after_alter_extension/sql/query01.sql + automation/sqlrepo/features/fdw_extension_tests/upgrade/step_1_create_extension_with_older_pxf_version/expected/query01.ans + automation/sqlrepo/features/fdw_extension_tests/upgrade/step_1_create_extension_with_older_pxf_version/sql/query01.sql + automation/sqlrepo/features/fdw_extension_tests/create_extension_rpm/expected/query01.ans + automation/sqlrepo/features/fdw_extension_tests/create_extension_rpm/sql/query01.sql + automation/sqlrepo/features/fdw_extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade/expected/query01.ans + automation/sqlrepo/features/fdw_extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade/sql/query01.sql + automation/sqlrepo/features/fdw_extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade/expected/query01.ans + automation/sqlrepo/features/fdw_extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade/sql/query01.sql + automation/sqlrepo/features/fdw_extension_tests/downgrade_then_upgrade/step_1_check_extension/expected/query01.ans + automation/sqlrepo/features/fdw_extension_tests/downgrade_then_upgrade/step_1_check_extension/sql/query01.sql + automation/sqlrepo/features/fdw_extension_tests/create_extension/expected/query01.ans + automation/sqlrepo/features/fdw_extension_tests/create_extension/sql/query01.sql + automation/sqlrepo/features/filterpushdown/checkFilterPushDownDisabled/expected/query01.ans + automation/sqlrepo/features/filterpushdown/checkFilterPushDownDisabled/sql/query01.sql + automation/sqlrepo/features/filterpushdown/checkFilterPushDown/expected/query02.ans + automation/sqlrepo/features/filterpushdown/checkFilterPushDown/expected/query01.ans + automation/sqlrepo/features/filterpushdown/checkFilterPushDown/sql/query01.sql + automation/sqlrepo/features/filterpushdown/checkFilterPushDown/sql/query02.sql + automation/sqlrepo/features/filterpushdown/checkFilterPushDownHexDelimiter/expected/query01.ans + automation/sqlrepo/features/filterpushdown/checkFilterPushDownHexDelimiter/sql/query01.sql + automation/sqlrepo/features/s3_select/gzip_csv_use_headers/expected/query01.ans + automation/sqlrepo/features/s3_select/gzip_csv_use_headers/sql/query01.sql + automation/sqlrepo/features/s3_select/bzip2_csv_use_headers/expected/query01.ans + automation/sqlrepo/features/s3_select/bzip2_csv_use_headers/sql/query01.sql + automation/sqlrepo/features/s3_select/csv/expected/query02.ans + automation/sqlrepo/features/s3_select/csv/expected/query01.ans + automation/sqlrepo/features/s3_select/csv/sql/query01.sql + automation/sqlrepo/features/s3_select/csv/sql/query02.sql + automation/sqlrepo/features/s3_select/errors/csv_use_headers_with_wrong_col_names/expected/query01.ans + automation/sqlrepo/features/s3_select/errors/csv_use_headers_with_wrong_col_names/sql/query01.sql + automation/sqlrepo/features/s3_select/csv_use_headers/expected/query01.ans + automation/sqlrepo/features/s3_select/csv_use_headers/sql/query01.sql + automation/sqlrepo/features/s3_select/parquet_gzip/expected/query01.ans + automation/sqlrepo/features/s3_select/parquet_gzip/sql/query01.sql + automation/sqlrepo/features/s3_select/parquet/expected/query01.ans + automation/sqlrepo/features/s3_select/parquet/sql/query01.sql + automation/sqlrepo/features/s3_select/csv_noheaders/expected/query01.ans + automation/sqlrepo/features/s3_select/csv_noheaders/sql/query01.sql + automation/sqlrepo/features/s3_select/parquet_snappy/expected/query01.ans + automation/sqlrepo/features/s3_select/parquet_snappy/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/json/empty_root/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/json/empty_root/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/json/primitive_types_object_compressed/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/json/primitive_types_object_compressed/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/json/array_types_object/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/json/array_types_object/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/json/invalid_encoding/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/json/invalid_encoding/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/json/primitive_types_rows/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/json/primitive_types_rows/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/json/array_types_rows/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/json/array_types_rows/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/json/primitive_types_rows_compressed/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/json/primitive_types_rows_compressed/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/json/primitive_types_object/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/json/primitive_types_object/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/json/primitive_types_escaping/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/json/primitive_types_escaping/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/avro/null_values/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/avro/null_values/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/avro/primitives_user_provided_schema_on_hcfs/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/avro/primitives_user_provided_schema_on_hcfs/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/avro/primitives_generate_schema/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/avro/primitives_generate_schema/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/avro/primitives_generate_schema_with_no_compression/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/avro/primitives_generate_schema_with_no_compression/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/avro/array_user_schema_w_nulls/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/avro/array_user_schema_w_nulls/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/avro/codec/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/avro/codec/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/avro/complex_user_provided_schema_on_classpath/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/avro/complex_user_provided_schema_on_classpath/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/avro/complex_generate_schema/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/avro/complex_generate_schema/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/sequence/recordkey_text/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/sequence/recordkey_text/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/sequence/circle/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/sequence/circle/sql/query01.sql + automation/sqlrepo/features/hdfs/writable/sequence/recordkey_int/expected/query01.ans + automation/sqlrepo/features/hdfs/writable/sequence/recordkey_int/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/json/malformed_record_with_reject_limit_csv/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/json/malformed_record_with_reject_limit_csv/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/json/malformed_record/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/json/malformed_record/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/json/array_as_text/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/json/array_as_text/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/json/malformed_record_with_reject_limit/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/json/malformed_record_with_reject_limit/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/json/mismatched_types/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/json/mismatched_types/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/json/supported_primitive_types/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/json/supported_primitive_types/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/json/simple/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/json/simple/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/json/malformed_record_csv/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/json/malformed_record_csv/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/json/missing_identifier/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/json/missing_identifier/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/json/json_functions/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/json/json_functions/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/json/pretty_print/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/json/pretty_print/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/json/exceed_max_size/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/json/exceed_max_size/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/json/mismatched_types_with_reject_limit/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/json/mismatched_types_with_reject_limit/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/null_values/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/null_values/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/complex_null_values/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/complex_null_values/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/array_types/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/array_types/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/complex_types_text/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/complex_types_text/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/codec/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/codec/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/avro_in_sequence_complex/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/avro_in_sequence_complex/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/avro_in_sequence_arrays/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/avro_in_sequence_arrays/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/supported_primitive_types/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/supported_primitive_types/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/simple/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/simple/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/complex_types_csv/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/complex_types_csv/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/logical_decimal_types/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/logical_decimal_types/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/logical_types/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/logical_types/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/array_of_logical_types/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/array_of_logical_types/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/complex_types/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/complex_types/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/multi_files/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/multi_files/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/errors/missing_field/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/errors/missing_field/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/errors/logical_incorrect_schema_test/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/errors/logical_incorrect_schema_test/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/errors/no_schema_file/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/errors/no_schema_file/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/avro/errors/extra_field/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/avro/errors/extra_field/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/multiprofile_with_skip/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/multiprofile_with_skip/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/small_data/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/small_data/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/mixed_newline_char/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/mixed_newline_char/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/small_data_with_skip/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/small_data_with_skip/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/limit/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/limit/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/recursive/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/recursive/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/encoding/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/encoding/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/multiline_csv_data_with_header/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/multiline_csv_data_with_header/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/csv_files_with_header/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/csv_files_with_header/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/error_table_gpdb/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/error_table_gpdb/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/error_table/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/error_table/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/newline_char/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/newline_char/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/multiblocked_csv_data/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/multiblocked_csv_data/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/multiline_file_as_row_with_header/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/multiline_file_as_row_with_header/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/wildcard/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/wildcard/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/empty_file/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/empty_file/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/errors/unterminated_quoted_field/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/errors/unterminated_quoted_field/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/errors/wrong_type/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/errors/wrong_type/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/errors/middle_of_stream/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/errors/middle_of_stream/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/errors/error_table_breached/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/errors/error_table_breached/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/text/bzip2/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/text/bzip2/sql/query01.sql + automation/sqlrepo/features/hdfs/readable/sequence/custom_writable/expected/query01.ans + automation/sqlrepo/features/hdfs/readable/sequence/custom_writable/sql/query01.sql + automation/sqlrepo/features/hbase/partialFilterPushdownAndOr/expected/query01.ans + automation/sqlrepo/features/hbase/partialFilterPushdownAndOr/sql/query01.sql + automation/sqlrepo/features/hbase/multiRegionsData/expected/query01.ans + automation/sqlrepo/features/hbase/multiRegionsData/sql/query01.sql + automation/sqlrepo/features/hbase/empty/expected/query01.ans + automation/sqlrepo/features/hbase/empty/sql/query01.sql + automation/sqlrepo/features/hbase/longQualifierWithLookup/expected/query01.ans + automation/sqlrepo/features/hbase/longQualifierWithLookup/sql/query01.sql + automation/sqlrepo/features/hbase/lowerWithNullValues/expected/query01.ans + automation/sqlrepo/features/hbase/lowerWithNullValues/sql/query01.sql + automation/sqlrepo/features/hbase/rowkeyEquals/expected/query01.ans + automation/sqlrepo/features/hbase/rowkeyEquals/sql/query01.sql + automation/sqlrepo/features/hbase/rowkeyRange/expected/query01.ans + automation/sqlrepo/features/hbase/rowkeyRange/sql/query01.sql + automation/sqlrepo/features/hbase/isNull/expected/query01.ans + automation/sqlrepo/features/hbase/isNull/sql/query01.sql + automation/sqlrepo/features/hbase/recordkeyAsInteger/expected/query01.ans + automation/sqlrepo/features/hbase/recordkeyAsInteger/sql/query01.sql + automation/sqlrepo/features/hbase/notEquals/expected/query01.ans + automation/sqlrepo/features/hbase/notEquals/sql/query01.sql + automation/sqlrepo/features/hbase/sanity/expected/query01.ans + automation/sqlrepo/features/hbase/sanity/sql/query01.sql + automation/sqlrepo/features/hbase/longQualifierNoLookup/expected/query01.ans + automation/sqlrepo/features/hbase/longQualifierNoLookup/sql/query01.sql + automation/sqlrepo/features/hbase/default_analyze/expected/query01.ans + automation/sqlrepo/features/hbase/default_analyze/sql/query01.sql + automation/sqlrepo/features/hbase/partialFilterPushdown/expected/query01.ans + automation/sqlrepo/features/hbase/partialFilterPushdown/sql/query01.sql + automation/sqlrepo/features/hbase/double/expected/query01.ans + automation/sqlrepo/features/hbase/double/sql/query01.sql + automation/sqlrepo/features/hbase/text/expected/query01.ans + automation/sqlrepo/features/hbase/text/sql/query01.sql + automation/sqlrepo/features/hbase/errors/differentColumnsNames/expected/query01.ans + automation/sqlrepo/features/hbase/errors/differentColumnsNames/sql/query01.sql + automation/sqlrepo/features/hbase/errors/hbaseIsDown/expected/query01.ans + automation/sqlrepo/features/hbase/errors/hbaseIsDown/sql/query01.sql + automation/sqlrepo/features/hbase/errors/notExistingHBaseTable/expected/query01.ans + automation/sqlrepo/features/hbase/errors/notExistingHBaseTable/sql/query01.sql + automation/sqlrepo/features/hbase/errors/lookupTable/expected/query01.ans + automation/sqlrepo/features/hbase/errors/lookupTable/sql/query01.sql + automation/sqlrepo/features/hbase/or/expected/query01.ans + automation/sqlrepo/features/hbase/or/sql/query01.sql + automation/sqlrepo/features/hbase/range/expected/query01.ans + automation/sqlrepo/features/hbase/range/sql/query01.sql + automation/sqlrepo/features/hbase/lower/expected/query01.ans + automation/sqlrepo/features/hbase/lower/sql/query01.sql + automation/sqlrepo/features/hbase/multipleQualifiers/expected/query01.ans + automation/sqlrepo/features/hbase/multipleQualifiers/sql/query01.sql + automation/sqlrepo/features/hbase/specificRow/expected/query01.ans + automation/sqlrepo/features/hbase/specificRow/sql/query01.sql + automation/sqlrepo/features/hbase/filter_accessor/lowerWithNullValues/expected/query01.ans + automation/sqlrepo/features/hbase/filter_accessor/lowerWithNullValues/sql/query01.sql + automation/sqlrepo/features/hbase/filter_accessor/rowkeyEquals/expected/query01.ans + automation/sqlrepo/features/hbase/filter_accessor/rowkeyEquals/sql/query01.sql + automation/sqlrepo/features/hbase/filter_accessor/rowkeyRange/expected/query01.ans + automation/sqlrepo/features/hbase/filter_accessor/rowkeyRange/sql/query01.sql + automation/sqlrepo/features/hbase/filter_accessor/recordkeyAsInteger/expected/query01.ans + automation/sqlrepo/features/hbase/filter_accessor/recordkeyAsInteger/sql/query01.sql + automation/sqlrepo/features/hbase/filter_accessor/notEquals/expected/query01.ans + automation/sqlrepo/features/hbase/filter_accessor/notEquals/sql/query01.sql + automation/sqlrepo/features/hbase/filter_accessor/text/expected/query01.ans + automation/sqlrepo/features/hbase/filter_accessor/text/sql/query01.sql + automation/sqlrepo/features/hbase/filter_accessor/range/expected/query01.ans + automation/sqlrepo/features/hbase/filter_accessor/range/sql/query01.sql + automation/sqlrepo/features/hbase/filter_accessor/lower/expected/query01.ans + automation/sqlrepo/features/hbase/filter_accessor/lower/sql/query01.sql + automation/sqlrepo/features/hbase/filter_accessor/multipleQualifiers/expected/query01.ans + automation/sqlrepo/features/hbase/filter_accessor/multipleQualifiers/sql/query01.sql + automation/sqlrepo/features/hbase/filter_accessor/specificRow/expected/query01.ans + automation/sqlrepo/features/hbase/filter_accessor/specificRow/sql/query01.sql + automation/sqlrepo/features/hbase/andOr/expected/query01.ans + automation/sqlrepo/features/hbase/andOr/sql/query01.sql + automation/sqlrepo/features/hive/collection_types/expected/query01.ans + automation/sqlrepo/features/hive/collection_types/sql/query01.sql + automation/sqlrepo/features/hive/small_data_orc/expected/query01.ans + automation/sqlrepo/features/hive/small_data_orc/sql/query01.sql + automation/sqlrepo/features/hive/orc_multifile/expected/query01.ans + automation/sqlrepo/features/hive/orc_multifile/sql/query01.sql + automation/sqlrepo/features/hive/small_data/expected/query02.ans + automation/sqlrepo/features/hive/small_data/expected/query01.ans + automation/sqlrepo/features/hive/small_data/sql/query01.sql + automation/sqlrepo/features/hive/small_data/sql/query02.sql + automation/sqlrepo/features/hive/hive_partitioned_ppd_table_customfilters/expected/query01.ans + automation/sqlrepo/features/hive/hive_partitioned_ppd_table_customfilters/sql/query01.sql + automation/sqlrepo/features/hive/orc_primitive_types_hive1_only/expected/query01.ans + automation/sqlrepo/features/hive/orc_primitive_types_hive1_only/sql/query01.sql + automation/sqlrepo/features/hive/skip_header_rows/expected/query01.ans + automation/sqlrepo/features/hive/skip_header_rows/sql/query01.sql + automation/sqlrepo/features/hive/orc_repeating/expected/query02.ans + automation/sqlrepo/features/hive/orc_repeating/expected/query01.ans + automation/sqlrepo/features/hive/orc_repeating/sql/query01.sql + automation/sqlrepo/features/hive/orc_repeating/sql/query02.sql + automation/sqlrepo/features/hive/primitive_types/expected/query01.ans + automation/sqlrepo/features/hive/primitive_types/sql/query01.sql + automation/sqlrepo/features/hive/orc_large_data/expected/query01.ans + automation/sqlrepo/features/hive/orc_large_data/sql/query01.sql + automation/sqlrepo/features/hive/orc_primitive_types/expected/query01.ans + automation/sqlrepo/features/hive/orc_primitive_types/sql/query01.sql + automation/sqlrepo/features/hive/partitions_30k/expected/query01.ans + automation/sqlrepo/features/hive/partitions_30k/sql/query01.sql + automation/sqlrepo/features/hive/hive_partitioned_table_union_all/expected/query01.ans + automation/sqlrepo/features/hive/hive_partitioned_table_union_all/sql/query01.sql + automation/sqlrepo/features/hive/partitionFilterPushDown/expected/query01.ans + automation/sqlrepo/features/hive/partitionFilterPushDown/sql/query01.sql + automation/sqlrepo/features/hive/hive_partitioned_table_one_format/expected/query01.ans + automation/sqlrepo/features/hive/hive_partitioned_table_one_format/sql/query01.sql + automation/sqlrepo/features/hive/binary_orc_data/expected/query01.ans + automation/sqlrepo/features/hive/binary_orc_data/sql/query01.sql + automation/sqlrepo/features/hive/noDataFilePresentForHive/expected/query01.ans + automation/sqlrepo/features/hive/noDataFilePresentForHive/sql/query01.sql + automation/sqlrepo/features/hive/rc_filter_no_partitions/expected/query01.ans + automation/sqlrepo/features/hive/rc_filter_no_partitions/sql/query01.sql + automation/sqlrepo/features/hive/column_subset_partitioned_table/expected/query01.ans + automation/sqlrepo/features/hive/column_subset_partitioned_table/sql/query01.sql + automation/sqlrepo/features/hive/nested_struct/expected/query01.ans + automation/sqlrepo/features/hive/nested_struct/sql/query01.sql + automation/sqlrepo/features/hive/small_data_alter/expected/query02.ans + automation/sqlrepo/features/hive/small_data_alter/expected/query01.ans + automation/sqlrepo/features/hive/small_data_alter/sql/query01.sql + automation/sqlrepo/features/hive/small_data_alter/sql/query02.sql + automation/sqlrepo/features/hive/parquet_timestamp/expected/query01.ans + automation/sqlrepo/features/hive/parquet_timestamp/sql/query01.sql + automation/sqlrepo/features/hive/rc_filter_partitions/expected/query01.ans + automation/sqlrepo/features/hive/rc_filter_partitions/sql/query01.sql + automation/sqlrepo/features/hive/default_analyze/expected/query01.ans + automation/sqlrepo/features/hive/default_analyze/sql/query01.sql + automation/sqlrepo/features/hive/hive_partitioned_ppd_table/expected/query01.ans + automation/sqlrepo/features/hive/hive_partitioned_ppd_table/sql/query01.sql + automation/sqlrepo/features/hive/orc_multifile_vectorized/expected/query01.ans + automation/sqlrepo/features/hive/orc_multifile_vectorized/sql/query01.sql + automation/sqlrepo/features/hive/column_subset_partitioned_table_rc/expected/query01.ans + automation/sqlrepo/features/hive/column_subset_partitioned_table_rc/sql/query01.sql + automation/sqlrepo/features/hive/orc_skip_header_rows/expected/query01.ans + automation/sqlrepo/features/hive/orc_skip_header_rows/sql/query01.sql + automation/sqlrepo/features/hive/text_skip_header_rows/expected/query01.ans + automation/sqlrepo/features/hive/text_skip_header_rows/sql/query01.sql + automation/sqlrepo/features/hive/orc_snappy/expected/query01.ans + automation/sqlrepo/features/hive/orc_snappy/sql/query01.sql + automation/sqlrepo/features/hive/orc_primitive_types_no_timestamp/expected/query01.ans + automation/sqlrepo/features/hive/orc_primitive_types_no_timestamp/sql/query01.sql + automation/sqlrepo/features/hive/hive_collection_types/expected/query01.ans + automation/sqlrepo/features/hive/hive_collection_types/sql/query01.sql + automation/sqlrepo/features/hive/parquet_mismatch/expected/query01.ans + automation/sqlrepo/features/hive/parquet_mismatch/sql/query01.sql + automation/sqlrepo/features/hive/aggregate_queries/expected/query03.ans + automation/sqlrepo/features/hive/aggregate_queries/expected/query02.ans + automation/sqlrepo/features/hive/aggregate_queries/expected/query01.ans + automation/sqlrepo/features/hive/aggregate_queries/expected/query04.ans + automation/sqlrepo/features/hive/aggregate_queries/sql/query04.sql + automation/sqlrepo/features/hive/aggregate_queries/sql/query01.sql + automation/sqlrepo/features/hive/aggregate_queries/sql/query02.sql + automation/sqlrepo/features/hive/aggregate_queries/sql/query03.sql + automation/sqlrepo/features/hive/column_subset_partitioned_table_orc/expected/query01.ans + automation/sqlrepo/features/hive/column_subset_partitioned_table_orc/sql/query01.sql + automation/sqlrepo/features/hive/errors/columnNameMismatch/expected/query01.ans + automation/sqlrepo/features/hive/errors/columnNameMismatch/sql/query01.sql + automation/sqlrepo/features/hive/errors/notExistingHiveTable/expected/query01.ans + automation/sqlrepo/features/hive/errors/notExistingHiveTable/sql/query01.sql + automation/sqlrepo/features/hive/errors/partitionNameMismatch/expected/query01.ans + automation/sqlrepo/features/hive/errors/partitionNameMismatch/sql/query01.sql + automation/sqlrepo/features/hive/errors/invalidFilterPushDown/expected/query01.ans + automation/sqlrepo/features/hive/errors/invalidFilterPushDown/sql/query01.sql + automation/sqlrepo/features/hive/errors/rc_unsupportedTypes/expected/query01.ans + automation/sqlrepo/features/hive/errors/rc_unsupportedTypes/sql/query01.sql + automation/sqlrepo/features/hive/errors/rc_mismatchedTypes/expected/query01.ans + automation/sqlrepo/features/hive/errors/rc_mismatchedTypes/sql/query01.sql + automation/sqlrepo/features/hive/errors/hiveViews/expected/query01.ans + automation/sqlrepo/features/hive/errors/hiveViews/sql/query01.sql + automation/sqlrepo/features/hive/errors/columnDataTypeMisMatch/expected/query01.ans + automation/sqlrepo/features/hive/errors/columnDataTypeMisMatch/sql/query01.sql + automation/sqlrepo/features/hive/errors/incorrectProfile/expected/query01.ans + automation/sqlrepo/features/hive/errors/incorrectProfile/sql/query01.sql + automation/sqlrepo/features/hive/partitions_all_types/expected/query02.ans + automation/sqlrepo/features/hive/partitions_all_types/expected/query01.ans + automation/sqlrepo/features/hive/partitions_all_types/sql/query01.sql + automation/sqlrepo/features/hive/partitions_all_types/sql/query02.sql + automation/sqlrepo/features/hive/orc_operators_no_ppd/expected/query01.ans + automation/sqlrepo/features/hive/orc_operators_no_ppd/sql/query01.sql + automation/sqlrepo/features/hive/orc_zlib/expected/query01.ans + automation/sqlrepo/features/hive/orc_zlib/sql/query01.sql + automation/sqlrepo/features/hive/small_data_as_text/expected/query02.ans + automation/sqlrepo/features/hive/small_data_as_text/expected/query01.ans + automation/sqlrepo/features/hive/small_data_as_text/sql/query01.sql + automation/sqlrepo/features/hive/small_data_as_text/sql/query02.sql + automation/sqlrepo/features/hive/rc_partitions/expected/query01.ans + automation/sqlrepo/features/hive/rc_partitions/sql/query01.sql + automation/sqlrepo/features/hive/hive_partitioned_table/expected/query01.ans + automation/sqlrepo/features/hive/hive_partitioned_table/sql/query01.sql + automation/sqlrepo/features/hive/small_data_orc_acid/expected/query01.ans + automation/sqlrepo/features/hive/small_data_orc_acid/sql/query01.sql + automation/sqlrepo/features/hive/rc_types/expected/query01.ans + automation/sqlrepo/features/hive/rc_types/sql/query01.sql + automation/sqlrepo/features/hive/aggregate_queries_multiple_fragments_per_file/expected/query01.ans + automation/sqlrepo/features/hive/aggregate_queries_multiple_fragments_per_file/sql/query01.sql + automation/sqlrepo/features/hive/binary_data/expected/query01.ans + automation/sqlrepo/features/hive/binary_data/sql/query01.sql + automation/sqlrepo/features/hive/rc_binary_data/expected/query01.ans + automation/sqlrepo/features/hive/rc_binary_data/sql/query01.sql + automation/sqlrepo/features/hive/column_subset/expected/query01.ans + automation/sqlrepo/features/hive/column_subset/sql/query01.sql + automation/sqlrepo/features/hive/two_secured_hive/expected/query02.ans + automation/sqlrepo/features/hive/two_secured_hive/expected/query01.ans + automation/sqlrepo/features/hive/two_secured_hive/sql/query01.sql + automation/sqlrepo/features/hive/two_secured_hive/sql/query02.sql + automation/sqlrepo/features/hive/secured_and_non_secured_hive/expected/query02.ans + automation/sqlrepo/features/hive/secured_and_non_secured_hive/expected/query01.ans + automation/sqlrepo/features/hive/secured_and_non_secured_hive/sql/query01.sql + automation/sqlrepo/features/hive/secured_and_non_secured_hive/sql/query02.sql + automation/sqlrepo/features/hive/hive_partitioned_table_orc_acid/expected/query01.ans + automation/sqlrepo/features/hive/hive_partitioned_table_orc_acid/sql/query01.sql + automation/sqlrepo/features/orc/write/decimal_with_large_scale/expected/query01.ans + automation/sqlrepo/features/orc/write/decimal_with_large_scale/sql/query01.sql + automation/sqlrepo/features/orc/write/primitive_types_nulls/expected/query01.ans + automation/sqlrepo/features/orc/write/primitive_types_nulls/sql/query01.sql + automation/sqlrepo/features/orc/write/primitive_types_array_null_elements/expected/query01.ans + automation/sqlrepo/features/orc/write/primitive_types_array_null_elements/sql/query01.sql + automation/sqlrepo/features/orc/write/decimal_with_large_precision_not_defined/expected/query01.ans + automation/sqlrepo/features/orc/write/decimal_with_large_precision_not_defined/sql/query01.sql + automation/sqlrepo/features/orc/write/primitive_types/expected/query01.ans + automation/sqlrepo/features/orc/write/primitive_types/sql/query01.sql + automation/sqlrepo/features/orc/write/primitive_types_with_hive/expected/query01.ans + automation/sqlrepo/features/orc/write/primitive_types_with_hive/sql/query01.sql + automation/sqlrepo/features/orc/write/primitive_types_large/expected/query01.ans + automation/sqlrepo/features/orc/write/primitive_types_large/sql/query01.sql + automation/sqlrepo/features/orc/write/primitive_types_array_multi/expected/query01.ans + automation/sqlrepo/features/orc/write/primitive_types_array_multi/sql/query01.sql + automation/sqlrepo/features/orc/write/timestamp_with_timezone_types/expected/query01.ans + automation/sqlrepo/features/orc/write/timestamp_with_timezone_types/sql/query01.sql + automation/sqlrepo/features/orc/write/decimal_with_large_integer_digit/expected/query01.ans + automation/sqlrepo/features/orc/write/decimal_with_large_integer_digit/sql/query01.sql + automation/sqlrepo/features/orc/write/decimal_with_large_precision_defined/expected/query01.ans + automation/sqlrepo/features/orc/write/decimal_with_large_precision_defined/sql/query01.sql + automation/sqlrepo/features/orc/write/primitive_types_array_with_nulls/expected/query01.ans + automation/sqlrepo/features/orc/write/primitive_types_array_with_nulls/sql/query01.sql + automation/sqlrepo/features/orc/read/primitive_types_with_subset/expected/query01.ans + automation/sqlrepo/features/orc/read/primitive_types_with_subset/sql/query01.sql + automation/sqlrepo/features/orc/read/pushdown/expected/query01.ans + automation/sqlrepo/features/orc/read/pushdown/sql/query01.sql + automation/sqlrepo/features/orc/read/null_in_string/expected/query01.ans + automation/sqlrepo/features/orc/read/null_in_string/sql/query01.sql + automation/sqlrepo/features/orc/read/primitive_types/expected/query01.ans + automation/sqlrepo/features/orc/read/primitive_types/sql/query01.sql + automation/sqlrepo/features/orc/read/read_subset/expected/query01.ans + automation/sqlrepo/features/orc/read/read_subset/sql/query01.sql + automation/sqlrepo/features/orc/read/multidim_list_types/expected/query01.ans + automation/sqlrepo/features/orc/read/multidim_list_types/sql/query01.sql + automation/sqlrepo/features/orc/read/list_types/expected/query01.ans + automation/sqlrepo/features/orc/read/list_types/sql/query01.sql + automation/sqlrepo/features/orc/read/bpchar_varchar_list_types_as_textarr/expected/query01.ans + automation/sqlrepo/features/orc/read/bpchar_varchar_list_types_as_textarr/sql/query01.sql + automation/sqlrepo/features/profiles/small_data/expected/query02.ans + automation/sqlrepo/features/profiles/small_data/expected/query01.ans + automation/sqlrepo/features/profiles/small_data/sql/query01.sql + automation/sqlrepo/features/profiles/small_data/sql/query02.sql + automation/sqlrepo/features/parquet/decimal/numeric_with_large_precision/expected/query01.ans + automation/sqlrepo/features/parquet/decimal/numeric_with_large_precision/sql/query01.sql + automation/sqlrepo/features/parquet/decimal/numeric_undefined_precision_large_integer_digit/expected/query01.ans + automation/sqlrepo/features/parquet/decimal/numeric_undefined_precision_large_integer_digit/sql/query01.sql + automation/sqlrepo/features/parquet/decimal/numeric_undefined_precision/expected/query01.ans + automation/sqlrepo/features/parquet/decimal/numeric_undefined_precision/sql/query01.sql + automation/sqlrepo/features/parquet/decimal/numeric/expected/query01.ans + automation/sqlrepo/features/parquet/decimal/numeric/sql/query01.sql + automation/sqlrepo/features/parquet/decimal/numeric_undefined_precision_large_scale/expected/query01.ans + automation/sqlrepo/features/parquet/decimal/numeric_undefined_precision_large_scale/sql/query01.sql + automation/sqlrepo/features/parquet/decimal/numeric_undefined_precision_large_data_length/expected/query01.ans + automation/sqlrepo/features/parquet/decimal/numeric_undefined_precision_large_data_length/sql/query01.sql + automation/sqlrepo/features/parquet/padded_char_pushdown/expected/query01.ans + automation/sqlrepo/features/parquet/padded_char_pushdown/sql/query01.sql + automation/sqlrepo/features/parquet/pushdown/expected/query01.ans + automation/sqlrepo/features/parquet/pushdown/sql/query01.sql + automation/sqlrepo/features/parquet/primitive_types/expected/query01.ans + automation/sqlrepo/features/parquet/primitive_types/sql/query01.sql + automation/sqlrepo/features/parquet/write_list/write_with_invalid_schema_hcfs/expected/query01.ans + automation/sqlrepo/features/parquet/write_list/write_with_invalid_schema_hcfs/sql/query01.sql + automation/sqlrepo/features/parquet/write_list/write_with_valid_schema_hcfs/expected/query01.ans + automation/sqlrepo/features/parquet/write_list/write_with_valid_schema_hcfs/sql/query01.sql + automation/sqlrepo/features/parquet/write_list/timestamp_list/expected/query01.ans + automation/sqlrepo/features/parquet/write_list/timestamp_list/sql/query01.sql + automation/sqlrepo/features/parquet/write_list/list/expected/query01.ans + automation/sqlrepo/features/parquet/write_list/list/sql/query01.sql + automation/sqlrepo/features/parquet/write_list/write_list_read_with_hive/expected/query01.ans + automation/sqlrepo/features/parquet/write_list/write_list_read_with_hive/sql/query01.sql + automation/sqlrepo/features/parquet/read_subset/expected/query01.ans + automation/sqlrepo/features/parquet/read_subset/sql/query01.sql + automation/sqlrepo/features/parquet/timestamp_list/expected/query01.ans + automation/sqlrepo/features/parquet/timestamp_list/sql/query01.sql + automation/sqlrepo/features/parquet/list/expected/query01.ans + automation/sqlrepo/features/parquet/list/sql/query01.sql + automation/sqlrepo/features/extension_tests/upgrade/step_2_after_alter_extension/expected/query01.ans + automation/sqlrepo/features/extension_tests/upgrade/step_2_after_alter_extension/sql/query01.sql + automation/sqlrepo/features/extension_tests/upgrade/step_1_create_extension_with_older_pxf_version/expected/query01.ans + automation/sqlrepo/features/extension_tests/upgrade/step_1_create_extension_with_older_pxf_version/sql/query01.sql + automation/sqlrepo/features/extension_tests/create_extension_rpm/expected/query01.ans + automation/sqlrepo/features/extension_tests/create_extension_rpm/sql/query01.sql + automation/sqlrepo/features/extension_tests/explicit_upgrade/step_2_after_alter_extension/expected/query01.ans + automation/sqlrepo/features/extension_tests/explicit_upgrade/step_2_after_alter_extension/sql/query01.sql + automation/sqlrepo/features/extension_tests/explicit_upgrade/step_1_create_extension_with_older_pxf_version/expected/query01.ans + automation/sqlrepo/features/extension_tests/explicit_upgrade/step_1_create_extension_with_older_pxf_version/sql/query01.sql + automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade/expected/query01.ans + automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade/sql/query01.sql + automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade/expected/query01.ans + automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade/sql/query01.sql + automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_1_check_extension/expected/query01.ans + automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_1_check_extension/sql/query01.sql + automation/sqlrepo/features/extension_tests/downgrade/step_2_after_alter_extension_downgrade/expected/query01.ans + automation/sqlrepo/features/extension_tests/downgrade/step_2_after_alter_extension_downgrade/sql/query01.sql + automation/sqlrepo/features/extension_tests/downgrade/step_1_create_extension/expected/query01.ans + automation/sqlrepo/features/extension_tests/downgrade/step_1_create_extension/sql/query01.sql + automation/sqlrepo/features/extension_tests/create_extension/expected/query01.ans + automation/sqlrepo/features/extension_tests/create_extension/sql/query01.sql + automation/sqlrepo/features/hcfs/globbing/escape_special_characters/expected/query01.ans + automation/sqlrepo/features/hcfs/globbing/escape_special_characters/sql/query01.sql + automation/sqlrepo/features/hcfs/globbing/match_single_character_set_exclusion/expected/query01.ans + automation/sqlrepo/features/hcfs/globbing/match_single_character_set_exclusion/sql/query01.sql + automation/sqlrepo/features/hcfs/globbing/match_zero_or_more_characters/expected/query03.ans + automation/sqlrepo/features/hcfs/globbing/match_zero_or_more_characters/expected/query02.ans + automation/sqlrepo/features/hcfs/globbing/match_zero_or_more_characters/expected/query01.ans + automation/sqlrepo/features/hcfs/globbing/match_zero_or_more_characters/expected/query05.ans + automation/sqlrepo/features/hcfs/globbing/match_zero_or_more_characters/expected/query04.ans + automation/sqlrepo/features/hcfs/globbing/match_zero_or_more_characters/sql/query04.sql + automation/sqlrepo/features/hcfs/globbing/match_zero_or_more_characters/sql/query05.sql + automation/sqlrepo/features/hcfs/globbing/match_zero_or_more_characters/sql/query01.sql + automation/sqlrepo/features/hcfs/globbing/match_zero_or_more_characters/sql/query02.sql + automation/sqlrepo/features/hcfs/globbing/match_zero_or_more_characters/sql/query03.sql + automation/sqlrepo/features/hcfs/globbing/combination/expected/query01.ans + automation/sqlrepo/features/hcfs/globbing/combination/sql/query01.sql + automation/sqlrepo/features/hcfs/globbing/match_single_character_from_set/expected/query01.ans + automation/sqlrepo/features/hcfs/globbing/match_single_character_from_set/sql/query01.sql + automation/sqlrepo/features/hcfs/globbing/java_regex_special_chars/expected/query01.ans + automation/sqlrepo/features/hcfs/globbing/java_regex_special_chars/sql/query01.sql + automation/sqlrepo/features/hcfs/globbing/match_string_from_string_set/expected/query03.ans + automation/sqlrepo/features/hcfs/globbing/match_string_from_string_set/expected/query02.ans + automation/sqlrepo/features/hcfs/globbing/match_string_from_string_set/expected/query01.ans + automation/sqlrepo/features/hcfs/globbing/match_string_from_string_set/expected/query04.ans + automation/sqlrepo/features/hcfs/globbing/match_string_from_string_set/sql/query04.sql + automation/sqlrepo/features/hcfs/globbing/match_string_from_string_set/sql/query01.sql + automation/sqlrepo/features/hcfs/globbing/match_string_from_string_set/sql/query02.sql + automation/sqlrepo/features/hcfs/globbing/match_string_from_string_set/sql/query03.sql + automation/sqlrepo/features/hcfs/globbing/match_any_single_character/expected/query01.ans + automation/sqlrepo/features/hcfs/globbing/match_any_single_character/sql/query01.sql + automation/sqlrepo/features/hcfs/globbing/match_single_character_from_range/expected/query01.ans + automation/sqlrepo/features/hcfs/globbing/match_single_character_from_range/sql/query01.sql + automation/sqlrepo/features/hcfs/fixedwidth/write/small_data_correct_crlf_delim/expected/query01.ans + automation/sqlrepo/features/hcfs/fixedwidth/write/small_data_correct_crlf_delim/sql/query01.sql + automation/sqlrepo/features/hcfs/fixedwidth/write/small_data_correct_default/expected/query01.ans + automation/sqlrepo/features/hcfs/fixedwidth/write/small_data_correct_default/sql/query01.sql + automation/sqlrepo/features/hcfs/fixedwidth/write/small_data_correct_gzip/expected/query01.ans + automation/sqlrepo/features/hcfs/fixedwidth/write/small_data_correct_gzip/sql/query01.sql + automation/sqlrepo/features/hcfs/fixedwidth/write/small_data_correct_custom_delim/expected/query01.ans + automation/sqlrepo/features/hcfs/fixedwidth/write/small_data_correct_custom_delim/sql/query01.sql + automation/sqlrepo/features/hcfs/fixedwidth/write/small_data_correct_cr_delim/expected/query01.ans + automation/sqlrepo/features/hcfs/fixedwidth/write/small_data_correct_cr_delim/sql/query01.sql + automation/sqlrepo/features/hcfs/fixedwidth/write/small_data_correct_lf_delim/expected/query01.ans + automation/sqlrepo/features/hcfs/fixedwidth/write/small_data_correct_lf_delim/sql/query01.sql + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_crlf_delim/expected/query02.ans + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_crlf_delim/expected/query01.ans + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_crlf_delim/sql/query01.sql + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_crlf_delim/sql/query02.sql + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct/expected/query01.ans + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct/sql/query01.sql + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_gzip/expected/query01.ans + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_gzip/sql/query01.sql + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_alternating_case_ddl/expected/query01.ans + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_alternating_case_ddl/sql/query01.sql + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_custom_delim/expected/query02.ans + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_custom_delim/expected/query01.ans + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_custom_delim/sql/query01.sql + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_custom_delim/sql/query02.sql + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_mixed/expected/query01.ans + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_mixed/sql/query01.sql + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_cr_delim/expected/query02.ans + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_cr_delim/expected/query01.ans + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_cr_delim/sql/query01.sql + automation/sqlrepo/features/hcfs/fixedwidth/read/small_data_correct_cr_delim/sql/query02.sql + automation/sqlrepo/features/hcfs/text/delimiter_off_escape_off/expected/query01.ans + automation/sqlrepo/features/hcfs/text/delimiter_off_escape_off/sql/query01.sql + automation/sqlrepo/features/hcfs/text/delimiter_off/expected/query01.ans + automation/sqlrepo/features/hcfs/text/delimiter_off/sql/query01.sql + automation/sqlrepo/features/hcfs/text/escape_off/expected/query01.ans + automation/sqlrepo/features/hcfs/text/escape_off/sql/query01.sql + automation/sqlrepo/features/hcfs/file_as_row/singleline_text/expected/query01.ans + automation/sqlrepo/features/hcfs/file_as_row/singleline_text/sql/query01.sql + automation/sqlrepo/features/hcfs/file_as_row/empty_text/expected/query01.ans + automation/sqlrepo/features/hcfs/file_as_row/empty_text/sql/query01.sql + automation/sqlrepo/features/hcfs/file_as_row/json/expected/query01.ans + automation/sqlrepo/features/hcfs/file_as_row/json/sql/query01.sql + automation/sqlrepo/features/hcfs/file_as_row/multi_files/expected/query01.ans + automation/sqlrepo/features/hcfs/file_as_row/multi_files/sql/query01.sql + automation/sqlrepo/features/hcfs/file_as_row/text/expected/query01.ans + automation/sqlrepo/features/hcfs/file_as_row/text/sql/query01.sql + automation/sqlrepo/features/hcfs/file_as_row/twoline_text/expected/query01.ans + automation/sqlrepo/features/hcfs/file_as_row/twoline_text/sql/query01.sql + automation/src/test/resources/sut/** + automation/src/test/resources/multi_block.Readme + automation/src/test/resources/hive-report.sql + automation/src/test/resources/report.sql + automation/src/test/resources/templates/gpdb/** + automation/src/test/resources/templates/general/** + automation/src/test/resources/templates/yarn/** + automation/src/test/resources/templates/hdfs/** + automation/src/test/resources/templates/hbase/** + automation/src/test/resources/templates/hive/** + automation/src/test/resources/data/gpdb/** + automation/src/test/resources/data/s3select/sample.csv + automation/src/test/resources/data/s3select/sample-no-header.csv + automation/src/test/resources/data/numeric/** + automation/src/test/resources/data/json/array_types_aligned.csv + automation/src/test/resources/data/json/array_types.csv + automation/src/test/resources/data/json/primitive_types.csv + automation/src/test/resources/data/fixedwidth/fixedwidth_small_correct.txt + automation/src/test/resources/data/fixedwidth/fixedwidth_small_correct_cr_delim.txt + automation/src/test/resources/data/fixedwidth/fixedwidth_small_correct_custom_delim.txt + automation/src/test/resources/data/fixedwidth/fixedwidth_small_correct_crlf_delim.txt + automation/src/test/resources/data/avro/logical_type.avsc + automation/src/test/resources/data/avro/logical_correct_schema.avsc + automation/src/test/resources/data/avro/array.avsc + automation/src/test/resources/data/avro/primitives_no_union.avsc + automation/src/test/resources/data/avro/array_of_logical_types.avsc + automation/src/test/resources/data/avro/simple.avsc + automation/src/test/resources/data/avro/complex.avsc + automation/src/test/resources/data/avro/supported_primitive_types.avsc + automation/src/test/resources/data/avro/logical_decimal_type.avsc + automation/src/test/resources/data/avro/complex_null.avsc + automation/src/test/resources/data/avro/PXF Custom Avro1.avsc + automation/src/test/resources/data/avro/logical_incorrect_schema.avsc + automation/src/test/resources/data/avro/array_with_nulls.avsc + automation/src/test/resources/data/avro/PXFCustomAvro.avsc + automation/src/test/resources/data/avro/PXFComplexAvro.avsc + automation/src/test/resources/data/csv/** + automation/src/test/resources/data/hive/hive_collections.txt + automation/src/test/resources/data/hive/hive_types.txt + automation/src/test/resources/data/hive/hive_types_limited.txt + automation/src/test/resources/data/hive/hive_types_all_columns_repeating_nulls.txt + automation/src/test/resources/data/hive/hive_types_all_columns_repeating.txt + automation/src/test/resources/data/hive/hive_types_no_binary.txt + automation/src/test/resources/data/hive/hive_parquet_mismatch_data.txt + automation/src/test/resources/data/hive/hive_small_data.txt + automation/src/test/resources/data/hive/hive_types_no_timestamp.txt + automation/src/test/resources/data/hive/hive_small_data_third.txt + automation/src/test/resources/data/hive/hive_types_no_binary_third.txt + automation/src/test/resources/data/hive/hive_small_data_second.txt + automation/src/test/resources/data/hive/hive_types_no_binary_second.txt + automation/src/test/resources/data/text/** + automation/src/test/resources/data/orc/orc_types_unordered_subset.csv + automation/src/test/resources/data/orc/generate_orc_list_types.hql + automation/src/test/resources/data/orc/generate_orc_types_unordered_subset.hql + automation/src/test/resources/data/orc/orc_types.csv + automation/src/test/resources/data/orc/README.md + automation/src/test/resources/data/orc/generate_orc_types.bash + automation/src/test/resources/data/orc/generate_orc_types.hql + automation/src/test/resources/data/orc/generate_orc_multidim_list_types.hql + automation/src/test/resources/data/parquet/generate_parquet_list_types.bash + automation/src/test/resources/data/parquet/generate_parquet_list_types_without_null.hql + automation/src/test/resources/data/parquet/generate_undefined_precision_numeric_parquet.hql + automation/src/test/resources/data/parquet/generate_parquet_types.hql + automation/src/test/resources/data/parquet/parquet_types.csv + automation/src/test/resources/data/parquet/generate_undefined_precision_numeric_parquet.bash + automation/src/test/resources/data/parquet/generate_precision_numeric_parquet.hql + automation/src/test/resources/data/parquet/generate_parquet_timestamp_list.py + automation/src/test/resources/data/parquet/generate_parquet_list_types.hql + automation/src/test/resources/data/parquet/README.md + automation/src/test/resources/data/parquet/generate_parquet_types.bash + automation/src/test/resources/data/parquet/generate_parquet_list_types_without_null.bash + automation/src/test/resources/data/parquet/parquet_list.schema + automation/src/test/resources/data/parquet/invalid_parquet_list.schema + automation/src/test/resources/data/parquet/generate_parquet_timestamp_list.bash + automation/src/test/resources/data/parquet/generate_precision_numeric_parquet.bash + automation/src/test/java/org/apache/cloudberry/pxf/automation/smoke/** + automation/src/test/java/org/apache/cloudberry/pxf/automation/proxy/** + automation/src/test/java/org/apache/cloudberry/pxf/automation/BaseFunctionality.java + automation/src/test/java/org/apache/cloudberry/pxf/automation/features/** + automation/src/test/java/org/apache/cloudberry/pxf/automation/BaseTestParent.java + automation/src/test/java/org/apache/cloudberry/pxf/automation/performance/** + automation/src/main/java/org/apache/cloudberry/pxf/automation/fileformats/** + automation/src/main/java/org/apache/cloudberry/pxf/automation/testplugin/** + automation/src/main/java/org/apache/cloudberry/pxf/automation/structures/tables/** + automation/src/main/java/org/apache/cloudberry/pxf/automation/structures/profiles/** + automation/src/main/java/org/apache/cloudberry/pxf/automation/structures/data/** + automation/src/main/java/org/apache/cloudberry/pxf/automation/datapreparer/** + automation/src/main/java/org/apache/cloudberry/pxf/automation/enums/** + automation/src/main/java/org/apache/cloudberry/pxf/automation/utils/** + automation/src/main/java/org/apache/cloudberry/pxf/automation/components/** + automation/src/main/java/org/apache/cloudberry/pxf/automation/dataschema/** + automation/src/main/java/org/apache/cloudberry/pxf/automation/domain/PxfProtocolVersion.java + automation/src/main/java/annotations/** + automation/src/main/java/reporters/CustomAutomationReport.java + automation/src/main/java/listeners/** + + fdw/pxf_fdw--1.0--2.0.sql + fdw/pxf_option.c + fdw/pxf_fdw--2.0.sql + fdw/PXF_FDW.md + fdw/Makefile + fdw/pxf_fdw.h + fdw/pxf_fdw--1.0.sql + fdw/README.md + fdw/pxf_fdw.control + fdw/pxf_option.h + fdw/pxf_fdw--2.0--1.0.sql + fdw/pxf_deparse.c + fdw/pxf_fdw.c + fdw/sql/** + + regression/init_file + regression/Makefile + regression/schedules/** + regression/README.md + regression/scripts/** + regression/sql/** + + package/install_deb + package/DEBIAN/** + package/install_rpm + package/README.md + package/install_binary + + common.mk + docs/** + cli/** + load/** + version + api_version + CHANGELOG.md + TROUBLESHOOTING.md + Makefile + + + server/pxf-json/src/test/resources/parser-tests/offset/input.json.bz2 + server/pxf-json/src/test/resources/parser-tests/offset/big_data.json.bz2 + automation/src/test/resources/data/s3select/sample.csv.gz + automation/src/test/resources/data/s3select/sample.csv.bz2 + automation/src/test/resources/data/fixedwidth/fixedwidth_small_correct.txt.gz + + + + + + .github/pull_request_template.md + server/gradle/wrapper/gradle-7.6.6-wrapper.jar.sha256 + + + + + + + + + Apache License (Greenplum-derived) + GRPM + + copyright (c) 2007, 2008, 2009 GreenPlum. All rights reserved. + + + + + Apache License (VMware-derived) + VMW + + Copyright 2018-Present VMware, Inc. or its affiliates. + Portions Copyright (c) 2023 VMware, Inc. or its affiliates. + + + + + + + Apache License (Greenplum-derived) + + + Apache License (VMware-derived) + + + + + + + verify + + check + + + + + + + diff --git a/server/.gitignore b/server/.gitignore index c22989cd0..2cad5664b 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -14,7 +14,6 @@ dist/ HELP.md build/ -!gradle/wrapper/gradle-wrapper.jar !**/src/main/** !**/src/test/** @@ -33,3 +32,6 @@ build/ *.iml *.ipr out/ + +# ASF Policies doesn't allow complied binaries in the source tarballs +gradle/wrapper/gradle-wrapper.jar \ No newline at end of file diff --git a/server/Makefile b/server/Makefile index 35a8320a9..8ca8b4ab4 100644 --- a/server/Makefile +++ b/server/Makefile @@ -27,6 +27,10 @@ PXF_API_VERSION ?= $(shell cat $(PXF_ROOT_DIR)/api_version) PXF_GRADLE_PROPERTIES = -Pversion=$(PXF_VERSION) -PapiVersion=$(PXF_API_VERSION) +.PHONY: prepare-gradle-wrapper +prepare-gradle-wrapper: + @APP_HOME="$(CURDIR)" bash ./gradlew-install.sh + help: @echo @echo "Possible targets" @@ -42,10 +46,10 @@ help: @echo " - install-jdbc-drivers - setup PXF JDBC drivers in the configured deployPath" @echo " - doc - creates aggregate javadoc under docs" -all: +all: prepare-gradle-wrapper ./gradlew $(PXF_GRADLE_PROPERTIES) clean stage -compile: +compile: prepare-gradle-wrapper ./gradlew $(PXF_GRADLE_PROPERTIES) compileJava GRADLEW_TEST_PARAMS = test @@ -59,21 +63,21 @@ ifneq "$(TEST)" "" GRADLEW_TEST_PARAMS = :$(PROJECT):test --rerun-tasks --tests $(TEST_PATH) endif -test unittest: +test unittest: prepare-gradle-wrapper @if [ -n '$(TEST)' ] && [ -z '${TEST_FILE}' ]; then \ echo 'Test $(TEST) was not found'; \ exit 1; \ fi ./gradlew $(PXF_GRADLE_PROPERTIES) ${GRADLEW_TEST_PARAMS} -coverage: +coverage: prepare-gradle-wrapper ./gradlew $(PXF_GRADLE_PROPERTIES) ${GRADLEW_TEST_PARAMS} jacocoTestReport @echo @echo "Coverage reports can be found within each server module under /build/reports/jacoco" @echo "For example, the pxf-service coverage report is located at $(shell pwd)/pxf-service/build/reports/jacoco/test/html/index.html" .PHONY: stage -stage: +stage: prepare-gradle-wrapper ./gradlew $(PXF_GRADLE_PROPERTIES) test stage install -m 744 -d "build/stage/lib" install -m 744 -d "build/stage/lib/native" @@ -84,7 +88,7 @@ stage: install -m 700 -d "build/stage/keytabs" .PHONY: stage-notest -stage-notest: +stage-notest: prepare-gradle-wrapper ./gradlew $(PXF_GRADLE_PROPERTIES) stage -x test install -m 744 -d "build/stage/lib" install -m 744 -d "build/stage/lib/native" @@ -95,7 +99,7 @@ stage-notest: install -m 700 -d "build/stage/keytabs" .PHONY: stage-jdbc-drivers -stage-jdbc-drivers: +stage-jdbc-drivers: prepare-gradle-wrapper ./gradlew $(PXF_GRADLE_PROPERTIES) stageJdbcDrivers .PHONY: install @@ -106,7 +110,7 @@ install-jdbc-drivers: stage-jdbc-drivers mkdir -p "$(PXF_HOME)"/lib cp -R build/stage/lib "$(PXF_HOME)"/lib -clean: +clean: prepare-gradle-wrapper ./gradlew clean rm -rf build @@ -115,7 +119,7 @@ clean-all: clean distclean maintainer-clean: clean -doc: +doc: prepare-gradle-wrapper ./gradlew $(PXF_GRADLE_PROPERTIES) aggregateJavadoc .PHONY: install @@ -135,5 +139,5 @@ install-server: stage-notest cp -R build/stage/* "$(PXF_HOME)" .PHONY: version -version: +version: prepare-gradle-wrapper @./gradlew -q version diff --git a/server/build.gradle b/server/build.gradle index 72ed45391..57f31a35b 100644 --- a/server/build.gradle +++ b/server/build.gradle @@ -24,9 +24,9 @@ buildscript { } plugins { - id "io.franzbecker.gradle-lombok" version "3.3.0" + id "io.freefair.lombok" version "6.6.3" id "org.springframework.boot" version "${springBootVersion}" apply false - id 'io.spring.dependency-management' version '1.0.11.RELEASE' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' } // override Spring Framework version to pick the Spring MVC 5.3.33 with the async race condition fix @@ -59,7 +59,7 @@ idea { configure(javaProjects) { apply plugin: 'java' apply plugin: 'io.spring.dependency-management' - apply plugin: "io.franzbecker.gradle-lombok" + apply plugin: "io.freefair.lombok" group = 'org.apache.cloudberry.pxf' version = "${version}" @@ -259,6 +259,9 @@ configure(javaProjects) { "-Xlint:empty", "-Xlint:finally", "-Xlint:overrides", "-Xlint:path", "-Xlint:-processing", "-Xlint:static", "-Xlint:try", "-Xlint:fallthrough", "-Xlint:unchecked", "-Xlint:-options", "-Werror" ] + // JEP 411 (Java 17) - java.security.AccessController is deprecated. + // Note, in JEP 486 (Java 24) Security Manager is completely disabled, however Java-API is not broken. + options.compilerArgs += JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17) ? ["-Xlint:-removal"] : [] } compileTestJava { @@ -267,6 +270,9 @@ configure(javaProjects) { "-Xlint:empty", "-Xlint:finally", "-Xlint:overrides", "-Xlint:path", "-Xlint:-processing", "-Xlint:static", "-Xlint:try", "-Xlint:fallthrough", "-Xlint:unchecked", "-Xlint:-options", "-Werror" ] + // JEP 411 (Java 17) - java.security.AccessController is deprecated. + // Note, in JEP 486 (Java 24) Security Manager is completely disabled, however Java-API is not broken. + options.compilerArgs += JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17) ? ["-Xlint:-removal"] : [] } configurations { diff --git a/server/gradle/wrapper/gradle-7.6.6-wrapper.jar.sha256 b/server/gradle/wrapper/gradle-7.6.6-wrapper.jar.sha256 new file mode 100644 index 000000000..c957e1d4e --- /dev/null +++ b/server/gradle/wrapper/gradle-7.6.6-wrapper.jar.sha256 @@ -0,0 +1 @@ +14dfa961b6704bb3decdea06502781edaa796a82e6da41cd2e1962b14fbe21a3 \ No newline at end of file diff --git a/server/gradle/wrapper/gradle-wrapper.jar b/server/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index e708b1c02..000000000 Binary files a/server/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/server/gradle/wrapper/gradle-wrapper.properties b/server/gradle/wrapper/gradle-wrapper.properties index 2a563242c..92df30b1b 100644 --- a/server/gradle/wrapper/gradle-wrapper.properties +++ b/server/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.6-bin.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +distributionSha256Sum=673d9776f303bc7048fc3329d232d6ebf1051b07893bd9d11616fad9a8673be0 diff --git a/server/gradlew b/server/gradlew index 4f906e0c8..65dcd68d6 100755 --- a/server/gradlew +++ b/server/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,105 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/server/gradlew-install.sh b/server/gradlew-install.sh new file mode 100755 index 000000000..510fa2ada --- /dev/null +++ b/server/gradlew-install.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2024 Dremio +# +# Licensed 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. +# + +# Download the gradle-wrapper.jar if necessary and verify its integrity. +# This script is invoked by server/Makefile + +if [[ -z "${APP_HOME:-}" ]]; then + # set APP_HOME as parent directory of the current script + APP_HOME="$(cd -- "$(dirname -- "$0")" && pwd)" +fi + + +# Extract the Gradle version from gradle-wrapper.properties. +GRADLE_DIST_VERSION="$(grep distributionUrl= "$APP_HOME/gradle/wrapper/gradle-wrapper.properties" | sed 's/^.*gradle-\([0-9.]*\)-[a-z]*.zip$/\1/')" +GRADLE_WRAPPER_SHA256="$APP_HOME/gradle/wrapper/gradle-${GRADLE_DIST_VERSION}-wrapper.jar.sha256" +GRADLE_WRAPPER_JAR="$APP_HOME/gradle/wrapper/gradle-wrapper.jar" +if [ -x "$(command -v sha256sum)" ] ; then + SHASUM="sha256sum" +else + if [ -x "$(command -v shasum)" ] ; then + SHASUM="shasum -a 256" + else + echo "Neither sha256sum nor shasum are available, install either." > /dev/stderr + exit 1 + fi +fi +if [ ! -e "${GRADLE_WRAPPER_SHA256}" ]; then + # Delete the wrapper jar, if the checksum file does not exist. + rm -f "${GRADLE_WRAPPER_JAR}" +fi +if [ -e "${GRADLE_WRAPPER_JAR}" ]; then + # Verify the wrapper jar, if it exists, delete wrapper jar and checksum file, if the checksums + # do not match. + JAR_CHECKSUM="$(${SHASUM} "${GRADLE_WRAPPER_JAR}" | cut -d\ -f1)" + EXPECTED="$(cat "${GRADLE_WRAPPER_SHA256}")" + if [ "${JAR_CHECKSUM}" != "${EXPECTED}" ]; then + rm -f "${GRADLE_WRAPPER_JAR}" "${GRADLE_WRAPPER_SHA256}" + fi +fi +if [ ! -e "${GRADLE_WRAPPER_SHA256}" ]; then + curl --location --output "${GRADLE_WRAPPER_SHA256}" https://services.gradle.org/distributions/gradle-${GRADLE_DIST_VERSION}-wrapper.jar.sha256 || exit 1 +fi +if [ ! -e "${GRADLE_WRAPPER_JAR}" ]; then + # The Gradle version extracted from the `distributionUrl` property does not contain ".0" patch + # versions. Need to append a ".0" in that case to download the wrapper jar. + GRADLE_VERSION="$(echo "$GRADLE_DIST_VERSION" | sed 's/^\([0-9]*[.][0-9]*\)$/\1.0/')" + curl --location --output "${GRADLE_WRAPPER_JAR}" https://raw.githubusercontent.com/gradle/gradle/v${GRADLE_VERSION}/gradle/wrapper/gradle-wrapper.jar || exit 1 + JAR_CHECKSUM="$(${SHASUM} "${GRADLE_WRAPPER_JAR}" | cut -d\ -f1)" + EXPECTED="$(cat "${GRADLE_WRAPPER_SHA256}")" + if [ "${JAR_CHECKSUM}" != "${EXPECTED}" ]; then + # If the (just downloaded) checksum and the downloaded wrapper jar do not match, something + # really bad is going on. + echo "Expected sha256 of the downloaded gradle-wrapper.jar does not match the downloaded sha256!" > /dev/stderr + exit 1 + fi +fi diff --git a/server/gradlew.bat b/server/gradlew.bat index ac1b06f93..6689b85be 100644 --- a/server/gradlew.bat +++ b/server/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/server/pxf-api/build.gradle b/server/pxf-api/build.gradle index 64cc81b7d..e4800084b 100644 --- a/server/pxf-api/build.gradle +++ b/server/pxf-api/build.gradle @@ -57,5 +57,11 @@ dependencies { } test { + if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17)) { + jvmArgs += [ + // JEP486 removes access to `sun.*` API + '--add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED', + ] + } useJUnitPlatform() } diff --git a/server/pxf-hive/build.gradle b/server/pxf-hive/build.gradle index 6ed9c2b0b..764815a94 100644 --- a/server/pxf-hive/build.gradle +++ b/server/pxf-hive/build.gradle @@ -76,5 +76,11 @@ dependencies { } test { + if (JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17)) { + jvmArgs += [ + // JEP486 removes reflective access to `java.net.URI` private fields + '--add-opens=java.base/java.net=ALL-UNNAMED', + ] + } useJUnitPlatform() } diff --git a/server/pxf-service/src/scripts/pxf b/server/pxf-service/src/scripts/pxf index 5e3f09054..522d1eda9 100755 --- a/server/pxf-service/src/scripts/pxf +++ b/server/pxf-service/src/scripts/pxf @@ -380,6 +380,16 @@ function do_start() { JAVA_OPTS=($PXF_JVM_OPTS "${PXF_OPTS[@]}") RUN_ARGS=(--spring.config.location=classpath:/application.properties,file:${PXF_BASE}/conf/pxf-application.properties) + # Detect Java major version and add --add-opens flags for Java 11+ + local java_major_version + java_major_version=$("$javaexe" -version 2>&1 | grep version | head -1 | sed -E 's/.*version "([0-9]+).*/\1/') + if [[ "$java_major_version" -ge 11 ]] 2>/dev/null; then + JAVA_OPTS+=( + '--add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED' + '--add-opens=java.base/java.net=ALL-UNNAMED' + ) + fi + local arguments=(-Dsun.misc.URLClassPath.disableJarChecking=true "${JAVA_OPTS[@]}" -jar "$jarfile" $RUN_ARGS) working_dir=$(dirname "$jarfile") diff --git a/version b/version index dc1e644a1..31941db52 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.6.0 +2.2.0-SNAPSHOT