public void TestDerivedBLInterface_FormerName()
        {
            var fileName = @"C:\Users\wiw39784\Documents\git\CeusDL2\Test\Data\interface_demo2.1.ceusdl";
            var data     = new ParsableData(System.IO.File.ReadAllText(fileName), fileName);
            var p        = new FileParser(data);
            var result   = p.Parse();
            var model    = new CoreModel(result);
            var blModel  = new BLModel(model);

            // Auswählen
            var coreIfa  = model.Interfaces[0];
            var coreAttr = coreIfa.Attributes[0];

            // in DefaultBLInterface konvertieren
            var blIfa = new DefaultBLInterface(coreIfa, blModel);

            Assert.AreEqual("AP_BL_D_StudiengangHisInOne", blIfa.Name);
            Assert.AreEqual("AP_BL_D_Studiengang", blIfa.FormerName);
            Assert.AreEqual("FH_AP_BaseLayer.dbo.AP_BL_D_Studiengang", blIfa.FullFormerName);

            var blIfa2 = new DerivedBLInterface(blIfa, blModel);

            Assert.AreEqual("AP_BL_D_StudiengangHisInOne_VERSION", blIfa2.Name);
            Assert.AreEqual("AP_BL_D_Studiengang_VERSION", blIfa2.FormerName);
            Assert.AreEqual("FH_AP_BaseLayer.dbo.AP_BL_D_Studiengang_VERSION", blIfa2.FullFormerName);
        }
Exemplo n.º 2
0
        private string GenerateCascadeVersions(DerivedBLInterface ifa)
        {
            StringBuilder sb = new StringBuilder();

            // Nur Beziehungen zwischen zwei historisierten Dimensionen sind relevant
            var relevantRelationships = ifa.Attributes.Where(a => a is RefBLAttribute)
                                        .Select(a => (RefBLAttribute)a)
                                        .Where(a => a.ReferencedAttribute.ParentInterface.IsHistorized)
                                        .ToList();

            foreach (var rel in relevantRelationships)
            {
                GenerateCascadeVersions(ifa, rel, sb);
            }

            return(sb.ToString());
        }
Exemplo n.º 3
0
 private IBTAttribute CreateNonVersionedRefAttribute(BaseBLAttribute pk, DerivedBLInterface ifa)
 {
     return(new RefBTAttribute(pk, ifa.DefaultInterface, this));
 }
Exemplo n.º 4
0
        ///
        /// Kaskadierendes Auflösung von Versionen von Kind-Dimensionen in den
        /// Elterndimensionen für ein einzelnes Eltern-Kind-Paar auflösen
        ///
        private void GenerateCascadeVersions(DerivedBLInterface childIfa, RefBLAttribute reference, StringBuilder sb)
        {
            var parentIfa = GetDerivedForDefault(reference.ReferencedAttribute.ParentInterface);
            var parentNonIdentityAttributes = parentIfa.Attributes.Where(a => !a.IsIdentity);
            var max = GetMaxValueForHistoryAttribute(parentIfa.HistoryAttribute);

            sb.Append($"-- Cascade Versions for {parentIfa.Name} -> {reference.ReferencedAttribute.FullName}\n");
            sb.Append($"-- {childIfa.Name}\n");

            // Ermittlung der im parentIfa fehlenden Versionen
            sb.Append("with missing_versions as (\n");
            sb.Append("select distinct \n".Indent(1));
            foreach (var uk in childIfa.UniqueKeyAttributes.Where(a => childIfa.HistoryAttribute != a))
            {
                sb.Append($"t2.{uk.Name},\n".Indent(2));
            }
            sb.Append($"t2.{reference.Name} as {reference.ReferencedAttribute.Name},\n".Indent(2));
            sb.Append($"t2.{childIfa.HistoryAttribute.Name}\n".Indent(2));
            sb.Append($"from {childIfa.FullName} as t2\nleft outer join {parentIfa.FullName} as t1\n".Indent(1));
            sb.Append($"on t2.{reference.Name} = t1.{reference.ReferencedAttribute.Name}\n".Indent(2));
            if (childIfa.IsMandant && parentIfa.IsMandant)
            {
                sb.Append($"and t2.Mandant_KNZ = t1.Mandant_KNZ\n".Indent(2));
            }
            sb.Append($"and coalesce(t1.{parentIfa.HistoryAttribute.Name}, 'NOW') = coalesce(t2.{childIfa.HistoryAttribute.Name}, 'NOW')\n".Indent(2));
            sb.Append($"where t1.{parentIfa.PrimaryKeyAttributes.First().Name} is null\n".Indent(1));
            sb.Append(")\n");

            // Einfügen der fehlenden Versionen in die BL-Tabelle zu parrentIfa
            sb.Append($"insert into {parentIfa.FullName} (\n");
            foreach (var attr in parentNonIdentityAttributes)
            {
                sb.Append(attr.Name.Indent(1));
                if (attr != parentNonIdentityAttributes.Last())
                {
                    sb.Append(",");
                }
                sb.Append("\n");
            }
            sb.Append(")\n");
            sb.Append("select distinct \n");
            foreach (var attr in parentNonIdentityAttributes.Where(a => !a.IsTechnicalAttribute))
            {
                sb.Append($"t1.{attr.Name},\n".Indent(1));
            }
            sb.Append("'I' as T_Modifikation,\n".Indent(1));
            sb.Append($"cast('Cascaded for {reference.FullName}' as varchar(100)) as T_Bemerkung,\n".Indent(1));
            sb.Append("SYSTEM_USER as T_Benutzer,\n".Indent(1));
            sb.Append("'H' as T_System,\n".Indent(1));
            sb.Append($"mv.{childIfa.HistoryAttribute.Name} as {parentIfa.HistoryAttribute.Name},\n".Indent(1));
            sb.Append("GETDATE() as T_Erst_Dat,\nGETDATE() as T_Aend_Dat,\n".Indent(1));
            sb.Append("t1.T_Ladelauf_NR\n".Indent(1));
            sb.Append($"from {parentIfa.FullName} as t1\n");
            sb.Append($"inner join missing_versions as mv\n");
            var parentUkWithoutHistory = parentIfa.UniqueKeyAttributes.Where(a => parentIfa.HistoryAttribute != a);

            foreach (var uk in parentUkWithoutHistory)
            {
                if (uk == parentUkWithoutHistory.First())
                {
                    sb.Append($"on t1.{uk.Name} = mv.{uk.Name}\n".Indent(1));
                }
                else
                {
                    sb.Append($"and t1.{uk.Name} = mv.{uk.Name}\n".Indent(1));
                }
            }
            sb.Append($"and coalesce(t1.{parentIfa.HistoryAttribute.Name}, '{max}') = (\n".Indent(1));
            sb.Append($"select min(coalesce(z.{parentIfa.HistoryAttribute.Name}, '{max}'))\n".Indent(2));
            sb.Append($"from {parentIfa.FullName} as z\n".Indent(2));
            foreach (var uk in parentUkWithoutHistory)
            {
                if (uk == parentUkWithoutHistory.First())
                {
                    sb.Append($"where z.{uk.Name} = t1.{uk.Name}\n".Indent(2));
                }
                else
                {
                    sb.Append($"and z.{uk.Name} = t1.{uk.Name}\n".Indent("          "));
                }
            }
            sb.Append($"and coalesce(z.{parentIfa.HistoryAttribute.Name}, '{max}') >= coalesce(mv.{parentIfa.HistoryAttribute.Name}, '{max}')\n".Indent("          "));
            sb.Append(")\n".Indent(1));
            sb.Append(";\n");
        }