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

Reply via email to