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; }
public void TestFixtureSetUp() { datumConverterFactory = new AggregateDatumConverterFactory( PrimitiveDatumConverterFactory.Instance, DataContractDatumConverterFactory.Instance ); expressionConverterFactory = new RethinkDb.Expressions.DefaultExpressionConverterFactory(); queryConverter = new QueryConverter(datumConverterFactory, expressionConverterFactory); }
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!", } }; }
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; }
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); }
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); }