func NewMetadataWithUUID()

in table/metadata.go [1219:1279]


func NewMetadataWithUUID(sc *iceberg.Schema, partitions *iceberg.PartitionSpec, sortOrder SortOrder, location string, props iceberg.Properties, tableUuid uuid.UUID) (Metadata, error) {
	freshSchema, err := iceberg.AssignFreshSchemaIDs(sc, nil)
	if err != nil {
		return nil, err
	}

	freshPartitions, err := iceberg.AssignFreshPartitionSpecIDs(partitions, sc, freshSchema)
	if err != nil {
		return nil, err
	}

	freshSortOrder, err := AssignFreshSortOrderIDs(sortOrder, sc, freshSchema)
	if err != nil {
		return nil, err
	}

	if tableUuid == uuid.Nil {
		tableUuid = uuid.New()
	}

	formatVersion := DefaultFormatVersion
	if props != nil {
		verStr, ok := props["format-version"]
		if ok {
			if formatVersion, err = strconv.Atoi(verStr); err != nil {
				formatVersion = DefaultFormatVersion
			}
			delete(props, "format-version")
		}
	}

	lastPartitionID := freshPartitions.LastAssignedFieldID()
	common := commonMetadata{
		LastUpdatedMS:      time.Now().UnixMilli(),
		LastColumnId:       freshSchema.HighestFieldID(),
		FormatVersion:      formatVersion,
		UUID:               tableUuid,
		Loc:                location,
		SchemaList:         []*iceberg.Schema{freshSchema},
		CurrentSchemaID:    freshSchema.ID,
		Specs:              []iceberg.PartitionSpec{freshPartitions},
		DefaultSpecID:      freshPartitions.ID(),
		LastPartitionID:    &lastPartitionID,
		Props:              props,
		SortOrderList:      []SortOrder{freshSortOrder},
		DefaultSortOrderID: freshSortOrder.OrderID,
	}

	switch formatVersion {
	case 1:
		return &metadataV1{
			commonMetadata: common,
			Schema:         freshSchema,
			Partition:      slices.Collect(freshPartitions.Fields()),
		}, nil
	case 2:
		return &metadataV2{commonMetadata: common}, nil
	default:
		return nil, fmt.Errorf("invalid format version: %d", formatVersion)
	}
}