Beispiel #1
0
 //Генерация расчетных параметров для одного модуля
 public void GenerateParams(string moduleDir) //Каталог модуля
 {
     using (StartLog("Генерация параметров", moduleDir))
     {
         try
         {
             var dir       = moduleDir.EndDir();
             var table     = new GenTemplateTable("GenParams", "GenRule", "ErrMess", "CalcOn", "ParamId");
             var subTable  = new GenTemplateTable("GenSubParams", table, "GenRule", "ErrMess", "CalcOn", "SubParamId", "ParamId");
             var dataTabls = new TablsList();
             AddEvent("Загрузка структуры исходных таблиц", dir + "Tables.accdb");
             using (var db = new DaoDb(dir + "Tables.accdb"))
             {
                 dataTabls.AddDbStructs(db);
                 AddEvent("Загрузка значений из исходных таблиц");
                 dataTabls.LoadValues(db, true);
             }
             AddEvent("Загрузка и проверка генерирующих параметров");
             var generator = new ModuleGenerator(Logger, dataTabls, dir + "CalcParams.accdb", table, subTable);
             generator.Generate(dir + "Compiled.accdb", "GeneratedParams", "GeneratedSubParams");
             AddEvent("Генерация завершена", generator.GenErrorsCount + " ошибок");
             if (generator.GenErrorsCount != 0)
             {
                 SetLogResults(generator.GenErrorsCount + " ошибок");
                 AddCollectResult("Шаблон генерации содержит " + generator.GenErrorsCount + " ошибок");
             }
         }
         catch (Exception ex)
         {
             AddError("Ошибка при генерации параметров", ex);
         }
     }
 }
Beispiel #2
0
 //Загрузка структур таблиц
 private void LoadTabls()
 {
     AddEvent("Загрузка структур таблиц");
     Tabls = new TablsList();
     using (var db = new DaoDb(Dir + "Tables.accdb"))
         Tabls.AddDbStructs(db);
 }
Beispiel #3
0
        public void TablsList()
        {
            var tdir = Different.GetTestInfoTaskDir() + @"CommonTypes\Tabls\TablsList\";
            var tdb  = new DaoDb(tdir + "Project1GenData.accdb");
            {
                var tlist = new TablsList(tdb);
                Assert.IsNotNull(tlist.Tabls);
                Assert.IsTrue(tlist.Tabls.ContainsKey("T1"));
                var t = tlist.Tabls["T1"];
                Assert.AreEqual("T1", t.Code);
                Assert.AreEqual(1, t.MaxLevel);
                Assert.AreEqual(2, t.Fields.Count);
                Assert.AreEqual(2, t.Fields[0].Count);
                Assert.AreEqual(2, t.FieldsNums[0].Count);
                Assert.IsTrue(new TablField("StringField", 0, DataType.String).IsEquals(t.FieldsNums[0][0]));
                Assert.IsTrue(new TablField("IntField", 1, DataType.Integer).IsEquals(t.FieldsNums[0][1]));
                Assert.AreEqual(2, t.Fields[1].Count);
                Assert.AreEqual(2, t.FieldsNums[1].Count);
                Assert.IsTrue(new TablField("StringSub", 0, DataType.String).IsEquals(t.FieldsNums[1][0]));
                Assert.IsTrue(new TablField("IntSub", 1, DataType.Integer).IsEquals(t.FieldsNums[1][1]));

                Assert.IsTrue(tlist.Tabls.ContainsKey("T2"));
                t = tlist.Tabls["T2"];
                Assert.AreEqual("T2", t.Code);
                Assert.AreEqual(0, t.MaxLevel);
                Assert.AreEqual(1, t.Fields.Count);
                Assert.AreEqual(1, t.Fields[0].Count);
            }
        }
Beispiel #4
0
        //Выбрать ряды для генерации
        public IEnumerable <SubRows> SelectRows(TablsList dataTabls, SubRows parentRow)
        {
            IEnumerable <SubRows> rows = dataTabls.Tabls[_tablName].SubList;

            rows = _condition == null ? rows : rows.Where(row => _condition.Generate(row).Boolean);
            return(ChildNode == null ? rows : ChildNode.SelectRows(rows));
        }
