public static Term ConvertAppendToTerm(MethodCallExpression methodCall, DefaultExpressionConverterFactory.RecursiveMapDelegate recursiveMap, IDatumConverterFactory datumConverterFactory, IExpressionConverterFactory expressionConverterFactory)
        {
            var target = methodCall.Arguments[0];

            var appendArray = methodCall.Arguments[1];
            if (appendArray.NodeType != ExpressionType.NewArrayInit)
                throw new NotSupportedException(String.Format("Expected second arg to ReQLExpression.Append to be NewArrayInit, but was: {0}", appendArray.NodeType));

            var newArrayExpression = (NewArrayExpression)appendArray;
            var term = recursiveMap(target);
            foreach (var datumExpression in newArrayExpression.Expressions)
            {
                var newTerm = new Term() {
                    type = Term.TermType.APPEND
                };
                newTerm.args.Add(term);

                if (datumExpression.NodeType == ExpressionType.MemberInit)
                {
                    var memberInit = (MemberInitExpression)datumExpression;
                    newTerm.args.Add(recursiveMap(memberInit));
                }
                else
                    throw new NotSupportedException(String.Format("Expected ReQLExpression.Append to contain MemberInit additions, but was: {0}", datumExpression.NodeType));

                term = newTerm;
            }

            return term;
        }
Exemplo n.º 2
0
 public void TestFixtureSetUp()
 {
     datumConverterFactory = new AggregateDatumConverterFactory(
         PrimitiveDatumConverterFactory.Instance,
         DataContractDatumConverterFactory.Instance
         );
     expressionConverterFactory = new RethinkDb.Expressions.DefaultExpressionConverterFactory();
     queryConverter             = new QueryConverter(datumConverterFactory, expressionConverterFactory);
 }
Exemplo n.º 3
0
 public void TestFixtureSetUp()
 {
     datumConverterFactory = new AggregateDatumConverterFactory(
         PrimitiveDatumConverterFactory.Instance,
         TimeSpanDatumConverterFactory.Instance,
         DateTimeDatumConverterFactory.Instance
     );
     expressionConverterFactory = new RethinkDb.Expressions.DefaultExpressionConverterFactory();
     queryConverter = new QueryConverter(datumConverterFactory, expressionConverterFactory);
 }
 private Term CustomUnaryExpressionConverter(
     UnaryExpression expr, DefaultExpressionConverterFactory.RecursiveMapDelegate recursiveMap,
     IDatumConverterFactory datumConverterFactory, IExpressionConverterFactory expressionConverterFactory)
 {
     return new Term()
     {
         type = Term.TermType.DATUM,
         datum = new Datum() {
             type = Datum.DatumType.R_STR,
             r_str = "Woot woot!",
         }
     };
 }
Exemplo n.º 5
0
 private Term CustomUnaryExpressionConverter(
     UnaryExpression expr, DefaultExpressionConverterFactory.RecursiveMapDelegate recursiveMap,
     IDatumConverterFactory datumConverterFactory, IExpressionConverterFactory expressionConverterFactory)
 {
     return(new Term()
     {
         type = Term.TermType.DATUM,
         datum = new Datum()
         {
             type = Datum.DatumType.R_STR,
             r_str = "Woot woot!",
         }
     });
 }
        public static Term ConvertEnumerableAnyToTerm(MethodCallExpression methodCall, DefaultExpressionConverterFactory.RecursiveMapDelegate recursiveMap, IDatumConverterFactory datumConverterFactory, IExpressionConverterFactory expressionConverterFactory)
        {
            var target = methodCall.Arguments[0];
            var predicate = methodCall.Arguments[1];

            var filterTerm = new Term()
            {
                type = Term.TermType.CONTAINS
            };
            filterTerm.args.Add(recursiveMap(target));

            var enumerableElementType = methodCall.Method.GetGenericArguments()[0];
            var createFunctionTermMethod = typeof(ExpressionUtils)
                .GetMethods(BindingFlags.Public | BindingFlags.Static)
                .Single(m => m.Name == "CreateFunctionTerm" && m.GetGenericArguments().Length == 2);
            createFunctionTermMethod = createFunctionTermMethod.MakeGenericMethod(enumerableElementType, typeof(bool));

            var functionTerm = (Term)createFunctionTermMethod.Invoke(null, new object[] { new QueryConverter(datumConverterFactory, expressionConverterFactory), predicate });
            filterTerm.args.Add(functionTerm);

            return filterTerm;
        }
