Пример #1
0
        protected BaseFunctions()
        {
            var factory = new MomErrFactory(ErrSourceCode, MomErrType.Calc);

            factory.AddGoodDescr(0);
            ErrPool = new MomErrPool(factory);

            using (var rec = new AdoReader(ItStatic.InfoTaskDir() + @"General\General.accdb",
                                           "SELECT FunctionsOverloads.*, Functions.Name, Functions.Synonym, Functions.Code, Functions.CalcType FROM Functions INNER JOIN FunctionsOverloads ON Functions.Id = FunctionsOverloads.FunctionId " +
                                           "WHERE " + FunsWhereCondition + " ORDER BY FunctionsOverloads.FunctionId, FunctionsOverloads.RunNumber"))
                while (rec.Read())
                {
                    string name    = rec.GetString("Name");
                    string synonym = rec.GetString("Synonym");
                    if (!synonym.IsEmpty())
                    {
                        name += " (" + synonym + ")";
                    }
                    string code = (rec.GetString("Code") ?? (synonym ?? name)) + "_";
                    for (int i = 1; i <= 9 && rec.GetString("Operand" + i) != null; i++)
                    {
                        code += rec.GetString("Operand" + i).ToDataType().ToLetter();
                    }
                    for (int i = 1; i <= 2 && rec.GetString("More" + i) != null; i++)
                    {
                        code += rec.GetString("More" + i).ToDataType().ToLetter();
                    }
                    var errNum = rec.GetInt("IdOverload") * 10;
                    var ftype  = rec.GetString("CalcType");
                    Funs.Add(code, CreateFun(code, ftype, errNum));
                    factory.AddDescr(errNum, "Недопустимые параметры функции " + name);
                }
        }
Пример #2
0
        public void TestAddUser()
        {
            Location  newloc    = new Location();
            AdoReader newreader = new AdoReader();

            Assert.IsFalse(newreader.AddUser("Jacob", "dickbutt") == true);
        }
Пример #3
0
 //Получение времени архива ПТК
 protected override TimeInterval GetTimeProvider()
 {
     using (var rec = new AdoReader(Connection, "Exec RT_ARCHDATE"))
     {
         var beg = rec.GetTime(0);
         var en  = rec.GetTime(1);
         return(beg.ToString() != "0:00:00"
             ? new TimeInterval(beg, en)
             : TimeInterval.CreateDefault());
     }
 }
Пример #4
0
        public void RecAccess()
        {
            var db   = CopyDb("");
            var file = File("");
            var rec  = new AdoReader(db, "SELECT * FROM Tabl");

            Assert.IsNotNull(rec.DaoDb);
            Assert.IsNotNull(rec.Reader);
            Assert.AreEqual(DatabaseType.Access, rec.DatabaseType);
            Assert.AreEqual(file, rec.DaoDb.File);
            Assert.IsTrue(rec.HasRows);
            Assert.AreEqual(5, rec.RecordCount("SELECT Count(*) FROM Tabl"));
            Assert.IsFalse(rec.EOF);
            Assert.IsTrue(rec.Read());
            Assert.IsFalse(rec.EOF);
            Assert.IsTrue(rec.Read());
            Assert.IsFalse(rec.EOF);
            Assert.IsTrue(rec.Read());
            Assert.IsTrue(rec.Read());
            Assert.IsTrue(rec.Read());
            Assert.IsFalse(rec.Read());
            Assert.IsTrue(rec.EOF);
            rec.Dispose();

            rec = new AdoReader(db, "SELECT * FROM EmptyTabl");
            Assert.AreEqual(DatabaseType.Access, rec.DatabaseType);
            Assert.AreEqual(file, rec.DaoDb.File);
            Assert.IsFalse(rec.HasRows);
            Assert.AreEqual(0, rec.RecordCount("SELECT Count(*) FROM EmptyTabl"));
            Assert.IsTrue(rec.EOF);
            Assert.IsFalse(rec.Read());
            Assert.IsTrue(rec.EOF);
            rec.Dispose();

            rec = new AdoReader(db, "SELECT Tabl.IntField, Tabl.RealField, SubTabl.StringSubField FROM Tabl INNER JOIN SubTabl ON Tabl.Id = SubTabl.ParentId");
            Assert.IsNotNull(rec.DaoDb);
            Assert.IsNotNull(rec.Reader);
            Assert.AreEqual(file, rec.DaoDb.File);
            Assert.AreEqual(DatabaseType.Access, rec.DatabaseType);
            Assert.IsTrue(rec.HasRows);
            Assert.IsFalse(rec.EOF);
            Assert.IsTrue(rec.Read());
            Assert.IsFalse(rec.EOF);
            Assert.IsTrue(rec.Read());
            Assert.IsFalse(rec.EOF);
            Assert.IsTrue(rec.Read());
            Assert.IsTrue(rec.Read());
            Assert.IsTrue(rec.Read());
            Assert.IsTrue(rec.Read());
            Assert.IsTrue(rec.Read());
            Assert.IsFalse(rec.Read());
            Assert.IsTrue(rec.EOF);
            rec.Dispose();
        }