Beispiel #5
0
        public GenRow(ModuleGenerator generator,                //Ссылка на генератор
                      TablsList dataTabls,                      //Исходные таблицы для генерации
                      GenTemplateTable table, DaoRec rec,       //Рекортсет и поля таблицы
                      GenTemplateTable subTable, DaoRec subRec) //Рекордсет и и поля подтаблицы
            : base(generator, table, rec)
        {
            Id = rec.GetInt(table.IdField);
            var dataTabl = Rule == null ? null : ((NodeRTabl)Rule).Check(dataTabls, null);

            foreach (var key in Fields.Keys)
            {
                Keeper.SetFieldName(key);
                Fields[key].Check(dataTabl);
            }
            if (subRec != null && !subRec.EOF)
            {
                Keeper.SetFieldName("");
                bool subErr = false;
                while (subRec.GetInt(subTable.ParentIdField) == Id)
                {
                    var row = new GenSubRow(generator, dataTabls, dataTabl, subTable, subRec);
                    if (row.Keeper.Errors.Count != 0 && !subErr)
                    {
                        Keeper.AddError("Ошибки в рядах подтаблицы", (IToken)null);
                        subErr = true;
                    }
                    SubRows.Add(row);
                    if (!subRec.MoveNext())
                    {
                        break;
                    }
                }
            }
            rec.Put(table.ErrField, Keeper.ErrMess);
        }
Beispiel #6
0
        //Сгенерировать таблицу по данному ряду
        public void Generate(TablsList dataTabls, //Список таблиц с данными для генерации
                             DaoRec rec,          //Рекордсет генерируемой таблицы
                             DaoRec subrec)       //Рекордсет генерируемой подтаблицы
        {
            if (!Keeper.ErrMess.IsEmpty())
            {
                return;
            }
            IEnumerable <SubRows> rows = Rule == null ? new SubRows[] { null } : ((NodeRTabl)Rule).SelectRows(dataTabls, null);

            foreach (var row in rows)
            {
                rec.AddNew();
                int id = rec.GetInt(Table.IdField);
                GenerateFields(row, rec);
                rec.Update();
                if (subrec != null)
                {
                    foreach (var subRowGen in SubRows)
                    {
                        IEnumerable <SubRows> subRows = subRowGen.RuleString.IsEmpty() ? new [] { row } : (((INodeRTabl)subRowGen.Rule).SelectRows(dataTabls, row));
                        foreach (var subRow in subRows)
                        {
                            subrec.AddNew();
                            subrec.Put(subRowGen.Table.ParentIdField, id);
                            subRowGen.GenerateFields(subRow, subrec);
                            subrec.Update();
                        }
                    }
                }
            }
        }
Beispiel #7
0
 //Генерация по всему условию
 public void GenerateParams(TablsList tabls, //список всех таблиц для генерации
                            RecDao rec,      //рекордсет параметров
                            RecDao recs)     //рекордсет подпараметров
 {
     _paramsRec   = rec;
     SubParamsRec = recs;
     _condition.Generate(this, tabls);
 }
Beispiel #8
0
        //Выбрать ряды для генерации, главный узел выражения подтаблицы
        public IEnumerable <SubRows> SelectRows(TablsList dataTabls, SubRows parentRow)
        {
            IEnumerable <SubRows> rows = Condition == null
                                            ? parentRow.SubList
                                            : parentRow.SubList.Where(row => Condition.Generate(row).Boolean);

            return(ChildNode == null ? rows : ChildNode.SelectRows(rows));
        }
Beispiel #9
0
 //Загрузка таблиц
 private void LoadTables()
 {
     AddEvent("Загрузка данных исходных таблиц");
     using (var db = new DaoDb(_tablsFile))
     {
         db.ConnectDao();
         TablsList = new TablsList(db);
         TablsList.LoadValues();
     }
 }
