[CALCITE-6028] SqlToRelConverter#substituteSubQuery gives NullPointer… #33
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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. | |
# The default workflow for GitHub Actions that is used for continuous | |
# integration. A configuration file that is used to control when, where, | |
# and how different CI jobs are executed. | |
# For more information on how to modify this file check the following link: | |
# https://help.github.com/en/actions/automating-your-workflow-with-github-actions | |
name: CI | |
on: | |
push: | |
paths-ignore: | |
- 'site/**' | |
branches: | |
- '*' | |
pull_request: | |
types: [opened, synchronize, reopened, labeled] | |
paths-ignore: | |
- 'site/**' | |
branches: | |
- '*' | |
concurrency: | |
# On main/release, we don't want any jobs cancelled so the sha is used to name the group | |
# On PR branches, we cancel the job if new commits are pushed | |
# More info: https://stackoverflow.com/a/68422069/253468 | |
group: ${{ (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/release' ) && format('ci-main-{0}', github.sha) || format('ci-main-{0}', github.ref) }} | |
cancel-in-progress: true | |
# Throw OutOfMemoryError in case less than 35% is free after full GC | |
# This avoids never-ending GC trashing if memory gets too low in case of a memory leak | |
env: | |
_JAVA_OPTIONS: '-XX:GCTimeLimit=90 -XX:GCHeapFreeLimit=35' | |
jobs: | |
windows-jdk8: | |
if: github.event.action != 'labeled' | |
name: 'Windows (JDK 8)' | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 50 | |
- name: 'Set up JDK 8' | |
uses: actions/setup-java@v2 | |
with: | |
java-version: 8 | |
distribution: 'zulu' | |
- uses: burrunan/gradle-cache-action@v1 | |
name: Test | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} | |
with: | |
job-id: jdk${{ matrix.jdk }} | |
remote-build-cache-proxy-enabled: false | |
arguments: --scan --no-parallel --no-daemon build javadoc | |
- name: 'sqlline and sqllsh' | |
shell: cmd | |
run: | | |
call sqlline.bat -e '!quit' | |
echo. | |
echo Sqlline example/csv | |
call example/csv/sqlline.bat --verbose -u jdbc:calcite:model=example/csv/src/test/resources/model.json -n admin -p admin -f example/csv/src/test/resources/smoke_test.sql | |
echo. | |
echo sqlsh | |
call sqlsh.bat -o headers "select count(*) commits, author from (select substring(author, 1, position(' <' in author)-1) author from git_commits) group by author order by count(*) desc, author limit 20" | |
windows-jdk17: | |
if: github.event.action != 'labeled' | |
name: 'Windows (JDK 17)' | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 50 | |
- name: 'Set up JDK 17' | |
uses: actions/setup-java@v2 | |
with: | |
java-version: 17 | |
distribution: 'zulu' | |
- uses: burrunan/gradle-cache-action@v1 | |
name: Test | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} | |
with: | |
job-id: jdk${{ matrix.jdk }} | |
remote-build-cache-proxy-enabled: false | |
arguments: --scan --no-parallel --no-daemon build | |
- name: 'sqlline and sqllsh' | |
shell: cmd | |
run: | | |
call sqlline.bat -e '!quit' | |
echo. | |
echo Sqlline example/csv | |
call example/csv/sqlline.bat --verbose -u jdbc:calcite:model=example/csv/src/test/resources/model.json -n admin -p admin -f example/csv/src/test/resources/smoke_test.sql | |
echo. | |
echo sqlsh | |
call sqlsh.bat -o headers "select count(*) commits, author from (select substring(author, 1, position(' <' in author)-1) author from git_commits) group by author order by count(*) desc, author limit 20" | |
linux-jdk8-oldest-guava-tz: | |
if: github.event.action != 'labeled' | |
name: 'Linux (JDK 8), oldest Guava, America/New_York Timezone' | |
runs-on: ubuntu-latest | |
env: | |
TZ: 'America/New_York' # flips between −05:00 and −04:00 | |
GUAVA: '21.0' # oldest Guava | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 50 | |
- name: 'Set up JDK 8' | |
uses: actions/setup-java@v2 | |
with: | |
java-version: 8 | |
distribution: 'zulu' | |
- uses: burrunan/gradle-cache-action@v1 | |
name: Test | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} | |
with: | |
job-id: jdk${{ matrix.jdk }} | |
remote-build-cache-proxy-enabled: false | |
arguments: --scan --no-parallel --no-daemon -Pguava.version=${{ env.GUAVA }} build | |
linux-jdk8-latest-guava-tz: | |
if: github.event.action != 'labeled' | |
name: 'Linux (JDK 8), latest Guava, America/New_York Timezone' | |
runs-on: ubuntu-latest | |
env: | |
TZ: 'America/New_York' # flips between −05:00 and −04:00 | |
GUAVA: '32.1.3-jre' # latest supported Guava version | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 50 | |
- name: 'Set up JDK 8' | |
uses: actions/setup-java@v2 | |
with: | |
java-version: 8 | |
distribution: 'zulu' | |
- uses: burrunan/gradle-cache-action@v1 | |
name: Test | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
with: | |
job-id: jdk${{ matrix.jdk }} | |
remote-build-cache-proxy-enabled: false | |
arguments: --scan --no-parallel --no-daemon -Pguava.version=${{ env.GUAVA }} tasks build | |
linux-jdk11-tz: | |
if: github.event.action != 'labeled' | |
name: 'Linux (JDK 11), Pacific/Chatham Timezone' | |
runs-on: ubuntu-latest | |
env: | |
TZ: 'Pacific/Chatham' # flips between +12:45 and +13:45 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 50 | |
- name: 'Set up JDK 11' | |
uses: actions/setup-java@v2 | |
with: | |
java-version: 11 | |
distribution: 'zulu' | |
- uses: burrunan/gradle-cache-action@v1 | |
name: Test | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} | |
with: | |
job-id: jdk${{ matrix.jdk }} | |
remote-build-cache-proxy-enabled: false | |
arguments: --scan --no-parallel --no-daemon build | |
linux-jdk17: # LTS JDK version, don't remove until EOL | |
if: github.event.action != 'labeled' | |
name: 'Linux (JDK 17)' | |
runs-on: ubuntu-latest | |
env: | |
GUAVA: '21.0' # oldest Guava | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 50 | |
- name: 'Set up JDK 17' | |
uses: actions/setup-java@v2 | |
with: | |
java-version: 17 | |
distribution: 'zulu' | |
- uses: burrunan/gradle-cache-action@v1 | |
name: Test | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} | |
with: | |
job-id: jdk${{ matrix.jdk }} | |
remote-build-cache-proxy-enabled: false | |
arguments: --scan --no-parallel --no-daemon -Pguava.version=${{ env.GUAVA }} build | |
linux-jdk19: # latest JDK version supported by ForbiddenAPIs plugin, keep this updated (see https://jdk.java.net/) | |
if: github.event.action != 'labeled' | |
name: 'Linux (JDK 19)' | |
runs-on: ubuntu-latest | |
env: | |
GUAVA: '21.0' # oldest Guava | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 50 | |
- name: 'Set up JDK 19' | |
uses: actions/setup-java@v2 | |
with: | |
java-version: 19 | |
distribution: 'zulu' | |
- uses: burrunan/gradle-cache-action@v1 | |
name: Test | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} | |
with: | |
job-id: jdk${{ matrix.jdk }} | |
remote-build-cache-proxy-enabled: false | |
arguments: --scan --no-parallel --no-daemon -Pguava.version=${{ env.GUAVA }} tasks build | |
linux-avatica: | |
if: github.event.action != 'labeled' | |
name: 'Linux (JDK 11), Avatica main' | |
runs-on: ubuntu-latest | |
steps: | |
- name: 'Set up JDK 11' | |
uses: actions/setup-java@v2 | |
with: | |
java-version: 11 | |
distribution: 'zulu' | |
- name: 'Clone Avatica to Maven Local repository' | |
run: | | |
git clone --branch main --depth 100 https://github.com/apache/calcite-avatica.git ../calcite-avatica | |
- uses: burrunan/gradle-cache-action@v1 | |
name: Build Avatica | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} | |
with: | |
job-id: avatica-jdk${{ matrix.jdk }} | |
remote-build-cache-proxy-enabled: false | |
build-root-directory: ../calcite-avatica | |
arguments: publishToMavenLocal | |
properties: | | |
calcite.avatica.version=1.0.0-dev-main | |
skipJavadoc= | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 50 | |
- uses: burrunan/gradle-cache-action@v1 | |
name: Test | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} | |
with: | |
job-id: jdk${{ matrix.jdk }} | |
remote-build-cache-proxy-enabled: false | |
execution-only-caches: true | |
arguments: --scan --no-parallel --no-daemon build javadoc | |
properties: | | |
calcite.avatica.version=1.0.0-dev-main-SNAPSHOT | |
enableMavenLocal= | |
mac: | |
if: github.event.action != 'labeled' | |
name: 'macOS (JDK 19)' | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 50 | |
- name: 'Set up JDK 19' | |
uses: actions/setup-java@v2 | |
with: | |
java-version: 19 | |
distribution: 'zulu' | |
- uses: burrunan/gradle-cache-action@v1 | |
name: Test | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} | |
with: | |
job-id: jdk19 | |
remote-build-cache-proxy-enabled: false | |
arguments: --scan --no-parallel --no-daemon build javadoc | |
- name: 'sqlline and sqllsh' | |
run: | | |
./sqlline -e '!quit' | |
echo | |
echo Sqlline example/csv | |
./example/csv/sqlline --verbose -u jdbc:calcite:model=example/csv/src/test/resources/model.json -n admin -p admin -f example/csv/src/test/resources/smoke_test.sql | |
echo | |
echo sqlsh | |
./sqlsh -o headers "select count(*) commits, author from (select substring(author, 1, position(' <' in author)-1) author from git_commits) group by author order by count(*) desc, author limit 20" | |
errorprone-guava-latest: # LTS JDK version, don't remove until EOL | |
if: github.event.action != 'labeled' | |
name: 'Error Prone (JDK 11), latest Guava' | |
runs-on: ubuntu-latest | |
env: | |
GUAVA: '32.1.3-jre' # ErrorProne checks for Beta APIs, so use the latest supported Guava version | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 50 | |
- name: 'Set up JDK 11' | |
uses: actions/setup-java@v2 | |
with: | |
java-version: 11 | |
distribution: 'zulu' | |
- uses: burrunan/gradle-cache-action@v1 | |
name: Test | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} | |
with: | |
job-id: errprone | |
remote-build-cache-proxy-enabled: false | |
arguments: --scan --no-parallel --no-daemon -Pguava.version=${{ env.GUAVA }} -PenableErrorprone classes | |
linux-checkerframework: | |
name: 'CheckerFramework (JDK 11)' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 50 | |
- name: 'Set up JDK 11' | |
uses: actions/setup-java@v2 | |
with: | |
java-version: 11 | |
distribution: 'zulu' | |
- name: 'Run CheckerFramework' | |
uses: burrunan/gradle-cache-action@v1 | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} | |
with: | |
job-id: checkerframework-jdk11 | |
remote-build-cache-proxy-enabled: false | |
arguments: --scan --no-parallel --no-daemon -PenableCheckerframework :linq4j:classes :core:classes | |
linux-checkerframework-guava29: | |
name: 'CheckerFramework (JDK 11), oldest Guava' | |
runs-on: ubuntu-latest | |
env: | |
GUAVA: '21.0' # oldest Guava | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 50 | |
- name: 'Set up JDK 11' | |
uses: actions/setup-java@v2 | |
with: | |
java-version: 11 | |
distribution: 'zulu' | |
- name: 'Run CheckerFramework' | |
uses: burrunan/gradle-cache-action@v1 | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} | |
with: | |
job-id: checkerframework-jdk11 | |
remote-build-cache-proxy-enabled: false | |
arguments: --scan --no-parallel --no-daemon -Pguava.version=${{ env.GUAVA }} -PenableCheckerframework :linq4j:classes :core:classes | |
linux-slow: | |
# Run slow tests when the commit is on main or it is requested explicitly by adding an | |
# appropriate label in the PR | |
if: github.ref == 'refs/heads/main' || contains(github.event.pull_request.labels.*.name, 'slow-tests-needed') | |
name: 'Linux (JDK 8) Slow Tests' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 50 | |
- name: 'Set up JDK 8' | |
uses: actions/setup-java@v2 | |
with: | |
java-version: 8 | |
distribution: 'zulu' | |
- uses: burrunan/gradle-cache-action@v1 | |
name: Test | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} | |
with: | |
job-id: jdk8 | |
remote-build-cache-proxy-enabled: false | |
arguments: --scan --no-parallel --no-daemon testSlow | |
linux-druid: | |
if: github.event.action != 'labeled' | |
name: 'Druid Tests' | |
runs-on: ubuntu-latest | |
steps: | |
- name: 'Set up JDK 17' | |
uses: actions/setup-java@v2 | |
with: | |
java-version: 17 | |
distribution: 'zulu' | |
- name: 'Checkout Druid dataset' | |
uses: actions/checkout@v3 | |
with: | |
repository: zabetak/calcite-druid-dataset | |
fetch-depth: 1 | |
path: druid-dataset | |
- name: 'Start Druid containers' | |
working-directory: ./druid-dataset | |
run: | | |
chmod -R 777 storage | |
docker-compose up -d | |
- name: 'Wait Druid nodes to startup' | |
run: | | |
until docker logs coordinator | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done | |
until docker logs router | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done | |
until docker logs historical | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done | |
until docker logs middlemanager | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done | |
until docker logs broker | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done | |
- name: 'Index Foodmart/Wikipedia datasets' | |
working-directory: ./druid-dataset | |
run: ./index.sh 30s | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 1 | |
path: calcite | |
- uses: burrunan/gradle-cache-action@v1 | |
name: 'Run Druid tests' | |
timeout-minutes: 10 | |
env: | |
S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} | |
S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} | |
GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} | |
with: | |
build-root-directory: ./calcite | |
job-id: Druid8 | |
remote-build-cache-proxy-enabled: false | |
arguments: --scan --no-parallel --no-daemon :druid:test -Dcalcite.test.druid=true |