Пример #5
0
        public FunsChecker(FunsCheckType listType)
        {
            try
            {
                bool isGenerate = listType == FunsCheckType.Gen;
                using (var db = new DaoDb(ItStatic.InfoTaskDir() + @"General\General.accdb"))
                {
                    var funsId = new DicI <FunCompile>();
                    var where = " WHERE (Functions.IsCompile = True)" + (isGenerate ? "AND (Functions.IsGen = True) " : " ");
                    using (var rec = new AdoReader(db, "SELECT * FROM Functions" + where))
                        while (rec.Read())
                        {
                            var f = new FunCompile(rec);
                            funsId.Add(f.Id, f);
                            _funs.Add(f.Name, f);
                            if (!f.Synonym.IsEmpty())
                            {
                                _funs.Add(f.Synonym, f);
                            }
                        }

                    using (var rec = new AdoReader(db, "SELECT FunctionsOverloads.* FROM Functions INNER JOIN FunctionsOverloads ON Functions.Id = FunctionsOverloads.FunctionId "
                                                   + where + "ORDER BY FunctionsOverloads.FunctionId, FunctionsOverloads.RunNumber"))
                    {
                        rec.Read();
                        while (!rec.EOF)
                        {
                            var id  = rec.GetInt("FunctionId");
                            var fun = funsId[id];
                            while (rec.GetInt("FunctionId") == id)
                            {
                                fun.Overloads.Add(new FunOverload(fun, rec));
                                if (!rec.Read())
                                {
                                    break;
                                }
                            }
                        }
                    }

                    using (var rec = new AdoReader(db, "SELECT * FROM ParamProps"))
                        while (rec.Read())
                        {
                            var dt = rec.GetString("DataType").ToDataType();
                            ParamProps.Add(rec.GetString("EnglishCode"), dt);
                            ParamProps.Add(rec.GetString("RussianCode"), dt);
                        }
                }
            }
            catch (Exception ex)
            {
                ex.MessageError("Системная ошибка компилятора. Ошибка загрузки функций");
            }
        }
Пример #6
0
        public void TestDatabaseGetInventory()
        {
            Location     newloc       = new Location();
            AdoReader    newreader    = new AdoReader();
            List <Pizza> newpizzalist = new List <Pizza>();

            newpizzalist = newreader.GetInventory();

            foreach (var item in newpizzalist)
            {
                newloc.AddInventory(item.GetName(), item.Getnumberof());
            }

            Assert.IsTrue(newloc.GetInventory().Count > 0);
        }