Exemplo n.º 7
0
 public QueryConverter(IDatumConverterFactory datumConverterFactory, IExpressionConverterFactory expressionConverterFactory)
 {
     this.delegatedDatumConverterFactory      = datumConverterFactory;
     this.delegatedExpressionConverterFactory = expressionConverterFactory;
 }
        public static Term ConvertEnumerableAnyToTerm(MethodCallExpression methodCall, DefaultExpressionConverterFactory.RecursiveMapDelegate recursiveMap, IDatumConverterFactory datumConverterFactory, IExpressionConverterFactory expressionConverterFactory)
        {
            var target    = methodCall.Arguments[0];
            var predicate = methodCall.Arguments[1];

            var filterTerm = new Term()
            {
                type = Term.TermType.CONTAINS
            };

            filterTerm.args.Add(recursiveMap(target));

            var enumerableElementType    = methodCall.Method.GetGenericArguments()[0];
            var createFunctionTermMethod = typeof(ExpressionUtils)
                                           .GetMethods(BindingFlags.Public | BindingFlags.Static)
                                           .Single(m => m.Name == "CreateFunctionTerm" && m.GetGenericArguments().Length == 2);

            createFunctionTermMethod = createFunctionTermMethod.MakeGenericMethod(enumerableElementType, typeof(bool));

            var functionTerm = (Term)createFunctionTermMethod.Invoke(null, new object[] { new QueryConverter(datumConverterFactory, expressionConverterFactory), predicate });

            filterTerm.args.Add(functionTerm);

            return(filterTerm);
        }
        public static Term ConvertAppendToTerm(MethodCallExpression methodCall, DefaultExpressionConverterFactory.RecursiveMapDelegate recursiveMap, IDatumConverterFactory datumConverterFactory, IExpressionConverterFactory expressionConverterFactory)
        {
            var target = methodCall.Arguments[0];

            var appendArray = methodCall.Arguments[1];

            if (appendArray.NodeType != ExpressionType.NewArrayInit)
            {
                throw new NotSupportedException(String.Format("Expected second arg to ReQLExpression.Append to be NewArrayInit, but was: {0}", appendArray.NodeType));
            }

            var newArrayExpression = (NewArrayExpression)appendArray;
            var term = recursiveMap(target);

            foreach (var datumExpression in newArrayExpression.Expressions)
            {
                var newTerm = new Term()
                {
                    type = Term.TermType.APPEND
                };
                newTerm.args.Add(term);

                if (datumExpression.NodeType == ExpressionType.MemberInit)
                {
                    var memberInit = (MemberInitExpression)datumExpression;
                    newTerm.args.Add(recursiveMap(memberInit));
                }
                else
                {
                    throw new NotSupportedException(String.Format("Expected ReQLExpression.Append to contain MemberInit additions, but was: {0}", datumExpression.NodeType));
                }

                term = newTerm;
            }

            return(term);
        }
Exemplo n.º 10
0
        public static Term ConvertAppendToTerm(MethodCallExpression methodCall, DefaultExpressionConverterFactory.RecursiveMapDelegate recursiveMap, IDatumConverterFactory datumConverterFactory, IExpressionConverterFactory expressionConverterFactory)
        {
            var target = methodCall.Arguments[0];

            var appendArray = methodCall.Arguments[1];

            IEnumerable <Expression> appendExpressions;

            if (appendArray.NodeType == ExpressionType.NewArrayInit)
            {
                appendExpressions = ((NewArrayExpression)appendArray).Expressions;
            }
            else if (appendArray.NodeType == ExpressionType.MemberAccess)
            {
                var memberExpression = (MemberExpression)appendArray;
                if (!memberExpression.Type.IsArray)
                {
                    throw new NotSupportedException(String.Format("Expected second arg to ReQLExpression.Append to be an array, but was: {0}", memberExpression.Type));
                }

                var array = (IEnumerable)Expression.Lambda(memberExpression).Compile().DynamicInvoke();
                var items = array as object[] ?? array.Cast <object>().ToArray();

                appendExpressions = items.Select(item => Expression.Constant(item));
            }
            else
            {
                throw new NotSupportedException(String.Format("Expected second arg to ReQLExpression.Append to be NewArrayInit or MemberAccess, but was: {0}", appendArray.NodeType));
            }

            var term = recursiveMap(target);

            foreach (var datumExpression in appendExpressions)
            {
                var newTerm = new Term()
                {
                    type = Term.TermType.APPEND
                };
                newTerm.args.Add(term);
                newTerm.args.Add(recursiveMap(datumExpression));

                term = newTerm;
            }

            return(term);
        }