public void SetUp () { var leftExpression = Expression.Constant ("left"); var rightExpression = Expression.Constant ("right"); var escapeExpression = new SqlLiteralExpression (@"\"); _likeExpression = new SqlLikeExpression (leftExpression, rightExpression, escapeExpression); }
private static Expression BuildRightExpression(Expression unescapedSearchText, string likePrefix, string likePostfix) { Expression rightExpression; var argumentAsConstantExpression = unescapedSearchText as ConstantExpression; if (argumentAsConstantExpression != null) { if (argumentAsConstantExpression.Value == null) { rightExpression = null; } else { var escapedSearchText = SqlLikeExpression.Escape((string)argumentAsConstantExpression.Value, @"\"); rightExpression = Expression.Constant(string.Format("{0}{1}{2}", likePrefix, escapedSearchText, likePostfix)); } } else { var escapedSearchExpression = SqlLikeExpression.Escape(unescapedSearchText, @"\"); var concatMethod = typeof(string).GetMethod("Concat", new[] { typeof(string), typeof(string) }); var patternWithPrefix = !string.IsNullOrEmpty(likePrefix) ? Expression.Add(new SqlLiteralExpression(likePrefix), escapedSearchExpression, concatMethod) : escapedSearchExpression; var patternWithPrefixAndPostfix = !string.IsNullOrEmpty(likePostfix) ? Expression.Add(patternWithPrefix, new SqlLiteralExpression(likePostfix), concatMethod) : patternWithPrefix; rightExpression = patternWithPrefixAndPostfix; } return(rightExpression); }
public void Transform () { MethodCallExpression expression = (MethodCallExpression) ExpressionHelper.MakeExpression<string, bool> (s => s.SqlLike ("%es%")); var transformer = new LikeMethodCallTransformer(); var result = transformer.Transform (expression); var expectedResult = new SqlLikeExpression (expression.Arguments[0], expression.Arguments[1], new SqlLiteralExpression (@"\")); SqlExpressionTreeComparer.CheckAreEqualTrees (expectedResult, result); }
public void Create_ArgumentIsNotNull () { var objectExpression = Expression.Constant ("Test"); var argument1 = Expression.Constant ("test"); var result = SqlLikeExpression.Create (objectExpression, argument1, "%", "%"); var rightExpression = Expression.Constant (string.Format ("%{0}%", argument1.Value)); var expectedResult = new SqlLikeExpression (objectExpression, rightExpression, new SqlLiteralExpression (@"\")); SqlExpressionTreeComparer.CheckAreEqualTrees (expectedResult, result); }
public void Transform_ArgumentIsNotNull () { var method = typeof (string).GetMethod ("StartsWith", new[] { typeof (string) }); var objectExpression = Expression.Constant ("Test"); var argument1 = Expression.Constant ("test"); var expression = Expression.Call (objectExpression, method, argument1); var transformer = new StartsWithMethodCallTransformer(); var result = transformer.Transform (expression); var rightExpression = Expression.Constant (string.Format ("{0}%", argument1.Value)); var expectedResult = new SqlLikeExpression (objectExpression, rightExpression, new SqlLiteralExpression (@"\")); SqlExpressionTreeComparer.CheckAreEqualTrees (expectedResult, result); }
public void Create_ArgumentIsNotNullAndNoConstantExpression () { var method = typeof (string).GetMethod ("Contains", new[] { typeof (string) }); var objectExpression = Expression.Constant ("Test"); var argument1 = Expression.MakeMemberAccess (Expression.Constant (new Cook ()), typeof (Cook).GetProperty ("Name")); var expression = Expression.Call (objectExpression, method, argument1); var result = SqlLikeExpression.Create(expression.Object, expression.Arguments[0], "%", "%"); Expression rightExpression = new SqlFunctionExpression ( typeof (string), "REPLACE", new SqlFunctionExpression ( typeof (string), "REPLACE", new SqlFunctionExpression ( typeof (string), "REPLACE", new SqlFunctionExpression ( typeof (string), "REPLACE", argument1, new SqlLiteralExpression (@"\"), new SqlLiteralExpression (@"\\")), new SqlLiteralExpression (@"%"), new SqlLiteralExpression (@"\%")), new SqlLiteralExpression (@"_"), new SqlLiteralExpression (@"\_")), new SqlLiteralExpression (@"["), new SqlLiteralExpression (@"\[")); rightExpression = Expression.Add ( new SqlLiteralExpression ("%"), rightExpression, typeof (string).GetMethod ("Concat", new[] { typeof (string), typeof (string) })); rightExpression = Expression.Add ( rightExpression, new SqlLiteralExpression ("%"), typeof (string).GetMethod ("Concat", new[] { typeof (string), typeof (string) })); var expectedResult = new SqlLikeExpression (objectExpression, rightExpression, new SqlLiteralExpression (@"\")); SqlExpressionTreeComparer.CheckAreEqualTrees (expectedResult, result); }
public void Transform_ArgumentIsNotNullAndIsNoConstantValue_ () { var method = typeof (string).GetMethod ("StartsWith", new[] { typeof (string) }); var objectExpression = Expression.Constant ("Test"); var argument1 = Expression.MakeMemberAccess (Expression.Constant (new Cook ()), typeof (Cook).GetProperty ("Name")); var expression = Expression.Call (objectExpression, method, argument1); var transformer = new StartsWithMethodCallTransformer (); var result = transformer.Transform (expression); Expression rightExpression = new SqlFunctionExpression ( typeof (string), "REPLACE", new SqlFunctionExpression ( typeof (string), "REPLACE", new SqlFunctionExpression ( typeof (string), "REPLACE", new SqlFunctionExpression ( typeof (string), "REPLACE", argument1, new SqlLiteralExpression (@"\"), new SqlLiteralExpression (@"\\")), new SqlLiteralExpression (@"%"), new SqlLiteralExpression (@"\%")), new SqlLiteralExpression (@"_"), new SqlLiteralExpression (@"\_")), new SqlLiteralExpression (@"["), new SqlLiteralExpression (@"\[")); rightExpression = Expression.Add ( rightExpression, new SqlLiteralExpression ("%"), typeof (string).GetMethod ("Concat", new[] { typeof (string), typeof (string) })); var expectedResult = new SqlLikeExpression (objectExpression, rightExpression, new SqlLiteralExpression (@"\")); SqlExpressionTreeComparer.CheckAreEqualTrees (expectedResult, result); }
public Expression VisitSqlLikeExpression (SqlLikeExpression expression) { return VisitChildrenWithGivenSemantics (expression, SqlExpressionContext.SingleValueRequired); }
public void VisitSqlLikeExpression () { var sqlInExpression = new SqlLikeExpression (new SqlLiteralExpression (1), new SqlLiteralExpression (2), new SqlLiteralExpression (@"\")); SqlGeneratingExpressionVisitor.GenerateSql (sqlInExpression, _commandBuilder, _stageMock); Assert.That (_commandBuilder.GetCommandText (), Is.EqualTo (@"1 LIKE 2 ESCAPE '\'")); }
public void SqlLikeExpression () { var expression = new SqlLikeExpression (Expression.Constant (true), Expression.Constant (true), new SqlLiteralExpression (@"\")); var expectedResult = new SqlLikeExpression ( new SqlConvertedBooleanExpression (Expression.Constant (1)), new SqlConvertedBooleanExpression (Expression.Constant (1)), new SqlLiteralExpression (@"\")); var result = _predicateRequiredVisitor.VisitSqlLikeExpression (expression); SqlExpressionTreeComparer.CheckAreEqualTrees (expectedResult, result); }