Skip to content

Commit 5b87418

Browse files
committed
merge main
2 parents 6ba115f + 6aaf4f3 commit 5b87418

File tree

154 files changed

+6085
-855
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

154 files changed

+6085
-855
lines changed

.github/workflows/pr.yml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
name: Check editorconfig
1313
runs-on: ubuntu-latest
1414
steps:
15-
- uses: actions/checkout@v5
15+
- uses: actions/checkout@v6
1616
with:
1717
fetch-depth: 0
1818
- uses: editorconfig-checker/action-editorconfig-checker@v2
@@ -21,18 +21,18 @@ jobs:
2121
name: Lint commits for semantic-release
2222
runs-on: ubuntu-latest
2323
steps:
24-
- uses: actions/checkout@v5
24+
- uses: actions/checkout@v6
2525
with:
2626
fetch-depth: 0
27-
- uses: actions/setup-node@v5
27+
- uses: actions/setup-node@v6
2828
with:
2929
node-version: "20"
3030
- run: npx commitlint --from=${{ github.event.pull_request.base.sha }} --to=${{ github.sha }} --verbose
3131
security:
3232
name: Security validation
3333
runs-on: ubuntu-latest
3434
steps:
35-
- uses: actions/checkout@v5
35+
- uses: actions/checkout@v6
3636
- uses: gradle/actions/wrapper-validation@v5
3737
osv-scanner:
3838
runs-on: ubuntu-latest
@@ -45,7 +45,7 @@ jobs:
4545
- isthmus
4646
- isthmus-cli
4747
steps:
48-
- uses: actions/checkout@v5
48+
- uses: actions/checkout@v6
4949
- uses: actions/setup-java@v5
5050
with:
5151
java-version: '17'
@@ -58,7 +58,7 @@ jobs:
5858
name: Build and Test Java
5959
runs-on: ubuntu-latest
6060
steps:
61-
- uses: actions/checkout@v5
61+
- uses: actions/checkout@v6
6262
with:
6363
submodules: recursive
6464
- name: Set up JDK 17
@@ -70,15 +70,15 @@ jobs:
7070
uses: gradle/actions/setup-gradle@v5
7171
- name: Build with Gradle
7272
run: |
73-
# fetch submodule tags since actions/checkout@v5 does not
73+
# fetch submodule tags since actions/checkout@v6 does not
7474
git submodule foreach 'git fetch --unshallow || true'
7575
7676
./gradlew build --rerun-tasks
7777
examples:
7878
name: Build Examples
7979
runs-on: ubuntu-latest
8080
steps:
81-
- uses: actions/checkout@v5
81+
- uses: actions/checkout@v6
8282
with:
8383
submodules: recursive
8484
- name: Set up JDK 17
@@ -102,7 +102,7 @@ jobs:
102102
matrix:
103103
os: [ubuntu-latest, macOS-latest]
104104
steps:
105-
- uses: actions/checkout@v5
105+
- uses: actions/checkout@v6
106106
with:
107107
submodules: recursive
108108
- uses: actions/setup-java@v5
@@ -115,7 +115,7 @@ jobs:
115115
run: java -version
116116
- name: Build with Gradle
117117
run: |
118-
# fetch submodule tags since actions/checkout@v5 does not
118+
# fetch submodule tags since actions/checkout@v6 does not
119119
git submodule foreach 'git fetch --unshallow || true'
120120
121121
./gradlew nativeCompile
@@ -128,18 +128,18 @@ jobs:
128128
run: |
129129
value=`mv isthmus-cli/build/native/nativeCompile/isthmus isthmus-cli/build/native/nativeCompile/isthmus-${{ matrix.os }}`
130130
- name: Publish artifact
131-
uses: actions/upload-artifact@v4
131+
uses: actions/upload-artifact@v5
132132
with:
133133
name: isthmus-${{ matrix.os }}
134134
path: isthmus-cli/build/native/nativeCompile/isthmus-${{ matrix.os }}
135135
dry-run-release:
136136
name: Dry-run release
137137
runs-on: ubuntu-latest
138138
steps:
139-
- uses: actions/checkout@v5
139+
- uses: actions/checkout@v6
140140
with:
141141
fetch-depth: 0
142-
- uses: actions/setup-node@v5
142+
- uses: actions/setup-node@v6
143143
with:
144144
node-version: "20"
145145
- name: Check current status before next release

