Prechádzať zdrojové kódy

Improvements to 8.02 update script

Kenric Nugteren 1 rok pred
rodič
commit
1d32e7fa33

+ 19 - 8
prs.shared/Database Update Scripts/Update_8_02.cs

@@ -15,7 +15,9 @@ public class Update_8_02 : DatabaseUpdateScript
 
     private static void PopulateDone()
     {
-        var requiItems = DbFactory.Provider.Query<RequisitionItem>(null, new Columns<RequisitionItem>(x => x.ID).Add(x => x.Picked).Add(x => x.Done))
+        var requiItems = DbFactory.Provider.Query<RequisitionItem>(
+            new Filter<RequisitionItem>(x => x.Done).IsEqualTo(false).And(x => x.Picked).IsNotEqualTo(DateTime.MinValue),
+            new Columns<RequisitionItem>(x => x.ID).Add(x => x.Picked).Add(x => x.Done))
             .ToList<RequisitionItem>();
         Logger.Send(LogType.Information, "", $"Populating Done flag for {requiItems.Count} RequisitionItems");
         foreach(var item in requiItems)
@@ -57,17 +59,26 @@ public class Update_8_02 : DatabaseUpdateScript
 
     private static void PopulateManufacturingPacketStageDescription()
     {
-        var mpStages = DbFactory.Provider.Query(
+        var table = DbFactory.Provider.Query(
             new Filter<ManufacturingPacketStage>(x => x.Description).IsEqualTo(null),
             new Columns<ManufacturingPacketStage>(x => x.ID)
-                .Add(x => x.Form.Description))
-            .ToArray<ManufacturingPacketStage>();
-        Logger.Send(LogType.Information, "", $"Populating Description for {mpStages.Length} ManufacturingPacketStages");
-        foreach(var stage in mpStages)
+                .Add(x => x.Form.Description));
+        Logger.Send(LogType.Information, "", $"Populating Description for {table.Rows.Count} ManufacturingPacketStages");
+        for(int i = 0; i < table.Rows.Count; i += 1000)
         {
-            stage.Description = stage.Form.Description;
+            Logger.Send(LogType.Information, "", $"{(double)i / (double)table.Rows.Count * 100.0:F2}%");
+            var mpStages = new List<ManufacturingPacketStage>(1000);
+            for(int j = i; j < Math.Min(i + 1000, table.Rows.Count); j++)
+            {
+                mpStages.Add(table.Rows[j].ToObject<ManufacturingPacketStage>());
+            }
+
+            foreach(var stage in mpStages)
+            {
+                stage.Description = stage.Form.Description;
+            }
+            DbFactory.Provider.Save(mpStages);
         }
-        DbFactory.Provider.Save(mpStages);
         Logger.Send(LogType.Information, "", $"Done populating Description!");
     }