This is an automated email from the ASF dual-hosted git repository. vladimirsitnikov pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/calcite.git
commit 080423bc5c1396676f718db65b2ada36eaa70dbc Author: Vladimir Sitnikov <[email protected]> AuthorDate: Tue Nov 12 20:30:03 2019 +0300 [CALCITE-2905] Use code generation to create DriverVersion It simplifies the implementation (no need to parse properties). --- build.gradle.kts | 1 + core/build.gradle.kts | 45 ++++++++++++++++++++++ .../main/java/org/apache/calcite/jdbc/Driver.java | 8 +--- .../apache/calcite/jdbc/CalciteDriverVersion.java | 41 ++++++++++++++++++++ 4 files changed, 88 insertions(+), 7 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6c25408..aadc0b1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -188,6 +188,7 @@ val semaphore = `java.util.concurrent`.Semaphore(1) val licenseHeaderFile = file("config/license.header.java") val javaccGeneratedPatterns = arrayOf( + "org/apache/calcite/jdbc/CalciteDriverVersion.java", "**/parser/**/*ParserImpl*.*", "**/parser/**/PigletParser.*", "**/parser/**/PigletParserConstants.*", diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 4648132..b8b438a 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -89,6 +89,51 @@ tasks.jar { } } +val generatedVersionDir = File(buildDir, "generated/sources/version") +val versionClass by tasks.registering(Sync::class) { + val re = Regex("^(\\d+)\\.(\\d+).*") + + val version = project.version.toString() + val matchResult = re.find(version) ?: throw GradleException("Unable to parse major.minor version parts from project.version '$version'") + val (major, minor) = matchResult.destructured + + // This makes Gradle re-execute the task when version is updated + inputs.property("version", version) + + // Note: Gradle does not analyze regexps below, so this variable tells Gradle + // to treat the task input out of date when filtering logic is updated. + inputs.property("replace.logic.version.bump.when.updating.filter.below", 1) + + outputs.dir(generatedVersionDir) + + into(generatedVersionDir) + from("$projectDir/src/main/version") { + include("**/*.java") + val prop = Regex("""("[^"]++"|\S+)\s+/\* :(\w+) \*/""") + filter { x: String -> + prop.replace(x) { + val variableName = it.groups[2]?.value + when (variableName) { + "version" -> "\"$version\"" + "major" -> major + "minor" -> minor + else -> "unknown variable: $x" + } + """ /* :$variableName */""" + } + } + } +} + +ide { + generatedJavaSources(versionClass.get(), generatedVersionDir) +} + +sourceSets { + main { + resources.exclude("version/org-apache-calcite-jdbc.properties") + } +} + tasks.withType<Checkstyle>().configureEach { exclude("org/apache/calcite/runtime/Resources.java") } diff --git a/core/src/main/java/org/apache/calcite/jdbc/Driver.java b/core/src/main/java/org/apache/calcite/jdbc/Driver.java index 1840ed7..b839566 100644 --- a/core/src/main/java/org/apache/calcite/jdbc/Driver.java +++ b/core/src/main/java/org/apache/calcite/jdbc/Driver.java @@ -82,13 +82,7 @@ public class Driver extends UnregisteredDriver { } @Override protected DriverVersion createDriverVersion() { - return DriverVersion.load( - Driver.class, - "org-apache-calcite-jdbc.properties", - "Calcite JDBC Driver", - "unknown version", - "Calcite", - "unknown version"); + return CalciteDriverVersion.INSTANCE; } @Override protected Handler createHandler() { diff --git a/core/src/main/version/org/apache/calcite/jdbc/CalciteDriverVersion.java b/core/src/main/version/org/apache/calcite/jdbc/CalciteDriverVersion.java new file mode 100644 index 0000000..4503807 --- /dev/null +++ b/core/src/main/version/org/apache/calcite/jdbc/CalciteDriverVersion.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.calcite.jdbc; + +import org.apache.calcite.avatica.DriverVersion; + +/** + * Provides information on the current Calcite version. + */ +class CalciteDriverVersion { + static final DriverVersion INSTANCE = + new DriverVersion( + "Calcite JDBC Driver", + "1.0.0-unprocessed-SNAPSHOT" /* :version */, + "Calcite", + "1.0.0-unprocessed-SNAPSHOT" /* :version */, + true, + 1 /* :major */, + 0 /* :minor */, + 1 /* :major */, + 0 /* :minor */); + + private CalciteDriverVersion() { + } +} + +// End CalciteDriverVersion.java
