This is an automated email from the ASF dual-hosted git repository.
blue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/master by this push:
new ab398a0d5f Core: Allow dropping columns referenced in old sort orders
(#6984)
ab398a0d5f is described below
commit ab398a0d5ff195f763f8c7a4358ac98fa38a8de7
Author: Fokko Driesprong <[email protected]>
AuthorDate: Tue Mar 7 21:56:31 2023 +0100
Core: Allow dropping columns referenced in old sort orders (#6984)
---
core/src/main/java/org/apache/iceberg/SortOrderParser.java | 10 ++++++++++
core/src/main/java/org/apache/iceberg/TableMetadataParser.java | 2 +-
core/src/test/java/org/apache/iceberg/TestSortOrder.java | 3 +++
3 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/core/src/main/java/org/apache/iceberg/SortOrderParser.java
b/core/src/main/java/org/apache/iceberg/SortOrderParser.java
index 4481f83513..31307cf9dc 100644
--- a/core/src/main/java/org/apache/iceberg/SortOrderParser.java
+++ b/core/src/main/java/org/apache/iceberg/SortOrderParser.java
@@ -112,6 +112,16 @@ public class SortOrderParser {
return fromJson(json).bind(schema);
}
+ public static SortOrder fromJson(Schema schema, JsonNode json, int
defaultSortOrderId) {
+ UnboundSortOrder unboundSortOrder = fromJson(json);
+
+ if (unboundSortOrder.orderId() == defaultSortOrderId) {
+ return unboundSortOrder.bind(schema);
+ } else {
+ return unboundSortOrder.bindUnchecked(schema);
+ }
+ }
+
public static SortOrder fromJson(Schema schema, JsonNode json) {
return fromJson(json).bind(schema);
}
diff --git a/core/src/main/java/org/apache/iceberg/TableMetadataParser.java
b/core/src/main/java/org/apache/iceberg/TableMetadataParser.java
index 207d9ac686..dc234c32ae 100644
--- a/core/src/main/java/org/apache/iceberg/TableMetadataParser.java
+++ b/core/src/main/java/org/apache/iceberg/TableMetadataParser.java
@@ -420,7 +420,7 @@ public class TableMetadataParser {
defaultSortOrderId = JsonUtil.getInt(DEFAULT_SORT_ORDER_ID, node);
ImmutableList.Builder<SortOrder> sortOrdersBuilder =
ImmutableList.builder();
for (JsonNode sortOrder : sortOrderArray) {
- sortOrdersBuilder.add(SortOrderParser.fromJson(schema, sortOrder));
+ sortOrdersBuilder.add(SortOrderParser.fromJson(schema, sortOrder,
defaultSortOrderId));
}
sortOrders = sortOrdersBuilder.build();
} else {
diff --git a/core/src/test/java/org/apache/iceberg/TestSortOrder.java
b/core/src/test/java/org/apache/iceberg/TestSortOrder.java
index 45ff0bd71f..6b5100ed66 100644
--- a/core/src/test/java/org/apache/iceberg/TestSortOrder.java
+++ b/core/src/test/java/org/apache/iceberg/TestSortOrder.java
@@ -320,6 +320,9 @@ public class TestSortOrder {
"Order ID must match", TableMetadata.INITIAL_SORT_ORDER_ID + 1,
actualOrder.orderId());
Assert.assertEquals(
"Schema must have one less column", initialColSize - 1,
table.schema().columns().size());
+
+ // ensure that the table metadata can be serialized and reloaded with an
invalid order
+
TableMetadataParser.fromJson(TableMetadataParser.toJson(table.ops().current()));
}
@Test