Пример #7
0
        public void DaoDbStatic()
        {
            var    db        = CopyDb("Static");
            string file      = File("Static");
            string fileWrong = File("Static2");
            string fileCopy  = File("Copy");
            string fileTmp   = TestLib.TestRunDir + @"Libraries\TmpDaoStatic.accdb";

            db.Dispose();
            Assert.IsNull(db.Database);
            Assert.IsNull(db.Connection);
            Assert.IsTrue(DaoDb.Check(file, "DaoTest"));
            Assert.IsTrue(DaoDb.Check(file, "DaoTest", new[] { "Tabl", "SubTabl", "EmptyTabl", "SysTabl", "SysSubTabl" }));
            Assert.IsTrue(DaoDb.Check(file, new[] { "Tabl", "SubTabl", "EmptyTabl" }));
            Assert.IsFalse(DaoDb.Check(fileWrong, "Fignia"));
            Assert.IsFalse(DaoDb.Check(null, "Fignia"));
            Assert.IsFalse(DaoDb.Check(fileWrong, "Fignia"));
            Assert.IsFalse(DaoDb.Check(fileWrong, new[] { "Tabl" }));
            Assert.IsFalse(DaoDb.Check(file, new[] { "Tabl", "SubTabl", "EmptyTabl1" }));

            DaoDb.Compress(file, 10000000);
            DaoDb.Compress(file, 10000);
            Assert.IsTrue(new FileInfo(fileTmp).Exists);

            Assert.IsTrue(DaoDb.FromTemplate(file, fileCopy, ReplaceByTemplate.Always));
            Assert.IsFalse(DaoDb.FromTemplate(file, fileCopy, ReplaceByTemplate.IfNotExists));
            Assert.IsFalse(DaoDb.FromTemplate(file, fileCopy, ReplaceByTemplate.IfNewVersion));
            new FileInfo(fileCopy).Delete();
            Assert.IsTrue(DaoDb.FromTemplate(file, fileCopy, ReplaceByTemplate.IfNotExists));
            new FileInfo(fileCopy).Delete();
            Assert.IsTrue(DaoDb.FromTemplate(file, fileCopy, ReplaceByTemplate.IfNewVersion));
            Assert.IsTrue(new FileInfo(fileCopy).Exists);

            DaoDb.Execute(file, "DELETE * FROM Tabl");
            DaoDb.ExecuteAdo(file, "DELETE * FROM SysTabl");
            using (var rec = new AdoReader(file, "SELECT * FROM Tabl"))
                Assert.IsFalse(rec.HasRows);
            using (var rec = new AdoReader(file, "SELECT * FROM SubTabl"))
                Assert.IsFalse(rec.HasRows);
            using (var rec = new DaoRec(file, "SysTabl"))
                Assert.IsFalse(rec.HasRows);
            using (var rec = new DaoRec(file, "SysSubTabl"))
                Assert.IsFalse(rec.HasRows);
        }
Пример #8
0
 //Подготовка провайдера, чтение значений IDCHANNEL
 protected override void PrepareProvider()
 {
     OutsId.Clear();
     using (var rec = new AdoReader(SqlProps, "SELECT OBJECTS.NAME_OBJECT, DEVICES.NAME_DEVICE, LIB_CHANNELS.NAME_TYPE, LIB_CHANNELS.UNIT, CHANNELS.IDCHANNEL, LIB_CHANNELS.TABLE_NAME " +
                                    "FROM CHANNELS INNER JOIN DEVICES ON CHANNELS.IDDEVICE = DEVICES.IDDEVICE INNER JOIN " +
                                    "LIB_CHANNELS ON dbo.CHANNELS.IDTYPE_CHANNEL = dbo.LIB_CHANNELS.IDTYPE_CHANNEL INNER JOIN " +
                                    "POINT_DEVICES ON dbo.DEVICES.IDDEVICE = dbo.POINT_DEVICES.IDDEVICE INNER JOIN " +
                                    "POINT_CONNECTIONS ON dbo.POINT_DEVICES.IDPOINT_CONNECTION = dbo.POINT_CONNECTIONS.IDPOINT_CONNECTION INNER JOIN " +
                                    "POINT_OBJ ON dbo.POINT_CONNECTIONS.IDPOINT_CONNECTION = dbo.POINT_OBJ.IDPOINT_CONNECTION INNER JOIN " +
                                    "OBJECTS ON dbo.POINT_OBJ.IDOBJECT = dbo.OBJECTS.IDOBJECT"))
         while (rec.Read())
         {
             string ocode = rec.GetString("NAME_OBJECT") + "." + rec.GetString("NAME_DEVICE") + "." + rec.GetString("NAME_TYPE");
             var    id    = rec.GetInt("IDCHANNEL");
             if (Outs.ContainsKey(ocode))
             {
                 var ob = Outs[ocode];
                 ob.IdChannel = id;
                 OutsId.Add(id, ob);
             }
         }
 }
