func()

in table/snapshot_producers.go [119:185]


func (of *overwriteFiles) existingManifests() ([]iceberg.ManifestFile, error) {
	// determine if there are any existing manifest files
	existingFiles := make([]iceberg.ManifestFile, 0)

	snap := of.base.txn.meta.currentSnapshot()
	if snap == nil {
		return existingFiles, nil
	}

	manifestList, err := snap.Manifests(of.base.io)
	if err != nil {
		return existingFiles, err
	}

	for _, m := range manifestList {
		entries, err := of.base.fetchManifestEntry(m, true)
		if err != nil {
			return existingFiles, err
		}

		foundDeleted := make([]iceberg.ManifestEntry, 0)
		notDeleted := make([]iceberg.ManifestEntry, 0, len(entries))
		for _, entry := range entries {
			if _, ok := of.base.deletedFiles[entry.DataFile().FilePath()]; ok {
				foundDeleted = append(foundDeleted, entry)
			} else {
				notDeleted = append(notDeleted, entry)
			}
		}

		if len(foundDeleted) == 0 {
			existingFiles = append(existingFiles, m)

			continue
		}

		if len(notDeleted) == 0 {
			continue
		}

		spec, err := of.base.txn.meta.GetSpecByID(int(m.PartitionSpecID()))
		if err != nil {
			return existingFiles, err
		}

		wr, path, counter, err := of.base.newManifestWriter(*spec)
		if err != nil {
			return existingFiles, err
		}
		defer counter.W.(io.Closer).Close()

		for _, entry := range notDeleted {
			if err := wr.Existing(entry); err != nil {
				return existingFiles, err
			}
		}

		mf, err := wr.ToManifestFile(path, counter.Count)
		if err != nil {
			return existingFiles, err
		}

		existingFiles = append(existingFiles, mf)
	}

	return existingFiles, nil
}