.github/workflows/release.yml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
matrix:
2020
os: [ubuntu-latest, macOS-latest]
2121
steps:
22-
- uses: actions/checkout@v5
22+
- uses: actions/checkout@v6
2323
with:
2424
submodules: recursive
2525
- uses: actions/setup-java@v5
@@ -32,7 +32,7 @@ jobs:
3232
run: java -version
3333
- name: Build with Gradle
3434
run: |
35-
# fetch submodule tags since actions/checkout@v5 does not
35+
# fetch submodule tags since actions/checkout@v6 does not
3636
git submodule foreach 'git fetch --unshallow || true'
3737
3838
./gradlew nativeCompile
@@ -45,7 +45,7 @@ jobs:
4545
run: |
4646
value=`mv isthmus-cli/build/native/nativeCompile/isthmus isthmus-cli/build/native/nativeCompile/isthmus-${{ matrix.os }}`
4747
- name: Publish artifact
48-
uses: actions/upload-artifact@v4
48+
uses: actions/upload-artifact@v5
4949
with:
5050
name: isthmus-${{ matrix.os }}
5151
path: isthmus-cli/build/native/nativeCompile/isthmus-${{ matrix.os }}
@@ -60,7 +60,7 @@ jobs:
6060
app-id: ${{ secrets.RELEASER_ID }}
6161
private-key: ${{ secrets.RELEASER_KEY }}
6262
- name: Checkout code
63-
uses: actions/checkout@v5
63+
uses: actions/checkout@v6
6464
with:
6565
token: ${{ steps.app-token.outputs.token }}
6666
fetch-depth: 0
@@ -71,18 +71,18 @@ jobs:
7171
with:
7272
java-version: "17"
7373
distribution: "temurin"
74-
- uses: actions/setup-node@v5
74+
- uses: actions/setup-node@v6
7575
with:
7676
node-version: "20"
7777
- name: Setup Gradle
7878
uses: gradle/actions/setup-gradle@v5
7979
- name: Download isthmus-ubuntu-latest binary
80-
uses: actions/download-artifact@v5
80+
uses: actions/download-artifact@v6
8181
with:
8282
name: isthmus-ubuntu-latest
8383
path: native/libs
8484
- name: Download isthmus-macOS-latest binary
85-
uses: actions/download-artifact@v5
85+
uses: actions/download-artifact@v6
8686
with:
8787
name: isthmus-macOS-latest
8888
path: native/libs
@@ -101,5 +101,5 @@ jobs:
101101
SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }}
102102
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
103103
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
104-
JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USER }}
105-
JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_KEY }}
104+
MAVENCENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USER }}
105+
MAVENCENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_KEY }}

.github/workflows/sanity.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ jobs:
88
name: Sanity Check
99
runs-on: ubuntu-latest
1010
steps:
11-
- uses: actions/checkout@v5
11+
- uses: actions/checkout@v6
1212
with:
1313
fetch-depth: 0
1414
- name: Validate credentials for Sonatype and Signing

CHANGELOG.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,54 @@
11
Release Notes
22
---
33