Пример #9
0
        //Запрос значений из Historian по списку выходов и интервалу
        protected override IRecordRead QueryValues(IList <ListSourceOut> part, DateTime beg, DateTime en, bool isCut)
        {
            var  sb      = new StringBuilder("select ID, TIMESTAMP, TIME_NSEC, F_VALUE, RAW_VALUE, STS from PT_HF_HIST " + "where (");
            bool isFirst = true;

            foreach (OvationOut ob in part)
            {
                if (!isFirst)
                {
                    sb.Append(" or ");
                }
                sb.Append("(ID=").Append(ob.Id).Append(")");
                isFirst = false;
            }
            sb.Append(") and").Append(TimeCondition(beg, en));
            var rec = new AdoReader(Connection, sb.ToString());

            if (en.Subtract(beg).TotalMinutes > 59 && !rec.HasRows)
            {
                AddWarning("Значения из источника не получены", null, beg + " - " + en + "; " + part.First().Context + " и др.");
            }
            return(rec);
        }
Пример #10
0
        //Получение диапазона архива по блокам истории
        protected override TimeInterval GetTimeProvider()
        {
            DateTime mind = Static.MaxDate, maxd = Static.MinDate;

            using (var rec = new AdoReader(SqlProps, "SELECT FromDate, ToDate FROM v_HistoryBlock ORDER BY FromDate, ToDate DESC"))
                while (rec.Read())
                {
                    var fromd = rec.GetTime("FromDate");
                    var tod   = rec.GetTime("ToDate");
                    if (fromd < mind)
                    {
                        mind = fromd;
                    }
                    if (maxd < tod)
                    {
                        maxd = tod;
                    }
                }
            if (mind == Static.MaxDate && maxd == Static.MinDate)
            {
                return(TimeInterval.CreateDefault());
            }
            return(new TimeInterval(mind, maxd));
        }