Beispiel #10
0
        public void LoadValues()
        {
            var tdir = Different.GetTestInfoTaskDir() + @"CommonTypes\Tabls\LoadValues\";
            var tdb  = new DaoDb(tdir + "Project2GenData.accdb");
            {
                var tlist = new TablsList(tdb);
                tlist.LoadValues();

                var t      = tlist.Tabls["T1"];
                var rnums  = t.TablValues.SubNums;
                var rcodes = t.TablValues.SubCodes;
                Assert.IsTrue(rnums.ContainsKey(1));
                Assert.AreEqual("aa", rnums[1].Code);
                Assert.AreEqual("sssa", rnums[1]["stringfield"].String);
                Assert.AreEqual(10, rnums[1]["intfield"].Integer);
                Assert.AreEqual(2, rnums[1].SubCodes.Count);
                Assert.AreEqual(2, rnums[1].SubNums.Count);
                Assert.AreEqual("a1", rnums[1].SubNums[1].Code);
                Assert.AreEqual(2, rnums[1].SubCodes["a2"].Num);
                Assert.AreEqual("sa1", rnums[1].SubNums[1]["StringSub"].String);
                Assert.AreEqual("sa2", rnums[1].SubNums[2]["StringSub"].String);
                Assert.AreEqual("sa1", rnums[1].SubNums[1][0].String);
                Assert.AreEqual("sa2", rnums[1].SubNums[2][0].String);
                Assert.AreEqual(11, rnums[1].SubNums[1][1].Integer);
                Assert.AreEqual(12, rnums[1].SubNums[2][1].Integer);

                Assert.IsTrue(rcodes.ContainsKey("aa"));
                Assert.AreEqual(1, rcodes["aa"].Num);
                Assert.AreEqual("sssa", rcodes["aa"]["stringfield"].String);
                Assert.AreEqual("sa2", rcodes["aa"].SubNums[2]["StringSub"].String);

                Assert.IsTrue(rnums.ContainsKey(2));
                Assert.AreEqual("bb", rnums[2].Code);
                Assert.AreEqual("Sssb", rnums[2]["StringField"].String);
                Assert.AreEqual(20, rnums[2]["IntField"].Integer);
                Assert.AreEqual(1, rnums[2].SubCodes.Count);
                Assert.AreEqual(1, rnums[2].SubNums.Count);
                Assert.AreEqual("b1", rnums[2].SubNums[1].Code);
                Assert.AreEqual("sb1", rnums[2].SubNums[1]["StringSub"].String);

                Assert.IsTrue(rnums.ContainsKey(3));
                Assert.AreEqual("cc", rnums[3].Code);
                Assert.AreEqual("SSSC", rnums[3]["StringField"].String);
                Assert.AreEqual(30, rnums[3]["IntField"].Integer);
                Assert.AreEqual(3, rnums[3].SubCodes.Count);
                Assert.AreEqual(3, rnums[3].SubNums.Count);
                Assert.AreEqual("c2", rnums[3].SubNums[2].Code);
                Assert.AreEqual("sc3", rnums[3].SubNums[3]["StringSub"].String);
                Assert.AreEqual(33, rnums[3].SubNums[3]["IntSub"].Integer);

                t = tlist.Tabls["T2"];
                Assert.AreEqual(0, t.TablValues.SubNums.Count);
                Assert.AreEqual(0, t.TablValues.SubCodes.Count);
            }
        }
Beispiel #11
0
 //Генерация для надтаблицы
 internal override void Generate(GenParamBase par, TablsList tabls)
 {
     if (!tabls.Tabls.ContainsKey(_tablName))
     {
         par.ErrMess += "Не найдена таблица " + _tablName + " (GenConditions); ";
     }
     else
     {
         par.Generate(tabls.Tabls[_tablName].TablValues);
     }
 }
Beispiel #12
0
        private ITablStruct CheckSubRule(GenKeeper keeper, TablsList tabls, ITablStruct tstruct, string formula)
        {
            keeper.Errors.Clear();
            var parsing = new SubRuleParsing(keeper, "поле", formula);

            if (parsing.ResultTree == null)
            {
                return(null);
            }
            return(((INodeRTabl)parsing.ResultTree).Check(tabls, tstruct));
        }
Beispiel #13
0
        //Загрузка таблиц
        private TablsList Load(string prefix)
        {
            var tabls = new TablsList();

            using (var db = new DaoDb(TestLib.CopyFile("Generator", "GenData.accdb", "Check" + prefix + ".accdb")))
            {
                tabls.AddStruct(db, "Tabl", "SubTabl", "SubSubTabl");
                tabls.AddDbStructs(db);
            }
            return(tabls);
        }
Beispiel #14
0
 //Проверка выражения
 public ITablStruct Check(TablsList dataTabls, ITablStruct parentStruct)
 {
     if (parentStruct.Child == null)
     {
         AddError("Подтаблица отстутствует");
         return(null);
     }
     if (Condition != null && Condition.Check(parentStruct.Child) != DataType.Boolean)
     {
         AddError("Недопустимый тип данных условия");
     }
     return(ChildNode == null ? parentStruct.Child : ChildNode.Check(dataTabls, parentStruct.Child));
 }
