Exemplo n.º 1
0
        public X20Logic(FieldPredicate isSerializableField, PropertyPredicate isSerializableProperty)
        {
            _IsSerializableField = isSerializableField;
            _IsSerializableProperty = isSerializableProperty;

            CachedGetSerializableMembers = new Func<Type, MemberInfo[]>(type =>
            {
                var members = X20Reflection.CachedGetMembers(type);
                var serializableMembers = members.Where(IsSerializableMember).ToArray();
                return serializableMembers;
            }).Memoize();
        }
Exemplo n.º 2
0
            public void EnumerableThrowsException_If_Operator_Not_Eq()
            {
                var pred = new FieldPredicate <PredicateTestEntity>
                {
                    PropertyName = "Id",
                    Value        = new[] { 3, 4, 5 },
                    Not          = false,
                    Operator     = Operator.Ge
                };

                Dictionary <string, object> parameters = new Dictionary <string, object>();
                var ex = Assert.Throws <ArgumentException>(() => pred.GetSql(parameters));

                Assert.AreEqual("Operator must be set to Eq for Enumerable types", ex.Message);
            }
Exemplo n.º 3
0
        public async Task DeleteWithPredicate()
        {
            var dapper = new DapperImplementor(SqlHelper.GetSqlGenerator());

            using (var connection = await _fixture.Factory.ConnectionFactory.CreateAsync())
            {
                var predicate = new FieldPredicate <TestEntity>
                {
                    Operator     = Operator.Eq,
                    PropertyName = "Id",
                    Value        = 1
                };
                dapper.Delete <TestEntity>(connection, predicate, null, null);
                Assert.Null(await dapper.GetAsync <TestEntity>(connection, 1, null, null));
            }
        }
Exemplo n.º 4
0
        public void GetSqlWhenValueIsEnumerableAndIsNotExpression()
        {
            var predicate = new FieldPredicate <TestEntity>()
            {
                Value        = new[] { 2, 5 },
                Operator     = Operator.Eq,
                PropertyName = "Id",
                Not          = true
            };
            var dictionary = new Dictionary <string, object>();
            var sql        = predicate.GetSql(SqlHelper.GetSqlGenerator(), dictionary);

            Assert.Equal("(Id NOT IN (@Id_0, @Id_1))", sql);
            Assert.Equal(2, dictionary["@Id_0"]);
            Assert.Equal(5, dictionary["@Id_1"]);
        }
Exemplo n.º 5
0
            public void Eq_ReturnsProperSql()
            {
                var pred = new FieldPredicate <PredicateTestEntity>
                {
                    PropertyName = "Id",
                    Value        = 3,
                    Not          = false,
                    Operator     = Operator.Eq
                };

                Dictionary <string, object> parameters = new Dictionary <string, object>();
                string result = pred.GetSql(parameters);

                Assert.AreEqual("([PredicateTestEntity].[Id] = @Id_0)", result);
                Assert.AreEqual(3, parameters["@Id_0"]);
            }
Exemplo n.º 6
0
            public void LikeWithNot_ReturnsPropertySql()
            {
                var pred = new FieldPredicate <PredicateTestEntity>
                {
                    PropertyName = "Name",
                    Value        = "%foo",
                    Not          = true,
                    Operator     = Operator.Like
                };

                Dictionary <string, object> parameters = new Dictionary <string, object>();
                string result = pred.GetSql(parameters);

                Assert.AreEqual("([PredicateTestEntity].[Name] NOT LIKE @Name_0)", result);
                Assert.AreEqual("%foo", parameters["@Name_0"]);
            }
Exemplo n.º 7
0
            public void EqWithNullAndNot_ReturnsProperSql()
            {
                var pred = new FieldPredicate <PredicateTestEntity>
                {
                    PropertyName = "Name",
                    Value        = null,
                    Not          = true,
                    Operator     = Operator.Eq
                };

                Dictionary <string, object> parameters = new Dictionary <string, object>();
                string result = pred.GetSql(parameters);

                Assert.AreEqual("([PredicateTestEntity].[Name] IS NOT NULL)", result);
                Assert.AreEqual(0, parameters.Count);
            }
Exemplo n.º 8
0
        public async Task Count()
        {
            var dapper = new DapperImplementor(SqlHelper.GetSqlGenerator());

            using (var connection = await _fixture.Factory.ConnectionFactory.CreateAsync())
            {
                var predicate = new FieldPredicate <TestEntity>
                {
                    Operator     = Operator.Gt,
                    PropertyName = "Id",
                    Value        = 1
                };
                var result = dapper.Count <TestEntity>(connection, predicate, null, null);
                Assert.Equal(2, result);
            }
        }
