diff --git a/build.gradle b/build.gradle index d21e44a317d1..49c007c45ed1 100644 --- a/build.gradle +++ b/build.gradle @@ -350,6 +350,7 @@ project(':iceberg-core') { implementation project(path: ':iceberg-bundled-guava', configuration: 'shadow') annotationProcessor "org.immutables:value" compileOnly "org.immutables:value" + compileOnly "org.immutables:builder" implementation("org.apache.avro:avro") { exclude group: 'org.tukaani' // xz compression is not supported diff --git a/core/src/main/java/org/apache/iceberg/rest/requests/UpdateTableRequest.java b/core/src/main/java/org/apache/iceberg/rest/requests/UpdateTableRequest.java index cac3a99dcd17..b96786531c02 100644 --- a/core/src/main/java/org/apache/iceberg/rest/requests/UpdateTableRequest.java +++ b/core/src/main/java/org/apache/iceberg/rest/requests/UpdateTableRequest.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.Set; +import javax.annotation.Nullable; import org.apache.iceberg.MetadataUpdate; import org.apache.iceberg.SnapshotRef; import org.apache.iceberg.TableMetadata; @@ -31,7 +32,10 @@ import org.apache.iceberg.relocated.com.google.common.collect.Lists; import org.apache.iceberg.relocated.com.google.common.collect.Sets; import org.apache.iceberg.rest.RESTRequest; +import org.immutables.builder.Builder.Constructor; +import org.immutables.value.Value; +@Value.Style(newBuilder = "newBuilder") public class UpdateTableRequest implements RESTRequest { private TableIdentifier identifier; @@ -42,13 +46,19 @@ public UpdateTableRequest() { // needed for Jackson deserialization } + /** + * @deprecated will be removed in 1.5.0; use {@link UpdateTableRequestBuilder#newBuilder()} + * instead. + */ + @Deprecated public UpdateTableRequest(List requirements, List updates) { this.requirements = requirements; this.updates = updates; } + @Constructor UpdateTableRequest( - TableIdentifier identifier, + @Nullable TableIdentifier identifier, List requirements, List updates) { this(requirements, updates); @@ -73,6 +83,7 @@ public TableIdentifier identifier() { @Override public String toString() { return MoreObjects.toStringHelper(this) + .add("identifier", identifier) .add("requirements", requirements) .add("updates", updates) .toString(); diff --git a/core/src/test/java/org/apache/iceberg/rest/requests/TestCommitTransactionRequestParser.java b/core/src/test/java/org/apache/iceberg/rest/requests/TestCommitTransactionRequestParser.java index 776a091f821d..819cd30510be 100644 --- a/core/src/test/java/org/apache/iceberg/rest/requests/TestCommitTransactionRequestParser.java +++ b/core/src/test/java/org/apache/iceberg/rest/requests/TestCommitTransactionRequestParser.java @@ -81,22 +81,24 @@ public void invalidTableIdentifier() { public void roundTripSerde() { String uuid = "2cc52516-5e73-41f2-b139-545d41a4e151"; UpdateTableRequest commitTableRequestOne = - new UpdateTableRequest( - TableIdentifier.of("ns1", "table1"), - ImmutableList.of( + UpdateTableRequestBuilder.newBuilder() + .identifier(TableIdentifier.of("ns1", "table1")) + .addRequirements( new UpdateRequirement.AssertTableUUID(uuid), - new UpdateRequirement.AssertTableDoesNotExist()), - ImmutableList.of( - new MetadataUpdate.AssignUUID(uuid), new MetadataUpdate.SetCurrentSchema(23))); + new UpdateRequirement.AssertTableDoesNotExist()) + .addUpdates( + new MetadataUpdate.AssignUUID(uuid), new MetadataUpdate.SetCurrentSchema(23)) + .build(); UpdateTableRequest commitTableRequestTwo = - new UpdateTableRequest( - TableIdentifier.of("ns1", "table2"), - ImmutableList.of( + UpdateTableRequestBuilder.newBuilder() + .identifier(TableIdentifier.of("ns1", "table2")) + .addRequirements( new UpdateRequirement.AssertDefaultSpecID(4), - new UpdateRequirement.AssertCurrentSchemaID(24)), - ImmutableList.of( - new MetadataUpdate.RemoveSnapshot(101L), new MetadataUpdate.SetCurrentSchema(25))); + new UpdateRequirement.AssertCurrentSchemaID(24)) + .addUpdates( + new MetadataUpdate.RemoveSnapshot(101L), new MetadataUpdate.SetCurrentSchema(25)) + .build(); CommitTransactionRequest request = new CommitTransactionRequest( @@ -160,8 +162,9 @@ public void emptyRequirementsAndUpdates() { CommitTransactionRequest commitTxRequest = new CommitTransactionRequest( ImmutableList.of( - new UpdateTableRequest( - TableIdentifier.of("ns1", "table1"), ImmutableList.of(), ImmutableList.of()))); + UpdateTableRequestBuilder.newBuilder() + .identifier(TableIdentifier.of("ns1", "table1")) + .build())); String json = "{\"table-changes\":[{\"identifier\":{\"namespace\":[\"ns1\"],\"name\":\"table1\"},\"requirements\":[],\"updates\":[]}]}"; diff --git a/versions.props b/versions.props index a91a4ab8e257..3476629a7c32 100644 --- a/versions.props +++ b/versions.props @@ -27,7 +27,7 @@ com.google.cloud:libraries-bom = 24.1.0 org.scala-lang.modules:scala-collection-compat_2.12 = 2.6.0 org.scala-lang.modules:scala-collection-compat_2.13 = 2.6.0 com.emc.ecs:object-client-bundle = 3.3.2 -org.immutables:value = 2.9.2 +org.immutables:* = 2.9.2 net.snowflake:snowflake-jdbc = 3.13.30 io.delta:delta-standalone_* = 0.6.0