Esempio n. 1
0
            public override Expression ApplyPolicy(Expression expression, MemberInfo member)
            {
                if (this.policy.operations.TryGetValue(member, out List <LambdaExpression> ops))
                {
                    var result = expression;

                    foreach (var fnOp in ops)
                    {
                        var pop = ExpressionEvaluator.Eval(fnOp, this.Translator.Mapper.Mapping.CanBeEvaluatedLocally);

                        result = this.Translator.Mapper.ApplyMapping(Expression.Invoke(pop, result));
                    }

                    var projection = result as DbProjectionExpression;

                    if (projection.Type != expression.Type)
                    {
                        var fnAgg = DbAggregator.GetAggregator(expression.Type, projection.Type);

                        projection = new DbProjectionExpression(projection.Select, projection.Projector, fnAgg);
                    }

                    return(projection);
                }

                return(expression);
            }
Esempio n. 2
0
        public void DbAggregator_AllNonNullPrimariesAreWritten()
        {
            var aggregates = new[]
            {
                new SinglePrimaryAggregate()
                {
                    Primary = new MyPrimary()
                    {
                        Id = 1, Name = "one"
                    }
                },
                null,
                new SinglePrimaryAggregate()
                {
                    Primary = new MyPrimary()
                    {
                        Id = 3, Name = "three"
                    }
                },
            };

            var accessor = new Mock <IDbAccessor>();
            var actual   = 0;

            accessor.Setup(a => a.WriteEntities(It.IsAny <IEnumerable <IDbEntity> >()))
            .Callback <IEnumerable <IDbEntity> >((e) => actual += e.Count());

            var sut = new DbAggregator();

            sut.WriteAggregates(accessor.Object, aggregates);

            Assert.Equal(2, actual);
        }
Esempio n. 3
0
        public static IDbAccessorSlim CreateSlimAccessor(Func <ISqlBuilder> builder, AccessorExtension extensions, Func <IDbConnection> connections)
        {
            var db         = new Db(extensions, connections);
            var aggregator = new DbAggregator();

            return(new DbAccessor(new DbScripter(db, builder), new DbMapper(db), new Db(extensions, connections), aggregator));
        }
Esempio n. 4
0
        public void DbAggregator_AllMixedForeignsAreSavedAfterUpdate()
        {
            var aggregates = new[]
            {
                new MixedForeignsAggregate()
                {
                    Primary = new MyPrimary()
                    {
                        Id = 1, Name = "one"
                    },
                    Foreign  = new MyForeign1(),
                    Foreigns = new[]
                    {
                        new MyForeign2(), new MyForeign2(),
                    }
                },

                new MixedForeignsAggregate()
                {
                    Primary = new MyPrimary()
                    {
                        Id = 2, Name = "two"
                    },
                    Foreign  = new MyForeign1(),
                    Foreigns = new[]
                    {
                        new MyForeign2(), new MyForeign2(),
                    }
                },
                new MixedForeignsAggregate()
                {
                    Primary = new MyPrimary()
                    {
                        Id = 3, Name = "three"
                    },
                    Foreign  = new MyForeign1(),
                    Foreigns = new[]
                    {
                        new MyForeign2(), new MyForeign2(),
                    }
                },
            };

            var accessor = new Mock <IDbAccessor>();
            var actual   = 0;

            accessor.Setup(a => a.WriteEntities(It.IsAny <IEnumerable <IDbEntity> >()))
            .Callback <IEnumerable <IDbEntity> >((e) => actual += e.Count());

            var sut = new DbAggregator();

            sut.WriteAggregates(accessor.Object, aggregates);

            Assert.NotNull(aggregates.SingleOrDefault(a => a.Foreign.PrimaryId == 1 && a.Foreigns.All(f => f.MyPrimaryId == 1)));
            Assert.NotNull(aggregates.SingleOrDefault(a => a.Foreign.PrimaryId == 2 && a.Foreigns.All(f => f.MyPrimaryId == 2)));
            Assert.NotNull(aggregates.SingleOrDefault(a => a.Foreign.PrimaryId == 3 && a.Foreigns.All(f => f.MyPrimaryId == 3)));
            Assert.Equal(12, actual);
        }
Esempio n. 5
0
        public void DbAggregator_AggregatesWithLessThanOnePrimaryError()
        {
            var accessor  = new Mock <IDbAccessor>();
            var aggregate = new MultiPrimaryAggregate();
            var sut       = new DbAggregator();

            Assert.Throws <InvalidAggregateStructure>(
                () => sut.WriteAggregate(accessor.Object, aggregate)
                );
        }
