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(); }
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 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)); } }
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"]); }
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"]); }
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"]); }
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); }
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); } }
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); }
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"]); }
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 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"); }
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 }); }
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"]); }