Esempio n. 1
0
        /// <summary>
        ///     Initializes a new instance of <see cref="ArangoQueryProvider" /> using a custom <see cref="IQueryParser" />.
        /// </summary>
        public ArangoQueryProvider(Type queryableType, IQueryParser queryParser, IQueryExecutor executor,
                                   IArangoLinq db)
            : base(LinqUtility.CheckNotNull("queryParser", queryParser), LinqUtility.CheckNotNull("executor", executor))
        {
            LinqUtility.CheckNotNull("queryableType", queryableType);
            CheckQueryableType(queryableType);

            QueryableType = queryableType;
            this.db       = db;
        }
        //public static Expression WrapIntoNamedExpression(string memberName, Expression argumentExpression)
        //{
        //    var expressionAsNamedExpression = argumentExpression as NamedExpression;
        //    if (expressionAsNamedExpression != null && expressionAsNamedExpression.Name == memberName)
        //        return expressionAsNamedExpression;

        //    return CreateFromMemberName(memberName, argumentExpression);
        //}

        public static Expression WrapIntoNamedExpression(IArangoLinq db, MemberInfo memberInfo,
                                                         Expression argumentExpression)
        {
            var memberName = LinqUtility.ResolveMemberNameRaw(db, memberInfo);

            var expressionAsNamedExpression = argumentExpression as NamedExpression;

            if (expressionAsNamedExpression != null && expressionAsNamedExpression.Name == memberName)
            {
                return(expressionAsNamedExpression);
            }

            var namedExpression = CreateFromMemberName(memberName, argumentExpression);

            return(namedExpression);
        }
        public static Expression CreateNewExpressionWithNamedArguments(IArangoLinq db, NewExpression expression,
                                                                       IEnumerable <Expression> processedArguments)
        {
            //var newArguments = processedArguments.Select((e, i) => WrapIntoNamedExpression(GetMemberName(expression.Members, i), e)).ToArray();
            var newArguments = processedArguments
                               .Select((e, i) => WrapIntoNamedExpression(db, expression.Members[i], e)).ToArray();

            if (!newArguments.SequenceEqual(expression.Arguments))
            {
                // ReSharper disable ConditionIsAlwaysTrueOrFalse - ReSharper is wrong, expression.Members can be null
                // ReSharper disable HeuristicUnreachableCode
                if (expression.Members != null)
                {
                    return(New(expression.Constructor, newArguments, expression.Members));
                }
                return(New(expression.Constructor, newArguments));
                // ReSharper restore HeuristicUnreachableCode
                // ReSharper restore ConditionIsAlwaysTrueOrFalse
            }

            return(expression);
        }
Esempio n. 4
0
 public AqlParser(IArangoLinq db)
 {
     this.db = db;
 }
        public static Expression CreateNewExpressionWithNamedArguments(IArangoLinq db, NewExpression expression)
        {
            LinqUtility.CheckNotNull("expression", expression);

            return(CreateNewExpressionWithNamedArguments(db, expression, expression.Arguments));
        }
 public ArangoQueryExecuter(IArangoLinq db)
 {
     this.db = db;
 }
Esempio n. 7
0
 public static string ResolveMemberName(IArangoLinq db, MemberInfo memberInfo)
 {
     return(AddBacktickToName(ResolveMemberNameRaw(db, memberInfo)));
 }
Esempio n. 8
0
 public static string ResolveMemberNameRaw(IArangoLinq db, MemberInfo memberInfo)
 {
     return(ResolvePropertyNameRaw(db.ResolvePropertyName(memberInfo.DeclaringType, memberInfo.Name)));
 }
Esempio n. 9
0
        public static string ResolveCollectionName(IArangoLinq db, Type itemType)
        {
            var collectionName = db.ResolveCollectionName(itemType);

            return(AddBacktickToName(collectionName));
        }
 public ArangoQueryable(IQueryProvider provider, Expression expression, IArangoLinq db)
     : base(provider, expression)
 {
     this.db = db;
 }
 public ArangoQueryable(IQueryParser queryParser, IQueryExecutor executor, IArangoLinq db)
     : base(new ArangoQueryProvider(typeof(ArangoQueryable <>), queryParser, executor, db))
 {
     this.db = db;
 }