diff --git a/core/src/main/java/org/apache/iceberg/rest/requests/RegisterTableRequest.java b/core/src/main/java/org/apache/iceberg/rest/requests/RegisterTableRequest.java index 33b37dae242f..e164a7ec5154 100644 --- a/core/src/main/java/org/apache/iceberg/rest/requests/RegisterTableRequest.java +++ b/core/src/main/java/org/apache/iceberg/rest/requests/RegisterTableRequest.java @@ -28,6 +28,11 @@ public interface RegisterTableRequest extends RESTRequest { String metadataLocation(); + @Value.Default + default boolean overwrite() { + return false; + } + @Override default void validate() { // nothing to validate as it's not possible to create an invalid instance diff --git a/core/src/main/java/org/apache/iceberg/rest/requests/RegisterTableRequestParser.java b/core/src/main/java/org/apache/iceberg/rest/requests/RegisterTableRequestParser.java index 961b6c185b87..3d18b034532b 100644 --- a/core/src/main/java/org/apache/iceberg/rest/requests/RegisterTableRequestParser.java +++ b/core/src/main/java/org/apache/iceberg/rest/requests/RegisterTableRequestParser.java @@ -28,6 +28,7 @@ public class RegisterTableRequestParser { private static final String NAME = "name"; private static final String METADATA_LOCATION = "metadata-location"; + private static final String OVERWRITE = "overwrite"; private RegisterTableRequestParser() {} @@ -47,6 +48,10 @@ public static void toJson(RegisterTableRequest request, JsonGenerator gen) throw gen.writeStringField(NAME, request.name()); gen.writeStringField(METADATA_LOCATION, request.metadataLocation()); + if (request.overwrite()) { + gen.writeBooleanField(OVERWRITE, request.overwrite()); + } + gen.writeEndObject(); } @@ -61,9 +66,14 @@ public static RegisterTableRequest fromJson(JsonNode json) { String name = JsonUtil.getString(NAME, json); String metadataLocation = JsonUtil.getString(METADATA_LOCATION, json); - return ImmutableRegisterTableRequest.builder() - .name(name) - .metadataLocation(metadataLocation) - .build(); + ImmutableRegisterTableRequest.Builder builder = + ImmutableRegisterTableRequest.builder().name(name).metadataLocation(metadataLocation); + + Boolean overwrite = JsonUtil.getBoolOrNull(OVERWRITE, json); + if (overwrite != null) { + builder.overwrite(overwrite); + } + + return builder.build(); } } diff --git a/core/src/test/java/org/apache/iceberg/rest/requests/TestRegisterTableRequestParser.java b/core/src/test/java/org/apache/iceberg/rest/requests/TestRegisterTableRequestParser.java index 50a47df974a3..d7bbb3db40e9 100644 --- a/core/src/test/java/org/apache/iceberg/rest/requests/TestRegisterTableRequestParser.java +++ b/core/src/test/java/org/apache/iceberg/rest/requests/TestRegisterTableRequestParser.java @@ -76,4 +76,28 @@ public void roundTripSerde() { assertThat(RegisterTableRequestParser.toJson(RegisterTableRequestParser.fromJson(json), true)) .isEqualTo(expectedJson); } + + @Test + public void roundTripSerdeWithOverwrite() { + RegisterTableRequest request = + ImmutableRegisterTableRequest.builder() + .name("table_1") + .metadataLocation( + "file://tmp/NS/test_tbl/metadata/00000-d4f60d2f-2ad2-408b-8832-0ed7fbd851ee.metadata.json") + .overwrite(true) + .build(); + + String expectedJson = + "{\n" + + " \"name\" : \"table_1\",\n" + + " \"metadata-location\" : \"file://tmp/NS/test_tbl/metadata/00000-d4f60d2f-2ad2-408b-8832-0ed7fbd851ee.metadata.json\",\n" + + " \"overwrite\" : true\n" + + "}"; + + String json = RegisterTableRequestParser.toJson(request, true); + assertThat(json).isEqualTo(expectedJson); + + assertThat(RegisterTableRequestParser.toJson(RegisterTableRequestParser.fromJson(json), true)) + .isEqualTo(expectedJson); + } }