@@ -214,7 +214,7 @@ struct TableMetadataBuilder::Impl {
214214 std::vector<std::unique_ptr<TableUpdate>> changes;
215215
216216 // Error collection (since methods return *this and cannot throw)
217- std::vector<Status > errors;
217+ std::vector<Error > errors;
218218
219219 // Metadata location tracking
220220 std::optional<std::string> metadata_location;
@@ -224,12 +224,12 @@ struct TableMetadataBuilder::Impl {
224224 explicit Impl (int8_t format_version) : base(nullptr ), metadata{} {
225225 metadata.format_version = format_version;
226226 metadata.last_sequence_number = TableMetadata::kInitialSequenceNumber ;
227- metadata.last_updated_ms = TimePointMs{ std::chrono::milliseconds ( 0 )} ;
228- metadata.last_column_id = 0 ;
229- metadata.default_spec_id = TableMetadata ::kInitialSpecId ;
230- metadata.last_partition_id = 0 ;
231- metadata.current_snapshot_id = TableMetadata ::kInvalidSnapshotId ;
232- metadata.default_sort_order_id = TableMetadata ::kInitialSortOrderId ;
227+ metadata.last_updated_ms = TimePointMs::min () ;
228+ metadata.last_column_id = Schema:: kInvalidColumnId ;
229+ metadata.default_spec_id = PartitionSpec ::kInitialSpecId ;
230+ metadata.last_partition_id = PartitionSpec:: kInvalidPartitionFieldId ;
231+ metadata.current_snapshot_id = Snapshot ::kInvalidSnapshotId ;
232+ metadata.default_sort_order_id = SortOrder ::kInitialSortOrderId ;
233233 metadata.next_row_id = TableMetadata::kInitialRowId ;
234234 }
235235
@@ -284,9 +284,9 @@ TableMetadataBuilder& TableMetadataBuilder::AssignUUID() {
284284TableMetadataBuilder& TableMetadataBuilder::AssignUUID (std::string_view uuid) {
285285 std::string uuid_str (uuid);
286286
287- // Validation: UUID cannot be null or empty
287+ // Validation: UUID cannot be empty
288288 if (uuid_str.empty ()) {
289- impl_->errors .emplace_back (InvalidArgument ( " Cannot assign null or empty UUID" ) );
289+ impl_->errors .emplace_back (ErrorKind:: kInvalidArgument , " Cannot assign empty UUID" );
290290 return *this ;
291291 }
292292
@@ -299,7 +299,7 @@ TableMetadataBuilder& TableMetadataBuilder::AssignUUID(std::string_view uuid) {
299299 impl_->metadata .table_uuid = uuid_str;
300300
301301 // Record the change
302- impl_->changes .push_back (std::make_unique<table::AssignUUID>(uuid_str));
302+ impl_->changes .push_back (std::make_unique<table::AssignUUID>(std::move ( uuid_str) ));
303303
304304 return *this ;
305305}
@@ -435,42 +435,20 @@ TableMetadataBuilder& TableMetadataBuilder::RemoveEncryptionKey(std::string_view
435435 throw IcebergError (std::format (" {} not implemented" , __FUNCTION__));
436436}
437437
438- TableMetadataBuilder& TableMetadataBuilder::DiscardChanges () {
439- // Clear all changes and errors
440- impl_->changes .clear ();
441- impl_->errors .clear ();
442-
443- // Reset metadata to base state
444- if (impl_->base != nullptr ) {
445- impl_->metadata = *impl_->base ;
446- } else {
447- // Reset to initial state for new table
448- *impl_ = Impl (impl_->metadata .format_version );
449- }
450-
451- return *this ;
452- }
453-
454438Result<std::unique_ptr<TableMetadata>> TableMetadataBuilder::Build () {
455439 // 1. Check for accumulated errors
456440 if (!impl_->errors .empty ()) {
457441 std::string error_msg = " Failed to build TableMetadata due to validation errors:\n " ;
458- for (const auto & error : impl_->errors ) {
459- error_msg += " - " + error. error (). message + " \n " ;
442+ for (const auto & [kind, message] : impl_->errors ) {
443+ error_msg += " - " + message + " \n " ;
460444 }
461445 return CommitFailed (" {}" , error_msg);
462446 }
463447
464- // 2. Validate metadata consistency
465-
466- // Validate UUID exists for format version > 1
467- if (impl_->metadata .format_version > 1 && impl_->metadata .table_uuid .empty ()) {
468- return InvalidArgument (" UUID is required for format version {}" ,
469- impl_->metadata .format_version );
470- }
448+ // 2. Validate metadata consistency through TableMetadata#Validate
471449
472450 // 3. Update last_updated_ms if there are changes
473- if (! impl_->changes . empty () && impl_-> base != nullptr ) {
451+ if (impl_->metadata . last_updated_ms == TimePointMs::min () ) {
474452 impl_->metadata .last_updated_ms =
475453 TimePointMs{std::chrono::duration_cast<std::chrono::milliseconds>(
476454 std::chrono::system_clock::now ().time_since_epoch ())};
0 commit comments