in Sources/PackageRegistryExample/DataAccess/Postgres/PackageReleasesDAO+Postgres.swift [35:77]
func create(package: PackageIdentity,
version: Version,
repositoryURL: String?,
commitHash: String?,
checksum: String,
sourceArchive: Data,
manifests: [(SwiftLanguageVersion?, String, ToolsVersion, Data)]) async throws -> CreateResult {
try await self.connectionPool.withConnectionThrowing { connection in
// Insert into three tables, commit iff all succeed
try await connection.query("BEGIN;")
do {
// package_resources
let packageResource = try await self.packageResources.create(package: package, version: version, type: .sourceArchive,
checksum: checksum, bytes: sourceArchive)
// package_manifests
let packageManifests: [PackageRegistryModel.PackageManifest] =
try await withThrowingTaskGroup(of: PackageRegistryModel.PackageManifest.self) { group in
var packageManifests = [PackageRegistryModel.PackageManifest]()
for manifest in manifests {
group.addTask {
try await self.packageManifests.create(package: package, version: version, swiftVersion: manifest.0,
filename: manifest.1, swiftToolsVersion: manifest.2, bytes: manifest.3)
}
}
while let manifest = try await group.next() {
packageManifests.append(manifest)
}
return packageManifests
}
// package_releases
let packageRelease = try await self.create(package: package, version: version, repositoryURL: repositoryURL, commitHash: commitHash)
try await connection.query("COMMIT;")
return (packageRelease, packageResource, packageManifests)
} catch {
try await connection.query("ROLLBACK;")
throw error
}
}
}