Exemplo n.º 9
0
        public void TestIn()
        {
            List <string> valueList = new List <string>()
            {
                "1", "2", "3"
            };
            IPredicate            p = ExpressionPredicateConvert.GetExpressionPredicate <User>(u => valueList.Contains(u.Name));
            FieldPredicate <User> f = p as FieldPredicate <User>;

            Assert.True(f.Operator == Operator.Eq);
            Assert.True((f.Value as List <string>).Count == 3);

            IPredicate            p2 = ExpressionPredicateConvert.GetExpressionPredicate <User>(u => !valueList.Contains(u.Name));
            FieldPredicate <User> f2 = p2 as FieldPredicate <User>;

            Assert.True(f.Not == true);
        }
Exemplo n.º 10
0
            public void EqWithNot_EnumerableReturns_Proper_Sql()
            {
                var pred = new FieldPredicate <PredicateTestEntity>
                {
                    PropertyName = "Id",
                    Value        = new[] { 3, 4, 5 },
                    Not          = true,
                    Operator     = Operator.Eq
                };

                Dictionary <string, object> parameters = new Dictionary <string, object>();
                string result = pred.GetSql(parameters);

                Assert.AreEqual("([PredicateTestEntity].[Id] NOT IN (@Id_0, @Id_1, @Id_2))", result);
                Assert.AreEqual(3, parameters["@Id_0"]);
                Assert.AreEqual(4, parameters["@Id_1"]);
                Assert.AreEqual(5, parameters["@Id_2"]);
            }
Exemplo n.º 11
0
            public void Eq_ReturnsProperSqlWhenEnumerableOf_tring()
            {
                var pred = new FieldPredicate <PredicateTestEntity>
                {
                    PropertyName = "Id",
                    Value        = new[] { "Alpha", "Beta", "Gamma", "Delta" },
                    Not          = false,
                    Operator     = Operator.Eq
                };

                Dictionary <string, object> parameters = new Dictionary <string, object>();
                string result = pred.GetSql(parameters);

                Assert.AreEqual("([PredicateTestEntity].[Id] IN (@Id_0, @Id_1, @Id_2, @Id_3))", result);
                Assert.AreEqual("Alpha", parameters["@Id_0"]);
                Assert.AreEqual("Beta", parameters["@Id_1"]);
                Assert.AreEqual("Gamma", parameters["@Id_2"]);
                Assert.AreEqual("Delta", parameters["@Id_3"]);
            }
Exemplo n.º 12
0
        public void TestLike()
        {
            IPredicate            p1 = ExpressionPredicateConvert.GetExpressionPredicate <User>(u => u.Name.Contains("1"));
            FieldPredicate <User> f1 = p1 as FieldPredicate <User>;

            Assert.True(f1.Operator == Operator.Like);
            Assert.True(f1.Value.ToString() == "%1%");

            IPredicate            p2 = ExpressionPredicateConvert.GetExpressionPredicate <User>(u => u.Name.StartsWith("1"));
            FieldPredicate <User> f2 = p2 as FieldPredicate <User>;

            Assert.True(f2.Operator == Operator.Like);
            Assert.True(f2.Value.ToString() == "1%");

            IPredicate            p3 = ExpressionPredicateConvert.GetExpressionPredicate <User>(u => u.Name.EndsWith("1"));
            FieldPredicate <User> f3 = p3 as FieldPredicate <User>;

            Assert.True(f3.Operator == Operator.Like);
            Assert.True(f3.Value.ToString() == "%1");
        }
Exemplo n.º 13
0
        public static IPredicate GetIdPredicate(this IClassMapper classMap, object id)
        {
            var isSimpleType = id.GetType().IsSimpleType();

            var keys = classMap.Keys;

            IDictionary <string, object> paramValues = null;

            IList <IPredicate> predicates = new List <IPredicate>();

            if (!isSimpleType)
            {
                paramValues = ReflectionHelper.GetObjectValues(id);
            }

            foreach (var key in keys)
            {
                var value = id;
                if (!isSimpleType)
                {
                    value = paramValues[key.Name];
                }

                var fieldPredicate = new FieldPredicate
                {
                    Not          = false,
                    Operator     = Operator.Eq,
                    PropertyName = key.Name,
                    Value        = value
                };
                predicates.Add(fieldPredicate);
            }

            return(predicates.Count == 1
                                ? predicates[0]
                                : new PredicateGroup
            {
                Operator = GroupOperator.And,
                Predicates = predicates
            });
        }
