SqlCompositeCustomTextGeneratorExpression holds a list of expressions and generates sql text for each expression.
Inheritance: SqlCustomTextGeneratorExpressionBase
    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);
    }
    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,
            FormattingExpressionTreeVisitor.Format (methodCallExpression));
        throw new NotSupportedException (message);
      }
    }
    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);
 }