Beispiel #15
0
        //Выбрать ряды по условию генерации подтаблицы
        private SubRows[] SelectSubRowsS(GenKeeper keeper, TablsList tabls, ITablStruct tstruct, SubRows rows, string formula)
        {
            keeper.Errors.Clear();
            var parsing = new SubRuleParsing(keeper, "поле", formula);

            if (parsing.ResultTree == null)
            {
                return(null);
            }
            var node = (SubNodeR)parsing.ResultTree;

            node.Check(tabls, tstruct);
            return(node.SelectRows(tabls, rows).ToArray());
        }
Beispiel #16
0
        //Выбрать ряды по условию генерации таблицы, возвращает ряды и, возможно, также структуру
        private SubRows[] SelectRowsS(GenKeeper keeper, TablsList tabls, string formula)
        {
            keeper.Errors.Clear();
            var parsing = new RuleParsing(keeper, "поле", formula);

            if (parsing.ResultTree == null)
            {
                return(null);
            }
            var node = (NodeRTabl)parsing.ResultTree;

            node.Check(tabls, null);
            return(node.SelectRows(tabls, null).ToArray());
        }
Beispiel #17
0
        //Проверка выражения
        public ITablStruct Check(TablsList dataTabls, ITablStruct parentStruct)
        {
            if (!dataTabls.Structs.ContainsKey(_tablName))
            {
                AddError("Не найдена таблица");
                return(null);
            }
            var tstruct = dataTabls.Structs[_tablName].Tabls[0];

            if (_condition != null && _condition.Check(tstruct) != DataType.Boolean)
            {
                AddError("Недопустимый тип данных условия");
            }
            return(ChildNode == null ? tstruct : ChildNode.Check(dataTabls, tstruct));
        }
Beispiel #18
0
        private IEnumerable <SubRows> SelectRowsStruct(GenKeeper keeper, TablsList tabls, string formula, out ITablStruct tstruct)
        {
            tstruct = null;
            keeper.Errors.Clear();
            var parsing = new RuleParsing(keeper, "поле", formula);

            if (parsing.ResultTree == null)
            {
                return(null);
            }
            var node = (NodeRTabl)parsing.ResultTree;

            tstruct = node.Check(tabls, null);
            return(node.SelectRows(tabls, null));
        }
Beispiel #19
0
        public GenSubRow(ModuleGenerator generator, //Ссылка на генератор
                         TablsList dataTabls,       //Исходные таблицы для генерации
                         ITablStruct dataTabl,      //Таблица - шаблон генерации
                         GenTemplateTable table,    //Поля таблицы - шаблона генерации
                         DaoRec rec)                //Рекордсет таблицы результатов
            : base(generator, table, rec)
        {
            var subTabl = Rule == null ? dataTabl : ((INodeRTabl)Rule).Check(dataTabls, dataTabl);

            foreach (var key in Fields.Keys)
            {
                Keeper.SetFieldName(key);
                Fields[key].Check(subTabl);
            }
            rec.Put(table.ErrField, Keeper.ErrMess);
        }
Beispiel #20
0
        //Проверка выражения
        public ITablStruct Check(TablsList dataTabls, ITablStruct tablParent)
        {
            var gstruct = new RowGroupStruct((TablStruct)tablParent, _fields);

            foreach (var field in _fieldsNodes)
            {
                var s = ((ConstNode)field).Mean.String;
                if (!tablParent.Fields.ContainsKey(s))
                {
                    Keeper.AddError("Поле для группировки не найдено в таблице", field);
                }
                else
                {
                    gstruct.Fields.Add(s, tablParent.Fields[s]);
                }
            }
            return(gstruct);
        }
Beispiel #21
0
        private void LoadTabls()
        {
            AddEvent("Загрузка графиков");
            using (var db = new DaoDb(Dir + "Grafics.accdb"))
            {
                using (var rec = new DaoRec(db, "GraficsList"))
                    while (rec.Read())
                    {
                    }
            }

            AddEvent("Загрузка таблиц");
            using (var db = new DaoDb(Dir + "Tables.accdb"))
            {
                TablsList.AddDbStructs(db);
                TablsList.LoadValues(db, false);
            }
        }
