From de500854c4ebe8a47dbe329d73e6cc759176a866 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Tue, 17 Oct 2023 23:48:16 +0200 Subject: [PATCH] AppDbContext: Add v_area_commitment_bin --- Elwig/Helpers/AppDbContext.cs | 12 +----------- Elwig/Helpers/AppDbUpdater.cs | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/Elwig/Helpers/AppDbContext.cs b/Elwig/Helpers/AppDbContext.cs index 28d73a2..7db9138 100644 --- a/Elwig/Helpers/AppDbContext.cs +++ b/Elwig/Helpers/AppDbContext.cs @@ -215,17 +215,7 @@ namespace Elwig.Helpers { cnx ??= await ConnectAsync(); var bins = new Dictionary>(); using (var cmd = cnx.CreateCommand()) { - cmd.CommandText = $""" - SELECT mgnr, t.vtrgid, - ROUND(SUM(COALESCE(area * min_kg_per_ha, 0)) / 10000.0) AS min_kg, - ROUND(SUM(COALESCE(area * max_kg_per_ha, 0)) / 10000.0) AS max_kg - FROM area_commitment c - JOIN area_commitment_type t ON t.vtrgid = c.vtrgid - WHERE (year_from IS NULL OR year_from <= {year}) AND - (year_to IS NULL OR year_to >= {year}) - GROUP BY mgnr, t.vtrgid - ORDER BY LENGTH(t.vtrgid) DESC, t.vtrgid - """; + cmd.CommandText = $"SELECT mgnr, bin, min_kg, max_kg FROM v_area_commitment_bin WHERE year = {year}"; using var reader = await cmd.ExecuteReaderAsync(); while (await reader.ReadAsync()) { var mgnr = reader.GetInt32(0); diff --git a/Elwig/Helpers/AppDbUpdater.cs b/Elwig/Helpers/AppDbUpdater.cs index f493fe8..c3a9a99 100644 --- a/Elwig/Helpers/AppDbUpdater.cs +++ b/Elwig/Helpers/AppDbUpdater.cs @@ -4,11 +4,11 @@ using System; namespace Elwig.Helpers { public static class AppDbUpdater { - public static readonly int RequiredSchemaVersion = 3; + public static readonly int RequiredSchemaVersion = 4; private static int _versionOffset = 0; private static readonly Action[] _updaters = new[] { - UpdateDbSchema_1_To_2, UpdateDbSchema_2_To_3 + UpdateDbSchema_1_To_2, UpdateDbSchema_2_To_3, UpdateDbSchema_3_To_4 }; private static void ExecuteNonQuery(SqliteConnection cnx, string sql) { @@ -184,5 +184,34 @@ namespace Elwig.Helpers { ExecuteNonQuery(cnx, "ALTER TABLE wine_attribute ADD COLUMN fill_lower_bins INTEGER NOT NULL CHECK (fill_lower_bins IN (0, 1, 2)) DEFAULT 0"); } + + private static void UpdateDbSchema_3_To_4(SqliteConnection cnx) { + ExecuteNonQuery(cnx, "DROP VIEW v_payment_bin"); + ExecuteNonQuery(cnx, """ + CREATE VIEW v_payment_bin AS + SELECT d.year, d.mgnr, + sortid || discr AS bin, + SUM(value) AS weight + FROM v_delivery d + JOIN delivery_part_bin b ON (b.year, b.did, b.dpnr) = (d.year, d.did, d.dpnr) + GROUP BY d.year, d.mgnr, bin + HAVING SUM(value) > 0 + ORDER BY d.year, d.mgnr, LENGTH(bin) DESC, bin; + """); + + ExecuteNonQuery(cnx, """ + CREATE VIEW v_area_commitment_bin AS + SELECT s.year, c.mgnr, + c.vtrgid AS bin, + CAST(ROUND(SUM(COALESCE(area * min_kg_per_ha, 0)) / 10000.0, 0) AS INTEGER) AS min_kg, + CAST(ROUND(SUM(COALESCE(area * max_kg_per_ha, 0)) / 10000.0, 0) AS INTEGER) AS max_kg + FROM area_commitment c, season s + JOIN area_commitment_type t ON t.vtrgid = c.vtrgid + WHERE (year_from IS NULL OR year_from <= s.year) AND + (year_to IS NULL OR year_to >= s.year) + GROUP BY s.year, c.mgnr, c.vtrgid + ORDER BY s.year, c.mgnr, LENGTH(c.vtrgid) DESC, c.vtrgid; + """); + } } }