You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by et...@apache.org on 2025/03/14 18:24:53 UTC
(iceberg) branch main updated: Core: Use `buildKeepingLast` for table properties in REST table builder (#12526)
This is an automated email from the ASF dual-hosted git repository.
etudenhoefner pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/main by this push:
new 7195cb2b62 Core: Use `buildKeepingLast` for table properties in REST table builder (#12526)
7195cb2b62 is described below
commit 7195cb2b624cd8546113ce2f918602fa38c93fef
Author: smaheshwar-pltr <ma...@gmail.com>
AuthorDate: Fri Mar 14 18:24:47 2025 +0000
Core: Use `buildKeepingLast` for table properties in REST table builder (#12526)
---
.../apache/iceberg/rest/RESTSessionCatalog.java | 4 +-
.../org/apache/iceberg/catalog/CatalogTests.java | 59 ++++++++++++++++++++++
2 files changed, 61 insertions(+), 2 deletions(-)
diff --git a/core/src/main/java/org/apache/iceberg/rest/RESTSessionCatalog.java b/core/src/main/java/org/apache/iceberg/rest/RESTSessionCatalog.java
index 7abecdfc2f..d9542bf4a5 100644
--- a/core/src/main/java/org/apache/iceberg/rest/RESTSessionCatalog.java
+++ b/core/src/main/java/org/apache/iceberg/rest/RESTSessionCatalog.java
@@ -922,7 +922,7 @@ public class RESTSessionCatalog extends BaseViewSessionCatalog
AuthSession session = tableSession(response.config(), session(context));
TableMetadata base = response.tableMetadata();
- Map<String, String> tableProperties = propertiesBuilder.build();
+ Map<String, String> tableProperties = propertiesBuilder.buildKeepingLast();
TableMetadata replacement =
base.buildReplacement(
schema,
@@ -984,7 +984,7 @@ public class RESTSessionCatalog extends BaseViewSessionCatalog
}
private LoadTableResponse stageCreate() {
- Map<String, String> tableProperties = propertiesBuilder.build();
+ Map<String, String> tableProperties = propertiesBuilder.buildKeepingLast();
CreateTableRequest request =
CreateTableRequest.builder()
diff --git a/core/src/test/java/org/apache/iceberg/catalog/CatalogTests.java b/core/src/test/java/org/apache/iceberg/catalog/CatalogTests.java
index b8aea5e2a1..d21fa0c124 100644
--- a/core/src/test/java/org/apache/iceberg/catalog/CatalogTests.java
+++ b/core/src/test/java/org/apache/iceberg/catalog/CatalogTests.java
@@ -685,6 +685,65 @@ public abstract class CatalogTests<C extends Catalog & SupportsNamespaces> {
assertThat(catalog.dropTable(ident)).as("Should successfully drop table").isTrue();
}
+ @Test
+ public void testDefaultTablePropertiesCreateTransaction() {
+ C catalog = catalog();
+
+ TableIdentifier ident = TableIdentifier.of("ns", "table");
+
+ if (requiresNamespaceCreate()) {
+ catalog.createNamespace(ident.namespace());
+ }
+
+ assertThat(catalog.tableExists(ident)).as("Table should not exist").isFalse();
+
+ catalog()
+ .buildTable(ident, SCHEMA)
+ .withProperty("default-key2", "catalog-overridden-key2")
+ .withProperty("prop1", "val1")
+ .createTransaction()
+ .commitTransaction();
+
+ Table table = catalog.loadTable(ident);
+
+ assertThat(table.properties())
+ .containsEntry("default-key1", "catalog-default-key1")
+ .containsEntry("default-key2", "catalog-overridden-key2")
+ .containsEntry("prop1", "val1");
+
+ assertThat(catalog.dropTable(ident)).as("Should successfully drop table").isTrue();
+ }
+
+ @Test
+ public void testDefaultTablePropertiesReplaceTransaction() {
+ C catalog = catalog();
+
+ TableIdentifier ident = TableIdentifier.of("ns", "table");
+
+ if (requiresNamespaceCreate()) {
+ catalog.createNamespace(ident.namespace());
+ }
+
+ catalog.createTable(ident, SCHEMA);
+ assertThat(catalog.tableExists(ident)).as("Table should exist").isTrue();
+
+ catalog()
+ .buildTable(ident, OTHER_SCHEMA)
+ .withProperty("default-key2", "catalog-overridden-key2")
+ .withProperty("prop1", "val1")
+ .replaceTransaction()
+ .commitTransaction();
+
+ Table table = catalog.loadTable(ident);
+
+ assertThat(table.properties())
+ .containsEntry("default-key1", "catalog-default-key1")
+ .containsEntry("default-key2", "catalog-overridden-key2")
+ .containsEntry("prop1", "val1");
+
+ assertThat(catalog.dropTable(ident)).as("Should successfully drop table").isTrue();
+ }
+
@Test
public void testCreateTableWithDefaultColumnValue() {
C catalog = catalog();