Beispiel #22
0
        private void Generate(string tablName, string subTablName = null, bool copyRes = true)
        {
            var tabls = new TablsList();

            using (var db = new DaoDb(TestLib.CopyFile("Generator", "GenData.accdb", "Gen" + tablName + "Data.accdb")))
            {
                tabls.AddStruct(db, "Tabl", "SubTabl", "SubSubTabl");
                tabls.AddDbStructs(db);
                tabls.LoadValues(db, true);
            }

            TestLib.CopyFile("Generator", "GenTemplate.accdb", "Gen" + tablName + "Template.accdb");
            if (copyRes)
            {
                TestLib.CopyFile("Generator", "GenRes.accdb", "Gen" + tablName + "Res.accdb");
            }
            TestLib.CopyFile("Generator", "CorrectGen" + tablName + ".accdb", "Gen" + tablName + "Correct.accdb");

            var templatesFile = TestLib.TestRunDir + @"Generator\Gen" + tablName + "Template.accdb";
            var table         = new GenTemplateTable(tablName, "GenRule", "ErrMess", "CalcOn", "Id");
            var subTable      = subTablName == null ? null : new GenTemplateTable(subTablName, table, "GenRule", "ErrMess", "CalcOn", "Id", "ParentId");
            var logger        = new Logger(new AppIndicator());

            logger.History = new TestHistory(logger);
            var generator = new ModuleGenerator(logger, tabls, templatesFile, table, subTable);

            var s = TestLib.TestRunDir + @"Generator\Gen" + tablName;

            if (copyRes)
            {
                generator.Generate(s + "Res.accdb", tablName, subTablName);
            }

            using (var db1 = new DaoDb(s + (copyRes ? "Res" : "Template") + ".accdb"))
                using (var db2 = new DaoDb(s + "Correct" + ".accdb"))
                {
                    TestLib.CompareTables(db1, db2, tablName, "Id");
                    if (subTablName != null)
                    {
                        TestLib.CompareTables(db1, db2, subTablName, "Id");
                    }
                }
        }
Beispiel #23
0
        public ModuleGenerator(Logger logger,                    //Логгер
                               TablsList dataTabls,              //Таблицы с данными для генерации
                               string templateFile,              //Файл шаблона генерации
                               GenTemplateTable table,           //Главная таблица шаблона генерации
                               GenTemplateTable subTable = null) //Подчиненная таблица шаблона генерации
            : base(logger)
        {
            GenErrorsCount = 0;
            AddEvent("Загрузка списка функций");
            FunsChecker = new FunsChecker(FunsCheckType.Gen);
            Functions   = new GenFunctions();

            DataTabls = dataTabls;
            try
            {
                AddEvent("Загрузка таблиц шаблона генерации", templateFile + ", " + table.Name);
                bool hasSub = subTable != null;
                using (var rec = new DaoRec(templateFile, table.QueryString))
                    using (var subRec = !hasSub ? null : new DaoRec(rec.DaoDb, subTable.QueryString))
                    {
                        if (hasSub && !subRec.EOF)
                        {
                            subRec.MoveFirst();
                        }
                        while (rec.Read())
                        {
                            var row = new GenRow(this, dataTabls, table, rec, subTable, subRec);
                            GenErrorsCount += row.Keeper.Errors.Count;
                            _rowsGen.Add(row.Id, row);
                        }
                    }
            }
            catch (Exception ex)
            {
                AddError("Ошибка при загрузке шаблона генерации", ex, templateFile);
            }
        }
Beispiel #24
0
 //Перечисление строк таблицы
 internal override void Generate(GenParamBase par, TablsList tabls)
 {
     if (!tabls.Tabls.ContainsKey(_tablName))
     {
         par.ErrMess += "Не найдена таблица " + _tablName + " (GenConditions); ";
     }
     else
     {
         foreach (TablRow row in tabls.Tabls[_tablName].TablValues.Subs)
         {
             if (Cond == null || Cond.CalculateBool(row))
             {
                 if (Children == null)
                 {
                     par.Generate(row);
                 }
                 else
                 {
                     Children.Generate(par, row);
                 }
             }
         }
     }
 }
Beispiel #25
0
 private TablRow[] SelectSubRows(GenKeeper keeper, TablsList tabls, ITablStruct tstruct, SubRows rows, string formula)
 {
     return(SelectSubRowsS(keeper, tabls, tstruct, rows, formula).Cast <TablRow>().ToArray());
 }
Beispiel #26
0
 //Перечисление строк таблицы
 internal abstract void Generate(GenParamBase par, TablsList tabls);
Beispiel #27
0
 //Генерация по строке таблицы
 internal override void Generate(GenParamBase par, TablsList tabls)
 {
     par.Generate(null);
 }
