Beispiel #1
0
        public void Transform_TwoArguments()
        {
            var method = typeof(StringExtensions).GetMethod(
                "SqlContainsFulltext",
                BindingFlags.Public | BindingFlags.Static,
                null,
                CallingConventions.Any,
                new[] { typeof(string), typeof(string), typeof(string) },
                null);
            var objectExpression = Expression.Constant("Test");
            var argument1        = Expression.Constant("es");
            var language         = Expression.Constant("language");
            var expression       = Expression.Call(method, objectExpression, argument1, language);
            var transformer      = new ContainsFulltextMethodCallTransformer();

            var result = transformer.Transform(expression);

            var argumentExpression = Expression.Constant(string.Format("{0}", argument1.Value));

            var compositeExpression = new SqlCompositeCustomTextGeneratorExpression(
                typeof(string), new SqlCustomTextExpression("LANGUAGE ", typeof(string)), language);

            var expectedResult =
                new SqlFunctionExpression(typeof(bool), "CONTAINS", objectExpression, argumentExpression, compositeExpression);

            SqlExpressionTreeComparer.CheckAreEqualTrees(expectedResult, result);
        }
Beispiel #2
0
        public Expression Transform(MethodCallExpression methodCallExpression)
        {
            ArgumentUtility.CheckNotNull("methodCallExpression", methodCallExpression);

            if (methodCallExpression.Arguments.Count == 2)
            {
                return(new SqlFunctionExpression(typeof(bool), "FREETEXT", methodCallExpression.Arguments[0], methodCallExpression.Arguments[1]));
            }
            else if (methodCallExpression.Arguments.Count == 3)
            {
                MethodCallTransformerUtility.CheckConstantExpression(
                    methodCallExpression.Method.Name, methodCallExpression.Arguments[2], "language parameter");

                var compositeExpression = new SqlCompositeCustomTextGeneratorExpression(
                    typeof(string), new SqlCustomTextExpression("LANGUAGE ", typeof(string)), methodCallExpression.Arguments[2]);

                return(new SqlFunctionExpression(
                           typeof(bool), "FREETEXT", methodCallExpression.Arguments[0], methodCallExpression.Arguments[1], compositeExpression));
            }
            else
            {
                var message = string.Format(
                    "IndexOf function with {0} arguments is not supported. Expression: '{1}'",
                    methodCallExpression.Arguments.Count,
                    methodCallExpression);
                throw new NotSupportedException(message);
            }
        }
Beispiel #3
0
        public Expression Transform(MethodCallExpression methodCallExpression)
        {
            MethodCallTransformerUtility.CheckArgumentCount(methodCallExpression, 2, 3);
            MethodCallTransformerUtility.CheckStaticMethod(methodCallExpression);

            if (methodCallExpression.Arguments.Count == 2) // overload without language
            {
                return(new SqlFunctionExpression(typeof(bool), "CONTAINS", methodCallExpression.Arguments[0], methodCallExpression.Arguments[1]));
            }
            else
            {
                MethodCallTransformerUtility.CheckConstantExpression(methodCallExpression.Method.Name, methodCallExpression.Arguments[2], "language parameter");

                var compositeExpression = new SqlCompositeCustomTextGeneratorExpression(
                    typeof(string), new SqlCustomTextExpression("LANGUAGE ", typeof(string)), methodCallExpression.Arguments[2]);

                return(new SqlFunctionExpression(
                           typeof(bool), "CONTAINS", methodCallExpression.Arguments[0], methodCallExpression.Arguments[1], compositeExpression));
            }
        }
 public void SetUp()
 {
     _expression1 = Expression.Constant("5");
     _expression2 = Expression.Constant("1");
     _sqlCompositeCustomTextGeneratorExpression = new SqlCompositeCustomTextGeneratorExpression(typeof(Cook), _expression1, _expression2);
 }