Exemplo n.º 14
0
        public IList <IFieldPredicate> GetSequentialPartitionPredicates <T>() where T : class
        {
            List <IFieldPredicate> predicates = new List <IFieldPredicate>();

            if (this.HasSequentialKey && this.SequentialKey.KeyType == KeyType.SequentialPartition)
            {
                if (this.SequentialKey.PartitionFromValue != null)
                {
                    FieldPredicate <T> p = PredicateBuilder.GreaterThanOrEqual <T>(
                        this.SequentialKey.PropertyName,
                        this.SequentialKey.PartitionFromValue) as FieldPredicate <T>;
                    predicates.Add(p);
                }
                if (this.SequentialKey.PartitionToValue != null)
                {
                    FieldPredicate <T> p = PredicateBuilder.LessThanOrEqual <T>(
                        this.SequentialKey.PropertyName,
                        this.SequentialKey.PartitionToValue) as FieldPredicate <T>;
                    predicates.Add(p);
                }
            }
            return(predicates);
        }
            public void EqWithNull_ReturnsPropertySql()
            {
                var pred = new FieldPredicate<PredicateTestEntity>
                {
                    PropertyName = "Name",
                    Value = null,
                    Not = false,
                    Operator = Operator.Eq
                };

                Dictionary<string, object> parameters = new Dictionary<string, object>();
                string result = pred.GetSql(parameters);
                Assert.AreEqual("([PredicateTestEntity].[Name] IS NULL)", result);
                Assert.AreEqual(0, parameters.Count);
            }
            public void EnumerableThrowsException_If_Operator_Not_Eq()
            {
                var pred = new FieldPredicate<PredicateTestEntity>
                               {
                                   PropertyName = "Id",
                                   Value = new[] {3, 4, 5},
                                   Not = false,
                                   Operator = Operator.Ge
                               };

                Dictionary<string, object> parameters = new Dictionary<string, object>();
                var ex = Assert.Throws<ArgumentException>(() => pred.GetSql(parameters));
                Assert.AreEqual("Operator must be set to Eq for Enumerable types", ex.Message);
            }
            public void Eq_EnumerableReturnsProperSql()
            {
                var pred = new FieldPredicate<PredicateTestEntity>
                               {
                                   PropertyName = "Id",
                                   Value = new[] {3, 4, 5},
                                   Not = false,
                                   Operator = Operator.Eq
                               };

                Dictionary<string, object> parameters = new Dictionary<string, object>();
                string result = pred.GetSql(parameters);
                Assert.AreEqual("([PredicateTestEntity].[Id] IN (@Id_0, @Id_1, @Id_2))", result);
                Assert.AreEqual(3, parameters["@Id_0"]);
                Assert.AreEqual(4, parameters["@Id_1"]);
                Assert.AreEqual(5, parameters["@Id_2"]);
            }
            public void Eq_ReturnsProperSqlWhenEnumerableOf_tring()
            {
                var pred = new FieldPredicate<PredicateTestEntity>
                               {
                                   PropertyName = "Id",
                                   Value = new[] {"Alpha", "Beta", "Gamma", "Delta"},
                                   Not = false,
                                   Operator = Operator.Eq
                               };

                Dictionary<string, object> parameters = new Dictionary<string, object>();
                string result = pred.GetSql(parameters);
                Assert.AreEqual("([PredicateTestEntity].[Id] IN (@Id_0, @Id_1, @Id_2, @Id_3))", result);
                Assert.AreEqual("Alpha", parameters["@Id_0"]);
                Assert.AreEqual("Beta", parameters["@Id_1"]);
                Assert.AreEqual("Gamma", parameters["@Id_2"]);
                Assert.AreEqual("Delta", parameters["@Id_3"]);
            }
            public void Lt_ReturnsProperSql()
            {
                var pred = new FieldPredicate<PredicateTestEntity>
                               {
                                   PropertyName = "Id",
                                   Value = 3,
                                   Not = false,
                                   Operator = Operator.Lt
                               };

                Dictionary<string, object> parameters = new Dictionary<string, object>();
                string result = pred.GetSql(parameters);
                Assert.AreEqual("([PredicateTestEntity].[Id] < @Id_0)", result);
                Assert.AreEqual(3, parameters["@Id_0"]);
            }
            public void Like_ReturnsPropertySql()
            {
                var pred = new FieldPredicate<PredicateTestEntity>
                               {
                                   PropertyName = "Name",
                                   Value = "%foo",
                                   Not = false,
                                   Operator = Operator.Like
                               };

                Dictionary<string, object> parameters = new Dictionary<string, object>();
                string result = pred.GetSql(parameters);
                Assert.AreEqual("([PredicateTestEntity].[Name] LIKE @Name_0)", result);
                Assert.AreEqual("%foo", parameters["@Name_0"]);
            }