Beispiel #28
0
        public void TablValues()
        {
            using (var db = CopyDb("Values"))
            {
                var tlist = new TablsList();
                Assert.AreEqual(0, tlist.Tabls.Count);
                tlist.AddStruct(db, "Tabl", "SubTabl", "SubSubTabl");
                Assert.AreEqual(1, tlist.Structs.Count);
                tlist.LoadValues(db, false);
                Assert.AreEqual(1, tlist.Tabls.Count);
                var tabl = tlist.Tabls["Tabl"];
                Assert.AreEqual(3, tabl.Rows[0].Count);
                Assert.AreEqual(4, tabl.Rows[1].Count);
                Assert.AreEqual(0, tabl.Rows[2].Count);
                Assert.AreEqual(3, tabl.SubCodes.Count);
                Assert.AreEqual(2, tabl.SubNums.Count);
                Assert.AreEqual(3, tabl.SubList.Count);

                Assert.IsTrue(tabl.SubCodes.ContainsKey("s1"));
                Assert.IsTrue(tabl.SubCodes.ContainsKey("s2"));
                Assert.IsTrue(tabl.SubCodes.ContainsKey("s3"));
                Assert.IsTrue(tabl.SubNums.ContainsKey(11));
                Assert.IsTrue(tabl.SubNums.ContainsKey(12));

                var row = tabl.SubCodes["s1"];
                Assert.AreEqual(3, row.SubCodes.Count);
                Assert.AreEqual(3, row.SubNums.Count);
                Assert.AreEqual(3, row.SubList.Count);
                Assert.AreEqual(1, row.Id);
                Assert.AreEqual(11, row.Num);
                Assert.AreEqual("s1", row.Code);

                Assert.AreEqual(DataType.Integer, row["Num"].DataType);
                Assert.AreEqual(11, row["Num"].Integer);
                Assert.IsNull(row["Num"].Error);
                Assert.AreEqual(DataType.String, row["StringField"].DataType);
                Assert.AreEqual("SSS", row["StringField"].String);
                Assert.AreEqual(DataType.Boolean, row["BoolField"].DataType);
                Assert.AreEqual(true, row["StringField"].Boolean);
                Assert.AreEqual(DataType.Time, row["TimeField"].DataType);
                Assert.AreEqual(new DateTime(2016, 9, 26), row["TimeField"].Date);

                row = row.SubNums[1];
                Assert.AreEqual(2, row.SubCodes.Count);
                Assert.AreEqual(2, row.SubNums.Count);
                Assert.AreEqual(2, row.SubList.Count);
                Assert.AreEqual(1, row.Id);
                Assert.AreEqual(1, row.ParentId);
                Assert.AreEqual(1, row.Num);
                Assert.AreEqual("a", row.Code);

                Assert.AreEqual(DataType.Integer, row["Num"].DataType);
                Assert.AreEqual(1, row["Num"].Integer);
                Assert.AreEqual(DataType.String, row["Code"].DataType);
                Assert.AreEqual("a", row["Code"].String);
                Assert.AreEqual(DataType.String, row["StringSub"].DataType);
                Assert.AreEqual("", row["StringSub"].String);
                Assert.AreEqual(DataType.Boolean, row["BoolSub"].DataType);
                Assert.AreEqual(true, row["StringSub"].Boolean);
                Assert.AreEqual(DataType.Real, row["RealSub"].DataType);
                Assert.AreEqual(1, row["RealSub"].Real);

                row = row.SubNums[2000];
                Assert.AreEqual(0, row.SubCodes.Count);
                Assert.AreEqual(0, row.SubNums.Count);
                Assert.AreEqual(0, row.SubList.Count);
                Assert.AreEqual(2, row.Id);
                Assert.AreEqual(1, row.ParentId);
                Assert.AreEqual(2000, row.Num);
                Assert.AreEqual("ppp", row.Code);

                Assert.AreEqual(DataType.String, row["Code"].DataType);
                Assert.AreEqual("ppp", row["Code"].String);
                Assert.AreEqual(DataType.String, row["StringString"].DataType);
                Assert.AreEqual("ppp", row["StringString"].String);
                Assert.AreEqual(DataType.Boolean, row["BoolBool"].DataType);
                Assert.AreEqual(true, row["BoolBool"].Boolean);

                row = tabl.SubNums[12];
                Assert.AreEqual(1, row.SubCodes.Count);
                Assert.AreEqual(1, row.SubNums.Count);
                Assert.AreEqual(1, row.SubList.Count);
                Assert.AreEqual(2, row.Id);
                Assert.AreEqual(12, row.Num);
                Assert.AreEqual("s2", row.Code);

                Assert.AreEqual(DataType.Integer, row["Num"].DataType);
                Assert.AreEqual(12, row["Num"].Integer);
                Assert.AreEqual(DataType.String, row["StringField"].DataType);
                Assert.AreEqual("SSS", row["StringField"].String);
                Assert.AreEqual(DataType.Boolean, row["BoolField"].DataType);
                Assert.AreEqual(true, row["StringField"].Boolean);
                Assert.AreEqual(DataType.Real, row["RealField"].DataType);
                Assert.AreEqual(123.5, row["RealField"].Real);

                tlist.AddDbStructs(db);
                tlist.LoadValues(db, true);
                Assert.AreEqual(2, tlist.Tabls.Count);
                Assert.AreEqual(2, tlist.Structs.Count);
                tabl = tlist.Tabls["VTZTZ"];
                Assert.AreEqual(6, tabl.SubCodes.Count);
                Assert.AreEqual(1, tabl.SubNums.Count);
                Assert.AreEqual(6, tabl.SubList.Count);

                row = tabl.SubCodes["ВТЗЗ00120101002"];
                Assert.AreEqual(1, row.SubCodes.Count);
                Assert.AreEqual(1, row.SubNums.Count);
                Assert.AreEqual(1, row.SubList.Count);
                Assert.AreEqual(386, row.Id);
                Assert.AreEqual(0, row.Num);
                Assert.AreEqual("ВТЗЗ00120101002", row.Code);

                Assert.AreEqual(DataType.String, row["Code"].DataType);
                Assert.AreEqual("ВТЗЗ00120101002", row["Code"].String);
                Assert.AreEqual(DataType.String, row["NameVTZ"].DataType);
                Assert.AreEqual("Выходные цепи отключения ДВ-А", row["NameVTZ"].String);
                Assert.AreEqual(DataType.Integer, row["SysNumVTZ"].DataType);
                Assert.AreEqual(43000, row["SysNumVTZ"].Integer);
                Assert.AreEqual(DataType.Integer, row["PriorVTZ"].DataType);
                Assert.AreEqual(1, row["PriorVTZ"].Integer);

                row = row.SubCodes["ТЗ_З00120101004"];
                Assert.IsNotNull(row.Parent);
                Assert.AreEqual(0, row.SubCodes.Count);
                Assert.AreEqual(0, row.SubNums.Count);
                Assert.AreEqual(0, row.SubList.Count);
                Assert.AreEqual(1, row.Id);
                Assert.AreEqual(386, row.ParentId);
                Assert.AreEqual(0, row.Num);
                Assert.AreEqual("ТЗ_З00120101004", row.Code);

                Assert.AreEqual(DataType.String, row["Code"].DataType);
                Assert.AreEqual("ТЗ_З00120101004", row["Code"].String);
                Assert.AreEqual(DataType.String, row["NameTZ"].DataType);
                Assert.AreEqual("Понижение Pм на смазку ДВ-А", row["NameTZ"].String);
                Assert.AreEqual(DataType.Integer, row["SysNumTZ"].DataType);
                Assert.AreEqual(41000, row["SysNumTZ"].Integer);
                Assert.AreEqual(DataType.Integer, row["IdUnitTZ"].DataType);
                Assert.AreEqual(10299, row["IdUnitTZ"].Integer);
            }
        }
