in Source/NuGetGallery.Operations/Tasks/Backups/BackupPackagesTask.cs [192:221]
IList<Package> GetPackagesToBackUp(long? lastBackupId, bool forcedRecheck)
{
using (var sqlConnection = new SqlConnection(ConnectionString.ConnectionString))
using (var dbExecutor = new SqlExecutor(sqlConnection))
{
sqlConnection.Open();
Log.Info("Getting {1} packages to back up (since Package #{0})...", lastBackupId.HasValue ? lastBackupId.Value.ToString() : "?", forcedRecheck ? "all" : "1000");
StringBuilder uglySqlInjectionyStringBuilder = new StringBuilder(); // We trust our own code so it's not so SQL Injectiony...
uglySqlInjectionyStringBuilder.Append("SELECT ");
if (!forcedRecheck)
{
// Back up in 1000 package chunks
uglySqlInjectionyStringBuilder.Append("TOP 1000 ");
}
uglySqlInjectionyStringBuilder.Append("p.[Key], pr.Id, p.Version, p.Hash ");
uglySqlInjectionyStringBuilder.Append("FROM Packages p ");
uglySqlInjectionyStringBuilder.Append("JOIN PackageRegistrations pr ON pr.[Key] = p.PackageRegistrationKey ");
uglySqlInjectionyStringBuilder.Append("WHERE p.ExternalPackageUrl IS NULL ");
if (lastBackupId != null)
{
uglySqlInjectionyStringBuilder.Append("AND p.[Key] > " + lastBackupId.Value + " ");
}
uglySqlInjectionyStringBuilder.Append("ORDER BY Id, Version, Hash");
var list = dbExecutor.Query<Package>(uglySqlInjectionyStringBuilder.ToString()).ToList();
Log.Info("Got {0} packages.", list.Count);
return list;
}
}