Add calcite integration test

This commit is contained in:
Gijs de Jong
2023-08-09 12:46:20 +02:00
parent 0bcd6f081f
commit df89f6d83b
4 changed files with 35686 additions and 0 deletions

3
.gitmodules vendored
View File

@@ -10,3 +10,6 @@
[submodule "integration-tests/druid"]
path = integration-tests/druid
url = https://github.com/apache/druid
[submodule "integration-tests/calcite"]
path = integration-tests/calcite
url = https://github.com/apache/calcite

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,180 @@
diff --git a/build.gradle.kts b/build.gradle.kts
index a9a6c0692..7801a50af 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -91,7 +91,8 @@ fun reportsForHumans() = !(System.getenv()["CI"]?.toBoolean() ?: false)
val skipJavadoc by props()
val enableMavenLocal by props()
val enableGradleMetadata by props()
-val werror by props(true) // treat javac warnings as errors
+// disable, as error prone will be producing lots of warnings
+val werror by props(false) // treat javac warnings as errors
// Inherited from stage-vote-release-plugin: skipSign, useGpgCmd
// Inherited from gradle-extensions-plugin: slowSuiteLogThreshold=0L, slowTestLogThreshold=2000L
@@ -510,8 +511,8 @@ fun com.github.autostyle.gradle.BaseFormatExtension.license() {
plugins.withType<JavaPlugin> {
configure<JavaPluginConvention> {
- sourceCompatibility = JavaVersion.VERSION_1_8
- targetCompatibility = JavaVersion.VERSION_1_8
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
}
configure<JavaPluginExtension> {
consistentResolution {
@@ -548,6 +549,7 @@ fun com.github.autostyle.gradle.BaseFormatExtension.license() {
if (!skipAutostyle) {
autostyle {
java {
+ googleJavaFormat()
filter.exclude(*javaccGeneratedPatterns +
"**/test/java/*.java" +
"**/RelRule.java" /** remove as part of CALCITE-4831 **/)
@@ -640,7 +642,7 @@ fun com.github.autostyle.gradle.BaseFormatExtension.license() {
replace("hamcrest: nullValue", "org.hamcrest.Matchers.nullValue", "org.hamcrest.CoreMatchers.nullValue")
replace("hamcrest: sameInstance", "org.hamcrest.core.IsSame.sameInstance", "org.hamcrest.CoreMatchers.sameInstance")
replace("hamcrest: startsWith", "org.hamcrest.core.StringStartsWith.startsWith", "org.hamcrest.CoreMatchers.startsWith")
- replaceRegex("hamcrest: size", "\\.size\\(\\), (is|equalTo)\\(", ", hasSize\\(")
+ // replaceRegex("hamcrest: size", "\\.size\\(\\), (is|equalTo)\\(", ", hasSize\\(")
custom("((() preventer", 1) { contents: String ->
ParenthesisBalancer.apply(contents)
}
@@ -685,17 +687,26 @@ fun com.github.autostyle.gradle.BaseFormatExtension.license() {
if (enableErrorprone) {
apply(plugin = "net.ltgt.errorprone")
+ repositories {
+ mavenLocal()
+ }
+
+ val errorProneFlags = System.getProperty("error-prone.flags")
+ val errorProneSupportVersion = System.getProperty("error-prone-support.version")
+
dependencies {
"errorprone"("com.google.errorprone:error_prone_core:${"errorprone".v}")
+ "annotationProcessor"("tech.picnic.error-prone-support:error-prone-contrib:$errorProneSupportVersion")
+ "annotationProcessor"("tech.picnic.error-prone-support:refaster-runner:$errorProneSupportVersion")
"annotationProcessor"("com.google.guava:guava-beta-checker:1.0")
}
tasks.withType<JavaCompile>().configureEach {
options.errorprone {
+ allErrorsAsWarnings.set(true)
disableWarningsInGeneratedCode.set(true)
errorproneArgs.add("-XepExcludedPaths:.*/javacc/.*")
- enable(
- "MethodCanBeStatic"
- )
+ errorproneArgs.addAll(errorProneFlags.toString().split(" "))
+ errorproneArgs.add("-XepOpt:Refaster:NamePattern=^((?!((JUnitTo)?AssertJ)).*)")
disable(
"ComplexBooleanConstant",
"EqualsGetClass",
@@ -704,7 +715,9 @@ fun com.github.autostyle.gradle.BaseFormatExtension.license() {
"MutableConstantField",
"ReferenceEquality",
"SameNameButDifferent",
- "TypeParameterUnusedInFormals"
+ "TypeParameterUnusedInFormals",
+ "CollectorMutability",
+ "MethodCanBeStatic"
)
// Analyze issues, and enable the check
disable(
diff --git a/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java b/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
index 3cd45f455..1887d0a54 100644
--- a/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
+++ b/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
@@ -1463,6 +1463,8 @@ private AggregateOnCalcToAggregateUnifyRule() {
operand(MutableAggregate.class, target(0)), 1);
}
+
+ @SuppressWarnings("MapEntryComparingByKey")
@Override protected @Nullable UnifyResult apply(UnifyRuleCall call) {
final MutableAggregate query = (MutableAggregate) call.query;
final MutableCalc qInput = (MutableCalc) query.getInput();
diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java b/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java
index 29b26adb3..5de5d25cd 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java
@@ -621,6 +621,7 @@ private static String traitDiff(RelTraitSet original, RelTraitSet desired) {
.collect(Collectors.joining(", ", "[", "]"));
}
+ @SuppressWarnings("MapEntryComparingByValue")
public RelNode visit(
RelNode p,
int ordinal,
diff --git a/core/src/main/java/org/apache/calcite/util/ImmutableIntList.java b/core/src/main/java/org/apache/calcite/util/ImmutableIntList.java
index cb34fe3d5..5dbae21f5 100644
--- a/core/src/main/java/org/apache/calcite/util/ImmutableIntList.java
+++ b/core/src/main/java/org/apache/calcite/util/ImmutableIntList.java
@@ -324,10 +324,12 @@ private static class EmptyImmutableIntList extends ImmutableIntList {
return a;
}
+ @SuppressWarnings("ImmutableListOf")
@Override public Iterator<Integer> iterator() {
return Collections.<Integer>emptyList().iterator();
}
+ @SuppressWarnings("ImmutableListOf")
@Override public ListIterator<Integer> listIterator() {
return Collections.<Integer>emptyList().listIterator();
}
diff --git a/gradle.properties b/gradle.properties
index 3b0776230..42cfa56f3 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -53,7 +53,7 @@ com.google.protobuf.version=0.8.10
de.thetaphi.forbiddenapis.version=3.5.1
jacoco.version=0.8.10
kotlin.version=1.7.10
-net.ltgt.errorprone.version=1.3.0
+net.ltgt.errorprone.version=3.1.0
me.champeau.gradle.jmh.version=0.5.3
org.jetbrains.gradle.plugin.idea-ext.version=0.5
org.nosphere.apache.rat.version=0.7.0
@@ -75,7 +75,7 @@ kotlin.stdlib.default.dependency=false
checkerframework.version=3.10.0
checkstyle.version=8.28
spotbugs.version=3.1.11
-errorprone.version=2.5.1
+errorprone.version=HEAD-SNAPSHOT
# The property is used in https://github.com/wildfly/jandex regression testing, so avoid renaming
jandex.version=2.2.3.Final
@@ -109,7 +109,7 @@ foodmart-data-hsqldb.version=0.5
foodmart-data-json.version=0.4
foodmart-queries.version=0.4.1
geode-core.version=1.15.1
-guava.version=19.0
+guava.version=31.1-jre
h2.version=2.1.210
hadoop.version=2.7.5
hamcrest-date.version=2.0.4
diff --git a/linq4j/src/main/java/org/apache/calcite/linq4j/Linq4j.java b/linq4j/src/main/java/org/apache/calcite/linq4j/Linq4j.java
index 482a30757..1b22df621 100644
--- a/linq4j/src/main/java/org/apache/calcite/linq4j/Linq4j.java
+++ b/linq4j/src/main/java/org/apache/calcite/linq4j/Linq4j.java
@@ -417,6 +417,7 @@ public static <T> boolean equals(T t0, T t1) {
* above.
*/
@Deprecated // to be removed before 2.0
+ @SuppressWarnings("RequireNonNullStatement")
public static <T> T requireNonNull(T o) {
if (o == null) {
throw new NullPointerException();
diff --git a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
index d78fab432..449c2ebdd 100644
--- a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
+++ b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
@@ -98,6 +98,7 @@
* @see SqlParserFixture
* @see SqlParserListFixture
*/
+@SuppressWarnings("JUnitClassModifiers")
public class SqlParserTest {
/**
* List of reserved keywords.

104
integration-tests/run-gradle.sh Executable file
View File

@@ -0,0 +1,104 @@
#!/usr/bin/env bash
set -e -u -o pipefail
project=calcite
revision=calcite-1.35.0
if [ "${#}" -gt 1 ] || [[ ${1:---sync} != '--sync' ]]; then
echo "Usage: ${0} [--sync]"
exit 1
fi
do_sync="${1:-}"
error_prone_support_version="$(
mvn -f .. help:evaluate -Dexpression=project.version -q -DforceStdout
)"
error_prone_shared_flags='-XepExcludedPaths:(\Q${project.basedir}${file.separator}src${file.separator}\E(it|test)\Q${file.separator}resources\E|\Q${project.build.directory}${file.separator}\E).*'
error_prone_patch_flags="${error_prone_shared_flags} -XepPatchLocation:IN_PLACE -XepPatchChecks:$(
find .. -path "*/META-INF/services/com.google.errorprone.bugpatterns.BugChecker" \
| xargs grep -hoP '[^.]+$' \
| paste -s -d ','
)"
error_prone_validation_flags="${error_prone_shared_flags} -XepDisableAllChecks $(
find .. -path "*/META-INF/services/com.google.errorprone.bugpatterns.BugChecker" \
| xargs grep -hoP '[^.]+$' \
| sed -r 's,(.*),-Xep:\1:WARN,' \
| paste -s -d ' '
)"
validation_log_file="$(mktemp)"
trap 'rm -rf -- "${validation_log_file}"' INT TERM HUP EXIT
echo "Error Prone Support version: ${error_prone_support_version}"
echo "Error Prone patch flags: ${error_prone_patch_flags}"
echo "Error Prone validation flags: ${error_prone_validation_flags}"
pushd "${project}"
git checkout -f "${revision}"
git apply < "../${project}-${revision}-init.patch"
git commit -m 'dependency: Introduce Error Prone Support' .
# mvn com.spotify.fmt:fmt-maven-plugin:2.19:format \
# -DadditionalSourceDirectories='${project.basedir}${file.separator}src${file.separator}it${file.separator}java'
./gradlew autostyleApply
git commit -m 'minor: Reformat using Google Java Format' .
function apply_patch() {
local current_diff="${1}"
./gradlew clean autostyleApply compileJava -PenableErrorprone \
-Derror-prone.flags="${error_prone_patch_flags}" \
-Derror-prone-support.version="${error_prone_support_version}" \
--no-build-cache
local new_diff="$(git diff | shasum --algorithm 256)"
if [ "${current_diff}" != "${new_diff}" ]; then
apply_patch "${new_diff}"
fi
}
apply_patch "$(git diff | shasum --algorithm 256)"
baseline_patch="../${project}-${revision}-expected-changes.patch"
if [ -n "${do_sync}" ]; then
echo 'Saving changes...'
git diff > "${baseline_patch}"
else
echo 'Inspecting changes...'
if ! diff -u "${baseline_patch}" <(git diff); then
echo 'There are unexpected changes.'
exit 1
fi
fi
# Validate the results.
#
# - The `metadataFilesGenerationAllFiles` test is skipped because is makes line
# number assertions that will fail when the code is formatted or patched.
# - The `allCheckSectionJavaDocs` test is skipped because is validates that
# Javadoc has certain closing tags that are removed by Google Java Format.
# XXX: Figure out why the `validateCliDocSections` test fails.
./gradlew clean autostyleApply compileJava -PenableErrorprone \
-Derror-prone.flags="${error_prone_patch_flags}" \
-Derror-prone-support.version="${error_prone_support_version}" \
--no-build-cache \
| tee "${validation_log_file}"
baseline_warnings="../${project}-${revision}-expected-warnings.txt"
generated_warnngs="$(grep -oP "(?<=^\\Q[WARNING] ${PWD}/\\E).*" "${validation_log_file}" | grep -P '\] \[')"
if [ -n "${do_sync}" ]; then
echo 'Saving emitted warnings...'
echo "${generated_warnngs}" > "${baseline_warnings}"
else
echo 'Inspecting emitted warnings...'
if ! diff -u "${baseline_warnings}" <(echo "${generated_warnngs}"); then
echo 'Diagnostics output changed.'
exit 1
fi
fi