Source/NuGetGallery.Operations/Tasks/DeletePackageVersionTask.cs (55 lines of code) (raw):
using System.Data.SqlClient;
using AnglicanGeek.DbExecutor;
namespace NuGetGallery.Operations
{
[Command("deletepackageversion", "Delete a specific package version", AltName = "dpv")]
public class DeletePackageVersionTask : DatabasePackageVersionTask
{
public override void ExecuteCommand()
{
using (var sqlConnection = new SqlConnection(ConnectionString.ConnectionString))
using (var dbExecutor = new SqlExecutor(sqlConnection))
{
sqlConnection.Open();
var package = Util.GetPackage(
dbExecutor,
PackageId,
PackageVersion);
if (package == null)
{
Log.Error("Package version does not exist: '{0}.{1}'", PackageId, PackageVersion);
return;
}
Log.Info(
"Deleting package data for '{0}.{1}'",
package.Id,
package.Version);
if (!WhatIf)
{
dbExecutor.Execute(
"DELETE pa FROM PackageAuthors pa JOIN Packages p ON p.[Key] = pa.PackageKey WHERE p.[Key] = @key",
new { key = package.Key });
dbExecutor.Execute(
"DELETE pd FROM PackageDependencies pd JOIN Packages p ON p.[Key] = pd.PackageKey WHERE p.[Key] = @key",
new { key = package.Key });
dbExecutor.Execute(
"DELETE ps FROM PackageStatistics ps JOIN Packages p ON p.[Key] = ps.PackageKey WHERE p.[Key] = @key",
new { key = package.Key });
dbExecutor.Execute(
"DELETE pf FROM PackageFrameworks pf JOIN Packages p ON p.[Key] = pf.Package_Key WHERE p.[Key] = @key",
new { key = package.Key });
dbExecutor.Execute(
"DELETE p FROM Packages p JOIN PackageRegistrations pr ON pr.[Key] = p.PackageRegistrationKey WHERE p.[Key] = @key",
new { key = package.Key });
}
new DeletePackageFileTask {
StorageAccount = StorageAccount,
PackageId = package.Id,
PackageVersion = package.Version,
PackageHash = package.Hash,
WhatIf = WhatIf
}.ExecuteCommand();
}
}
}
}