public GenBaseRow(ModuleGenerator generator, //Ссылка на генератор GenTemplateTable table, //Описание полей таблицы-шаблона DaoRec rec) //Рекордсет таблицы шаблона генерации { Table = table; Keeper = new GenKeeper(generator); RuleString = rec.GetString(Table.RuleField); if (!RuleString.IsEmpty()) { var parse = Table.IsSub ? new SubRuleParsing(Keeper, Table.RuleField, RuleString) : new RuleParsing(Keeper, Table.RuleField, RuleString); Rule = parse.ResultTree; } foreach (Field field in rec.Recordset.Fields) { var name = field.Name; if (!Table.IsSpecial(name) && !rec.IsNull(name)) { var dataType = field.Type.ToDataType(); if (dataType != DataType.String) { Fields.Add(name, new GenConstNode(rec.GetMean(dataType, name))); } else { string s = rec.GetString(name); if (!s.Contains("[")) { Fields.Add(name, new GenConstNode(null, s)); } else { var fparse = new FieldsParsing(Keeper, name, rec.GetString(name)); var f = (IExprNode)fparse.ResultTree; if (f != null) { Fields.Add(name, f); } } } } } }
public void RecRead() { using (var rec = new DaoRec(CopyDb("Read"), "Tabl")) { Assert.IsNotNull(rec.DaoDb); Assert.AreEqual(File("Read"), rec.DaoDb.File); Assert.AreEqual(7, rec.FiledsNum.Count); Assert.AreEqual(7, rec.Fileds.Count); Assert.AreEqual(7, rec.FieldsCount); Assert.IsTrue(rec.GetBool("BoolField")); Assert.AreEqual(true, rec.GetBoolNull("BoolField")); Assert.AreEqual(1, rec.GetInt("Id")); Assert.AreEqual(1, rec.GetIntNull("Id")); Assert.AreEqual(10, rec.GetInt("intField")); Assert.AreEqual(10, rec.GetIntNull("IntField")); Assert.AreEqual(1.5, rec.GetDouble("RealField")); Assert.AreEqual(1.5, rec.GetDoubleNull("REALFIELD")); Assert.AreEqual("Большой текст 1", rec.GetString("StringField1")); Assert.AreEqual("Text", rec.GetString("StringField2")); Assert.AreEqual(new DateTime(2016, 7, 1), rec.GetTime("TimeField")); Assert.AreEqual(new DateTime(2016, 7, 1), rec.GetTimeNull("TimeField")); Assert.AreEqual(1, rec.GetInt(0)); Assert.AreEqual(1, rec.GetIntNull(0)); Assert.AreEqual(10, rec.GetInt(1)); Assert.AreEqual(10, rec.GetIntNull(1)); Assert.AreEqual(1.5, rec.GetDouble(2)); Assert.AreEqual(1.5, rec.GetDoubleNull(2)); Assert.AreEqual("Большой текст 1", rec.GetString(3)); Assert.AreEqual("Text", rec.GetString(4)); Assert.AreEqual(true, rec.GetBool(5)); Assert.AreEqual(new DateTime(2016, 7, 1), rec.GetTime(6)); Assert.AreEqual(new DateTime(2016, 7, 1), rec.GetTimeNull(6)); Assert.IsTrue(rec.Read()); Assert.IsTrue(rec.Read()); Assert.IsFalse(rec.GetBool("BoolField")); Assert.AreEqual(false, rec.GetBoolNull("BoolField")); Assert.AreEqual(2, rec.GetInt("Id")); Assert.AreEqual(2, rec.GetIntNull("Id")); Assert.AreEqual(20, rec.GetInt("IntField")); Assert.AreEqual(20, rec.GetIntNull("IntField")); Assert.AreEqual(0, rec.GetDouble("RealField")); Assert.AreEqual(null, rec.GetDoubleNull("RealField")); Assert.AreEqual("Большой текст 2", rec.GetString("StringField1")); Assert.AreEqual("null", rec.GetString("StringField2", "null")); Assert.AreEqual(new DateTime(2016, 7, 2, 2, 3, 4), rec.GetTime("TimeField")); Assert.AreEqual(new DateTime(2016, 7, 2, 2, 3, 4), rec.GetTimeNull("TimeField")); Assert.AreEqual(2, rec.GetInt(0)); Assert.AreEqual(2, rec.GetIntNull(0)); Assert.AreEqual(20, rec.GetInt(1)); Assert.AreEqual(20, rec.GetIntNull(1)); Assert.AreEqual(0, rec.GetDouble(2)); Assert.AreEqual(null, rec.GetDoubleNull(2)); Assert.AreEqual("Большой текст 2", rec.GetString(3)); Assert.AreEqual("null", rec.GetString(4, "null")); Assert.IsFalse(rec.GetBool(5)); Assert.AreEqual(false, rec.GetBoolNull(5)); Assert.AreEqual(new DateTime(2016, 7, 2, 2, 3, 4), rec.GetTime(6)); Assert.AreEqual(new DateTime(2016, 7, 2, 2, 3, 4), rec.GetTimeNull(6)); Assert.IsTrue(rec.Read()); Assert.IsTrue(rec.GetBool("BoolField")); Assert.AreEqual(true, rec.GetBoolNull("BoolField")); Assert.AreEqual(3, rec.GetInt("Id")); Assert.AreEqual(3, rec.GetIntNull("Id")); Assert.AreEqual(0, rec.GetInt("IntField")); Assert.AreEqual(null, rec.GetIntNull("IntField")); Assert.IsTrue(rec.IsNull("IntField")); Assert.AreEqual(3.5, rec.GetDouble("RealField", 300)); Assert.AreEqual(3.5, rec.GetDoubleNull("RealField")); Assert.IsFalse(rec.IsNull("RealField")); Assert.AreEqual("Большой текст 3", rec.GetString("StringField1")); Assert.AreEqual("Text3", rec.GetString("StringField2", "null")); Assert.AreEqual(Static.MinDate, rec.GetTime("TimeField")); Assert.AreEqual(null, rec.GetTimeNull("TimeField")); Assert.AreEqual(3, rec.GetInt(0)); Assert.AreEqual(3, rec.GetIntNull(0)); Assert.AreEqual(0, rec.GetInt(1)); Assert.AreEqual(null, rec.GetIntNull(1)); Assert.IsTrue(rec.IsNull(1)); Assert.AreEqual(3.5, rec.GetDouble(2, 300)); Assert.AreEqual(3.5, rec.GetDoubleNull(2)); Assert.IsFalse(rec.IsNull(2)); Assert.AreEqual("Большой текст 3", rec.GetString(3)); Assert.AreEqual("Text3", rec.GetString(4, "null")); Assert.IsTrue(rec.GetBool(5)); Assert.AreEqual(true, rec.GetBoolNull(5)); Assert.AreEqual(Static.MinDate, rec.GetTime(6)); Assert.AreEqual(null, rec.GetTimeNull(6)); Assert.IsTrue(rec.Read()); Assert.IsTrue(rec.Read()); Assert.IsTrue(rec.GetBool("BoolField")); Assert.AreEqual(true, rec.GetBoolNull("BoolField")); Assert.AreEqual(5, rec.GetInt("Id")); Assert.AreEqual(5, rec.GetIntNull("Id")); Assert.AreEqual(50, rec.GetInt("IntField", 400)); Assert.AreEqual(50, rec.GetIntNull("IntField")); Assert.AreEqual(5.5, rec.GetDouble("RealField")); Assert.AreEqual(5.5, rec.GetDoubleNull("RealField")); Assert.AreEqual("Большой текст 5", rec.GetString("StringField1")); Assert.AreEqual(null, rec.GetString("StringField2")); Assert.AreEqual(new DateTime(2016, 7, 5), rec.GetTime("TimeField")); Assert.AreEqual(new DateTime(2016, 7, 5), rec.GetTimeNull("TimeField")); Assert.IsFalse(rec.Read()); Exception exception = null; try { Assert.IsTrue(rec.GetBool("BoolField")); } catch (Exception ex) { exception = ex; } Assert.IsNotNull(exception); Assert.IsNotNull(rec.Recordset); rec.Recordset.MoveFirst(); Assert.AreEqual(1, (int)rec.Recordset.Fields["Id"].Value); } using (var rec = new DaoRec(File("Read"), "SELECT Tabl.Id, Tabl.IntField AS IntF, Tabl.RealField, SubTabl.StringSubField AS StringF " + "FROM Tabl LEFT JOIN SubTabl ON Tabl.Id = SubTabl.ParentId ORDER BY Tabl.Id, SubTabl.StringSubField;")) { Assert.IsTrue(rec.Read()); Assert.AreEqual(1, rec.GetInt("Id")); Assert.AreEqual(10, rec.GetInt("IntF")); Assert.AreEqual(2, rec.GetInt("RealField")); Assert.AreEqual(1.5, rec.GetDouble("RealField")); Assert.AreEqual("1", rec.GetString("StringF")); Assert.AreEqual(1, rec.GetInt(0)); Assert.AreEqual(10, rec.GetInt(1)); Assert.AreEqual(1.5, rec.GetDouble(2)); Assert.AreEqual("1", rec.GetString(3)); Assert.AreEqual(1, rec.GetIntNull(0)); Assert.AreEqual(10, rec.GetIntNull(1)); Assert.AreEqual(1.5, rec.GetDoubleNull(2)); Assert.IsTrue(rec.Read()); Assert.AreEqual(2, rec.GetInt("Id")); Assert.AreEqual(20, rec.GetInt("IntF")); Assert.AreEqual(0, rec.GetInt("RealField")); Assert.AreEqual(0, rec.GetDouble("RealField")); Assert.AreEqual("22", rec.GetString("StringF")); Assert.IsTrue(rec.Read()); Assert.AreEqual(2, rec.GetInt("Id")); Assert.AreEqual("2", rec.GetString("Id")); Assert.AreEqual(20, rec.GetInt("IntF")); Assert.AreEqual(0, rec.GetInt("RealField")); Assert.AreEqual(null, rec.GetIntNull("RealField")); Assert.AreEqual(0, rec.GetDouble("RealField")); Assert.AreEqual(null, rec.GetDoubleNull("RealField")); Assert.AreEqual("222", rec.GetString("StringF")); Assert.IsTrue(rec.Read()); Assert.AreEqual(3, rec.GetInt("Id")); Assert.AreEqual(0, rec.GetInt("IntF")); Assert.AreEqual(4, rec.GetInt("RealField")); Assert.AreEqual(3.5, rec.GetDouble("RealField")); Assert.AreEqual("333", rec.GetString("StringF")); Assert.IsFalse(rec.EOF); Assert.IsTrue(rec.FindFirst("StringF LIKE '5555*'")); Assert.IsFalse(rec.NoMatch); Assert.AreEqual(50, rec.GetInt("IntF")); Assert.AreEqual("55555", rec.GetString("StringF")); Assert.IsTrue(rec.FindNext("StringF LIKE '5555*'")); Assert.IsFalse(rec.NoMatch); Assert.AreEqual(50, rec.GetInt("IntF")); Assert.AreEqual("555555", rec.GetString("StringF")); Assert.IsFalse(rec.FindNext("StringF LIKE '5555*'")); Assert.IsTrue(rec.NoMatch); Assert.IsTrue(rec.FindFirst("Id", 4)); Assert.IsFalse(rec.NoMatch); Assert.AreEqual(40, rec.GetInt("IntF")); Assert.AreEqual(null, rec.GetString("StringF")); Assert.IsTrue(rec.MovePrevious()); Assert.AreEqual(3.5, rec.GetDouble("RealField")); Assert.AreEqual("3333", rec.GetString("StringF")); Assert.IsTrue(rec.FindFirst("StringF", "22")); Assert.IsFalse(rec.NoMatch); Assert.AreEqual(20, rec.GetInt("IntF")); Assert.IsFalse(rec.FindFirst("StringF", "2222")); Assert.IsTrue(rec.NoMatch); Assert.IsTrue(rec.FindLast("StringF", "3333")); Assert.IsFalse(rec.NoMatch); Assert.AreEqual(3333, rec.GetInt("StringF")); Assert.IsTrue(rec.FindPrevious("Id", 1)); Assert.AreEqual(10, rec.GetInt("IntF")); Assert.IsTrue(rec.FindLast("Id", 5)); Assert.AreEqual(50, rec.GetInt("IntF")); Assert.IsTrue(rec.FindPrevious("StringF", "222")); Assert.AreEqual(20, rec.GetInt("IntF")); Assert.IsTrue(rec.FindNext("StringF", "55555")); Assert.AreEqual(50, rec.GetInt("IntF")); Assert.IsTrue(rec.FindNext("Id", 5)); Assert.AreEqual(50, rec.GetInt("IntF")); Assert.IsFalse(rec.FindNext("StringF", "xxx")); Assert.IsFalse(rec.FindNext("IntF", 234)); } }