@@ -314,4 +314,56 @@ TEST(TableUpdateTest, AssignUUIDApplyUpdate) {
314314 EXPECT_EQ (metadata->table_uuid , " apply-uuid" );
315315}
316316
317+ // Test AddSortOrder ApplyTo
318+ TEST (TableUpdateTest, AddSortOrderApplyUpdate) {
319+ auto base = CreateBaseMetadata ();
320+ auto builder = TableMetadataBuilder::BuildFrom (base.get ());
321+
322+ // Create a sort order
323+ auto schema = CreateTestSchema ();
324+ SortField sort_field (1 , Transform::Identity (), SortDirection::kAscending ,
325+ NullOrder::kFirst );
326+ auto sort_order = std::shared_ptr<SortOrder>(
327+ SortOrder::Make (*schema, 1 , std::vector<SortField>{sort_field}).value ().release ());
328+
329+ // Apply AddSortOrder update
330+ table::AddSortOrder add_sort_order (sort_order);
331+ add_sort_order.ApplyTo (*builder);
332+
333+ ICEBERG_UNWRAP_OR_FAIL (auto metadata, builder->Build ());
334+
335+ // Verify the sort order was added
336+ ASSERT_EQ (metadata->sort_orders .size (), 2 ); // unsorted + new order
337+ auto & added_order = metadata->sort_orders [1 ];
338+ EXPECT_EQ (added_order->order_id (), 1 );
339+ EXPECT_EQ (added_order->fields ().size (), 1 );
340+ EXPECT_EQ (added_order->fields ()[0 ].source_id (), 1 );
341+ EXPECT_EQ (added_order->fields ()[0 ].direction (), SortDirection::kAscending );
342+ EXPECT_EQ (added_order->fields ()[0 ].null_order (), NullOrder::kFirst );
343+ }
344+
345+ // Test SetDefaultSortOrder ApplyTo
346+ TEST (TableUpdateTest, SetDefaultSortOrderApplyUpdate) {
347+ auto base = CreateBaseMetadata ();
348+
349+ // add a sort order to the base metadata
350+ auto schema = CreateTestSchema ();
351+ SortField sort_field (1 , Transform::Identity (), SortDirection::kDescending ,
352+ NullOrder::kLast );
353+ auto sort_order = std::shared_ptr<SortOrder>(
354+ SortOrder::Make (*schema, 1 , std::vector<SortField>{sort_field}).value ().release ());
355+ base->sort_orders .push_back (sort_order);
356+
357+ auto builder = TableMetadataBuilder::BuildFrom (base.get ());
358+
359+ // Apply SetDefaultSortOrder update to set the new sort order as default
360+ table::SetDefaultSortOrder set_default_sort_order (1 );
361+ set_default_sort_order.ApplyTo (*builder);
362+
363+ ICEBERG_UNWRAP_OR_FAIL (auto metadata, builder->Build ());
364+
365+ // Verify the default sort order was changed
366+ EXPECT_EQ (metadata->default_sort_order_id , 1 );
367+ }
368+
317369} // namespace iceberg
0 commit comments