Пример #11
0
        public void DaoDbTest()
        {
            try { new DaoDb("hhh").ConnectDao(); }
            catch (Exception ex) { Assert.AreEqual("Файл базы данных не найден", ex.Message); }
            try { new DaoDb("hhh").ConnectAdo(); }
            catch (Exception ex) { Assert.AreEqual("Файл базы данных не найден", ex.Message); }

            var    db   = CopyDb("Common");
            string file = File("Common");

            db.ConnectDao();
            Assert.AreEqual(file, db.File);
            Assert.IsNull(db.Connection);
            Assert.IsNotNull(db.Database);
            Assert.AreEqual(file, db.Database.Name);
            db.ConnectAdo();
            Assert.IsNotNull(db.Connection);
            Assert.IsNotNull(db.Database);
            Assert.AreEqual(ConnectionState.Open, db.Connection.State);

            db.Execute("DELETE * FROM Tabl");
            Thread.Sleep(800);
            db.ExecuteAdo("DELETE * FROM SysTabl");
            using (var rec = new AdoReader(db, "SELECT * FROM Tabl"))
                Assert.IsFalse(rec.HasRows);
            using (var rec = new AdoReader(db, "SELECT * FROM SubTabl"))
                Assert.IsFalse(rec.HasRows);
            using (var rec = new DaoRec(db, "SysTabl"))
                Assert.IsFalse(rec.HasRows);
            using (var rec = new DaoRec(db, "SysSubTabl"))
                Assert.IsFalse(rec.HasRows);

            Assert.IsTrue(db.TableExists("SubTabl"));
            Assert.IsFalse(db.TableExists("SubTabl2"));
            Assert.IsTrue(db.ColumnExists("Tabl", "IntField"));
            Assert.IsFalse(db.ColumnExists("SubTabl", "RealField"));
            Assert.IsTrue(db.ColumnExists("SubTabl", "StringSubField"));

            db.SetColumnBool("SubTabl", "BoolField");
            Assert.IsTrue(db.ColumnExists("SubTabl", "BoolField"));
            db.SetColumnBool("SubTabl", "BoolField");
            Assert.IsTrue(db.ColumnExists("SubTabl", "BoolField"));

            db.SetColumnLong("SubTabl", "IntSubField");
            Assert.IsTrue(db.ColumnExists("SubTabl", "IntSubField"));
            db.SetColumnLong("SubTabl", "IntSubField");
            Assert.IsTrue(db.ColumnExists("SubTabl", "IntSubField"));

            db.SetColumnDouble("SubTabl", "RealField", IndexModes.WithoutChange, 0);
            Assert.IsTrue(db.ColumnExists("SubTabl", "RealField"));
            db.SetColumnDouble("SubTabl", "RealField", IndexModes.WithoutChange, 0);
            Assert.IsTrue(db.ColumnExists("SubTabl", "RealField"));

            db.SetColumnString("SubTabl", "StringSubField", 30, IndexModes.EmptyIndex, "aaa", false, false);
            Assert.IsTrue(db.ColumnExists("SubTabl", "StringSubField"));
            db.SetColumnString("SubTabl", "StringSubField", 50, IndexModes.EmptyIndex, "aaa", false, false);
            Assert.IsTrue(db.ColumnExists("SubTabl", "StringSubField"));

            db.SetColumnMemo("SubTabl", "MemoField", "bbb");
            Assert.IsTrue(db.ColumnExists("SubTabl", "MemoField"));
            db.SetColumnMemo("SubTabl", "MemoField", "bbb");
            Assert.IsTrue(db.ColumnExists("SubTabl", "MemoField"));

            db.SetColumnDateTime("SubTabl", "TimeField");
            Assert.IsTrue(db.ColumnExists("SubTabl", "TimeField"));
            db.SetColumnDateTime("SubTabl", "TimeField");
            Assert.IsTrue(db.ColumnExists("SubTabl", "TimeField"));

            db.DeleteColumn("SubTabl", "TimeField");
            db.DeleteColumn("SubTabl", "IntSubField");
            db.Dispose();
            Assert.IsFalse(db.ColumnExists("SubTabl", "TimeField"));
            Assert.IsFalse(db.ColumnExists("SubTabl", "IntSubField"));

            db.RenameTable("EmptyTabl", "SmallTabl");
            Assert.IsTrue(db.TableExists("SmallTabl"));
            db.AddTable("BigTabl", "SmallTabl");
            db.Dispose();
            Assert.IsTrue(db.TableExists("BigTabl"));
            db.DeleteTable("SmallTabl");
            db.DeleteTable("BigTabl");
            Assert.IsFalse(db.TableExists("BigTabl"));
            Assert.IsFalse(db.TableExists("SmallTabl"));

            db.SetColumnIndex("Tabl", "StringField1", IndexModes.UniqueIndex);
            db.SetColumnIndex("Tabl", "StringField2", IndexModes.CommonIndex);
            db.SetColumnIndex("Tabl", "IntField", "RealField", false, IndexModes.UniqueIndex);

            db.Dispose();
        }
