trino-spi
Used in:
components
- OverviewOverview
- VersionsVersions
- DependentsDependents
- DependenciesDependencies
<dependency>
<groupId>io.trino</groupId>
<artifactId>trino-spi</artifactId>
<version>482</version>
</dependency><?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.trino</groupId>
<artifactId>trino-root</artifactId>
<version>482</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>trino-spi</artifactId>
<name>${project.artifactId}</name>
<description>Trino - Service Provider Interface (SPI)</description>
<properties>
<released-artifacts.dir>${project.build.directory}/released-artifacts</released-artifacts.dir>
<trino.check.skip-revapi>${air.check.skip-basic}</trino.check.skip-revapi>
</properties>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_annotations</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.airlift</groupId>
<artifactId>slice</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api-incubator</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-common</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-context</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-core</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<classifier>classes</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.airlift</groupId>
<artifactId>json</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.airlift</groupId>
<artifactId>junit-extensions</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.airlift</groupId>
<artifactId>testing</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.trino</groupId>
<artifactId>trino-testing-services</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>it.unimi.dsi</groupId>
<artifactId>fastutil</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.iceberg</groupId>
<artifactId>iceberg-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.iceberg</groupId>
<artifactId>iceberg-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<include>io/trino/spi/trino-spi-version.txt</include>
</includes>
</resource>
<resource>
<filtering>false</filtering>
<directory>src/main/resources</directory>
<excludes>
<exclude>io/trino/spi/trino-spi-version.txt</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.revapi</groupId>
<artifactId>revapi-maven-plugin</artifactId>
<version>0.15.1</version>
<configuration>
<skip>${trino.check.skip-revapi}</skip>
<ignoreSuggestionsFormat>xml</ignoreSuggestionsFormat>
<analysisConfiguration>
<revapi.differences>
<ignore>true</ignore>
<differences>
<!-- Allow adding new annotations (such as @Nullable) -->
<item>
<code>java.annotation.added</code>
</item>
<!-- Allow changing enum constant order (e.g., StandardErrorCode) -->
<item>
<code>java.field.enumConstantOrderChanged</code>
</item>
<!-- Allow arbitrary changes to unstable APIs -->
<item>
<regex>true</regex>
<code>java.method.numberOfParametersChanged</code>
<old>
<matcher>java</matcher>
<match>@io.trino.spi.Unstable *;</match>
</old>
</item>
<!-- Allow removing things that were previously deprecated -->
<item>
<regex>true</regex>
<code>java\.(class|method|field)\.removed</code>
<old>
<matcher>java</matcher>
<match>@java.lang.Deprecated(*) ^*;</match>
</old>
</item>
<!-- Backwards incompatible changes since the previous release -->
<item>
<code>java.method.numberOfParametersChanged</code>
<old>method java.util.concurrent.CompletableFuture<io.trino.spi.connector.ConnectorSplitSource.ConnectorSplitBatch> io.trino.spi.connector.ConnectorSplitSource::getNextBatch(int)</old>
<new>method java.util.concurrent.CompletableFuture<java.util.List<io.trino.spi.connector.ConnectorSplit>> io.trino.spi.connector.ConnectorSplitSource::getNextBatch(int, io.trino.spi.connector.DynamicFilterSnapshot)</new>
<justification>getNextBatch(int) replaced by getNextBatch(int, DynamicFilterSnapshot) returning List — dynamic filter predicate is now delivered per-batch and ConnectorSplitBatch wrapper removed</justification>
</item>
<item>
<code>java.method.numberOfParametersChanged</code>
<old>method java.util.concurrent.CompletableFuture<io.trino.spi.connector.ConnectorSplitSource.ConnectorSplitBatch> io.trino.spi.connector.FixedSplitSource::getNextBatch(int)</old>
<new>method java.util.concurrent.CompletableFuture<java.util.List<io.trino.spi.connector.ConnectorSplit>> io.trino.spi.connector.FixedSplitSource::getNextBatch(int, io.trino.spi.connector.DynamicFilterSnapshot)</new>
<justification>getNextBatch(int) replaced by getNextBatch(int, DynamicFilterSnapshot) returning List</justification>
</item>
<item>
<code>java.method.returnTypeTypeParametersChanged</code>
<old>method java.util.concurrent.CompletableFuture<io.trino.spi.connector.ConnectorSplitSource.ConnectorSplitBatch> io.trino.spi.connector.ConnectorSplitSource::getNextBatch(int)</old>
<new>method java.util.concurrent.CompletableFuture<java.util.List<io.trino.spi.connector.ConnectorSplit>> io.trino.spi.connector.ConnectorSplitSource::getNextBatch(int, io.trino.spi.connector.DynamicFilterSnapshot)</new>
<justification>ConnectorSplitBatch wrapper removed — getNextBatch now returns List<ConnectorSplit> directly</justification>
</item>
<item>
<code>java.method.returnTypeTypeParametersChanged</code>
<old>method java.util.concurrent.CompletableFuture<io.trino.spi.connector.ConnectorSplitSource.ConnectorSplitBatch> io.trino.spi.connector.FixedSplitSource::getNextBatch(int)</old>
<new>method java.util.concurrent.CompletableFuture<java.util.List<io.trino.spi.connector.ConnectorSplit>> io.trino.spi.connector.FixedSplitSource::getNextBatch(int, io.trino.spi.connector.DynamicFilterSnapshot)</new>
<justification>ConnectorSplitBatch wrapper removed — getNextBatch now returns List<ConnectorSplit> directly</justification>
</item>
<item>
<code>java.method.noLongerDefault</code>
<new>method java.util.concurrent.CompletableFuture<java.util.List<io.trino.spi.connector.ConnectorSplit>> io.trino.spi.connector.ConnectorSplitSource::getNextBatch(int, io.trino.spi.connector.DynamicFilterSnapshot)</new>
<justification>Method is now abstract — split sources must implement it</justification>
</item>
<item>
<code>java.method.nowAbstract</code>
<new>method java.util.concurrent.CompletableFuture<java.util.List<io.trino.spi.connector.ConnectorSplit>> io.trino.spi.connector.ConnectorSplitSource::getNextBatch(int, io.trino.spi.connector.DynamicFilterSnapshot)</new>
<justification>Method is now abstract — split sources must implement it</justification>
</item>
<item>
<code>java.method.abstractMethodAddedToInterface</code>
<new>method io.trino.spi.connector.ConnectorSplitSource io.trino.spi.connector.ConnectorSplitManager::getSplits(io.trino.spi.connector.ConnectorTransactionHandle, io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorTableHandle, java.util.Set<io.trino.spi.connector.ColumnHandle>, io.trino.spi.connector.Constraint)</new>
<justification>Replaces getSplits(DynamicFilter) — connectors must override the new method to receive the dynamic filter column set</justification>
</item>
<item>
<code>java.method.parameterTypeChanged</code>
<old>method io.trino.spi.connector.ConnectorSplitSource io.trino.spi.connector.ConnectorSplitManager::getSplits(io.trino.spi.connector.ConnectorTransactionHandle, io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorTableHandle, io.trino.spi.connector.DynamicFilter, io.trino.spi.connector.Constraint)</old>
<new>method io.trino.spi.connector.ConnectorSplitSource io.trino.spi.connector.ConnectorSplitManager::getSplits(io.trino.spi.connector.ConnectorTransactionHandle, io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorTableHandle, java.util.Set<io.trino.spi.connector.ColumnHandle>, io.trino.spi.connector.Constraint)</new>
<justification>DynamicFilter replaced by Set<ColumnHandle> — predicate is now delivered per-batch via getNextBatch(int, DynamicFilterSnapshot)</justification>
</item>
<item>
<code>java.method.noLongerDefault</code>
<new>method io.trino.spi.connector.ConnectorSplitSource io.trino.spi.connector.ConnectorSplitManager::getSplits(io.trino.spi.connector.ConnectorTransactionHandle, io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorTableHandle, java.util.Set<io.trino.spi.connector.ColumnHandle>, io.trino.spi.connector.Constraint)</new>
<justification>Method is now abstract — connectors must implement it</justification>
</item>
<item>
<code>java.method.nowAbstract</code>
<new>method io.trino.spi.connector.ConnectorSplitSource io.trino.spi.connector.ConnectorSplitManager::getSplits(io.trino.spi.connector.ConnectorTransactionHandle, io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorTableHandle, java.util.Set<io.trino.spi.connector.ColumnHandle>, io.trino.spi.connector.Constraint)</new>
<justification>Method is now abstract — connectors must implement it</justification>
</item>
<item>
<code>java.class.removed</code>
<old>class io.trino.spi.connector.ConnectorSplitSource.ConnectorSplitBatch</old>
<justification>ConnectorSplitBatch wrapper removed — getNextBatch now returns List<ConnectorSplit> directly; use isFinished() instead of isNoMoreSplits()</justification>
</item>
<!-- Any exclusions below can be deleted after each release -->
<item>
<ignore>true</ignore>
<code>java.method.numberOfParametersChanged</code>
<new>method io.trino.spi.connector.ConnectorPageSource io.trino.spi.connector.ConnectorPageSourceProvider::createPageSource(io.trino.spi.connector.ConnectorTransactionHandle, io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorSplit, io.trino.spi.connector.ConnectorTableHandle, java.util.Optional<io.trino.spi.connector.ConnectorTableCredentials>, java.util.List<io.trino.spi.connector.ColumnHandle>, io.trino.spi.connector.DynamicFilter, io.trino.spi.connector.MemoryContext)</new>
<justification>It's revapi false-positive -- a new overload was added and old one got deprecated</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.class.nowFinal</code>
<old>class io.trino.spi.type.VariantType</old>
<new>class io.trino.spi.type.VariantType</new>
<justification>VariantType is a singleton type implementation and should not be extended</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.varargOverloadsOnlyDifferInVarargParameter</code>
<new>method io.trino.spi.function.Signature.Builder io.trino.spi.function.Signature.Builder::argumentTypes(io.trino.spi.type.TypeDescriptor[])</new>
<justification>argumentTypes deliberately overloads on TypeDescriptor... and TypeTemplate... so call sites keep a stable shape across the ground/open split.</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.varargOverloadsOnlyDifferInVarargParameter</code>
<new>method io.trino.spi.function.Signature.Builder io.trino.spi.function.Signature.Builder::argumentTypes(io.trino.spi.type.TypeTemplate[])</new>
<justification>argumentTypes deliberately overloads on TypeDescriptor... and TypeTemplate... so call sites keep a stable shape across the ground/open split.</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.removed</code>
<old>method io.trino.spi.type.TypeParameter io.trino.spi.type.TypeParameter::typeVariable(java.lang.String)</old>
<justification>Renamed to numericVariable; the factory builds a numeric parameter variable, not a type variable.</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.class.removed</code>
<old>class io.trino.spi.function.LongVariableConstraint</old>
<justification>Renamed to NumericVariableConstraint.</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.removed</code>
<old>method io.trino.spi.function.Signature.Builder io.trino.spi.function.Signature.Builder::longVariable(java.lang.String)</old>
<justification>Renamed to numericVariable.</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.removed</code>
<old>method io.trino.spi.function.Signature.Builder io.trino.spi.function.Signature.Builder::longVariable(java.lang.String, java.lang.String)</old>
<justification>Renamed to numericVariable.</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.removed</code>
<old>method java.util.List<io.trino.spi.function.LongVariableConstraint> io.trino.spi.function.Signature::getLongVariableConstraints()</old>
<justification>Renamed to getNumericVariableConstraints.</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.removed</code>
<old>method io.trino.spi.block.Block io.trino.spi.predicate.Utils::nativeValueToBlock(io.trino.spi.type.Type, java.lang.Object)</old>
</item>
<item>
<ignore>true</ignore>
<code>java.method.removed</code>
<old>method java.lang.Object io.trino.spi.predicate.Utils::blockToNativeValue(io.trino.spi.type.Type, io.trino.spi.block.Block)</old>
</item>
<item>
<ignore>true</ignore>
<code>java.class.removed</code>
<old>class io.trino.spi.predicate.Utils</old>
</item>
<item>
<ignore>true</ignore>
<code>java.method.noLongerDefault</code>
<old>method io.trino.spi.connector.ConnectorPageSink io.trino.spi.connector.ConnectorPageSinkProvider::createPageSink(io.trino.spi.connector.ConnectorTransactionHandle, io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorInsertTableHandle, java.util.Optional<io.trino.spi.connector.ConnectorTableCredentials>, io.trino.spi.connector.ConnectorPageSinkId)</old>
<justification>Removed deprecated method without ConnectorTableCredentials parameter</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.nowAbstract</code>
<old>method io.trino.spi.connector.ConnectorPageSink io.trino.spi.connector.ConnectorPageSinkProvider::createPageSink(io.trino.spi.connector.ConnectorTransactionHandle, io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorInsertTableHandle, java.util.Optional<io.trino.spi.connector.ConnectorTableCredentials>, io.trino.spi.connector.ConnectorPageSinkId)</old>
<justification>Removed deprecated method without ConnectorTableCredentials parameter</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.noLongerDefault</code>
<old>method io.trino.spi.connector.ConnectorPageSink io.trino.spi.connector.ConnectorPageSinkProvider::createPageSink(io.trino.spi.connector.ConnectorTransactionHandle, io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorOutputTableHandle, java.util.Optional<io.trino.spi.connector.ConnectorTableCredentials>, io.trino.spi.connector.ConnectorPageSinkId)</old>
<justification>Removed deprecated method without ConnectorTableCredentials parameter</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.nowAbstract</code>
<old>method io.trino.spi.connector.ConnectorPageSink io.trino.spi.connector.ConnectorPageSinkProvider::createPageSink(io.trino.spi.connector.ConnectorTransactionHandle, io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorOutputTableHandle, java.util.Optional<io.trino.spi.connector.ConnectorTableCredentials>, io.trino.spi.connector.ConnectorPageSinkId)</old>
<justification>Removed deprecated method without ConnectorTableCredentials parameter</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.noLongerDefault</code>
<old>method io.trino.spi.connector.ConnectorPageSource io.trino.spi.connector.ConnectorPageSourceProvider::createPageSource(io.trino.spi.connector.ConnectorTransactionHandle, io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorSplit, io.trino.spi.connector.ConnectorTableHandle, java.util.Optional<io.trino.spi.connector.ConnectorTableCredentials>, java.util.List<io.trino.spi.connector.ColumnHandle>, io.trino.spi.connector.DynamicFilter)</old>
<justification>Removed deprecated method without ConnectorTableCredentials parameter</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.nowAbstract</code>
<old>method io.trino.spi.connector.ConnectorPageSource io.trino.spi.connector.ConnectorPageSourceProvider::createPageSource(io.trino.spi.connector.ConnectorTransactionHandle, io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorSplit, io.trino.spi.connector.ConnectorTableHandle, java.util.Optional<io.trino.spi.connector.ConnectorTableCredentials>, java.util.List<io.trino.spi.connector.ColumnHandle>, io.trino.spi.connector.DynamicFilter)</old>
<justification>Removed deprecated method without ConnectorTableCredentials parameter</justification>
</item>
<item>
<code>java.method.visibilityReduced</code>
<old>method long io.trino.spi.type.DoubleType::xxHash64(double)</old>
</item>
<item>
<code>java.method.visibilityReduced</code>
<old>method boolean io.trino.spi.type.TimeType::equalOperator(long, long)</old>
</item>
<item>
<code>java.method.visibilityReduced</code>
<old>method long io.trino.spi.type.TimeType::hashCodeOperator(long)</old>
</item>
<item>
<code>java.method.visibilityReduced</code>
<old>method boolean io.trino.spi.type.TimeType::lessThan(long, long)</old>
</item>
<item>
<code>java.method.visibilityReduced</code>
<old>method boolean io.trino.spi.type.TimeType::lessThanOrEqual(long, long)</old>
</item>
<item>
<code>java.method.visibilityReduced</code>
<old>method long io.trino.spi.type.TimeType::xxHash64Operator(long)</old>
</item>
<item>
<ignore>true</ignore>
<code>java.method.removed</code>
<old>method void io.trino.spi.connector.Constraint::<init>(io.trino.spi.predicate.TupleDomain<io.trino.spi.connector.ColumnHandle>, java.util.function.Predicate<java.util.Map<io.trino.spi.connector.ColumnHandle, io.trino.spi.predicate.NullableValue>>, java.util.Set<io.trino.spi.connector.ColumnHandle>)</old>
<justification>Constraint predicate removed; use ConnectorExpression instead</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.removed</code>
<old>method void io.trino.spi.connector.Constraint::<init>(io.trino.spi.predicate.TupleDomain<io.trino.spi.connector.ColumnHandle>, io.trino.spi.expression.ConnectorExpression, java.util.Map<java.lang.String, io.trino.spi.connector.ColumnHandle>, java.util.function.Predicate<java.util.Map<io.trino.spi.connector.ColumnHandle, io.trino.spi.predicate.NullableValue>>, java.util.Set<io.trino.spi.connector.ColumnHandle>)</old>
<justification>Constraint predicate removed; use ConnectorExpression instead</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.removed</code>
<old>method java.util.Optional<java.util.function.Predicate<java.util.Map<io.trino.spi.connector.ColumnHandle, io.trino.spi.predicate.NullableValue>>> io.trino.spi.connector.Constraint::predicate()</old>
<justification>Constraint predicate removed; use ConnectorExpression instead</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.removed</code>
<old>method java.util.Optional<java.util.Set<io.trino.spi.connector.ColumnHandle>> io.trino.spi.connector.Constraint::getPredicateColumns()</old>
<justification>Constraint predicate removed; use ConnectorExpression instead</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.varargOverloadsOnlyDifferInVarargParameter</code>
<old>method io.opentelemetry.api.common.AttributesBuilder io.opentelemetry.api.common.AttributesBuilder::put(java.lang.String, boolean[])</old>
<new>method io.opentelemetry.api.common.AttributesBuilder io.opentelemetry.api.common.AttributesBuilder::put(java.lang.String, boolean[])</new>
<justification>Revapi now detects new API changes to vararg args</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.varargOverloadsOnlyDifferInVarargParameter</code>
<old>method io.opentelemetry.api.common.AttributesBuilder io.opentelemetry.api.common.AttributesBuilder::put(java.lang.String, double[])</old>
<new>method io.opentelemetry.api.common.AttributesBuilder io.opentelemetry.api.common.AttributesBuilder::put(java.lang.String, double[])</new>
<justification>Revapi now detects new API changes to vararg args</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.varargOverloadsOnlyDifferInVarargParameter</code>
<old>method io.opentelemetry.api.common.AttributesBuilder io.opentelemetry.api.common.AttributesBuilder::put(java.lang.String, java.lang.String[])</old>
<new>method io.opentelemetry.api.common.AttributesBuilder io.opentelemetry.api.common.AttributesBuilder::put(java.lang.String, java.lang.String[])</new>
<justification>Revapi now detects new API changes to vararg args</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.varargOverloadsOnlyDifferInVarargParameter</code>
<old>method io.opentelemetry.api.common.AttributesBuilder io.opentelemetry.api.common.AttributesBuilder::put(java.lang.String, long[])</old>
<new>method io.opentelemetry.api.common.AttributesBuilder io.opentelemetry.api.common.AttributesBuilder::put(java.lang.String, long[])</new>
<justification>Revapi now detects new API changes to vararg args</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.varargOverloadsOnlyDifferInVarargParameter</code>
<old>method io.opentelemetry.api.common.Value<java.util.List<io.opentelemetry.api.common.KeyValue>> io.opentelemetry.api.common.Value<T>::of(io.opentelemetry.api.common.KeyValue[])</old>
<new>method io.opentelemetry.api.common.Value<java.util.List<io.opentelemetry.api.common.KeyValue>> io.opentelemetry.api.common.Value<T>::of(io.opentelemetry.api.common.KeyValue[])</new>
<justification>Revapi now detects new API changes to vararg args</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.varargOverloadsOnlyDifferInVarargParameter</code>
<old>method io.opentelemetry.api.common.Value<java.util.List<io.opentelemetry.api.common.Value<?>>> io.opentelemetry.api.common.Value<T>::of(io.opentelemetry.api.common.Value<?>[])</old>
<new>method io.opentelemetry.api.common.Value<java.util.List<io.opentelemetry.api.common.Value<?>>> io.opentelemetry.api.common.Value<T>::of(io.opentelemetry.api.common.Value<?>[])</new>
<justification>Revapi now detects new API changes to vararg args</justification>
</item>
<item>
<ignore>true</ignore>
<code>java.method.numberOfParametersChanged</code>
<old>method java.util.Optional<io.trino.spi.connector.ConnectorOutputMetadata> io.trino.spi.connector.ConnectorMetadata::finishRefreshMaterializedView(io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorTableHandle, io.trino.spi.connector.ConnectorInsertTableHandle, java.util.Collection<io.airlift.slice.Slice>, java.util.Collection<io.trino.spi.statistics.ComputedStatistics>, java.util.List<io.trino.spi.connector.ConnectorTableHandle>, boolean, boolean)</old>
<new>method java.util.Optional<io.trino.spi.connector.ConnectorOutputMetadata> io.trino.spi.connector.ConnectorMetadata::finishRefreshMaterializedView(io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorTableHandle, io.trino.spi.connector.ConnectorInsertTableHandle, java.util.Collection<io.airlift.slice.Slice>, java.util.Collection<io.trino.spi.statistics.ComputedStatistics>, java.util.List<io.trino.spi.connector.ConnectorTableHandle>, boolean, boolean, boolean)</new>
<justification>Add hasNonDeterministicFunctions parameter to detect stale materialized views</justification>
</item>
<item>
<code>java.field.removed</code>
<old>field io.trino.spi.function.OperatorType.MODULUS</old>
<justification>Renamed to MODULO</justification>
</item>
<!-- Renamed TypeSignature to TypeDescriptor (it is always a ground type, not a signature) -->
<item>
<code>java.class.removed</code>
<old>class io.trino.spi.type.TypeSignature</old>
<justification>Renamed TypeSignature to TypeDescriptor</justification>
</item>
<item>
<regex>true</regex>
<code>java.method.parameterTypeChanged</code>
<old>.*io\.trino\.spi\.type\.TypeSignature.*</old>
<new>.*io\.trino\.spi\.type\.TypeDescriptor.*</new>
<justification>Renamed TypeSignature to TypeDescriptor</justification>
</item>
<item>
<regex>true</regex>
<code>java.method.parameterTypeParameterChanged</code>
<old>.*io\.trino\.spi\.type\.TypeSignature.*</old>
<new>.*io\.trino\.spi\.type\.TypeDescriptor.*</new>
<justification>Renamed TypeSignature to TypeDescriptor</justification>
</item>
<item>
<regex>true</regex>
<code>java.method.returnTypeChanged</code>
<old>.*io\.trino\.spi\.type\.TypeSignature.*</old>
<new>.*io\.trino\.spi\.type\.TypeDescriptor.*</new>
<justification>Renamed TypeSignature to TypeDescriptor</justification>
</item>
<!-- Renamed Type.getTypeSignature() to getTypeDescriptor() -->
<item>
<regex>true</regex>
<code>java.method.removed</code>
<old>method io\.trino\.spi\.type\.TypeSignature io\.trino\.spi\.type\.\w+::getTypeSignature\(\)</old>
<justification>Renamed getTypeSignature to getTypeDescriptor</justification>
</item>
<item>
<code>java.method.addedToInterface</code>
<new>method io.trino.spi.type.TypeDescriptor io.trino.spi.type.Type::getTypeDescriptor()</new>
<justification>Renamed getTypeSignature to getTypeDescriptor</justification>
</item>
<item>
<code>java.method.finalMethodAddedToNonFinalClass</code>
<new>method io.trino.spi.type.TypeDescriptor io.trino.spi.type.AbstractType::getTypeDescriptor()</new>
<justification>Renamed getTypeSignature to getTypeDescriptor</justification>
</item>
<item>
<code>java.method.returnTypeChanged</code>
<old>method void io.trino.spi.connector.ConnectorMetadata::finishTableExecute(io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorTableExecuteHandle, java.util.Collection<io.airlift.slice.Slice>, java.util.List<java.lang.Object>)</old>
<new>method java.util.Map<java.lang.String, java.lang.Long> io.trino.spi.connector.ConnectorMetadata::finishTableExecute(io.trino.spi.connector.ConnectorSession, io.trino.spi.connector.ConnectorTableExecuteHandle, java.util.Collection<io.airlift.slice.Slice>, java.util.List<java.lang.Object>)</new>
</item>
<item>
<ignore>true</ignore>
<code>java.method.removed</code>
<old>method long io.trino.spi.type.Timestamps::truncateEpochMicrosToMillis(long)</old>
</item>
<item>
<code>java.method.removed</code>
<old>method boolean io.trino.spi.function.FunctionMetadata::isNeverFails()</old>
<justification>Replaced with getNeverFails() returning Predicate<BoundSignature> so per-binding (e.g., decimal precision/scale) infallibility can be expressed and is type-enforced at the read side.</justification>
</item>
<item>
<code>java.method.addedToInterface</code>
<new>method boolean io.trino.spi.type.TypeManager::isTypeRegistered(java.lang.String)</new>
<justification>Required for resolving static method calls on parametric type bases (array, row, map). Cannot be a default that calls getType because parametric bases require parameters and would force exception-driven control flow.</justification>
</item>
<!-- Remove dead JSON serialization from Signature and FunctionMetadata (never serialized at runtime). -->
<item>
<regex>true</regex>
<code>java.annotation.removed</code>
<old>method .* io\.trino\.spi\.function\.(Signature|FunctionMetadata)::.*</old>
<annotationType>com\.fasterxml\.jackson\.annotation\.Json.*</annotationType>
<justification>Signature and FunctionMetadata are never JSON-serialized at runtime; removing the dead serialization.</justification>
</item>
<item>
<regex>true</regex>
<code>java.method.removed</code>
<old>method .* io\.trino\.spi\.function\.(Signature|FunctionMetadata)::fromJson\(.*</old>
<justification>Remove the dead @JsonCreator; Signature/FunctionMetadata are never deserialized.</justification>
</item>
<!-- A function signature's argument/return types are now TypeTemplate (the open, variable-bearing form). -->
<item>
<code>java.method.returnTypeChanged</code>
<old>method io.trino.spi.type.TypeSignature io.trino.spi.function.Signature::getReturnType()</old>
<new>method io.trino.spi.type.TypeTemplate io.trino.spi.function.Signature::getReturnType()</new>
<justification>Signature now represents its return type as a TypeTemplate.</justification>
</item>
<item>
<code>java.method.returnTypeTypeParametersChanged</code>
<old>method java.util.List<io.trino.spi.type.TypeSignature> io.trino.spi.function.Signature::getArgumentTypes()</old>
<new>method java.util.List<io.trino.spi.type.TypeTemplate> io.trino.spi.function.Signature::getArgumentTypes()</new>
<justification>Signature now represents its argument types as TypeTemplates.</justification>
</item>
<!-- Function dependencies are now carried as TypeTemplate (the open, variable-bearing form) rather than TypeSignature. -->
<item>
<regex>true</regex>
<code>java\.method\..*</code>
<old>.*io\.trino\.spi\.function\.FunctionDependencyDeclaration.*</old>
<justification>Function dependency declarations now carry their type, argument, and cast types as TypeTemplate, the open variable-bearing form, instead of TypeSignature.</justification>
</item>
<!-- A type variable's castable-to/from constraints are now carried as TypeTemplate rather than TypeSignature. -->
<item>
<regex>true</regex>
<code>java\.method\..*</code>
<old>.*io\.trino\.spi\.function\.TypeVariableConstraint.*</old>
<justification>A type variable's castable-to and castable-from constraints are now carried as TypeTemplate instead of TypeSignature.</justification>
</item>
<item>
<code>java.method.returnTypeTypeParametersChanged</code>
<old>method java.util.List<io.trino.spi.type.TypeSignature> io.trino.spi.function.AggregationFunctionMetadata::getIntermediateTypes()</old>
<new>method java.util.List<io.trino.spi.type.TypeTemplate> io.trino.spi.function.AggregationFunctionMetadata::getIntermediateTypes()</new>
<justification>An aggregation's intermediate types are now carried as TypeTemplate, the open variable-bearing form, instead of TypeSignature.</justification>
</item>
<!-- TypeSignature is now strictly ground: a numeric variable is no longer a TypeParameter.Variable but a NumericExpression carried by TypeTemplate. -->
<item>
<code>java.class.removed</code>
<old>class io.trino.spi.type.TypeParameter.Variable</old>
<justification>A TypeSignature is now always ground; variables live only in TypeTemplate, so the Variable type parameter is removed.</justification>
</item>
</differences>
</revapi.differences>
</analysisConfiguration>
</configuration>
<dependencies>
<dependency>
<groupId>org.revapi</groupId>
<artifactId>revapi-java</artifactId>
<version>0.28.4</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.basepom.maven</groupId>
<artifactId>duplicate-finder-maven-plugin</artifactId>
<configuration>
<ignoredResourcePatterns combine.children="append">
<!-- ignore the Iceberg build metadata file -->
<ignoredResourcePattern>^iceberg-build\.properties$</ignoredResourcePattern>
</ignoredResourcePatterns>
</configuration>
</plugin>
</plugins>
</build>
</project>