Esempio n. 6
0
        public void DbAggregator_NullAggregatesAreIgnored()
        {
            var accessor = new Mock <IDbAccessor>();
            var actual   = false;

            accessor.Setup(a => a.WriteEntity(It.IsAny <IDbEntity>()))
            .Callback(() => actual = true);

            var sut = new DbAggregator();

            sut.WriteAggregate(accessor.Object, null);

            Assert.False(actual);
        }
Esempio n. 7
0
        public void DbAggregator_AllMultiForeignsAreUpdateAfterPrimariesAreWritten()
        {
            var aggregates = new[]
            {
                new EnumerableForeignAggregate()
                {
                    Primary = new MyPrimary()
                    {
                        Id = 1, Name = "one"
                    }, Foreigns = new[]
                    {
                        new MyForeign1(), new MyForeign1(),
                    }
                },
                new EnumerableForeignAggregate()
                {
                    Primary = new MyPrimary()
                    {
                        Id = 2, Name = "two"
                    }, Foreigns = new[]
                    {
                        new MyForeign1(), new MyForeign1(),
                    }
                },
                new EnumerableForeignAggregate()
                {
                    Primary = new MyPrimary()
                    {
                        Id = 3, Name = "three"
                    }, Foreigns = new[]
                    {
                        new MyForeign1(), new MyForeign1(),
                    }
                },
            };

            var accessor = new Mock <IDbAccessor>();
            var sut      = new DbAggregator();

            sut.WriteAggregates(accessor.Object, aggregates);

            Assert.NotNull(aggregates.SingleOrDefault(a => a.Foreigns.All(f => f.PrimaryId == 1)));
            Assert.NotNull(aggregates.SingleOrDefault(a => a.Foreigns.All(f => f.PrimaryId == 2)));
            Assert.NotNull(aggregates.SingleOrDefault(a => a.Foreigns.All(f => f.PrimaryId == 3)));
        }
Esempio n. 8
0
        internal static AccessorSetup GetSetup(DbAccessorType type, IDb db)
        {
            var aggregator = new DbAggregator();
            var mapper     = new DbMapper(db);

            Func <ISqlBuilder> builders;

            switch (type)
            {
            case DbAccessorType.MsSql:
            {
                Func <IMsSqlBuilder> msbuilders = () => new MsSqlBuilder();

                var msscripter = new MsSqlScripter(db, msbuilders);

                return(new AccessorSetup(msscripter, mapper, aggregator));
            }

            case DbAccessorType.SqLite:
            {
                builders = () => new SqLiteBuilder();
            }
            break;

            case DbAccessorType.MySql:
            {
                builders = () => new MySqlBuilder();
            }
            break;

            case DbAccessorType.Oracle:
            {
                builders = () => new OracleBuilder();
            }
            break;

            default:
                throw new InvalidOperationException(string.Format("Unsupported DbAccessorType value of '{0}'", type));
            }

            var scripter = new DbScripter(db, builders);

            return(new AccessorSetup(scripter, mapper, aggregator));
        }
Esempio n. 9
0
        public void DbAggregator_AllSingleForeignsAreSavedAfterUpdate()
        {
            var aggregates = new[]
            {
                new SingleForeignAggregate()
                {
                    Primary = new MyPrimary()
                    {
                        Id = 1, Name = "one"
                    }, Foreign1 = new MyForeign1()
                },
                new SingleForeignAggregate()
                {
                    Primary = new MyPrimary()
                    {
                        Id = 2, Name = "two"
                    }, Foreign1 = new MyForeign1()
                },
                new SingleForeignAggregate()
                {
                    Primary = new MyPrimary()
                    {
                        Id = 3, Name = "three"
                    }, Foreign1 = new MyForeign1()
                },
            };

            var accessor = new Mock <IDbAccessor>();
            var actual   = 0;

            accessor.Setup(a => a.WriteEntities(It.IsAny <IEnumerable <IDbEntity> >()))
            .Callback <IEnumerable <IDbEntity> >((e) => actual += e.Count());

            var sut = new DbAggregator();

            sut.WriteAggregates(accessor.Object, aggregates);

            Assert.Equal(6, actual);
        }
Esempio n. 10
0
 public static void Aggregate()
 {
     DbAggregator.AggregateDataBase();
     ServiceAggregator.AggregateService();
 }