IList GetPackagesToBackUp()

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;
            }
        }