4+
## [0.70.0](https://github.com/substrait-io/substrait-java/compare/v0.69.0...v0.70.0) (2025-11-23)
5+
6+
### Features
7+
8+
* **isthmus:** mapping of positional scalar fns ([#610](https://github.com/substrait-io/substrait-java/issues/610)) ([96541a9](https://github.com/substrait-io/substrait-java/commit/96541a9f2cc0cc0c38215b0a31473246732347c3))
9+
* **isthmus:** support bitwise left shift ([#605](https://github.com/substrait-io/substrait-java/issues/605)) ([22448d1](https://github.com/substrait-io/substrait-java/commit/22448d1bd36c5face8675e31b85d5378d40901a0))
10+
11+
## [0.69.0](https://github.com/substrait-io/substrait-java/compare/v0.68.0...v0.69.0) (2025-11-16)
12+
13+
### Features
14+
15+
* enforce row type consistency with schema in virtual tables ([#601](https://github.com/substrait-io/substrait-java/issues/601)) ([a5322ea](https://github.com/substrait-io/substrait-java/commit/a5322eadfab67bfcdd34453fd94c9a559ccc762c))
16+
* **isthmus:** log2, greatest and least scalar fn mappings added ([#598](https://github.com/substrait-io/substrait-java/issues/598)) ([848bfcf](https://github.com/substrait-io/substrait-java/commit/848bfcf83f4235574a686a4d48407a8f8ba5d99e))
17+
* **isthmus:** true, false, distinct comparator scalar fn mappings ([#597](https://github.com/substrait-io/substrait-java/issues/597)) ([f59ecc5](https://github.com/substrait-io/substrait-java/commit/f59ecc5ad78eb8f8e79c664fbb4f81c572bb9aa1))
18+
19+
### Bug Fixes
20+
21+
* handle valid YAML extension types ([#595](https://github.com/substrait-io/substrait-java/issues/595)) ([ed25bed](https://github.com/substrait-io/substrait-java/commit/ed25bed9233b1bd393f128c580cf1ab7fbcca0b9)), closes [#594](https://github.com/substrait-io/substrait-java/issues/594)
22+
* **isthmus:** support TPC-DS queries 1, 30, 81 ([#593](https://github.com/substrait-io/substrait-java/issues/593)) ([442f1f2](https://github.com/substrait-io/substrait-java/commit/442f1f2b171d8eb691f3dcc01c2d6fe03c6add8a))
23+
24+
## [0.68.0](https://github.com/substrait-io/substrait-java/compare/v0.67.0...v0.68.0) (2025-11-02)
25+
26+
### Features
27+
28+
* **isthmus:** mapping of angular scalar functions ([#586](https://github.com/substrait-io/substrait-java/issues/586)) ([9c4db92](https://github.com/substrait-io/substrait-java/commit/9c4db9207cec12a7cf1625ee29343ba402c864d6))
29+
* **isthmus:** mapping of bitwise functions from substrait ([#582](https://github.com/substrait-io/substrait-java/issues/582)) ([e1e8689](https://github.com/substrait-io/substrait-java/commit/e1e86891369ee69be302a9c2eb3405395acee9f4))
30+
* **isthmus:** mapping of factorial function from substrait ([#589](https://github.com/substrait-io/substrait-java/issues/589)) ([4b83666](https://github.com/substrait-io/substrait-java/commit/4b8366675108d506fd29f1cd355bd27712cafe73))
31+
* **isthmus:** mapping of hyperbolic functions from substrait ([#581](https://github.com/substrait-io/substrait-java/issues/581)) ([ac9ad28](https://github.com/substrait-io/substrait-java/commit/ac9ad2839feb77288bee4d910133f89ef0324a16))
32+
* **isthmus:** support fully qualified table names in SubstraitCreateStatementParser ([#575](https://github.com/substrait-io/substrait-java/issues/575)) ([ab5943e](https://github.com/substrait-io/substrait-java/commit/ab5943e53f73ed73f816f2c3f59502378b3bf15c))
33+
34+
## [0.67.0](https://github.com/substrait-io/substrait-java/compare/v0.66.0...v0.67.0) (2025-10-28)
35+
36+
### Features
37+
38+
* **core,isthmus:** support grouping set index in Aggregate ([#565](https://github.com/substrait-io/substrait-java/issues/565)) ([a00a811](https://github.com/substrait-io/substrait-java/commit/a00a811bb2043151b242169e92a65969b93bf5a4))
39+
* **isthmus:** extend Schema collector for dml ([#570](https://github.com/substrait-io/substrait-java/issues/570)) ([3f0f8f1](https://github.com/substrait-io/substrait-java/commit/3f0f8f14cc8483250ced8a4a5293cf21e1ce85dd))
40+
* **isthmus:** improve extensibility of SubstraitRelVisitor ([#553](https://github.com/substrait-io/substrait-java/issues/553)) ([3c3db23](https://github.com/substrait-io/substrait-java/commit/3c3db23b7c508cd50a6317a9970c1d0fe7b0ec16))
41+
* **isthmus:** mapping of square root function from substrait to calcite ([#568](https://github.com/substrait-io/substrait-java/issues/568)) ([a140d21](https://github.com/substrait-io/substrait-java/commit/a140d21e88732f377effd61abd8e2a2958ce4d43))
42+
* **spark:** dialect YAML file for spark converter ([#554](https://github.com/substrait-io/substrait-java/issues/554)) ([c4c6153](https://github.com/substrait-io/substrait-java/commit/c4c6153958182941a83b96beade193fd62652d81))
43+
44+
### Bug Fixes
45+
46+
* **core:** close AdvancedExtension serde gaps ([#569](https://github.com/substrait-io/substrait-java/issues/569)) ([2ba50cb](https://github.com/substrait-io/substrait-java/commit/2ba50cbf5f063817de6501e27346db6ea7a2b90c))
47+
* **core:** disable @Generated annotations for immutables ([#560](https://github.com/substrait-io/substrait-java/issues/560)) ([7222906](https://github.com/substrait-io/substrait-java/commit/7222906351ecec1e8cf06085529fb4c53c1d25d0))
48+
* prevents exception on construction of `FunctionConverter` with duplicate functions ([#564](https://github.com/substrait-io/substrait-java/issues/564)) ([1b1dc73](https://github.com/substrait-io/substrait-java/commit/1b1dc73f6bab54abfdb41f810b77eaa01ebb7b01)), closes [#562](https://github.com/substrait-io/substrait-java/issues/562)
49+
* **spark:** add versions for jackson dependencies ([#576](https://github.com/substrait-io/substrait-java/issues/576)) ([3605322](https://github.com/substrait-io/substrait-java/commit/36053226839f3943faa7e4c5a704c3b35574a0bd))
50+
* **spark:** convert UnsafeArrayData literal to substrait ([#557](https://github.com/substrait-io/substrait-java/issues/557)) ([a6b2187](https://github.com/substrait-io/substrait-java/commit/a6b21874b24431699d75d9b22d528d7b02e3fd9a))
51+
452
## [0.66.0](https://github.com/substrait-io/substrait-java/compare/v0.65.0...v0.66.0) (2025-10-09)
553

654
### ⚠ BREAKING CHANGES

build-logic/src/main/resources/substrait-pmd.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<rule ref="category/java/codestyle.xml/UnnecessaryModifier" />
1414
<rule ref="category/java/codestyle.xml/FieldDeclarationsShouldBeAtStartOfClass" />
1515
<rule ref="category/java/codestyle.xml/UseExplicitTypes" />
16+
<rule ref="category/java/bestpractices.xml/JUnit5TestShouldBePackagePrivate" />
1617
<rule ref="category/java/bestpractices.xml/MissingOverride" />
1718
<rule ref="category/java/bestpractices.xml/UnusedAssignment" />
1819
<rule ref="category/java/bestpractices.xml/UnusedLocalVariable" />

build.gradle.kts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,37 @@ plugins {
99
id("idea")
1010
alias(libs.plugins.gradle.extensions)
1111
alias(libs.plugins.spotless)
12-
alias(libs.plugins.jreleaser) apply false
12+
alias(libs.plugins.nmcp).apply(false)
13+
alias(libs.plugins.nmcp.aggregation)
1314
}
1415

1516
repositories { mavenCentral() }
1617

1718
java { toolchain { languageVersion.set(JavaLanguageVersion.of(17)) } }
1819

20+
nmcpAggregation {
21+
centralPortal {
22+
username =
23+
System.getenv("MAVENCENTRAL_USERNAME").takeUnless { it.isNullOrEmpty() }
24+
?: extra["MAVENCENTRAL_USERNAME"].toString()
25+
password =
26+
System.getenv("MAVENCENTRAL_PASSWORD").takeUnless { it.isNullOrEmpty() }
27+
?: extra["MAVENCENTRAL_PASSWORD"].toString()
28+
publishingType = "AUTOMATIC"
29+
}
30+
}
31+
1932
dependencies {
2033
testImplementation(platform(libs.junit.bom))
2134
testImplementation(libs.junit.jupiter.api)
2235
testImplementation(libs.junit.jupiter.engine)
2336
implementation(libs.slf4j.api)
2437
annotationProcessor(libs.immutables.value)
2538
compileOnly(libs.immutables.annotations)
39+
40+
nmcpAggregation(project(":core"))
41+
nmcpAggregation(project(":spark"))
42+
nmcpAggregation(project(":isthmus"))
2643
}
2744

2845
allprojects {
@@ -44,7 +61,7 @@ allprojects {
4461
googleJavaFormat()
4562
removeUnusedImports()
4663
trimTrailingWhitespace()
47-
removeWildcardImports()
64+
forbidWildcardImports()
4865
}
4966
}
5067
}

ci/release/publish.sh

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,4 @@ set -euo pipefail
77
git submodule foreach 'git fetch --unshallow || true'
88

99
./gradlew clean
10-
./gradlew publishAllPublicationsToStagingRepository
11-
./gradlew jreleaserDeploy
10+
./gradlew publishAggregationToCentralPortal

ci/release/sanity.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ set -euo pipefail
55
export GPG_TTY=$(tty)
66

77
echo "Validate Central Publisher API credentials."
8-
BEARER=$(printf "%s:%s" "${SONATYPE_USER}" "${SONATYPE_PASSWORD}" | base64)
8+
BEARER=$(printf "%s:%s" "${MAVENCENTRAL_USERNAME}" "${MAVENCENTRAL_PASSWORD}" | base64)
99
CODE=$(curl --request GET 'https://central.sonatype.com/api/v1/publisher/published?namespace=io.substrait&name=core&version=0.1.0' --header 'accept: application/json' --header "Authorization: Bearer ${BEARER}" -sSL -w '%{http_code}' -o /dev/null)
1010
if [[ "$CODE" =~ ^2 ]]; then
1111
echo "Central Publisher API credentials configured successfully."

core/build.gradle.kts

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import java.io.ByteArrayOutputStream
22
import java.nio.charset.StandardCharsets
3-
import org.gradle.api.provider.ValueSource
4-
import org.gradle.api.provider.ValueSourceParameters
53
import org.gradle.plugins.ide.idea.model.IdeaModel
64
import org.slf4j.LoggerFactory
75

@@ -14,7 +12,7 @@ plugins {
1412
alias(libs.plugins.protobuf)
1513
alias(libs.plugins.spotless)
1614
alias(libs.plugins.shadow)
17-
alias(libs.plugins.jreleaser)
15+
alias(libs.plugins.nmcp)
1816
id("substrait.java-conventions")
1917
}
2018

@@ -58,16 +56,12 @@ publishing {
5856
val snapshotsRepoUrl = layout.buildDirectory.dir("repos/snapshots")
5957
url = uri(if (version.toString().endsWith("SNAPSHOT")) snapshotsRepoUrl else releasesRepoUrl)
6058
}
61-
maven {
62-
name = "staging"
63-
url = stagingRepositoryUrl
64-
}
6559
}
6660
}
6761

6862
signing {
6963
setRequired({
70-
gradle.taskGraph.hasTask(":${project.name}:publishMaven-publishPublicationToStagingRepository")
64+
gradle.taskGraph.hasTask(":${project.name}:publishMaven-publishPublicationToNmcpRepository")
7165
})
7266
val signingKeyId =
7367
System.getenv("SIGNING_KEY_ID").takeUnless { it.isNullOrEmpty() }
@@ -82,23 +76,6 @@ signing {
8276
sign(publishing.publications["maven-publish"])
8377
}
8478

85-
jreleaser {
86-
gitRootSearch = true
87-
deploy {
88-
maven {
89-
mavenCentral {
90-
register("sonatype") {
91-
active = org.jreleaser.model.Active.ALWAYS
92-
url = "https://central.sonatype.com/api/v1/publisher"
93-
sign = false
94-
stagingRepository(file(stagingRepositoryUrl).toString())
95-
}
96-
}
97-
}
98-
}
99-
release { github { enabled = false } }
100-
}
101-
10279
// This allows specifying deps to be shadowed so that they don't get included in the POM file
10380
val shadowImplementation by configurations.creating
10481

@@ -213,8 +190,6 @@ tasks.register("writeManifest") {
213190
}
214191
}
215192

216-
tasks.named("compileJava") { dependsOn("writeManifest") }
217-
218193
tasks {
219194
shadowJar {
220195
archiveClassifier.set("") // to override ".jar" instead of producing "-all.jar"
@@ -226,12 +201,17 @@ tasks {
226201
}
227202

228203
jar { manifest { from("build/generated/sources/manifest/META-INF/MANIFEST.MF") } }
229-
}
230204

231-
// Set the release instead of using a Java 8 toolchain since ANTLR requires Java 11+ to run
232-
tasks.withType<JavaCompile>().configureEach { options.release = 8 }
205+
// Set the release instead of using a Java 8 toolchain since ANTLR requires Java 11+ to run.
206+
// Only set the compile release since JUnit 6 requires Java 17 to run tests.
207+
compileJava {
208+
options.release = 8
209+
dependsOn("writeManifest")
210+
}
211+
}
233212

234213
java {
214+
toolchain { languageVersion = JavaLanguageVersion.of(17) }
235215
withJavadocJar()
236216
withSourcesJar()
237217
}

0 commit comments

Comments
 (0)