Пример #12
0
        protected override void Load(ContainerBuilder builder)
        {
            if (_process == null)
            {
                return;
            }

            // connections
            foreach (var connection in _process.Connections.Where(c => c.Provider.In(_ado)))
            {
                // Connection Factory
                builder.Register <IConnectionFactory>(ctx => {
                    switch (connection.Provider)
                    {
                    case "sqlserver":
                        return(new SqlServerConnectionFactory(connection));

                    case "mysql":
                        return(new MySqlConnectionFactory(connection));

                    case "postgresql":
                        return(new PostgreSqlConnectionFactory(connection));

                    case "sqlite":
                        return(new SqLiteConnectionFactory(connection));

                    default:
                        return(new NullConnectionFactory());
                    }
                }).Named <IConnectionFactory>(connection.Key).InstancePerLifetimeScope();

                // Schema Reader
                builder.Register <ISchemaReader>(ctx => {
                    var factory = ctx.ResolveNamed <IConnectionFactory>(connection.Key);
                    return(new AdoSchemaReader(ctx.ResolveNamed <IConnectionContext>(connection.Key), factory));
                }).Named <ISchemaReader>(connection.Key);
            }

            //ISchemaReader
            //IOutputController
            //IRead (Process for Calculated Columns)
            //IWrite (Process for Calculated Columns)
            //IInitializer (Process)

            // Per Entity
            // IInputVersionDetector
            // IRead (Input, per Entity)
            // IOutputController
            // -- ITakeAndReturnRows (for matching)
            // -- IWriteMasterUpdateQuery (for updating)
            // IUpdate
            // IWrite
            // IEntityDeleteHandler

            // entitiy input
            foreach (var entity in _process.Entities.Where(e => _process.Connections.First(c => c.Name == e.Connection).Provider.In(_ado)))
            {
                // INPUT READER
                builder.Register <IRead>(ctx => {
                    var input      = ctx.ResolveNamed <InputContext>(entity.Key);
                    var rowFactory = ctx.ResolveNamed <IRowFactory>(entity.Key, new NamedParameter("capacity", input.RowCapacity));

                    switch (input.Connection.Provider)
                    {
                    case "mysql":
                    case "postgresql":
                    case "sqlite":
                    case "sqlserver":
                        return(new AdoInputReader(
                                   input,
                                   input.InputFields,
                                   ctx.ResolveNamed <IConnectionFactory>(input.Connection.Key),
                                   rowFactory
                                   ));

                    default:
                        return(new NullReader(input, false));
                    }
                }).Named <IRead>(entity.Key);

                // INPUT VERSION DETECTOR
                builder.Register <IInputVersionDetector>(ctx => {
                    var input = ctx.ResolveNamed <InputContext>(entity.Key);
                    switch (input.Connection.Provider)
                    {
                    case "mysql":
                    case "postgresql":
                    case "sqlite":
                    case "sqlserver":
                        return(new AdoInputVersionDetector(input, ctx.ResolveNamed <IConnectionFactory>(input.Connection.Key)));

                    default:
                        return(new NullVersionDetector());
                    }
                }).Named <IInputVersionDetector>(entity.Key);
            }

            // entity output
            if (_process.Output().Provider.In(_ado))
            {
                var calc = _process.ToCalculatedFieldsProcess();

                // PROCESS OUTPUT CONTROLLER
                builder.Register <IOutputController>(ctx => {
                    var output = ctx.Resolve <OutputContext>();
                    if (_process.Mode != "init")
                    {
                        return(new NullOutputController());
                    }

                    switch (output.Connection.Provider)
                    {
                    case "mysql":
                    case "postgresql":
                    case "sqlite":
                    case "sqlserver":
                        return(new AdoStarController(output, new AdoStarViewCreator(output, ctx.ResolveNamed <IConnectionFactory>(output.Connection.Key))));

                    default:
                        return(new NullOutputController());
                    }
                }).As <IOutputController>();

                // PROCESS CALCULATED READER
                builder.Register <IRead>(ctx => {
                    var calcContext   = new PipelineContext(ctx.Resolve <IPipelineLogger>(), calc, calc.Entities.First());
                    var outputContext = new OutputContext(calcContext, new Incrementer(calcContext));
                    var cf            = ctx.ResolveNamed <IConnectionFactory>(outputContext.Connection.Key);
                    var capacity      = outputContext.Entity.Fields.Count + outputContext.Entity.CalculatedFields.Count;
                    var rowFactory    = new RowFactory(capacity, false, false);
                    return(new AdoStarParametersReader(outputContext, _process, cf, rowFactory));
                }).As <IRead>();

                // PROCESS CALCULATED FIELD WRITER
                builder.Register <IWrite>(ctx => {
                    var calcContext   = new PipelineContext(ctx.Resolve <IPipelineLogger>(), calc, calc.Entities.First());
                    var outputContext = new OutputContext(calcContext, new Incrementer(calcContext));
                    var cf            = ctx.ResolveNamed <IConnectionFactory>(outputContext.Connection.Key);
                    return(new AdoCalculatedFieldUpdater(outputContext, _process, cf));
                }).As <IWrite>();

                // PROCESS INITIALIZER
                builder.Register <IInitializer>(ctx => {
                    var output = ctx.Resolve <OutputContext>();
                    return(new AdoInitializer(output, ctx.ResolveNamed <IConnectionFactory>(output.Connection.Key)));
                }).As <IInitializer>();

                // ENTITIES
                foreach (var entity in _process.Entities)
                {
                    // ENTITY OUTPUT CONTROLLER
                    builder.Register <IOutputController>(ctx => {
                        var output = ctx.ResolveNamed <OutputContext>(entity.Key);

                        switch (output.Connection.Provider)
                        {
                        case "mysql":
                        case "postgresql":
                        case "sqlite":
                        case "sqlserver":
                            var initializer = _process.Mode == "init" ? (IAction) new AdoEntityInitializer(output, ctx.ResolveNamed <IConnectionFactory>(output.Connection.Key)) : new NullInitializer();
                            return(new AdoOutputController(
                                       output,
                                       initializer,
                                       ctx.ResolveNamed <IInputVersionDetector>(entity.Key),
                                       new AdoOutputVersionDetector(output, ctx.ResolveNamed <IConnectionFactory>(output.Connection.Key)),
                                       ctx.ResolveNamed <IConnectionFactory>(output.Connection.Key)
                                       ));

                        default:
                            return(new NullOutputController());
                        }
                    }).Named <IOutputController>(entity.Key);

                    // OUTPUT ROW MATCHER
                    builder.Register(ctx => {
                        var output     = ctx.ResolveNamed <OutputContext>(entity.Key);
                        var rowFactory = ctx.ResolveNamed <IRowFactory>(entity.Key, new NamedParameter("capacity", output.GetAllEntityFields().Count()));
                        var cf         = ctx.ResolveNamed <IConnectionFactory>(output.Connection.Key);
                        switch (output.Connection.Provider)
                        {
                        case "sqlite":
                            return(new TypedEntityMatchingKeysReader(new AdoEntityMatchingKeysReader(output, cf, rowFactory), output));

                        default:
                            return((ITakeAndReturnRows) new AdoEntityMatchingKeysReader(output, cf, rowFactory));
                        }
                    }).Named <ITakeAndReturnRows>(entity.Key);

                    // MASTER UPDATE QUERY
                    builder.Register <IWriteMasterUpdateQuery>(ctx => {
                        var output  = ctx.ResolveNamed <OutputContext>(entity.Key);
                        var factory = ctx.ResolveNamed <IConnectionFactory>(output.Connection.Key);
                        switch (output.Connection.Provider)
                        {
                        case "mysql":
                            return(new MySqlUpdateMasterKeysQueryWriter(output, factory));

                        case "postgresql":
                            return(new PostgreSqlUpdateMasterKeysQueryWriter(output, factory));

                        default:
                            return(new SqlServerUpdateMasterKeysQueryWriter(output, factory));
                        }
                    }).Named <IWriteMasterUpdateQuery>(entity.Key + "MasterKeys");

                    // UPDATER
                    builder.Register <IUpdate>(ctx => {
                        var output = ctx.ResolveNamed <OutputContext>(entity.Key);
                        switch (output.Connection.Provider)
                        {
                        case "mysql":
                        case "postgresql":
                        case "sqlserver":
                            return(new AdoMasterUpdater(
                                       output,
                                       ctx.ResolveNamed <IConnectionFactory>(output.Connection.Key),
                                       ctx.ResolveNamed <IWriteMasterUpdateQuery>(entity.Key + "MasterKeys")
                                       ));

                        case "sqlite":
                            return(new AdoTwoPartMasterUpdater(output, ctx.ResolveNamed <IConnectionFactory>(output.Connection.Key)));

                        default:
                            return(new NullMasterUpdater());
                        }
                    }).Named <IUpdate>(entity.Key);

                    // WRITER
                    builder.Register <IWrite>(ctx => {
                        var output = ctx.ResolveNamed <OutputContext>(entity.Key);

                        switch (output.Connection.Provider)
                        {
                        case "sqlserver":
                            return(new SqlServerWriter(
                                       output,
                                       ctx.ResolveNamed <IConnectionFactory>(output.Connection.Key),
                                       ctx.ResolveNamed <ITakeAndReturnRows>(entity.Key),
                                       new AdoEntityUpdater(output, ctx.ResolveNamed <IConnectionFactory>(output.Connection.Key))
                                       ));

                        case "mysql":
                        case "postgresql":
                        case "sqlite":
                            var cf = ctx.ResolveNamed <IConnectionFactory>(output.Connection.Key);
                            return(new AdoEntityWriter(
                                       output,
                                       ctx.ResolveNamed <ITakeAndReturnRows>(entity.Key),
                                       new AdoEntityInserter(output, cf),
                                       new AdoEntityUpdater(output, cf)
                                       ));

                        default:
                            return(new NullWriter(output));
                        }
                    }).Named <IWrite>(entity.Key);


                    // DELETE HANDLER
                    if (entity.Delete)
                    {
                        builder.Register <IEntityDeleteHandler>(ctx => {
                            var context      = ctx.ResolveNamed <IContext>(entity.Key);
                            var inputContext = ctx.ResolveNamed <InputContext>(entity.Key);
                            var rowCapacity  = inputContext.Entity.GetPrimaryKey().Count();
                            var rowFactory   = new RowFactory(rowCapacity, false, true);
                            IRead input      = new NullReader(context);
                            var primaryKey   = entity.GetPrimaryKey();

                            switch (inputContext.Connection.Provider)
                            {
                            case "mysql":
                            case "postgresql":
                            case "sqlite":
                            case "sqlserver":
                                input = new AdoReader(
                                    inputContext,
                                    primaryKey,
                                    ctx.ResolveNamed <IConnectionFactory>(inputContext.Connection.Key),
                                    rowFactory,
                                    ReadFrom.Input
                                    );
                                break;
                            }

                            IRead output         = new NullReader(context);
                            IDelete deleter      = new NullDeleter(context);
                            var outputConnection = _process.Output();
                            var outputContext    = ctx.ResolveNamed <OutputContext>(entity.Key);

                            switch (outputConnection.Provider)
                            {
                            case "mysql":
                            case "postgresql":
                            case "sqlite":
                            case "sqlserver":
                                var ocf = ctx.ResolveNamed <IConnectionFactory>(outputConnection.Key);
                                output  = new AdoReader(context, entity.GetPrimaryKey(), ocf, rowFactory, ReadFrom.Output);
                                deleter = new AdoDeleter(outputContext, ocf);
                                break;
                            }

                            var handler = new DefaultDeleteHandler(context, input, output, deleter);

                            // since the primary keys from the input may have been transformed into the output, you have to transform before comparing
                            // feels a lot like entity pipeline on just the primary keys... may look at consolidating
                            handler.Register(new DefaultTransform(context, entity.GetPrimaryKey().ToArray()));
                            handler.Register(TransformFactory.GetTransforms(ctx, _process, entity, primaryKey));
                            handler.Register(new StringTruncateTransfom(context, primaryKey));

                            return(new ParallelDeleteHandler(handler));
                        }).Named <IEntityDeleteHandler>(entity.Key);
                    }
                }
            }
        }