Beispiel #29
0
        public void TablStruct()
        {
            using (var db = CopyDb("Struct"))
            {
                var tlist = new TablsList();
                Assert.AreEqual(0, tlist.Structs.Count);
                Assert.AreEqual(0, tlist.Tabls.Count);
                var gr = tlist.AddStruct(db, "Tabl", "SubTabl", "SubSubTabl");
                Assert.AreEqual(1, tlist.Structs.Count);
                Assert.AreEqual("Tabl", gr.Code);
                Assert.AreEqual(File("Struct"), gr.DbFile);
                Assert.AreEqual(4, gr.Tabls.Count);

                var tstruct = gr.Tabls[-1];
                Assert.AreEqual(-1, tstruct.Level);
                Assert.IsNull(tstruct.Parent);
                Assert.IsNotNull(tstruct.Child);
                Assert.AreEqual(0, tstruct.Fields.Count);

                tstruct = gr.Tabls[0];
                Assert.AreEqual("Tabl", tstruct.TableName);
                Assert.AreEqual(0, tstruct.Level);
                Assert.IsNotNull(tstruct.Parent);
                Assert.IsNotNull(tstruct.Child);
                Assert.AreEqual(11, tstruct.Fields.Count);
                Assert.AreEqual(DataType.String, tstruct.Fields["Code"]);
                Assert.AreEqual(DataType.Integer, tstruct.Fields["Num"]);
                Assert.AreEqual(DataType.String, tstruct.Fields["NameField"]);
                Assert.AreEqual(DataType.Boolean, tstruct.Fields["BoolField"]);

                tstruct = gr.Tabls[1];
                Assert.AreEqual("SubTabl", tstruct.TableName);
                Assert.AreEqual(1, tstruct.Level);
                Assert.IsNotNull(tstruct.Parent);
                Assert.IsNotNull(tstruct.Child);
                Assert.AreEqual(12, tstruct.Fields.Count);
                Assert.AreEqual(DataType.String, tstruct.Fields["GenType"]);
                Assert.AreEqual(DataType.Integer, tstruct.Fields["Num"]);
                Assert.AreEqual(DataType.String, tstruct.Fields["StringSub"]);
                Assert.AreEqual(DataType.Real, tstruct.Fields["RealSub"]);
                Assert.AreEqual(DataType.Integer, tstruct.Fields["IntSub"]);
                Assert.AreEqual(DataType.Time, tstruct.Fields["TimeSub"]);

                tstruct = gr.Tabls[2];
                Assert.AreEqual("SubSubTabl", tstruct.TableName);
                Assert.AreEqual(2, tstruct.Level);
                Assert.IsNotNull(tstruct.Parent);
                Assert.IsNull(tstruct.Child);
                Assert.AreEqual(12, tstruct.Fields.Count);
                Assert.AreEqual(DataType.String, tstruct.Fields["Code"]);
                Assert.AreEqual(DataType.Integer, tstruct.Fields["Id"]);
                Assert.AreEqual(DataType.String, tstruct.Fields["StringString"]);
                Assert.AreEqual(DataType.Real, tstruct.Fields["RealReal"]);
                Assert.AreEqual(DataType.Boolean, tstruct.Fields["BoolBool"]);

                tlist.AddDbStructs(db);
                Assert.AreEqual(2, tlist.Structs.Count);
                Assert.AreEqual(0, tlist.Tabls.Count);
                gr = tlist.Structs["VTZTZ"];
                Assert.AreEqual("VTZTZ", gr.Code);
                Assert.AreEqual(File("Struct"), gr.DbFile);
                Assert.AreEqual(3, gr.Tabls.Count);

                tstruct = gr.Tabls[-1];
                Assert.AreEqual(-1, tstruct.Level);
                Assert.IsNull(tstruct.Parent);
                Assert.IsNotNull(tstruct.Child);
                Assert.AreEqual(0, tstruct.Fields.Count);

                tstruct = gr.Tabls[0];
                Assert.AreEqual("Tbl_VTZTZ_Sub0", tstruct.TableName);
                Assert.AreEqual(0, tstruct.Level);
                Assert.IsNotNull(tstruct.Parent);
                Assert.IsNotNull(tstruct.Child);
                Assert.AreEqual(9, tstruct.Fields.Count);
                Assert.AreEqual(DataType.String, tstruct.Fields["Code"]);
                Assert.AreEqual(DataType.Integer, tstruct.Fields["Num"]);
                Assert.AreEqual(DataType.String, tstruct.Fields["NameVTZ"]);
                Assert.AreEqual(DataType.Integer, tstruct.Fields["SysNumVTZ"]);
                Assert.AreEqual(DataType.Integer, tstruct.Fields["IdUnitVTZ"]);

                tstruct = gr.Tabls[1];
                Assert.AreEqual("Tbl_VTZTZ_Sub1", tstruct.TableName);
                Assert.AreEqual(1, tstruct.Level);
                Assert.IsNotNull(tstruct.Parent);
                Assert.IsNull(tstruct.Child);
                Assert.AreEqual(9, tstruct.Fields.Count);
                Assert.AreEqual(DataType.String, tstruct.Fields["Code"]);
                Assert.AreEqual(DataType.Integer, tstruct.Fields["ParentId"]);
                Assert.AreEqual(DataType.String, tstruct.Fields["NameTZ"]);
                Assert.AreEqual(DataType.Integer, tstruct.Fields["SysNumTZ"]);
                Assert.AreEqual(DataType.String, tstruct.Fields["UnitTypeTZ"]);
            }
        }
Beispiel #30
0
 private TablRow[] SelectRows(GenKeeper keeper, TablsList tabls, string formula)
 {
     return(SelectRowsS(keeper, tabls, formula).Cast <TablRow>().ToArray());
 }