Пример #13
0
        public void RecAccessRead()
        {
            using (var rec = new AdoReader(CopyDb("Read"), "SELECT * FROM Tabl"))
            {
                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.IsNotNull(rec.Reader);
                Assert.AreEqual(5, (int)rec.Reader["Id"]);
                Assert.AreEqual(5.5, (double)rec.Reader["RealField"]);
                Assert.AreEqual("Большой текст 5", (string)rec.Reader["StringField1"]);

                Assert.IsFalse(rec.Read());
                Exception exception = null;
                try { Assert.IsTrue(rec.GetBool("BoolField")); }
                catch (Exception ex) { exception = ex; }
                Assert.IsNotNull(exception);
            }

            using (var rec = new AdoReader(new DaoDb(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.Read());
                Assert.IsTrue(rec.Read());
                Assert.AreEqual(40, rec.GetInt("IntF"));
                Assert.AreEqual(null, rec.GetString("StringF"));
            }
        }
Пример #14
0
        public void TestVerify()
        {
            AdoReader newreader = new AdoReader();

            Assert.IsTrue(newreader.VerifyUserAccount("Jacob", "dickbutt"));
        }
Пример #15
0
        public void TestAddSale()
        {
            AdoReader newreader = new AdoReader();

            Assert.IsTrue(newreader.AddSale(newreader.GetLocationID("Pizza Jacob, Fake Road"), newreader.GetInventoryID("PepperoniSmallPan"), 10, 100.00f, newreader.GetCustomerID("Jacob")));
        }